From b86a2c09c261df4b94a260ed2cb2eb6af8267b8b Mon Sep 17 00:00:00 2001 From: kruland2607 Date: Wed, 23 May 2012 18:19:56 +0000 Subject: [PATCH] Added ActionBarSherlock v4.0.3 library for use in the android application. ActionBarSherlock is significantly more flexible than the crummy hack of the sample ActionBarCompat which was being used. git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@718 180e2498-e6e9-4542-8430-84ac67f01cd8 --- .../ActionBarSherlock/.classpath | 9 + android-libraries/ActionBarSherlock/.project | 33 + .../ActionBarSherlock/AndroidManifest.xml | 6 + .../bin/actionbarsherlock.jar | Bin 0 -> 397940 bytes .../ActionBarSherlock$Implementation.class | Bin 0 -> 672 bytes ...herlock$OnActionModeFinishedListener.class | Bin 0 -> 349 bytes ...Sherlock$OnActionModeStartedListener.class | Bin 0 -> 346 bytes ...Sherlock$OnCreateOptionsMenuListener.class | Bin 0 -> 340 bytes ...arSherlock$OnCreatePanelMenuListener.class | Bin 0 -> 335 bytes ...rSherlock$OnMenuItemSelectedListener.class | Bin 0 -> 342 bytes ...erlock$OnOptionsItemSelectedListener.class | Bin 0 -> 350 bytes ...herlock$OnPrepareOptionsMenuListener.class | Bin 0 -> 343 bytes ...onBarSherlock$OnPreparePanelListener.class | Bin 0 -> 345 bytes .../actionbarsherlock/ActionBarSherlock.class | Bin 0 -> 11674 bytes .../com/actionbarsherlock/BuildConfig.class | Bin 0 -> 351 bytes .../com/actionbarsherlock/R$attr.class | Bin 0 -> 4798 bytes .../com/actionbarsherlock/R$bool.class | Bin 0 -> 849 bytes .../com/actionbarsherlock/R$color.class | Bin 0 -> 1305 bytes .../com/actionbarsherlock/R$dimen.class | Bin 0 -> 1201 bytes .../com/actionbarsherlock/R$drawable.class | Bin 0 -> 6153 bytes .../classes/com/actionbarsherlock/R$id.class | Bin 0 -> 2401 bytes .../com/actionbarsherlock/R$integer.class | Bin 0 -> 478 bytes .../com/actionbarsherlock/R$layout.class | Bin 0 -> 1790 bytes .../com/actionbarsherlock/R$string.class | Bin 0 -> 1213 bytes .../com/actionbarsherlock/R$style.class | Bin 0 -> 6737 bytes .../com/actionbarsherlock/R$styleable.class | Bin 0 -> 9104 bytes .../bin/classes/com/actionbarsherlock/R.class | Bin 0 -> 868 bytes .../app/ActionBar$LayoutParams.class | Bin 0 -> 2012 bytes .../ActionBar$OnMenuVisibilityListener.class | Bin 0 -> 290 bytes .../app/ActionBar$OnNavigationListener.class | Bin 0 -> 284 bytes .../actionbarsherlock/app/ActionBar$Tab.class | Bin 0 -> 1385 bytes .../app/ActionBar$TabListener.class | Bin 0 -> 449 bytes .../com/actionbarsherlock/app/ActionBar.class | Bin 0 -> 3291 bytes .../app/SherlockActivity.class | Bin 0 -> 7570 bytes .../app/SherlockDialogFragment.class | Bin 0 -> 2674 bytes .../app/SherlockExpandableListActivity.class | Bin 0 -> 7626 bytes .../app/SherlockFragment.class | Bin 0 -> 2638 bytes .../app/SherlockFragmentActivity.class | Bin 0 -> 8996 bytes .../app/SherlockListActivity.class | Bin 0 -> 7586 bytes .../app/SherlockListFragment.class | Bin 0 -> 2662 bytes .../app/SherlockPreferenceActivity.class | Bin 0 -> 7617 bytes .../internal/ActionBarSherlockCompat$1.class | Bin 0 -> 1146 bytes ...lockCompat$ActionModeCallbackWrapper.class | Bin 0 -> 2702 bytes .../internal/ActionBarSherlockCompat.class | Bin 0 -> 26864 bytes ...lockNative$ActionModeCallbackWrapper.class | Bin 0 -> 2760 bytes ...nBarSherlockNative$ActionModeWrapper.class | Bin 0 -> 2855 bytes .../internal/ActionBarSherlockNative.class | Bin 0 -> 6589 bytes .../internal/ResourcesCompat.class | Bin 0 -> 2351 bytes .../internal/app/ActionBarImpl$1.class | Bin 0 -> 1879 bytes .../internal/app/ActionBarImpl$2.class | Bin 0 -> 1291 bytes .../app/ActionBarImpl$ActionModeImpl.class | Bin 0 -> 6338 bytes .../internal/app/ActionBarImpl$TabImpl.class | Bin 0 -> 4474 bytes .../internal/app/ActionBarImpl.class | Bin 0 -> 23845 bytes .../app/ActionBarWrapper$TabWrapper.class | Bin 0 -> 5527 bytes .../internal/app/ActionBarWrapper.class | Bin 0 -> 10444 bytes .../animation/Animator$AnimatorListener.class | Bin 0 -> 473 bytes .../nineoldandroids/animation/Animator.class | Bin 0 -> 3231 bytes .../animation/AnimatorListenerAdapter.class | Bin 0 -> 1118 bytes .../animation/AnimatorSet$1.class | Bin 0 -> 1927 bytes .../AnimatorSet$AnimatorSetListener.class | Bin 0 -> 3459 bytes .../animation/AnimatorSet$Builder.class | Bin 0 -> 3539 bytes .../animation/AnimatorSet$Dependency.class | Bin 0 -> 935 bytes .../AnimatorSet$DependencyListener.class | Bin 0 -> 3013 bytes .../animation/AnimatorSet$Node.class | Bin 0 -> 2506 bytes .../animation/AnimatorSet.class | Bin 0 -> 15271 bytes .../animation/FloatEvaluator.class | Bin 0 -> 1102 bytes .../animation/FloatKeyframeSet.class | Bin 0 -> 4237 bytes .../animation/IntEvaluator.class | Bin 0 -> 1087 bytes .../animation/IntKeyframeSet.class | Bin 0 -> 4230 bytes .../animation/Keyframe$FloatKeyframe.class | Bin 0 -> 1851 bytes .../animation/Keyframe$IntKeyframe.class | Bin 0 -> 1853 bytes .../animation/Keyframe$ObjectKeyframe.class | Bin 0 -> 1700 bytes .../nineoldandroids/animation/Keyframe.class | Bin 0 -> 2769 bytes .../animation/KeyframeSet.class | Bin 0 -> 7200 bytes .../animation/ObjectAnimator.class | Bin 0 -> 6714 bytes ...luesHolder$FloatPropertyValuesHolder.class | Bin 0 -> 3207 bytes ...ValuesHolder$IntPropertyValuesHolder.class | Bin 0 -> 3193 bytes .../animation/PropertyValuesHolder.class | Bin 0 -> 12900 bytes .../animation/TypeEvaluator.class | Bin 0 -> 329 bytes .../animation/ValueAnimator$1.class | Bin 0 -> 996 bytes .../animation/ValueAnimator$2.class | Bin 0 -> 996 bytes .../animation/ValueAnimator$3.class | Bin 0 -> 996 bytes .../animation/ValueAnimator$4.class | Bin 0 -> 996 bytes .../animation/ValueAnimator$5.class | Bin 0 -> 996 bytes .../ValueAnimator$AnimationHandler.class | Bin 0 -> 3444 bytes ...ValueAnimator$AnimatorUpdateListener.class | Bin 0 -> 425 bytes .../animation/ValueAnimator.class | Bin 0 -> 17514 bytes .../nineoldandroids/view/NineViewGroup.class | Bin 0 -> 2576 bytes .../view/animation/AnimatorProxy.class | Bin 0 -> 6144 bytes .../widget/NineFrameLayout.class | Bin 0 -> 2306 bytes .../widget/NineHorizontalScrollView.class | Bin 0 -> 1512 bytes .../widget/NineLinearLayout.class | Bin 0 -> 2310 bytes .../internal/view/ActionProviderWrapper.class | Bin 0 -> 1323 bytes .../internal/view/StandaloneActionMode.class | Bin 0 -> 5188 bytes .../view/View_HasStateListenerSupport.class | Bin 0 -> 334 bytes .../View_OnAttachStateChangeListener.class | Bin 0 -> 274 bytes .../internal/view/menu/ActionMenu.class | Bin 0 -> 8731 bytes .../internal/view/menu/ActionMenuItem.class | Bin 0 -> 7573 bytes .../view/menu/ActionMenuItemView.class | Bin 0 -> 10750 bytes ...ionMenuPresenter$ActionButtonSubmenu.class | Bin 0 -> 2911 bytes ...ionMenuPresenter$HasPermanentMenuKey.class | Bin 0 -> 808 bytes ...onMenuPresenter$OpenOverflowRunnable.class | Bin 0 -> 1781 bytes ...tionMenuPresenter$OverflowMenuButton.class | Bin 0 -> 3062 bytes .../ActionMenuPresenter$OverflowPopup.class | Bin 0 -> 1875 bytes ...MenuPresenter$PopupPresenterCallback.class | Bin 0 -> 1939 bytes .../ActionMenuPresenter$SavedState$1.class | Bin 0 -> 1463 bytes .../menu/ActionMenuPresenter$SavedState.class | Bin 0 -> 1418 bytes .../view/menu/ActionMenuPresenter.class | Bin 0 -> 17603 bytes .../ActionMenuView$ActionMenuChildView.class | Bin 0 -> 347 bytes .../menu/ActionMenuView$LayoutParams.class | Bin 0 -> 1431 bytes .../internal/view/menu/ActionMenuView.class | Bin 0 -> 13086 bytes .../view/menu/BaseMenuPresenter.class | Bin 0 -> 6483 bytes .../internal/view/menu/ListMenuItemView.class | Bin 0 -> 7437 bytes .../view/menu/MenuBuilder$Callback.class | Bin 0 -> 466 bytes .../view/menu/MenuBuilder$ItemInvoker.class | Bin 0 -> 341 bytes .../internal/view/menu/MenuBuilder.class | Bin 0 -> 31040 bytes .../internal/view/menu/MenuItemImpl.class | Bin 0 -> 14886 bytes .../internal/view/menu/MenuItemMule.class | Bin 0 -> 5850 bytes .../view/menu/MenuItemWrapper$1.class | Bin 0 -> 1563 bytes .../internal/view/menu/MenuItemWrapper.class | Bin 0 -> 8662 bytes .../internal/view/menu/MenuMule.class | Bin 0 -> 4067 bytes ...enuPopupHelper$ExpandedIndexObserver.class | Bin 0 -> 1255 bytes .../menu/MenuPopupHelper$MenuAdapter.class | Bin 0 -> 4186 bytes .../internal/view/menu/MenuPopupHelper.class | Bin 0 -> 12385 bytes .../view/menu/MenuPresenter$Callback.class | Bin 0 -> 426 bytes .../internal/view/menu/MenuPresenter.class | Bin 0 -> 1120 bytes .../view/menu/MenuView$ItemView.class | Bin 0 -> 678 bytes .../internal/view/menu/MenuView.class | Bin 0 -> 361 bytes .../internal/view/menu/MenuWrapper.class | Bin 0 -> 6688 bytes .../internal/view/menu/SubMenuBuilder.class | Bin 0 -> 4758 bytes .../internal/view/menu/SubMenuWrapper.class | Bin 0 -> 2364 bytes .../internal/widget/AbsActionBarView$1.class | Bin 0 -> 793 bytes ...ActionBarView$VisibilityAnimListener.class | Bin 0 -> 2074 bytes .../internal/widget/AbsActionBarView.class | Bin 0 -> 8258 bytes .../internal/widget/ActionBarContainer.class | Bin 0 -> 6539 bytes .../widget/ActionBarContextView$1.class | Bin 0 -> 1123 bytes .../widget/ActionBarContextView.class | Bin 0 -> 16500 bytes .../internal/widget/ActionBarView$1.class | Bin 0 -> 1739 bytes .../internal/widget/ActionBarView$2.class | Bin 0 -> 1390 bytes .../internal/widget/ActionBarView$3.class | Bin 0 -> 1246 bytes ...View$ExpandedActionViewMenuPresenter.class | Bin 0 -> 6311 bytes .../widget/ActionBarView$HomeView.class | Bin 0 -> 4970 bytes .../widget/ActionBarView$SavedState$1.class | Bin 0 -> 1459 bytes .../widget/ActionBarView$SavedState.class | Bin 0 -> 1783 bytes .../internal/widget/ActionBarView.class | Bin 0 -> 33940 bytes .../internal/widget/CapitalizingButton.class | Bin 0 -> 1802 bytes .../widget/CapitalizingTextView.class | Bin 0 -> 1995 bytes .../widget/FakeDialogPhoneWindow.class | Bin 0 -> 2352 bytes .../widget/IcsAbsSpinner$RecycleBin.class | Bin 0 -> 1689 bytes .../widget/IcsAbsSpinner$SavedState$1.class | Bin 0 -> 1459 bytes .../widget/IcsAbsSpinner$SavedState.class | Bin 0 -> 2317 bytes .../internal/widget/IcsAbsSpinner.class | Bin 0 -> 9394 bytes ...csAdapterView$AdapterContextMenuInfo.class | Bin 0 -> 808 bytes ...csAdapterView$AdapterDataSetObserver.class | Bin 0 -> 1989 bytes ...sAdapterView$OnItemLongClickListener.class | Bin 0 -> 497 bytes ...csAdapterView$OnItemSelectedListener.class | Bin 0 -> 653 bytes .../IcsAdapterView$SelectionNotifier.class | Bin 0 -> 1147 bytes .../internal/widget/IcsAdapterView.class | Bin 0 -> 18383 bytes .../internal/widget/IcsLinearLayout.class | Bin 0 -> 5944 bytes .../widget/IcsListPopupWindow$1.class | Bin 0 -> 1997 bytes .../IcsListPopupWindow$DropDownListView.class | Bin 0 -> 1526 bytes ...IcsListPopupWindow$ListSelectorHider.class | Bin 0 -> 994 bytes ...ListPopupWindow$PopupDataSetObserver.class | Bin 0 -> 1159 bytes ...sListPopupWindow$PopupScrollListener.class | Bin 0 -> 2220 bytes ...istPopupWindow$PopupTouchInterceptor.class | Bin 0 -> 2250 bytes ...sListPopupWindow$ResizePopupRunnable.class | Bin 0 -> 1676 bytes .../internal/widget/IcsListPopupWindow.class | Bin 0 -> 16031 bytes ...ProgressBar$AccessibilityEventSender.class | Bin 0 -> 1002 bytes ...sProgressBar$RefreshProgressRunnable.class | Bin 0 -> 1339 bytes .../widget/IcsProgressBar$SavedState$1.class | Bin 0 -> 1468 bytes .../widget/IcsProgressBar$SavedState.class | Bin 0 -> 1676 bytes .../internal/widget/IcsProgressBar.class | Bin 0 -> 20248 bytes .../widget/IcsSpinner$DropDownAdapter.class | Bin 0 -> 2674 bytes .../widget/IcsSpinner$DropdownPopup$1.class | Bin 0 -> 1534 bytes .../widget/IcsSpinner$DropdownPopup.class | Bin 0 -> 3627 bytes .../widget/IcsSpinner$SpinnerPopup.class | Bin 0 -> 477 bytes .../internal/widget/IcsSpinner.class | Bin 0 -> 10794 bytes .../internal/widget/IcsView.class | Bin 0 -> 584 bytes .../widget/ScrollingTabContainerView$1.class | Bin 0 -> 1116 bytes ...ScrollingTabContainerView$TabAdapter.class | Bin 0 -> 2343 bytes ...ingTabContainerView$TabClickListener.class | Bin 0 -> 2064 bytes .../ScrollingTabContainerView$TabView.class | Bin 0 -> 4625 bytes ...ContainerView$VisibilityAnimListener.class | Bin 0 -> 1862 bytes .../widget/ScrollingTabContainerView.class | Bin 0 -> 13167 bytes .../view/ActionMode$Callback.class | Bin 0 -> 546 bytes .../actionbarsherlock/view/ActionMode.class | Bin 0 -> 1164 bytes ...tionProvider$SubUiVisibilityListener.class | Bin 0 -> 306 bytes .../view/ActionProvider.class | Bin 0 -> 1428 bytes .../view/CollapsibleActionView.class | Bin 0 -> 219 bytes .../com/actionbarsherlock/view/Menu.class | Bin 0 -> 1766 bytes ...ater$InflatedOnMenuItemClickListener.class | Bin 0 -> 2570 bytes .../view/MenuInflater$MenuState.class | Bin 0 -> 9210 bytes .../actionbarsherlock/view/MenuInflater.class | Bin 0 -> 5322 bytes .../MenuItem$OnActionExpandListener.class | Bin 0 -> 355 bytes .../MenuItem$OnMenuItemClickListener.class | Bin 0 -> 315 bytes .../com/actionbarsherlock/view/MenuItem.class | Bin 0 -> 2676 bytes .../com/actionbarsherlock/view/SubMenu.class | Bin 0 -> 608 bytes .../view/Window$Callback.class | Bin 0 -> 283 bytes .../com/actionbarsherlock/view/Window.class | Bin 0 -> 789 bytes ...oserModel$ActivityChooserModelClient.class | Bin 0 -> 383 bytes ...vityChooserModel$ActivityResolveInfo.class | Bin 0 -> 2192 bytes .../ActivityChooserModel$ActivitySorter.class | Bin 0 -> 774 bytes .../ActivityChooserModel$DefaultSorter.class | Bin 0 -> 3484 bytes ...ctivityChooserModel$HistoricalRecord.class | Bin 0 -> 2244 bytes ...ActivityChooserModel$HistoryLoader$1.class | Bin 0 -> 1120 bytes .../ActivityChooserModel$HistoryLoader.class | Bin 0 -> 5629 bytes ...ctivityChooserModel$HistoryPersister.class | Bin 0 -> 4576 bytes ...hooserModel$OnChooseActivityListener.class | Bin 0 -> 396 bytes ...ctivityChooserModel$SerialExecutor$1.class | Bin 0 -> 1113 bytes .../ActivityChooserModel$SerialExecutor.class | Bin 0 -> 1463 bytes .../widget/ActivityChooserModel.class | Bin 0 -> 12885 bytes .../widget/ActivityChooserView$1.class | Bin 0 -> 1165 bytes .../widget/ActivityChooserView$2.class | Bin 0 -> 1361 bytes .../widget/ActivityChooserView$3.class | Bin 0 -> 802 bytes ...ooserView$ActivityChooserViewAdapter.class | Bin 0 -> 7243 bytes .../ActivityChooserView$Callbacks.class | Bin 0 -> 4881 bytes .../ActivityChooserView$SetActivated.class | Bin 0 -> 677 bytes .../widget/ActivityChooserView.class | Bin 0 -> 14560 bytes ...ovider$OnShareTargetSelectedListener.class | Bin 0 -> 407 bytes ...der$ShareAcitivityChooserModelPolicy.class | Bin 0 -> 1778 bytes ...ShareMenuItemOnMenuItemClickListener.class | Bin 0 -> 2027 bytes .../widget/ShareActionProvider.class | Bin 0 -> 7288 bytes .../ActionBarSherlock/bin/jarlist.cache | 3 + .../abs__ab_bottom_solid_dark_holo.9.png | Bin 0 -> 213 bytes .../abs__ab_bottom_solid_inverse_holo.9.png | Bin 0 -> 213 bytes .../abs__ab_bottom_solid_light_holo.9.png | Bin 0 -> 212 bytes ...abs__ab_bottom_transparent_dark_holo.9.png | Bin 0 -> 224 bytes ...bs__ab_bottom_transparent_light_holo.9.png | Bin 0 -> 224 bytes .../abs__ab_share_pack_holo_dark.9.png | Bin 0 -> 267 bytes .../abs__ab_share_pack_holo_light.9.png | Bin 0 -> 268 bytes .../abs__ab_solid_dark_holo.9.png | Bin 0 -> 219 bytes .../abs__ab_solid_light_holo.9.png | Bin 0 -> 218 bytes .../abs__ab_solid_shadow_holo.9.png | Bin 0 -> 261 bytes .../abs__ab_stacked_solid_dark_holo.9.png | Bin 0 -> 219 bytes .../abs__ab_stacked_solid_light_holo.9.png | Bin 0 -> 219 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__ab_transparent_dark_holo.9.png | Bin 0 -> 242 bytes .../abs__ab_transparent_light_holo.9.png | Bin 0 -> 241 bytes .../abs__btn_cab_done_default_holo_dark.9.png | Bin 0 -> 174 bytes ...abs__btn_cab_done_default_holo_light.9.png | Bin 0 -> 174 bytes .../abs__btn_cab_done_focused_holo_dark.9.png | Bin 0 -> 172 bytes ...abs__btn_cab_done_focused_holo_light.9.png | Bin 0 -> 183 bytes .../abs__btn_cab_done_pressed_holo_dark.9.png | Bin 0 -> 183 bytes ...abs__btn_cab_done_pressed_holo_light.9.png | Bin 0 -> 183 bytes ...abs__cab_background_bottom_holo_dark.9.png | Bin 0 -> 216 bytes ...bs__cab_background_bottom_holo_light.9.png | Bin 0 -> 214 bytes .../abs__cab_background_top_holo_dark.9.png | Bin 0 -> 217 bytes .../abs__cab_background_top_holo_light.9.png | Bin 0 -> 214 bytes .../abs__dialog_full_holo_dark.9.png | Bin 0 -> 1335 bytes .../abs__dialog_full_holo_light.9.png | Bin 0 -> 1375 bytes .../abs__ic_ab_back_holo_dark.png | Bin 0 -> 548 bytes .../abs__ic_ab_back_holo_light.png | Bin 0 -> 438 bytes .../abs__ic_cab_done_holo_dark.png | Bin 0 -> 791 bytes .../abs__ic_cab_done_holo_light.png | Bin 0 -> 605 bytes ..._ic_menu_moreoverflow_normal_holo_dark.png | Bin 0 -> 126 bytes ...ic_menu_moreoverflow_normal_holo_light.png | Bin 0 -> 136 bytes .../abs__ic_menu_share_holo_dark.png | Bin 0 -> 578 bytes .../abs__ic_menu_share_holo_light.png | Bin 0 -> 607 bytes .../abs__list_activated_holo.9.png | Bin 0 -> 176 bytes .../abs__list_divider_holo_dark.9.png | Bin 0 -> 132 bytes .../abs__list_divider_holo_light.9.png | Bin 0 -> 132 bytes .../abs__list_focused_holo.9.png | Bin 0 -> 176 bytes .../abs__list_longpressed_holo.9.png | Bin 0 -> 176 bytes .../abs__list_pressed_holo_dark.9.png | Bin 0 -> 176 bytes .../abs__list_pressed_holo_light.9.png | Bin 0 -> 176 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__menu_dropdown_panel_holo_dark.9.png | Bin 0 -> 885 bytes .../abs__menu_dropdown_panel_holo_light.9.png | Bin 0 -> 997 bytes .../abs__progress_bg_holo_dark.9.png | Bin 0 -> 183 bytes .../abs__progress_bg_holo_light.9.png | Bin 0 -> 183 bytes .../abs__progress_primary_holo_dark.9.png | Bin 0 -> 858 bytes .../abs__progress_primary_holo_light.9.png | Bin 0 -> 858 bytes .../abs__progress_secondary_holo_dark.9.png | Bin 0 -> 183 bytes .../abs__progress_secondary_holo_light.9.png | Bin 0 -> 183 bytes .../abs__spinner_48_inner_holo.png | Bin 0 -> 1819 bytes .../abs__spinner_48_outer_holo.png | Bin 0 -> 2380 bytes .../abs__spinner_ab_default_holo_dark.9.png | Bin 0 -> 324 bytes .../abs__spinner_ab_default_holo_light.9.png | Bin 0 -> 325 bytes .../abs__spinner_ab_disabled_holo_dark.9.png | Bin 0 -> 315 bytes .../abs__spinner_ab_disabled_holo_light.9.png | Bin 0 -> 315 bytes .../abs__spinner_ab_focused_holo_dark.9.png | Bin 0 -> 513 bytes .../abs__spinner_ab_focused_holo_light.9.png | Bin 0 -> 508 bytes .../abs__spinner_ab_pressed_holo_dark.9.png | Bin 0 -> 445 bytes .../abs__spinner_ab_pressed_holo_light.9.png | Bin 0 -> 443 bytes .../abs__tab_selected_focused_holo.9.png | Bin 0 -> 156 bytes .../abs__tab_selected_holo.9.png | Bin 0 -> 149 bytes .../abs__tab_selected_pressed_holo.9.png | Bin 0 -> 155 bytes .../abs__tab_unselected_pressed_holo.9.png | Bin 0 -> 153 bytes .../bin/res/drawable-hdpi/ic_launcher.png | Bin 0 -> 9193 bytes .../bin/res/drawable-ldpi/ic_launcher.png | Bin 0 -> 2658 bytes .../abs__ab_bottom_solid_dark_holo.9.png | Bin 0 -> 199 bytes .../abs__ab_bottom_solid_inverse_holo.9.png | Bin 0 -> 199 bytes .../abs__ab_bottom_solid_light_holo.9.png | Bin 0 -> 199 bytes ...abs__ab_bottom_transparent_dark_holo.9.png | Bin 0 -> 209 bytes ...bs__ab_bottom_transparent_light_holo.9.png | Bin 0 -> 209 bytes .../abs__ab_share_pack_holo_dark.9.png | Bin 0 -> 247 bytes .../abs__ab_share_pack_holo_light.9.png | Bin 0 -> 248 bytes .../abs__ab_solid_dark_holo.9.png | Bin 0 -> 206 bytes .../abs__ab_solid_light_holo.9.png | Bin 0 -> 206 bytes .../abs__ab_solid_shadow_holo.9.png | Bin 0 -> 238 bytes .../abs__ab_stacked_solid_dark_holo.9.png | Bin 0 -> 206 bytes .../abs__ab_stacked_solid_light_holo.9.png | Bin 0 -> 206 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__ab_transparent_dark_holo.9.png | Bin 0 -> 224 bytes .../abs__ab_transparent_light_holo.9.png | Bin 0 -> 221 bytes .../abs__btn_cab_done_default_holo_dark.9.png | Bin 0 -> 174 bytes ...abs__btn_cab_done_default_holo_light.9.png | Bin 0 -> 174 bytes .../abs__btn_cab_done_focused_holo_dark.9.png | Bin 0 -> 171 bytes ...abs__btn_cab_done_focused_holo_light.9.png | Bin 0 -> 182 bytes .../abs__btn_cab_done_pressed_holo_dark.9.png | Bin 0 -> 183 bytes ...abs__btn_cab_done_pressed_holo_light.9.png | Bin 0 -> 183 bytes ...abs__cab_background_bottom_holo_dark.9.png | Bin 0 -> 199 bytes ...bs__cab_background_bottom_holo_light.9.png | Bin 0 -> 199 bytes .../abs__cab_background_top_holo_dark.9.png | Bin 0 -> 199 bytes .../abs__cab_background_top_holo_light.9.png | Bin 0 -> 199 bytes .../abs__dialog_full_holo_dark.9.png | Bin 0 -> 866 bytes .../abs__dialog_full_holo_light.9.png | Bin 0 -> 943 bytes .../abs__ic_ab_back_holo_dark.png | Bin 0 -> 384 bytes .../abs__ic_ab_back_holo_light.png | Bin 0 -> 312 bytes .../abs__ic_cab_done_holo_dark.png | Bin 0 -> 554 bytes .../abs__ic_cab_done_holo_light.png | Bin 0 -> 462 bytes ..._ic_menu_moreoverflow_normal_holo_dark.png | Bin 0 -> 113 bytes ...ic_menu_moreoverflow_normal_holo_light.png | Bin 0 -> 123 bytes .../abs__ic_menu_share_holo_dark.png | Bin 0 -> 464 bytes .../abs__ic_menu_share_holo_light.png | Bin 0 -> 479 bytes .../abs__list_activated_holo.9.png | Bin 0 -> 175 bytes .../abs__list_divider_holo_dark.9.png | Bin 0 -> 132 bytes .../abs__list_divider_holo_light.9.png | Bin 0 -> 132 bytes .../abs__list_focused_holo.9.png | Bin 0 -> 175 bytes .../abs__list_longpressed_holo.9.png | Bin 0 -> 175 bytes .../abs__list_pressed_holo_dark.9.png | Bin 0 -> 175 bytes .../abs__list_pressed_holo_light.9.png | Bin 0 -> 175 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__menu_dropdown_panel_holo_dark.9.png | Bin 0 -> 620 bytes .../abs__menu_dropdown_panel_holo_light.9.png | Bin 0 -> 717 bytes .../abs__progress_bg_holo_dark.9.png | Bin 0 -> 175 bytes .../abs__progress_bg_holo_light.9.png | Bin 0 -> 175 bytes .../abs__progress_primary_holo_dark.9.png | Bin 0 -> 545 bytes .../abs__progress_primary_holo_light.9.png | Bin 0 -> 545 bytes .../abs__progress_secondary_holo_dark.9.png | Bin 0 -> 175 bytes .../abs__progress_secondary_holo_light.9.png | Bin 0 -> 175 bytes .../abs__spinner_48_inner_holo.png | Bin 0 -> 1102 bytes .../abs__spinner_48_outer_holo.png | Bin 0 -> 1527 bytes .../abs__spinner_ab_default_holo_dark.9.png | Bin 0 -> 279 bytes .../abs__spinner_ab_default_holo_light.9.png | Bin 0 -> 292 bytes .../abs__spinner_ab_disabled_holo_dark.9.png | Bin 0 -> 272 bytes .../abs__spinner_ab_disabled_holo_light.9.png | Bin 0 -> 272 bytes .../abs__spinner_ab_focused_holo_dark.9.png | Bin 0 -> 418 bytes .../abs__spinner_ab_focused_holo_light.9.png | Bin 0 -> 419 bytes .../abs__spinner_ab_pressed_holo_dark.9.png | Bin 0 -> 363 bytes .../abs__spinner_ab_pressed_holo_light.9.png | Bin 0 -> 359 bytes .../abs__tab_selected_focused_holo.9.png | Bin 0 -> 155 bytes .../abs__tab_selected_holo.9.png | Bin 0 -> 151 bytes .../abs__tab_selected_pressed_holo.9.png | Bin 0 -> 155 bytes .../abs__tab_unselected_pressed_holo.9.png | Bin 0 -> 157 bytes .../bin/res/drawable-mdpi/ic_launcher.png | Bin 0 -> 5057 bytes .../abs__ab_bottom_solid_dark_holo.9.png | Bin 0 -> 227 bytes .../abs__ab_bottom_solid_inverse_holo.9.png | Bin 0 -> 227 bytes .../abs__ab_bottom_solid_light_holo.9.png | Bin 0 -> 227 bytes ...abs__ab_bottom_transparent_dark_holo.9.png | Bin 0 -> 237 bytes ...bs__ab_bottom_transparent_light_holo.9.png | Bin 0 -> 236 bytes .../abs__ab_share_pack_holo_dark.9.png | Bin 0 -> 271 bytes .../abs__ab_share_pack_holo_light.9.png | Bin 0 -> 267 bytes .../abs__ab_solid_dark_holo.9.png | Bin 0 -> 236 bytes .../abs__ab_solid_light_holo.9.png | Bin 0 -> 236 bytes .../abs__ab_solid_shadow_holo.9.png | Bin 0 -> 343 bytes .../abs__ab_stacked_solid_dark_holo.9.png | Bin 0 -> 236 bytes .../abs__ab_stacked_solid_light_holo.9.png | Bin 0 -> 236 bytes ...bs__ab_stacked_transparent_dark_holo.9.png | Bin 0 -> 228 bytes ...s__ab_stacked_transparent_light_holo.9.png | Bin 0 -> 227 bytes .../abs__ab_transparent_dark_holo.9.png | Bin 0 -> 255 bytes .../abs__ab_transparent_light_holo.9.png | Bin 0 -> 252 bytes .../abs__btn_cab_done_default_holo_dark.9.png | Bin 0 -> 180 bytes ...abs__btn_cab_done_default_holo_light.9.png | Bin 0 -> 180 bytes .../abs__btn_cab_done_focused_holo_dark.9.png | Bin 0 -> 182 bytes ...abs__btn_cab_done_focused_holo_light.9.png | Bin 0 -> 199 bytes .../abs__btn_cab_done_pressed_holo_dark.9.png | Bin 0 -> 200 bytes ...abs__btn_cab_done_pressed_holo_light.9.png | Bin 0 -> 199 bytes ...abs__cab_background_bottom_holo_dark.9.png | Bin 0 -> 231 bytes ...bs__cab_background_bottom_holo_light.9.png | Bin 0 -> 229 bytes .../abs__cab_background_top_holo_dark.9.png | Bin 0 -> 231 bytes .../abs__cab_background_top_holo_light.9.png | Bin 0 -> 228 bytes .../abs__dialog_full_holo_dark.9.png | Bin 0 -> 2037 bytes .../abs__dialog_full_holo_light.9.png | Bin 0 -> 2058 bytes .../abs__ic_ab_back_holo_dark.png | Bin 0 -> 626 bytes .../abs__ic_ab_back_holo_light.png | Bin 0 -> 527 bytes .../abs__ic_cab_done_holo_dark.png | Bin 0 -> 1049 bytes .../abs__ic_cab_done_holo_light.png | Bin 0 -> 782 bytes ..._ic_menu_moreoverflow_normal_holo_dark.png | Bin 0 -> 132 bytes ...ic_menu_moreoverflow_normal_holo_light.png | Bin 0 -> 148 bytes .../abs__ic_menu_share_holo_dark.png | Bin 0 -> 833 bytes .../abs__ic_menu_share_holo_light.png | Bin 0 -> 869 bytes .../abs__list_activated_holo.9.png | Bin 0 -> 178 bytes .../abs__list_divider_holo_dark.9.png | Bin 0 -> 139 bytes .../abs__list_divider_holo_light.9.png | Bin 0 -> 139 bytes .../abs__list_focused_holo.9.png | Bin 0 -> 178 bytes .../abs__list_longpressed_holo.9.png | Bin 0 -> 178 bytes .../abs__list_pressed_holo_dark.9.png | Bin 0 -> 178 bytes .../abs__list_pressed_holo_light.9.png | Bin 0 -> 178 bytes ...bs__list_selector_disabled_holo_dark.9.png | Bin 0 -> 218 bytes ...s__list_selector_disabled_holo_light.9.png | Bin 0 -> 217 bytes .../abs__menu_dropdown_panel_holo_dark.9.png | Bin 0 -> 1278 bytes .../abs__menu_dropdown_panel_holo_light.9.png | Bin 0 -> 1435 bytes .../abs__progress_bg_holo_dark.9.png | Bin 0 -> 180 bytes .../abs__progress_bg_holo_light.9.png | Bin 0 -> 180 bytes .../abs__progress_primary_holo_dark.9.png | Bin 0 -> 1239 bytes .../abs__progress_primary_holo_light.9.png | Bin 0 -> 1239 bytes .../abs__progress_secondary_holo_dark.9.png | Bin 0 -> 180 bytes .../abs__progress_secondary_holo_light.9.png | Bin 0 -> 180 bytes .../abs__spinner_48_inner_holo.png | Bin 0 -> 2490 bytes .../abs__spinner_48_outer_holo.png | Bin 0 -> 3083 bytes .../abs__spinner_ab_default_holo_dark.9.png | Bin 0 -> 370 bytes .../abs__spinner_ab_default_holo_light.9.png | Bin 0 -> 369 bytes .../abs__spinner_ab_disabled_holo_dark.9.png | Bin 0 -> 358 bytes .../abs__spinner_ab_disabled_holo_light.9.png | Bin 0 -> 358 bytes .../abs__spinner_ab_focused_holo_dark.9.png | Bin 0 -> 625 bytes .../abs__spinner_ab_focused_holo_light.9.png | Bin 0 -> 609 bytes .../abs__spinner_ab_pressed_holo_dark.9.png | Bin 0 -> 548 bytes .../abs__spinner_ab_pressed_holo_light.9.png | Bin 0 -> 543 bytes .../abs__tab_selected_focused_holo.9.png | Bin 0 -> 157 bytes .../abs__tab_selected_holo.9.png | Bin 0 -> 150 bytes .../abs__tab_selected_pressed_holo.9.png | Bin 0 -> 156 bytes .../abs__tab_unselected_pressed_holo.9.png | Bin 0 -> 157 bytes .../bin/res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 14068 bytes .../com/actionbarsherlock/BuildConfig.java | 6 + .../gen/com/actionbarsherlock/R.java | 2813 +++++++++++++++++ .../libs/android-support-v4.jar | Bin 0 -> 271788 bytes .../ActionBarSherlock/proguard-project.txt | 20 + .../ActionBarSherlock/project.properties | 15 + ...s__primary_text_disable_only_holo_dark.xml | 20 + ...__primary_text_disable_only_holo_light.xml | 21 + .../res/color/abs__primary_text_holo_dark.xml | 24 + .../color/abs__primary_text_holo_light.xml | 26 + .../abs__ab_bottom_solid_dark_holo.9.png | Bin 0 -> 144 bytes .../abs__ab_bottom_solid_inverse_holo.9.png | Bin 0 -> 138 bytes .../abs__ab_bottom_solid_light_holo.9.png | Bin 0 -> 144 bytes ...abs__ab_bottom_transparent_dark_holo.9.png | Bin 0 -> 135 bytes ...bs__ab_bottom_transparent_light_holo.9.png | Bin 0 -> 134 bytes .../abs__ab_share_pack_holo_dark.9.png | Bin 0 -> 2866 bytes .../abs__ab_share_pack_holo_light.9.png | Bin 0 -> 2862 bytes .../abs__ab_solid_dark_holo.9.png | Bin 0 -> 146 bytes .../abs__ab_solid_light_holo.9.png | Bin 0 -> 145 bytes .../abs__ab_solid_shadow_holo.9.png | Bin 0 -> 192 bytes .../abs__ab_stacked_solid_dark_holo.9.png | Bin 0 -> 146 bytes .../abs__ab_stacked_solid_light_holo.9.png | Bin 0 -> 146 bytes ...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__ab_transparent_dark_holo.9.png | Bin 0 -> 155 bytes .../abs__ab_transparent_light_holo.9.png | Bin 0 -> 145 bytes .../abs__btn_cab_done_default_holo_dark.9.png | Bin 0 -> 104 bytes ...abs__btn_cab_done_default_holo_light.9.png | Bin 0 -> 102 bytes .../abs__btn_cab_done_focused_holo_dark.9.png | Bin 0 -> 112 bytes ...abs__btn_cab_done_focused_holo_light.9.png | Bin 0 -> 108 bytes .../abs__btn_cab_done_pressed_holo_dark.9.png | Bin 0 -> 110 bytes ...abs__btn_cab_done_pressed_holo_light.9.png | Bin 0 -> 108 bytes ...abs__cab_background_bottom_holo_dark.9.png | Bin 0 -> 149 bytes ...bs__cab_background_bottom_holo_light.9.png | Bin 0 -> 145 bytes .../abs__cab_background_top_holo_dark.9.png | Bin 0 -> 147 bytes .../abs__cab_background_top_holo_light.9.png | Bin 0 -> 147 bytes .../abs__dialog_full_holo_dark.9.png | Bin 0 -> 1414 bytes .../abs__dialog_full_holo_light.9.png | Bin 0 -> 1537 bytes .../abs__ic_ab_back_holo_dark.png | Bin 0 -> 602 bytes .../abs__ic_ab_back_holo_light.png | Bin 0 -> 546 bytes .../abs__ic_cab_done_holo_dark.png | Bin 0 -> 713 bytes .../abs__ic_cab_done_holo_light.png | Bin 0 -> 737 bytes ..._ic_menu_moreoverflow_normal_holo_dark.png | Bin 0 -> 144 bytes ...ic_menu_moreoverflow_normal_holo_light.png | Bin 0 -> 148 bytes .../abs__ic_menu_share_holo_dark.png | Bin 0 -> 467 bytes .../abs__ic_menu_share_holo_light.png | Bin 0 -> 505 bytes .../abs__list_activated_holo.9.png | Bin 0 -> 154 bytes .../abs__list_divider_holo_dark.9.png | Bin 0 -> 78 bytes .../abs__list_divider_holo_light.9.png | Bin 0 -> 76 bytes .../abs__list_focused_holo.9.png | Bin 0 -> 159 bytes .../abs__list_longpressed_holo.9.png | Bin 0 -> 154 bytes .../abs__list_pressed_holo_dark.9.png | Bin 0 -> 159 bytes .../abs__list_pressed_holo_light.9.png | Bin 0 -> 159 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__menu_dropdown_panel_holo_dark.9.png | Bin 0 -> 922 bytes .../abs__menu_dropdown_panel_holo_light.9.png | Bin 0 -> 1061 bytes .../abs__progress_bg_holo_dark.9.png | Bin 0 -> 178 bytes .../abs__progress_bg_holo_light.9.png | Bin 0 -> 174 bytes .../abs__progress_primary_holo_dark.9.png | Bin 0 -> 917 bytes .../abs__progress_primary_holo_light.9.png | Bin 0 -> 917 bytes .../abs__progress_secondary_holo_dark.9.png | Bin 0 -> 188 bytes .../abs__progress_secondary_holo_light.9.png | Bin 0 -> 188 bytes .../abs__spinner_48_inner_holo.png | Bin 0 -> 2081 bytes .../abs__spinner_48_outer_holo.png | Bin 0 -> 1811 bytes .../abs__spinner_ab_default_holo_dark.9.png | Bin 0 -> 311 bytes .../abs__spinner_ab_default_holo_light.9.png | Bin 0 -> 312 bytes .../abs__spinner_ab_disabled_holo_dark.9.png | Bin 0 -> 306 bytes .../abs__spinner_ab_disabled_holo_light.9.png | Bin 0 -> 306 bytes .../abs__spinner_ab_focused_holo_dark.9.png | Bin 0 -> 524 bytes .../abs__spinner_ab_focused_holo_light.9.png | Bin 0 -> 523 bytes .../abs__spinner_ab_pressed_holo_dark.9.png | Bin 0 -> 464 bytes .../abs__spinner_ab_pressed_holo_light.9.png | Bin 0 -> 458 bytes .../abs__tab_selected_focused_holo.9.png | Bin 0 -> 147 bytes .../abs__tab_selected_holo.9.png | Bin 0 -> 148 bytes .../abs__tab_selected_pressed_holo.9.png | Bin 0 -> 147 bytes .../abs__tab_unselected_pressed_holo.9.png | Bin 0 -> 145 bytes .../res/drawable-hdpi/ic_launcher.png | Bin 0 -> 9397 bytes .../res/drawable-ldpi/ic_launcher.png | Bin 0 -> 2729 bytes .../abs__ab_bottom_solid_dark_holo.9.png | Bin 0 -> 134 bytes .../abs__ab_bottom_solid_inverse_holo.9.png | Bin 0 -> 129 bytes .../abs__ab_bottom_solid_light_holo.9.png | Bin 0 -> 134 bytes ...abs__ab_bottom_transparent_dark_holo.9.png | Bin 0 -> 123 bytes ...bs__ab_bottom_transparent_light_holo.9.png | Bin 0 -> 123 bytes .../abs__ab_share_pack_holo_dark.9.png | Bin 0 -> 2851 bytes .../abs__ab_share_pack_holo_light.9.png | Bin 0 -> 122 bytes .../abs__ab_solid_dark_holo.9.png | Bin 0 -> 133 bytes .../abs__ab_solid_light_holo.9.png | Bin 0 -> 133 bytes .../abs__ab_solid_shadow_holo.9.png | Bin 0 -> 168 bytes .../abs__ab_stacked_solid_dark_holo.9.png | Bin 0 -> 134 bytes .../abs__ab_stacked_solid_light_holo.9.png | Bin 0 -> 133 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__ab_transparent_dark_holo.9.png | Bin 0 -> 139 bytes .../abs__ab_transparent_light_holo.9.png | Bin 0 -> 133 bytes .../abs__btn_cab_done_default_holo_dark.9.png | Bin 0 -> 101 bytes ...abs__btn_cab_done_default_holo_light.9.png | Bin 0 -> 99 bytes .../abs__btn_cab_done_focused_holo_dark.9.png | Bin 0 -> 109 bytes ...abs__btn_cab_done_focused_holo_light.9.png | Bin 0 -> 105 bytes .../abs__btn_cab_done_pressed_holo_dark.9.png | Bin 0 -> 107 bytes ...abs__btn_cab_done_pressed_holo_light.9.png | Bin 0 -> 105 bytes ...abs__cab_background_bottom_holo_dark.9.png | Bin 0 -> 127 bytes ...bs__cab_background_bottom_holo_light.9.png | Bin 0 -> 124 bytes .../abs__cab_background_top_holo_dark.9.png | Bin 0 -> 130 bytes .../abs__cab_background_top_holo_light.9.png | Bin 0 -> 128 bytes .../abs__dialog_full_holo_dark.9.png | Bin 0 -> 882 bytes .../abs__dialog_full_holo_light.9.png | Bin 0 -> 1003 bytes .../abs__ic_ab_back_holo_dark.png | Bin 0 -> 466 bytes .../abs__ic_ab_back_holo_light.png | Bin 0 -> 438 bytes .../abs__ic_cab_done_holo_dark.png | Bin 0 -> 566 bytes .../abs__ic_cab_done_holo_light.png | Bin 0 -> 552 bytes ..._ic_menu_moreoverflow_normal_holo_dark.png | Bin 0 -> 122 bytes ...ic_menu_moreoverflow_normal_holo_light.png | Bin 0 -> 131 bytes .../abs__ic_menu_share_holo_dark.png | Bin 0 -> 332 bytes .../abs__ic_menu_share_holo_light.png | Bin 0 -> 355 bytes .../abs__list_activated_holo.9.png | Bin 0 -> 151 bytes .../abs__list_divider_holo_dark.9.png | Bin 0 -> 78 bytes .../abs__list_divider_holo_light.9.png | Bin 0 -> 76 bytes .../abs__list_focused_holo.9.png | Bin 0 -> 158 bytes .../abs__list_longpressed_holo.9.png | Bin 0 -> 151 bytes .../abs__list_pressed_holo_dark.9.png | Bin 0 -> 158 bytes .../abs__list_pressed_holo_light.9.png | Bin 0 -> 158 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__menu_dropdown_panel_holo_dark.9.png | Bin 0 -> 651 bytes .../abs__menu_dropdown_panel_holo_light.9.png | Bin 0 -> 720 bytes .../abs__progress_bg_holo_dark.9.png | Bin 0 -> 165 bytes .../abs__progress_bg_holo_light.9.png | Bin 0 -> 159 bytes .../abs__progress_primary_holo_dark.9.png | Bin 0 -> 572 bytes .../abs__progress_primary_holo_light.9.png | Bin 0 -> 572 bytes .../abs__progress_secondary_holo_dark.9.png | Bin 0 -> 170 bytes .../abs__progress_secondary_holo_light.9.png | Bin 0 -> 170 bytes .../abs__spinner_48_inner_holo.png | Bin 0 -> 1336 bytes .../abs__spinner_48_outer_holo.png | Bin 0 -> 1165 bytes .../abs__spinner_ab_default_holo_dark.9.png | Bin 0 -> 254 bytes .../abs__spinner_ab_default_holo_light.9.png | Bin 0 -> 255 bytes .../abs__spinner_ab_disabled_holo_dark.9.png | Bin 0 -> 249 bytes .../abs__spinner_ab_disabled_holo_light.9.png | Bin 0 -> 249 bytes .../abs__spinner_ab_focused_holo_dark.9.png | Bin 0 -> 417 bytes .../abs__spinner_ab_focused_holo_light.9.png | Bin 0 -> 424 bytes .../abs__spinner_ab_pressed_holo_dark.9.png | Bin 0 -> 370 bytes .../abs__spinner_ab_pressed_holo_light.9.png | Bin 0 -> 370 bytes .../abs__tab_selected_focused_holo.9.png | Bin 0 -> 148 bytes .../abs__tab_selected_holo.9.png | Bin 0 -> 151 bytes .../abs__tab_selected_pressed_holo.9.png | Bin 0 -> 150 bytes .../abs__tab_unselected_pressed_holo.9.png | Bin 0 -> 155 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 0 -> 5237 bytes .../abs__progress_medium_holo.xml | 34 + .../abs__ab_bottom_solid_dark_holo.9.png | Bin 0 -> 165 bytes .../abs__ab_bottom_solid_inverse_holo.9.png | Bin 0 -> 157 bytes .../abs__ab_bottom_solid_light_holo.9.png | Bin 0 -> 166 bytes ...abs__ab_bottom_transparent_dark_holo.9.png | Bin 0 -> 153 bytes ...bs__ab_bottom_transparent_light_holo.9.png | Bin 0 -> 152 bytes .../abs__ab_share_pack_holo_dark.9.png | Bin 0 -> 2875 bytes .../abs__ab_share_pack_holo_light.9.png | Bin 0 -> 2869 bytes .../abs__ab_solid_dark_holo.9.png | Bin 0 -> 163 bytes .../abs__ab_solid_light_holo.9.png | Bin 0 -> 163 bytes .../abs__ab_solid_shadow_holo.9.png | Bin 0 -> 290 bytes .../abs__ab_stacked_solid_dark_holo.9.png | Bin 0 -> 163 bytes .../abs__ab_stacked_solid_light_holo.9.png | Bin 0 -> 163 bytes ...bs__ab_stacked_transparent_dark_holo.9.png | Bin 0 -> 158 bytes ...s__ab_stacked_transparent_light_holo.9.png | Bin 0 -> 152 bytes .../abs__ab_transparent_dark_holo.9.png | Bin 0 -> 171 bytes .../abs__ab_transparent_light_holo.9.png | Bin 0 -> 160 bytes .../abs__btn_cab_done_default_holo_dark.9.png | Bin 0 -> 109 bytes ...abs__btn_cab_done_default_holo_light.9.png | Bin 0 -> 108 bytes .../abs__btn_cab_done_focused_holo_dark.9.png | Bin 0 -> 112 bytes ...abs__btn_cab_done_focused_holo_light.9.png | Bin 0 -> 113 bytes .../abs__btn_cab_done_pressed_holo_dark.9.png | Bin 0 -> 115 bytes ...abs__btn_cab_done_pressed_holo_light.9.png | Bin 0 -> 113 bytes ...abs__cab_background_bottom_holo_dark.9.png | Bin 0 -> 166 bytes ...bs__cab_background_bottom_holo_light.9.png | Bin 0 -> 161 bytes .../abs__cab_background_top_holo_dark.9.png | Bin 0 -> 174 bytes .../abs__cab_background_top_holo_light.9.png | Bin 0 -> 161 bytes .../abs__dialog_full_holo_dark.9.png | Bin 0 -> 2159 bytes .../abs__dialog_full_holo_light.9.png | Bin 0 -> 2302 bytes .../abs__ic_ab_back_holo_dark.png | Bin 0 -> 741 bytes .../abs__ic_ab_back_holo_light.png | Bin 0 -> 661 bytes .../abs__ic_cab_done_holo_dark.png | Bin 0 -> 970 bytes .../abs__ic_cab_done_holo_light.png | Bin 0 -> 915 bytes ..._ic_menu_moreoverflow_normal_holo_dark.png | Bin 0 -> 167 bytes ...ic_menu_moreoverflow_normal_holo_light.png | Bin 0 -> 184 bytes .../abs__ic_menu_share_holo_dark.png | Bin 0 -> 699 bytes .../abs__ic_menu_share_holo_light.png | Bin 0 -> 935 bytes .../abs__list_activated_holo.9.png | Bin 0 -> 158 bytes .../abs__list_divider_holo_dark.9.png | Bin 0 -> 83 bytes .../abs__list_divider_holo_light.9.png | Bin 0 -> 83 bytes .../abs__list_focused_holo.9.png | Bin 0 -> 163 bytes .../abs__list_longpressed_holo.9.png | Bin 0 -> 158 bytes .../abs__list_pressed_holo_dark.9.png | Bin 0 -> 163 bytes .../abs__list_pressed_holo_light.9.png | Bin 0 -> 163 bytes ...bs__list_selector_disabled_holo_dark.9.png | Bin 0 -> 190 bytes ...s__list_selector_disabled_holo_light.9.png | Bin 0 -> 188 bytes .../abs__menu_dropdown_panel_holo_dark.9.png | Bin 0 -> 1362 bytes .../abs__menu_dropdown_panel_holo_light.9.png | Bin 0 -> 1551 bytes .../abs__progress_bg_holo_dark.9.png | Bin 0 -> 174 bytes .../abs__progress_bg_holo_light.9.png | Bin 0 -> 172 bytes .../abs__progress_primary_holo_dark.9.png | Bin 0 -> 1309 bytes .../abs__progress_primary_holo_light.9.png | Bin 0 -> 1309 bytes .../abs__progress_secondary_holo_dark.9.png | Bin 0 -> 184 bytes .../abs__progress_secondary_holo_light.9.png | Bin 0 -> 184 bytes .../abs__spinner_48_inner_holo.png | Bin 0 -> 2769 bytes .../abs__spinner_48_outer_holo.png | Bin 0 -> 2432 bytes .../abs__spinner_ab_default_holo_dark.9.png | Bin 0 -> 395 bytes .../abs__spinner_ab_default_holo_light.9.png | Bin 0 -> 394 bytes .../abs__spinner_ab_disabled_holo_dark.9.png | Bin 0 -> 381 bytes .../abs__spinner_ab_disabled_holo_light.9.png | Bin 0 -> 381 bytes .../abs__spinner_ab_focused_holo_dark.9.png | Bin 0 -> 680 bytes .../abs__spinner_ab_focused_holo_light.9.png | Bin 0 -> 671 bytes .../abs__spinner_ab_pressed_holo_dark.9.png | Bin 0 -> 609 bytes .../abs__spinner_ab_pressed_holo_light.9.png | Bin 0 -> 602 bytes .../abs__tab_selected_focused_holo.9.png | Bin 0 -> 147 bytes .../abs__tab_selected_holo.9.png | Bin 0 -> 153 bytes .../abs__tab_selected_pressed_holo.9.png | Bin 0 -> 147 bytes .../abs__tab_unselected_pressed_holo.9.png | Bin 0 -> 149 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 14383 bytes .../abs__activated_background_holo_dark.xml | 20 + .../abs__activated_background_holo_light.xml | 20 + .../drawable/abs__btn_cab_done_holo_dark.xml | 24 + .../drawable/abs__btn_cab_done_holo_light.xml | 24 + .../abs__ic_menu_moreoverflow_holo_dark.xml | 18 + .../abs__ic_menu_moreoverflow_holo_light.xml | 18 + .../abs__item_background_holo_dark.xml | 26 + .../abs__item_background_holo_light.xml | 26 + ...lector_background_transition_holo_dark.xml | 20 + ...ector_background_transition_holo_light.xml | 20 + .../drawable/abs__list_selector_holo_dark.xml | 27 + .../abs__list_selector_holo_light.xml | 28 + .../abs__progress_horizontal_holo_dark.xml | 32 + .../abs__progress_horizontal_holo_light.xml | 32 + .../drawable/abs__progress_medium_holo.xml | 34 + .../drawable/abs__spinner_ab_holo_dark.xml | 25 + .../drawable/abs__spinner_ab_holo_light.xml | 25 + .../drawable/abs__tab_indicator_ab_holo.xml | 34 + .../abs__action_mode_close_item.xml | 40 + .../sherlock_spinner_dropdown_item.xml | 26 + .../res/layout-v14/sherlock_spinner_item.xml | 26 + .../layout-xlarge/abs__screen_action_bar.xml | 50 + .../abs__screen_action_bar_overlay.xml | 49 + .../res/layout/abs__action_bar_home.xml | 38 + .../res/layout/abs__action_bar_tab.xml | 7 + .../layout/abs__action_bar_tab_bar_view.xml | 6 + .../res/layout/abs__action_bar_title_item.xml | 50 + .../layout/abs__action_menu_item_layout.xml | 56 + .../res/layout/abs__action_menu_layout.xml | 23 + .../res/layout/abs__action_mode_bar.xml | 24 + .../layout/abs__action_mode_close_item.xml | 31 + .../res/layout/abs__activity_chooser_view.xml | 70 + .../abs__activity_chooser_view_list_item.xml | 53 + .../res/layout/abs__dialog_title_holo.xml | 46 + .../layout/abs__list_menu_item_checkbox.xml | 26 + .../res/layout/abs__list_menu_item_icon.xml | 28 + .../res/layout/abs__list_menu_item_layout.xml | 59 + .../res/layout/abs__list_menu_item_radio.xml | 24 + .../layout/abs__popup_menu_item_layout.xml | 60 + .../res/layout/abs__screen_action_bar.xml | 57 + .../layout/abs__screen_action_bar_overlay.xml | 59 + .../res/layout/abs__screen_simple.xml | 38 + ...abs__screen_simple_overlay_action_mode.xml | 38 + .../ActionBarSherlock/res/layout/main.xml | 12 + .../layout/sherlock_spinner_dropdown_item.xml | 26 + .../res/layout/sherlock_spinner_item.xml | 26 + .../res/values-land/abs__dimens.xml | 33 + .../abs__dimens.xml | 33 + .../abs__dimens.xml | 33 + .../abs__dimens.xml | 33 + .../abs__dimens.xml | 36 + .../res/values-large/abs__dimens.xml | 29 + .../res/values-sw600dp/abs__bools.xml | 19 + .../res/values-sw600dp/abs__dimens.xml | 38 + .../res/values-v11/abs__themes.xml | 12 + .../res/values-v14/abs__styles.xml | 118 + .../res/values-v14/abs__themes.xml | 32 + .../res/values-w360dp/abs__dimens.xml | 22 + .../res/values-w480dp/abs__bools.xml | 22 + .../res/values-w480dp/abs__config.xml | 29 + .../res/values-w500dp/abs__dimens.xml | 22 + .../res/values-w600dp/abs__dimens.xml | 22 + .../res/values-xlarge/abs__dimens.xml | 45 + .../res/values/abs__attrs.xml | 380 +++ .../res/values/abs__bools.xml | 22 + .../res/values/abs__colors.xml | 27 + .../res/values/abs__config.xml | 43 + .../res/values/abs__dimens.xml | 50 + .../ActionBarSherlock/res/values/abs__ids.xml | 26 + .../res/values/abs__strings.xml | 42 + .../res/values/abs__styles.xml | 384 +++ .../res/values/abs__themes.xml | 226 ++ .../ActionBarSherlock/res/values/strings.xml | 7 + .../actionbarsherlock/ActionBarSherlock.java | 777 +++++ .../com/actionbarsherlock/app/ActionBar.java | 947 ++++++ .../app/SherlockActivity.java | 253 ++ .../app/SherlockDialogFragment.java | 76 + .../app/SherlockExpandableListActivity.java | 253 ++ .../app/SherlockFragment.java | 76 + .../app/SherlockFragmentActivity.java | 350 ++ .../app/SherlockListActivity.java | 253 ++ .../app/SherlockListFragment.java | 76 + .../app/SherlockPreferenceActivity.java | 253 ++ .../internal/ActionBarSherlockCompat.java | 1200 +++++++ .../internal/ActionBarSherlockNative.java | 328 ++ .../internal/ResourcesCompat.java | 95 + .../internal/app/ActionBarImpl.java | 1026 ++++++ .../internal/app/ActionBarWrapper.java | 468 +++ .../nineoldandroids/animation/Animator.java | 278 ++ .../animation/AnimatorListenerAdapter.java | 54 + .../animation/AnimatorSet.java | 1111 +++++++ .../animation/FloatEvaluator.java | 42 + .../animation/FloatKeyframeSet.java | 136 + .../animation/IntEvaluator.java | 42 + .../animation/IntKeyframeSet.java | 135 + .../nineoldandroids/animation/Keyframe.java | 361 +++ .../animation/KeyframeSet.java | 227 ++ .../animation/ObjectAnimator.java | 491 +++ .../animation/PropertyValuesHolder.java | 1012 ++++++ .../animation/TypeEvaluator.java | 44 + .../animation/ValueAnimator.java | 1265 ++++++++ .../nineoldandroids/view/NineViewGroup.java | 79 + .../view/animation/AnimatorProxy.java | 205 ++ .../widget/NineFrameLayout.java | 65 + .../widget/NineHorizontalScrollView.java | 41 + .../widget/NineLinearLayout.java | 65 + .../internal/view/ActionProviderWrapper.java | 40 + .../internal/view/StandaloneActionMode.java | 148 + .../view/View_HasStateListenerSupport.java | 6 + .../View_OnAttachStateChangeListener.java | 8 + .../internal/view/menu/ActionMenu.java | 264 ++ .../internal/view/menu/ActionMenuItem.java | 278 ++ .../view/menu/ActionMenuItemView.java | 295 ++ .../view/menu/ActionMenuPresenter.java | 721 +++++ .../internal/view/menu/ActionMenuView.java | 572 ++++ .../internal/view/menu/BaseMenuPresenter.java | 231 ++ .../internal/view/menu/ListMenuItemView.java | 278 ++ .../internal/view/menu/MenuBuilder.java | 1335 ++++++++ .../internal/view/menu/MenuItemImpl.java | 647 ++++ .../internal/view/menu/MenuItemMule.java | 234 ++ .../internal/view/menu/MenuItemWrapper.java | 292 ++ .../internal/view/menu/MenuMule.java | 151 + .../internal/view/menu/MenuPopupHelper.java | 376 +++ .../internal/view/menu/MenuPresenter.java | 148 + .../internal/view/menu/MenuView.java | 120 + .../internal/view/menu/MenuWrapper.java | 180 ++ .../internal/view/menu/SubMenuBuilder.java | 134 + .../internal/view/menu/SubMenuWrapper.java | 72 + .../internal/widget/AbsActionBarView.java | 291 ++ .../internal/widget/ActionBarContainer.java | 245 ++ .../internal/widget/ActionBarContextView.java | 518 +++ .../internal/widget/ActionBarView.java | 1548 +++++++++ .../internal/widget/CapitalizingButton.java | 40 + .../internal/widget/CapitalizingTextView.java | 44 + .../widget/FakeDialogPhoneWindow.java | 64 + .../internal/widget/IcsAbsSpinner.java | 479 +++ .../internal/widget/IcsAdapterView.java | 1160 +++++++ .../internal/widget/IcsLinearLayout.java | 272 ++ .../internal/widget/IcsListPopupWindow.java | 644 ++++ .../internal/widget/IcsProgressBar.java | 1193 +++++++ .../internal/widget/IcsSpinner.java | 703 ++++ .../internal/widget/IcsView.java | 21 + .../widget/ScrollingTabContainerView.java | 545 ++++ .../actionbarsherlock/view/ActionMode.java | 224 ++ .../view/ActionProvider.java | 170 + .../view/CollapsibleActionView.java | 39 + .../src/com/actionbarsherlock/view/Menu.java | 447 +++ .../actionbarsherlock/view/MenuInflater.java | 472 +++ .../com/actionbarsherlock/view/MenuItem.java | 598 ++++ .../com/actionbarsherlock/view/SubMenu.java | 110 + .../com/actionbarsherlock/view/Window.java | 65 + .../widget/ActivityChooserModel.java | 1131 +++++++ .../widget/ActivityChooserView.java | 818 +++++ .../widget/ShareActionProvider.java | 316 ++ 797 files changed, 37087 insertions(+) create mode 100644 android-libraries/ActionBarSherlock/.classpath create mode 100644 android-libraries/ActionBarSherlock/.project create mode 100644 android-libraries/ActionBarSherlock/AndroidManifest.xml create mode 100644 android-libraries/ActionBarSherlock/bin/actionbarsherlock.jar create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$Implementation.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnActionModeFinishedListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnActionModeStartedListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnCreateOptionsMenuListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnCreatePanelMenuListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnMenuItemSelectedListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnOptionsItemSelectedListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnPrepareOptionsMenuListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnPreparePanelListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/BuildConfig.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$attr.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$bool.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$color.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$dimen.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$drawable.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$id.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$integer.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$layout.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$string.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$style.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$styleable.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/ActionBar$LayoutParams.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/ActionBar$OnMenuVisibilityListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/ActionBar$OnNavigationListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/ActionBar$Tab.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/ActionBar$TabListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/ActionBar.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/SherlockActivity.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/SherlockDialogFragment.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/SherlockExpandableListActivity.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/SherlockFragment.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/SherlockFragmentActivity.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/SherlockListActivity.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/SherlockListFragment.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/SherlockPreferenceActivity.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/ActionBarSherlockCompat$1.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/ActionBarSherlockCompat$ActionModeCallbackWrapper.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/ActionBarSherlockCompat.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/ActionBarSherlockNative$ActionModeCallbackWrapper.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/ActionBarSherlockNative$ActionModeWrapper.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/ActionBarSherlockNative.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/ResourcesCompat.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/app/ActionBarImpl$1.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/app/ActionBarImpl$2.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/app/ActionBarImpl$ActionModeImpl.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/app/ActionBarImpl$TabImpl.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/app/ActionBarImpl.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/app/ActionBarWrapper$TabWrapper.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/app/ActionBarWrapper.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/Animator$AnimatorListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/Animator.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorListenerAdapter.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorSet$1.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorSet$AnimatorSetListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorSet$Builder.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorSet$Dependency.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorSet$DependencyListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorSet$Node.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorSet.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/FloatEvaluator.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/FloatKeyframeSet.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/IntEvaluator.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/IntKeyframeSet.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/Keyframe$FloatKeyframe.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/Keyframe$IntKeyframe.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/Keyframe$ObjectKeyframe.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/Keyframe.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/KeyframeSet.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ObjectAnimator.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/PropertyValuesHolder$FloatPropertyValuesHolder.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/PropertyValuesHolder$IntPropertyValuesHolder.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/PropertyValuesHolder.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/TypeEvaluator.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator$1.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator$2.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator$3.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator$4.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator$5.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator$AnimationHandler.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator$AnimatorUpdateListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/view/NineViewGroup.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/view/animation/AnimatorProxy.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/widget/NineFrameLayout.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/widget/NineHorizontalScrollView.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/widget/NineLinearLayout.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/ActionProviderWrapper.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/StandaloneActionMode.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/View_HasStateListenerSupport.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/View_OnAttachStateChangeListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenu.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuItem.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$ActionButtonSubmenu.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$HasPermanentMenuKey.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$OpenOverflowRunnable.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$OverflowMenuButton.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$OverflowPopup.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$PopupPresenterCallback.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$SavedState$1.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$SavedState.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuView$ActionMenuChildView.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuView$LayoutParams.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuView.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/BaseMenuPresenter.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ListMenuItemView.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuBuilder$Callback.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuBuilder$ItemInvoker.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuBuilder.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuItemImpl.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuItemMule.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuItemWrapper$1.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuItemWrapper.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuMule.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuPopupHelper$ExpandedIndexObserver.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuPopupHelper$MenuAdapter.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuPopupHelper.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuPresenter$Callback.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuPresenter.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuView$ItemView.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuView.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuWrapper.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/SubMenuBuilder.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/SubMenuWrapper.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/AbsActionBarView$1.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/AbsActionBarView$VisibilityAnimListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/AbsActionBarView.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarContainer.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarContextView$1.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarContextView.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView$1.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView$2.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView$3.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView$ExpandedActionViewMenuPresenter.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView$HomeView.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView$SavedState$1.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView$SavedState.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/CapitalizingButton.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/CapitalizingTextView.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/FakeDialogPhoneWindow.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAbsSpinner$RecycleBin.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAbsSpinner$SavedState$1.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAbsSpinner$SavedState.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAbsSpinner.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAdapterView$AdapterContextMenuInfo.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAdapterView$AdapterDataSetObserver.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAdapterView$OnItemLongClickListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAdapterView$OnItemSelectedListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAdapterView$SelectionNotifier.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAdapterView.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsLinearLayout.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsListPopupWindow$1.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsListPopupWindow$DropDownListView.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsListPopupWindow$ListSelectorHider.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsListPopupWindow$PopupDataSetObserver.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsListPopupWindow$PopupScrollListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsListPopupWindow$PopupTouchInterceptor.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsListPopupWindow$ResizePopupRunnable.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsListPopupWindow.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsProgressBar$AccessibilityEventSender.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsProgressBar$RefreshProgressRunnable.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsProgressBar$SavedState$1.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsProgressBar$SavedState.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsProgressBar.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsSpinner$DropDownAdapter.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsSpinner$DropdownPopup$1.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsSpinner$DropdownPopup.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsSpinner$SpinnerPopup.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsSpinner.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsView.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ScrollingTabContainerView$1.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ScrollingTabContainerView$TabAdapter.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ScrollingTabContainerView$TabClickListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ScrollingTabContainerView$TabView.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ScrollingTabContainerView$VisibilityAnimListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ScrollingTabContainerView.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/ActionMode$Callback.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/ActionMode.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/ActionProvider$SubUiVisibilityListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/ActionProvider.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/CollapsibleActionView.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/Menu.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/MenuInflater$InflatedOnMenuItemClickListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/MenuInflater$MenuState.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/MenuInflater.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/MenuItem$OnActionExpandListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/MenuItem$OnMenuItemClickListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/MenuItem.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/SubMenu.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/Window$Callback.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/Window.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$ActivityChooserModelClient.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$ActivityResolveInfo.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$ActivitySorter.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$DefaultSorter.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$HistoricalRecord.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$HistoryLoader$1.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$HistoryLoader.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$HistoryPersister.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$OnChooseActivityListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$SerialExecutor$1.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$SerialExecutor.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserView$1.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserView$2.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserView$3.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserView$ActivityChooserViewAdapter.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserView$Callbacks.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserView$SetActivated.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserView.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ShareActionProvider$OnShareTargetSelectedListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ShareActionProvider$ShareAcitivityChooserModelPolicy.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ShareActionProvider$ShareMenuItemOnMenuItemClickListener.class create mode 100644 android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ShareActionProvider.class create mode 100644 android-libraries/ActionBarSherlock/bin/jarlist.cache create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_bottom_solid_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_bottom_solid_inverse_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_bottom_solid_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_bottom_transparent_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_bottom_transparent_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_share_pack_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_share_pack_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_solid_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_solid_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_solid_shadow_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_stacked_solid_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_stacked_solid_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_stacked_transparent_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_stacked_transparent_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_transparent_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_transparent_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__btn_cab_done_default_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__btn_cab_done_default_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__btn_cab_done_focused_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__btn_cab_done_focused_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__btn_cab_done_pressed_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__btn_cab_done_pressed_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__cab_background_bottom_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__cab_background_bottom_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__cab_background_top_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__cab_background_top_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__dialog_full_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__dialog_full_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ic_ab_back_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ic_ab_back_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ic_cab_done_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ic_cab_done_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ic_menu_moreoverflow_normal_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ic_menu_moreoverflow_normal_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ic_menu_share_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ic_menu_share_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__list_activated_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__list_divider_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__list_divider_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__list_focused_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__list_longpressed_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__list_pressed_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__list_pressed_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__list_selector_disabled_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__list_selector_disabled_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__menu_dropdown_panel_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__menu_dropdown_panel_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__progress_bg_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__progress_bg_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__progress_primary_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__progress_primary_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__progress_secondary_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__progress_secondary_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_48_inner_holo.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_48_outer_holo.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_ab_default_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_ab_default_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_ab_disabled_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_ab_disabled_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_ab_focused_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_ab_focused_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_ab_pressed_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_ab_pressed_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__tab_selected_focused_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__tab_selected_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__tab_selected_pressed_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__tab_unselected_pressed_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/ic_launcher.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-ldpi/ic_launcher.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_bottom_solid_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_bottom_solid_inverse_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_bottom_solid_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_bottom_transparent_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_bottom_transparent_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_share_pack_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_share_pack_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_solid_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_solid_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_solid_shadow_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_stacked_solid_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_stacked_solid_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_stacked_transparent_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_stacked_transparent_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_transparent_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_transparent_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__btn_cab_done_default_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__btn_cab_done_default_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__btn_cab_done_focused_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__btn_cab_done_focused_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__btn_cab_done_pressed_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__btn_cab_done_pressed_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__cab_background_bottom_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__cab_background_bottom_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__cab_background_top_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__cab_background_top_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__dialog_full_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__dialog_full_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ic_ab_back_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ic_ab_back_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ic_cab_done_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ic_cab_done_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ic_menu_moreoverflow_normal_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ic_menu_moreoverflow_normal_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ic_menu_share_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ic_menu_share_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_activated_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_divider_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_divider_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_focused_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_longpressed_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_pressed_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_pressed_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_selector_disabled_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_selector_disabled_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__menu_dropdown_panel_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__menu_dropdown_panel_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__progress_bg_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__progress_bg_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__progress_primary_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__progress_primary_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__progress_secondary_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__progress_secondary_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_48_inner_holo.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_48_outer_holo.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_ab_default_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_ab_default_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_ab_disabled_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_ab_disabled_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_ab_focused_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_ab_focused_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_ab_pressed_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_ab_pressed_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__tab_selected_focused_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__tab_selected_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__tab_selected_pressed_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__tab_unselected_pressed_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/ic_launcher.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_bottom_solid_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_bottom_solid_inverse_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_bottom_solid_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_bottom_transparent_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_bottom_transparent_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_share_pack_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_share_pack_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_solid_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_solid_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_solid_shadow_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_stacked_solid_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_stacked_solid_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_stacked_transparent_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_stacked_transparent_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_transparent_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_transparent_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__btn_cab_done_default_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__btn_cab_done_default_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__btn_cab_done_focused_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__btn_cab_done_focused_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__btn_cab_done_pressed_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__btn_cab_done_pressed_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__cab_background_bottom_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__cab_background_bottom_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__cab_background_top_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__cab_background_top_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__dialog_full_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__dialog_full_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ic_ab_back_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ic_ab_back_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ic_cab_done_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ic_cab_done_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ic_menu_moreoverflow_normal_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ic_menu_moreoverflow_normal_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ic_menu_share_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ic_menu_share_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__list_activated_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__list_divider_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__list_divider_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__list_focused_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__list_longpressed_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__list_pressed_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__list_pressed_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__list_selector_disabled_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__list_selector_disabled_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__menu_dropdown_panel_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__menu_dropdown_panel_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__progress_bg_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__progress_bg_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__progress_primary_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__progress_primary_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__progress_secondary_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__progress_secondary_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_48_inner_holo.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_48_outer_holo.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_ab_default_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_ab_default_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_ab_disabled_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_ab_disabled_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_ab_focused_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_ab_focused_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_ab_pressed_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_ab_pressed_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__tab_selected_focused_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__tab_selected_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__tab_selected_pressed_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__tab_unselected_pressed_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/ic_launcher.png create mode 100644 android-libraries/ActionBarSherlock/gen/com/actionbarsherlock/BuildConfig.java create mode 100644 android-libraries/ActionBarSherlock/gen/com/actionbarsherlock/R.java create mode 100644 android-libraries/ActionBarSherlock/libs/android-support-v4.jar create mode 100644 android-libraries/ActionBarSherlock/proguard-project.txt create mode 100644 android-libraries/ActionBarSherlock/project.properties create mode 100644 android-libraries/ActionBarSherlock/res/color/abs__primary_text_disable_only_holo_dark.xml create mode 100644 android-libraries/ActionBarSherlock/res/color/abs__primary_text_disable_only_holo_light.xml create mode 100644 android-libraries/ActionBarSherlock/res/color/abs__primary_text_holo_dark.xml create mode 100644 android-libraries/ActionBarSherlock/res/color/abs__primary_text_holo_light.xml create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_bottom_solid_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_bottom_solid_inverse_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_bottom_solid_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_bottom_transparent_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_bottom_transparent_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_share_pack_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_share_pack_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_solid_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_solid_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_solid_shadow_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_stacked_solid_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_stacked_solid_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_stacked_transparent_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_stacked_transparent_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_transparent_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_transparent_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__btn_cab_done_default_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__btn_cab_done_default_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__btn_cab_done_focused_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__btn_cab_done_focused_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__btn_cab_done_pressed_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__btn_cab_done_pressed_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__cab_background_bottom_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__cab_background_bottom_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__cab_background_top_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__cab_background_top_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__dialog_full_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__dialog_full_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_ab_back_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_ab_back_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_cab_done_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_cab_done_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_menu_moreoverflow_normal_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_menu_moreoverflow_normal_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_menu_share_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_menu_share_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_activated_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_divider_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_divider_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_focused_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_longpressed_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_pressed_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_pressed_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_selector_disabled_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_selector_disabled_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__menu_dropdown_panel_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__menu_dropdown_panel_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__progress_bg_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__progress_bg_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__progress_primary_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__progress_primary_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__progress_secondary_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__progress_secondary_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_48_inner_holo.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_48_outer_holo.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_default_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_default_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_disabled_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_disabled_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_focused_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_focused_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_pressed_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_pressed_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__tab_selected_focused_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__tab_selected_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__tab_selected_pressed_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__tab_unselected_pressed_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-hdpi/ic_launcher.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-ldpi/ic_launcher.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_bottom_solid_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_bottom_solid_inverse_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_bottom_solid_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_bottom_transparent_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_bottom_transparent_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_share_pack_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_share_pack_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_solid_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_solid_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_solid_shadow_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_stacked_solid_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_stacked_solid_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_stacked_transparent_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_stacked_transparent_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_transparent_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_transparent_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__btn_cab_done_default_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__btn_cab_done_default_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__btn_cab_done_focused_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__btn_cab_done_focused_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__btn_cab_done_pressed_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__btn_cab_done_pressed_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__cab_background_bottom_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__cab_background_bottom_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__cab_background_top_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__cab_background_top_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__dialog_full_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__dialog_full_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_ab_back_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_ab_back_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_cab_done_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_cab_done_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_menu_moreoverflow_normal_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_menu_moreoverflow_normal_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_menu_share_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_menu_share_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_activated_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_divider_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_divider_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_focused_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_longpressed_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_pressed_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_pressed_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_selector_disabled_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_selector_disabled_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__menu_dropdown_panel_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__menu_dropdown_panel_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__progress_bg_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__progress_bg_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__progress_primary_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__progress_primary_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__progress_secondary_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__progress_secondary_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__spinner_48_inner_holo.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__spinner_48_outer_holo.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__spinner_ab_default_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__spinner_ab_default_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__spinner_ab_disabled_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__spinner_ab_disabled_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__spinner_ab_focused_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__spinner_ab_focused_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__spinner_ab_pressed_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__spinner_ab_pressed_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__tab_selected_focused_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__tab_selected_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__tab_selected_pressed_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__tab_unselected_pressed_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-mdpi/ic_launcher.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-v11/abs__progress_medium_holo.xml create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_bottom_solid_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_bottom_solid_inverse_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_bottom_solid_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_bottom_transparent_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_bottom_transparent_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_share_pack_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_share_pack_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_solid_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_solid_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_solid_shadow_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_stacked_solid_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_stacked_solid_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_stacked_transparent_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_stacked_transparent_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_transparent_dark_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_transparent_light_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__btn_cab_done_default_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__btn_cab_done_default_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__btn_cab_done_focused_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__btn_cab_done_focused_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__btn_cab_done_pressed_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__btn_cab_done_pressed_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__cab_background_bottom_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__cab_background_bottom_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__cab_background_top_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__cab_background_top_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__dialog_full_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__dialog_full_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_ab_back_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_ab_back_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_cab_done_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_cab_done_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_menu_moreoverflow_normal_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_menu_moreoverflow_normal_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_menu_share_holo_dark.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_menu_share_holo_light.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__list_activated_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__list_divider_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__list_divider_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__list_focused_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__list_longpressed_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__list_pressed_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__list_pressed_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__list_selector_disabled_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__list_selector_disabled_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__menu_dropdown_panel_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__menu_dropdown_panel_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__progress_bg_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__progress_bg_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__progress_primary_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__progress_primary_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__progress_secondary_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__progress_secondary_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_48_inner_holo.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_48_outer_holo.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_default_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_default_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_disabled_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_disabled_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_focused_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_focused_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_pressed_holo_dark.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_pressed_holo_light.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__tab_selected_focused_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__tab_selected_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__tab_selected_pressed_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__tab_unselected_pressed_holo.9.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable-xhdpi/ic_launcher.png create mode 100644 android-libraries/ActionBarSherlock/res/drawable/abs__activated_background_holo_dark.xml create mode 100644 android-libraries/ActionBarSherlock/res/drawable/abs__activated_background_holo_light.xml create mode 100644 android-libraries/ActionBarSherlock/res/drawable/abs__btn_cab_done_holo_dark.xml create mode 100644 android-libraries/ActionBarSherlock/res/drawable/abs__btn_cab_done_holo_light.xml create mode 100644 android-libraries/ActionBarSherlock/res/drawable/abs__ic_menu_moreoverflow_holo_dark.xml create mode 100644 android-libraries/ActionBarSherlock/res/drawable/abs__ic_menu_moreoverflow_holo_light.xml create mode 100644 android-libraries/ActionBarSherlock/res/drawable/abs__item_background_holo_dark.xml create mode 100644 android-libraries/ActionBarSherlock/res/drawable/abs__item_background_holo_light.xml create mode 100644 android-libraries/ActionBarSherlock/res/drawable/abs__list_selector_background_transition_holo_dark.xml create mode 100644 android-libraries/ActionBarSherlock/res/drawable/abs__list_selector_background_transition_holo_light.xml create mode 100644 android-libraries/ActionBarSherlock/res/drawable/abs__list_selector_holo_dark.xml create mode 100644 android-libraries/ActionBarSherlock/res/drawable/abs__list_selector_holo_light.xml create mode 100644 android-libraries/ActionBarSherlock/res/drawable/abs__progress_horizontal_holo_dark.xml create mode 100644 android-libraries/ActionBarSherlock/res/drawable/abs__progress_horizontal_holo_light.xml create mode 100644 android-libraries/ActionBarSherlock/res/drawable/abs__progress_medium_holo.xml create mode 100644 android-libraries/ActionBarSherlock/res/drawable/abs__spinner_ab_holo_dark.xml create mode 100644 android-libraries/ActionBarSherlock/res/drawable/abs__spinner_ab_holo_light.xml create mode 100644 android-libraries/ActionBarSherlock/res/drawable/abs__tab_indicator_ab_holo.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout-large/abs__action_mode_close_item.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout-v14/sherlock_spinner_dropdown_item.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout-v14/sherlock_spinner_item.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout-xlarge/abs__screen_action_bar.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout-xlarge/abs__screen_action_bar_overlay.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__action_bar_home.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__action_bar_tab.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__action_bar_tab_bar_view.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__action_bar_title_item.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__action_menu_item_layout.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__action_menu_layout.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__action_mode_bar.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__action_mode_close_item.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__activity_chooser_view.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__activity_chooser_view_list_item.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__dialog_title_holo.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__list_menu_item_checkbox.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__list_menu_item_icon.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__list_menu_item_layout.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__list_menu_item_radio.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__popup_menu_item_layout.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__screen_action_bar.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__screen_action_bar_overlay.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__screen_simple.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/abs__screen_simple_overlay_action_mode.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/main.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/sherlock_spinner_dropdown_item.xml create mode 100644 android-libraries/ActionBarSherlock/res/layout/sherlock_spinner_item.xml create mode 100644 android-libraries/ActionBarSherlock/res/values-land/abs__dimens.xml create mode 100644 android-libraries/ActionBarSherlock/res/values-large-hdpi-1024x600/abs__dimens.xml create mode 100644 android-libraries/ActionBarSherlock/res/values-large-land-hdpi-1024x600/abs__dimens.xml create mode 100644 android-libraries/ActionBarSherlock/res/values-large-land-mdpi-1024x600/abs__dimens.xml create mode 100644 android-libraries/ActionBarSherlock/res/values-large-mdpi-1024x600/abs__dimens.xml create mode 100644 android-libraries/ActionBarSherlock/res/values-large/abs__dimens.xml create mode 100644 android-libraries/ActionBarSherlock/res/values-sw600dp/abs__bools.xml create mode 100644 android-libraries/ActionBarSherlock/res/values-sw600dp/abs__dimens.xml create mode 100644 android-libraries/ActionBarSherlock/res/values-v11/abs__themes.xml create mode 100644 android-libraries/ActionBarSherlock/res/values-v14/abs__styles.xml create mode 100644 android-libraries/ActionBarSherlock/res/values-v14/abs__themes.xml create mode 100644 android-libraries/ActionBarSherlock/res/values-w360dp/abs__dimens.xml create mode 100644 android-libraries/ActionBarSherlock/res/values-w480dp/abs__bools.xml create mode 100644 android-libraries/ActionBarSherlock/res/values-w480dp/abs__config.xml create mode 100644 android-libraries/ActionBarSherlock/res/values-w500dp/abs__dimens.xml create mode 100644 android-libraries/ActionBarSherlock/res/values-w600dp/abs__dimens.xml create mode 100644 android-libraries/ActionBarSherlock/res/values-xlarge/abs__dimens.xml create mode 100644 android-libraries/ActionBarSherlock/res/values/abs__attrs.xml create mode 100644 android-libraries/ActionBarSherlock/res/values/abs__bools.xml create mode 100644 android-libraries/ActionBarSherlock/res/values/abs__colors.xml create mode 100644 android-libraries/ActionBarSherlock/res/values/abs__config.xml create mode 100644 android-libraries/ActionBarSherlock/res/values/abs__dimens.xml create mode 100644 android-libraries/ActionBarSherlock/res/values/abs__ids.xml create mode 100644 android-libraries/ActionBarSherlock/res/values/abs__strings.xml create mode 100644 android-libraries/ActionBarSherlock/res/values/abs__styles.xml create mode 100644 android-libraries/ActionBarSherlock/res/values/abs__themes.xml create mode 100644 android-libraries/ActionBarSherlock/res/values/strings.xml create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/ActionBarSherlock.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/ActionBar.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockActivity.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockDialogFragment.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockExpandableListActivity.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockFragment.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockFragmentActivity.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockListActivity.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockListFragment.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockPreferenceActivity.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ActionBarSherlockCompat.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ActionBarSherlockNative.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ResourcesCompat.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/app/ActionBarImpl.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/app/ActionBarWrapper.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/Animator.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorListenerAdapter.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorSet.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/FloatEvaluator.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/FloatKeyframeSet.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/IntEvaluator.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/IntKeyframeSet.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/Keyframe.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/KeyframeSet.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/ObjectAnimator.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/PropertyValuesHolder.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/TypeEvaluator.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/view/NineViewGroup.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/view/animation/AnimatorProxy.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/widget/NineFrameLayout.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/widget/NineHorizontalScrollView.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/widget/NineLinearLayout.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/ActionProviderWrapper.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/StandaloneActionMode.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/View_HasStateListenerSupport.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/View_OnAttachStateChangeListener.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenu.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuItem.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuView.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/BaseMenuPresenter.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ListMenuItemView.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuBuilder.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuItemImpl.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuItemMule.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuItemWrapper.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuMule.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuPopupHelper.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuPresenter.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuView.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuWrapper.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/SubMenuBuilder.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/SubMenuWrapper.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/AbsActionBarView.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarContainer.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarContextView.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarView.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/CapitalizingButton.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/CapitalizingTextView.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/FakeDialogPhoneWindow.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsAbsSpinner.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsAdapterView.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsLinearLayout.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsListPopupWindow.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsProgressBar.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsSpinner.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsView.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ScrollingTabContainerView.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/ActionMode.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/ActionProvider.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/CollapsibleActionView.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/Menu.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/MenuInflater.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/MenuItem.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/SubMenu.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/Window.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/ActivityChooserModel.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/ActivityChooserView.java create mode 100644 android-libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/ShareActionProvider.java diff --git a/android-libraries/ActionBarSherlock/.classpath b/android-libraries/ActionBarSherlock/.classpath new file mode 100644 index 00000000..8531be10 --- /dev/null +++ b/android-libraries/ActionBarSherlock/.classpath @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/.project b/android-libraries/ActionBarSherlock/.project new file mode 100644 index 00000000..cbcf5a22 --- /dev/null +++ b/android-libraries/ActionBarSherlock/.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/android-libraries/ActionBarSherlock/AndroidManifest.xml b/android-libraries/ActionBarSherlock/AndroidManifest.xml new file mode 100644 index 00000000..36ad7944 --- /dev/null +++ b/android-libraries/ActionBarSherlock/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/android-libraries/ActionBarSherlock/bin/actionbarsherlock.jar b/android-libraries/ActionBarSherlock/bin/actionbarsherlock.jar new file mode 100644 index 0000000000000000000000000000000000000000..1bddf7eb9051d07c58b07affcddd177acd363ffd GIT binary patch literal 397940 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

gM=6mj_Dor>aN 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%0A1<>DH#OF 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 PHeX^O!>M2_Ur4_LcJ{Q9 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnActionModeFinishedListener.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnActionModeFinishedListener.class new file mode 100644 index 0000000000000000000000000000000000000000..ba2cfcab58c286cf16afe2beea9babcb75442c65 GIT binary patch literal 349 zcmX^0Z`VEs1_mPrUUmj1Mh2JU{9OIS%3!VjwUyp-;)HR$ zU8dHtViV$p(A$fXh%=#f@p`jo=?Jg7JVW?+Usf|uDW41Q1M)fgCbSd%Yb4Lpj0tZg zSK|ki5G|CqG0TLtY(sPi!)ion0iplouz*0Q`)>i{Pi!FYRSjVtn`rsm_8s0PqM&sL D$W~|7 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnCreateOptionsMenuListener.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnCreateOptionsMenuListener.class new file mode 100644 index 0000000000000000000000000000000000000000..d0ffc34a992f59391eee2811bf302359de6949c0 GIT binary patch literal 340 zcmaJ-O>4qH5Pg%{q=^=ULN8te)r$*Wd#ZtgV9CLow{;n6V%(M8X#blBe}F%#bR*sp zdYKs>Gw)-rzvl~p8J;5qgiM*ekg6_>-bm}VY%8O7;^T(QrCr^TG}oDBS#y49cHI~2 znW7TO!gD(M`%2z|m^H+hSIF#0D_NFY4;KLO;!JtFi|faq4A5c{6^4Q~^JF#ZD# CR%O-z literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnCreatePanelMenuListener.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnCreatePanelMenuListener.class new file mode 100644 index 0000000000000000000000000000000000000000..7bf337c5bbc3dcb35f89507a0a8a13b3eb5436b5 GIT binary patch literal 335 zcmZ`#yJ|u~5Iy7L-uMF31ky*MjSIF`Mi2zWfL*$A8RFG-7k01uZx;CgKT2H1Drz$` z9A?gAj;F&PfF2qt3WR}n8^t=$oL#UFOYz3(wHjQJFZS~r@-eeRFPzIaTQO6y+esF3 zvEoyd2+bAmSQ)mzYPML3&IzyX{{^Ad9#0+%?lRe{3vIviL#WQ()@vDMMhI_rX1W(O zLVawb{?Kp;5>nI%pO4A!2ng>_^CSd9F}?_(n5>K>P6edb`hrUA)wmH&qMlUF6$E1@ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnMenuItemSelectedListener.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnMenuItemSelectedListener.class new file mode 100644 index 0000000000000000000000000000000000000000..03609bbbdace7622a58ae9ebcb35b1e7190fbeb0 GIT binary patch literal 342 zcmZ`#yKcfj5S%5!#yq4b1qC%yLc>XEsQ@XGB_axUbjM|t*qraAI|Khlkq^j6pehwv$Yg1@>g<0+*{x^$6%hLvbj5kw>;&=uFETNVormfdLgApb_e2k=pdJ(P|U zjctv`p0O|2(;2`B-53?ZRN1|dD$lH0O6NE1v{gGXz9V1KrT@rBVv^s2Yz~FW=irCXO6|cZ{?0TL z-X44n3sFL6W`d20mfo|E(I)iD1s)a<-k+Wp5eU`rF@VC6bwr`6Ail>2njyCWBN#;| GYTf`RbZOiG literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnPrepareOptionsMenuListener.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnPrepareOptionsMenuListener.class new file mode 100644 index 0000000000000000000000000000000000000000..b9704c8e1086d0f8cf9a70dd344f842269a486d8 GIT binary patch literal 343 zcmaJ-O>4qH5PjoEqBepD@zi5LdvT%Ho@_-BED>_+ZCwV9O?Sg?wEwLKe}F$q+=w?r zFEhhq=6%fh@^=F8ihhU&VXn-NkgCj#-bm|qY;&W&#q5T>OPk)2IMHj%g|wU$)w26! zeOP6#WX(22i!j*BqZGN+Taj$`tV+Vr)Ep7w$*NxUnDMWuh~Hkm2))!Ctl~wMGhy`L zXj_-Qv>0xcF^^`=Qq4hL_zlo DzTam` literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnPreparePanelListener.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/ActionBarSherlock$OnPreparePanelListener.class new file mode 100644 index 0000000000000000000000000000000000000000..4e0224284d50b01de69d61b812fe582e0ee557c0 GIT binary patch literal 345 zcmZut%Sr=55Uh^6Yhn~neu1D~GT=!F1XK_LD+vTVcIB}c_Gn@Et9{d15N^BP| zlD%{{MNyCb`u_L?aE;><9m2@QH^a7eG0ZvT7fC+aS99AScbsN_$oV8pldL((l!N%n zr&i4ofqcuf*1bllYHLxVaox92P0Mh1oiJH%~f-Rl9pbc$BaiUOf|f zv$#oC9-J4#*-o;-uREbX4w~oQbIy`W91$+s#dic$w7pzGAnfV00MeQVDD>)}Y~~@l Mx_ipdgyf4LcbM_SkQI-_LRU1k>6x`=yw{lt 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$attr.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$attr.class new file mode 100644 index 0000000000000000000000000000000000000000..79d19d6deea615987ffff6f6a7ad1992eacfec43 GIT binary patch literal 4798 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$dimen.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$dimen.class new file mode 100644 index 0000000000000000000000000000000000000000..1423fa8c888f57571dbc1aae4599455bff620a16 GIT binary patch literal 1201 zcmaKrOHUL*6opUKFf+_h3O4vaUdl^AVFVRa9zH-45~2wjbl2&gX=Vz0x=D8r8aKK& zap%IsjeA$76HQq71N>3OTU7%pX6!|u{<`kHb?a2skDmwM0nA}N56&=94(lbSoX9Y6 zohYt(ksp?ym$pVLvhD?Wv@vw;I{Qw^cYQsFpvo|QJT7jyiA;RYcEcnI>vr9Vsxn|0ZW)+( zFB3bKuRMm4)h%8=(V#{GyDkI!g{&mCBL{q1ja`wBA69Ks;?RLU zolh&?kyU#y@^;pA)KimgMw^L8WvRX0Fk)ymDg!lo_R#l#nrdGv`!bNp3PWaMa+{%T zHLQ4<*Lko4C{ZAboIZ+^u%#}+F5Heq;s?F zL{f3{XKqO^xQGmv1s2gwi%x1XW*FN1@6ldlC_WAwQQ2FUs(Nl~MxAp8u@MAbwCX!? z?8SMkk#8*uF=X{E!7TNip-ZJKBZuj$psdwOo@ymCwUUck$v&;*n^rPRD>`mMnfL)OI8MA7F_;!);vw)C~FGY^_A9n#)do!_x05a_VO@MVJ7r;EpbESHJJ!K50>>ui^oE Fe*rIQ4@Uq1 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$drawable.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$drawable.class new file mode 100644 index 0000000000000000000000000000000000000000..d1d77adbe346e93fa488dfea3346230c861a6a6f GIT binary patch literal 6153 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 S+5cal4XkzUa@t5O81x@u2t_IY literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$id.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$id.class new file mode 100644 index 0000000000000000000000000000000000000000..cb66e602ce1e8aba4e56840325e65693f3e9677c GIT binary patch literal 2401 zcmZ{m*>@C06vn?!B{NAVNGP(C1V{peErGB@Tp)-bVUbP6W$fu`G7U4+vAZV;D1x}) zf(tIV;DRVFxFDA2c=Ul6ee#d;c}FQ0HdjOvcX1&?E=W zb_cC@jAp#Bl(<33r+CYqvACQ~f~4R(XuLBtIo^EhxLL}dNbF{}EmrhP!9O*Q@lbL)5LO;ge3=EH{xSKaxCNJ zLyAV3vA`ea@@Z!W)A>tY-uI4X!wCn{vMI@g+Zl8IVYggJ_*8kVsV!^@{=}$T%1uQB zKfaMd4NuR9MLJ9S9MEYwsO9mX=#EgJ{w8dmOnn9q6@oa)1c_gC(8L3yQ8+?J7H7O5 z^2!C%TzlR(0{Jisj+@pNrZ$P(To6vx8B;v*%2b%`Y&=>BY*}H+9=NrS>E~1~HrL6< z&*VH9woLUk&12}Cu8HZHi@)V(P_K!Ivg%1&yZgH$Puiku!LGd@&~laT7G zHejdKn8*Frf9b@{+G*)>><@<{REZpq+|ip2tRD0VK`BV?bs%~d9duARMEi)7mFTL0 zg8_*uqzuk8xLP7@ai+m_64eQ`aEvDj_!UWreEX%?p&+#(?@E-?6@#B_`E z4L&3>!(xNMof35x8x8J}sJGZ@aG%6Xiya0JN+^ph1|O4{WwFWN6A}#;YYk>38ZEXN z%t|y_Y&PgiG+R^#^Aar$w>Zb(xI~A=9)rgv zIxWsJctT>1#n}c=NzAp_Ztz8kc^0P`d_|(mVvWJqB)To844#$fu~=d7ZHf679fR*m zEU;K@@B@j37OMM&iCyUN9^ zAMH2hcA$ns&n+BuqrmXwU}}(ESPOygCB8);IWfrxG2J1tSU$BxPSjh>jWC2#{Ju5YxmAcJJZ6>Xtt6&-W z=p6e2=M<^=`&%v7SfN&GtWs+<)~fXy8`Pl2J?cJ<`_*QRA@zX9R<%uIyV{{KtafSa zRu60JRr@s#s7Ev&RfjYlS5Im@rJmMsm8X$Yhc!l2pm9VMG>R(J7*&x*tjZc=YC_|f zdRF5(^}NPO^@7G}^^(TR>Ws##>UE7b)SDV_sdqHasrNMASLZc8R3B@6qCVC5Onsqo zQC-sb>Ka#fnLaPk>j2S+D$#^m(TqCLf(FrwR?&t|F&o{Y9lfFh%S0yz#2l;@b1^99 zVUy^>R?&?eq6d4#d>jx9a7ZjfM)V>l79kLeQ4&iKi=~(l%Wy*U;k4+-8L=E^#R{Ag z12`{M;(}O(i()k{i#50+*5ayIhu_3{{2?~ry4Z-nL<7FzY^eq2C9>V1j?lj`G+wp% jcYJrVoRk@yoFeTPa0Nf`0zdNSPxzU%mZx9EHMIT*2-oTz literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$integer.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$integer.class new file mode 100644 index 0000000000000000000000000000000000000000..2a1eb05fde146a6e9d7913bddd29c6d19d999dc1 GIT binary patch literal 478 zcmah_O-sW-6r63^B*tiK{iyXKf(PxvpjT@z1))$Bs`MH*acQ@v8`vb`&EF&*1P}fI zf0Xz(4R{h4_RZU2XZFp0eSdrcxWIvf8pC0nE(0FtGF1`R*<9!(jUR)_u~fO33GJZH z&|2^(9wc1Ng4<{z;+&zwqbv-U{5f2S!>GvfRAmfo#NhVhL@JpN7_5`iDMNjjJ_zf@ z1=hge`)I&sXpW^4H^nj%`kqILU}%rim?u-Nr8!rm-7md7SlIH>giC(;T+&-dU=Hmf1{lhbZdSr5S30eQ z?W_^E6CLeWHfECWPGF*Hm z!7fLM&U&{Um2#l+!ysyCinRk@=ghyUeZe46S>CO9%5AHwFwwg~?pkT+ME6>8JC7QP z8gaB=(?2tucX=nmD$;51g-(QejZVKVuN~GEUFo}R=~kx|9NpQ=^p$2&JC4(1e$rsL zBl`k@KA;f^4;kd~4Vh}T5*mQ3{foVf-s#o{hQVg2sH<{s;)1ND(v;r0-qx+UewlV( za58@!O;8hj@MgCAtgAo`W=9Y9Q8S`Q09+t zg+InDU&amo1ao`^w|N!w{3#arDwg;fR`@#B`7>2H2d>e}IAmz`I@q75u v-3IEHhNs(oh1B*xbp1Cpj>;+6#cqo58?c9ccR=Dkn@CAZ6l2i%3Df@o-))Po literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$string.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$string.class new file mode 100644 index 0000000000000000000000000000000000000000..cf862a4605be29f40f6ceb755aaacc5d5de3c189 GIT binary patch literal 1213 zcmaKrYfscb6o%i~VXsud0xDh*xhNN51r<~lZzu@~(F6^NiAghC26mv^u5EXbPyPab zjOhmxKllUuQN}Yf8+DD+4}JSg&N*|=JDu-8zJ3F+jLjl)3}b%OtO`F>QCJso(vWcw z`A5~AsU(e6cu+(i!{DLlh-x6hgX*jLq4ZORaZyh^&*piQ=ry9I^!8-p$Eu}^F|aMF z{&!fr)f+VZXFyYiZ7=G`ct41ad*eoW;-Wp;D+(n;_1Ahwr6-=>h@wQsUPnnPphOTI zc&SPQ-P*or2h{n*DH(~Bo(KYl`JSL|Ra4Y{d!p3}lrQY0c8H`QVoEnwdaXF>s6Fb$ zt{$tj!7yp6niU)N&nP?6=~2D=m#7;r6ixCY-;hBNF_db4phA^CV&F5gy9|9BWE%fi z2FhT#;2@8JMyBzSgQCTp#;XoW7P-c8hjL7CUgM;Lip4&SHyrd^ENYx};8-kZyyf7G z#gfLVgR>UP8kZdmSnSt$&%vO@ipKj6&Y{3Cu&qM*vfZr9_>HIsG^M*8`6AdAvC`aK zEY!@v6>zLOSi=wvoi#{icY<_(PUBaHD7ll(nqc!~vnjAi}-tNa8t y{uU2S1yD0|0^QcCq`JBM+!xe-Z&A>T-4w?L;1M310#D5QDV~v5O!@|1VDu;Q(G)HK literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$style.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$style.class new file mode 100644 index 0000000000000000000000000000000000000000..b8c2a02abbdba01b938b85e21a85624e05d20a27 GIT binary patch literal 6737 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$styleable.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R$styleable.class new file mode 100644 index 0000000000000000000000000000000000000000..ce1bf2ac99ac3c6dfefeebec5a5f9dc8915fd4da GIT binary patch literal 9104 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 X)_d52-s@wJ-Ur!0bG={pskZ+EmMQi? literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/R.class new file mode 100644 index 0000000000000000000000000000000000000000..a9c24203f6ad4f7aa1ba6bd591f907363172dd90 GIT binary patch literal 868 zcmaKqOK;RL6orqclW{u?w3J7g(kCr_0S)aI#HJDw(g>u2x?txd*3@mrmK+bLKZ_L- z3w{7U3UQnOyNn{;?_A&Gn=9MDe*gFh;1s749f6hHO;VKy<7}pUb*X*n^6T_mqARd; zrM{@NRCb(x$gXrA1bVNHHQ|lG+`-|6K=;fQx{o<543MBFusAYSzn@Mr?LVok)B?*R zm#gwZc@y)$i`{T(DuLms<@c`y`XAlY=lZRQO?v0YaTbBWJ8QK+D^*qLN@7`Ht)<1T z3c+*22#E(XjG1#KjS&)$1lHR+=B{*XnbeecJi}U;iMF)Xl-Lm1YU^5f^|d*w`F~Pk zTVSl{dqzGMCy7dq%O#xkgGF%D{- zkhkmlojNXJiTq5*UDoemi2LM2a)li7TP4@Xb#jy3BA<{uAD>zC2tf)d7X*xIF=i?szcaDZ`abZ&&)nq60G@``$qRoBjke>Cr~D zR;}n%3h-l1KyTLSysQh%ZPc30+72U~m}X_O$?I8x*@m&T9e|X;xpJl2tTaAqRT@pB zTr!z66gazSnC8@`5J*Sd?OMZlzgBIA>==mz?CI?^g%I*t@_<5M5^dgbTu0s&xRp~` zcRW|xt}K@M{ZOu}4`b=<6-$x|&>l;B*Ou$~7Acjzu02mV=aN{)wKxO{Nz7u7A~7A; zu8s$7+izNQIRY8e>sWg&%Xb(@n=`WS&~4o?pSE@A7DR_yKt*^wbSke!@sjwG;+)Ka zSUJPUw>XKLoW$$2bKrDkp9<8sonBwkf+)nHd~*R+V4bPA1#ae^KJd`&E-Sn%u==F< z|JnaR&F4nm*zZt1bN_mBa%SiZ=T>IBlE5`pi(_t6X9VVV1D8#QZ*DoE-lcYGm|38UHwzNp}3hF27PiQ&~C5gIc};blsvK`C;Q$->I@BfL`3enb8dVGS$vT;Ol| z=a|z!Lqh)o*JNWZm*Jw=>5b1vy>1PT{7mx5ppkGL3r(80a zA(t;Bm#>i4zn*Z)D5nhG459}zxJ9eb>2~B~lN0G6J?V7m6r*nPYzYB~C;X!4T zRz~T_h-8Bv(1YaOiY!ZXP9w{BA@x{WI>OseD#wih{d=6ze+VoVL!z>XM=iy*x)aIm z5{Koog_R?`6P9Y_SL9F0;YZBUmCWluA*261VUSe@S=^%w;@+i^jSRLTg9ICFoO;*4 qM8c0IL=#FhL8A9bOhbj@)Ub&ydS9T*Z{q<>#A)>aJM;)&1P42?*#u^3V(nqR_>)R(te6%v1L^fhVIY8d=uNeCN!Q_&pDy};VQ5ARU0PsZ--uf ytq9$PjplPBL*S62LwNiLCE?*7XF?#<0?Q41~ud+=ai0f`XnDq{&KDw15=p5DEnyoo{0uN0wc*d+=~6@&G&(%0huC zQlzmhdo=U;bpHMUFhVCqjWE`3r&w2|vpM^)5pSISQoP@*$#pwr|FX0nd@KvTs1{|Y z#EMVxNa$|)$jY!S)H2_St_Xd1C(bI_t;EEGd=l!zZ2r0?G*|B6wY--`2+y~ew~HB} wo!MwVGaQ116fMHwAB=?FUz7=f@DTq6DDu{k#Hoh#TA$E}y%`me3GJlu3yL;R7ytkO literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/ActionBar$Tab.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/ActionBar$Tab.class new file mode 100644 index 0000000000000000000000000000000000000000..2c612f7c01da4e55a608b691d6ace92694263a8e GIT binary patch literal 1385 zcmb7E&uR30`K9U^sAtq0QY$27Z@^Y9K-{a6j05 zG_uc)_6-mB+Ps@ViededUvb;xe&23(FNGVC%4u}Y>rU{9Fi#HkwuPStuB4h7!SK5B#)k8DAfa(dmSE1 zEyv1KG?0p+QeQCiQ-;;Ph%N#pb(+RKg_t3o<7#=|s?@pP3j^7+`yn3jkk71~TqnVZ%k#LHxIWI4;2>rf^USFQgAybND~ z_^M+S1;dUM*9>Q~1g}V8YwhV$gjCXb!t&f*%owS6bRxXZ@OnOvNf$2VFs<)U6K(u; zg)tLD(KzbXrHX_vLWXzNqK!5^vs^q%cxIByy0n2$UZa{&ZYW2SZY}Ey{X?H?1>?{a zZ>1iT;-6tX)@{jT#un%HWt`cY$%C*)X&Ig27(ETt5ucq-n_Jq|^?Gi{2TA zyI4V*Fhf!TH&CKIjXSNYq_GJZ;mY9`$nO13YBon;0DSD zZ{v=^O>(9GZ(_^fJ=~9RB5&h?k+Y1*!S0*xriyD%u~V Xa%k44I3g^O%$wN literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/ActionBar$TabListener.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/ActionBar$TabListener.class new file mode 100644 index 0000000000000000000000000000000000000000..d3c8280299faab004f2c76c9557b6fda5f7b70d3 GIT binary patch literal 449 zcma)2O-sW-5Pj3u#PlPr{R;}}#Rc)!lL`ePAlNEiC!3|Frn_M`?T_=|5Aa8cn^daD zT;?&4nR##C*Z0RKfNM-cbO=J4jbK^jMyG7uo3e$G?}E!x+&1hT+p{I7N$x78l?~A& zOxC<(QLtW#$8@b^MHm_FrxvR4oyrKW7fH*@vxIeKO`Zw2ElXo7vAb#X=ayF+rK_c7 z?e-RDmoJ2IBlWD^L2S=FsXwN_Fk36tJTDX>K74Xj8z&4Ow14HkVCR$zF(RC|G#g?} zIBhXZ==wYegMZlt1W)_$fv!*S2m$Ie!(TkE5gkNL?PK6^>iZ#LOnQ;ujd2o0KT!35 AtN;K2 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/ActionBar.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/ActionBar.class new file mode 100644 index 0000000000000000000000000000000000000000..95cae968a23c084cd68698bc019bd6ee1f825bba GIT binary patch literal 3291 zcmb7G?RFDI7=EV>4WTWRuUaUgNRa@AMFd5Q=r$>IHEk-J20=7VvSTu^*$um!7H-4; z-h&>0c#h}j1$a>&pP5XOh125tXP@&x@_Epix!)I)SdTTNV3JW7}P8 zRI2x@jE)Xj?t1lMW4*eu#^~6Pr^trwHnz8v1H?a)XziL)tE?%>K}N@iHd<2Jc5BrQ zC7NS2bw>s=xyxv>c&W}PR|-9Gh$iXO44tHTMn@_#5S#sOQ$#i1^aYlwge~sZc_bBW zn7O1QV@4M$8Irw%#Kj^h_2VS$)}`2GG+(Unz>7lZSvz1@io2rXS>H>LWs#){e;M|Z zEgtc1tX<`bj`Ent(oQQ37+oCuZb!V=k*(PBBEGA(WtGj3HdQv2upKfwt^Q=3Z1Nr1 z=BlSk-1nQj^$fdzGIqEty|zd!w8TWktvf5LbKn4yJ9i8Nbv1~gQDs^jtN~?zsD?V0bP@6HKi%^ui=THmL^22NB=fPV|GB{>?aQhAtd$D!XNzHJNiVC?#B&c`U&3x{&P- z9OYsR2cRQWK?^cg!y<#W9_q&!Sk#~zY>1#=m$7V0^xn(ip~1+`mWllw=%GJ5NWp$O zxYN*OYD`!ANfHL5Y0Hb@#52S>hdtFgqANUHnTdFTtu3bdALlX7xx_L;G}j?F>_;te zPpV_-@aUqxrpAHMjH8a#lF#E<#Cd8lx}K$P({}=#q{%$}$mmWMC;Mk&VLwrxB%|Be zoR0@~T*ni8-3fW}affAbs=IR%-#p<8voe~Dm!F2|kjkCI6GuNQ=oB5GDNuR!exZY) z3n}^#=;;(a19~<^EBWCRt>i~i^c?7;Df$@b<0<+C-Nf2>qu~1%BCvoAc;NEywD7AA z=`_A7K%!4+5#O1C0-d3^^@Hgwy<_lQgXc89M?*ZX=_Nxi(SW`{?`!@=!!Ob$OV)eY;F#Jv9r%GFz|F!Y|z@TgNYX-NeuJs<$HyR%)L<$}wt8dQY#83OA z;9Gj4v-ll-Z(J;ETD{|c(IpwR-o($T)|)Vun4pH%`hhs`GUliWdk^y?fbFRQb%0NS O&w$-rfdXJ}s_-ua_B^cs literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/SherlockActivity.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/SherlockActivity.class new file mode 100644 index 0000000000000000000000000000000000000000..0e5cc23534aaf1ab55a36f12d1670d40e2428bdb GIT binary patch literal 7570 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 C2#Q_+ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/SherlockExpandableListActivity.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/SherlockExpandableListActivity.class new file mode 100644 index 0000000000000000000000000000000000000000..3e60b010d405e65a30f109dfecc2942aecedaada GIT binary patch literal 7626 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 M^CkQnuS{$GA3*uLb^rhX literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/SherlockFragment.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/SherlockFragment.class new file mode 100644 index 0000000000000000000000000000000000000000..5fe7b56e76d81c4b6d80eea3e5bc342f004f3dd7 GIT binary patch literal 2638 zcmb7F+fv(B6kW%V7+eto#3n!prh(uK;D%e%nvxJMDFKtTrf$pI!Kk1{mRwne_O*YJ zenTGGna0etGrhd_qdHwjmW2bRgz=1|BkjE|d+&4n&%eL@0bmASg%J`+741?+7G1-( z_M}re)E(0yA7q>6RNtyTFLF_8r^U&s3`AvhBE;qd70Q5hT#Iv;0(` zck5euBr~S84l;SyF|32EK-Y?GRa|Mg1!-3G4s;6KJj)``Sz4x^Bg6ecU~cQ(^)<3c zbbZmV40nlQ63K!<`-;7kXbZ;4!zFjTt>CTSaGj*lcE=sc?9Yd}Cm+kJM zQ4yHDf(VlL9q4YuRYQ}&LLzwum_}Z<69Tt2MDU(Khixspt}Gr33?#N1jZm!$!jpwC z?g-3Wy=r0HWp_`Twqct3fi&~3boI6Gi+Wj&NC)Bqj~nJ1J&%{F6*s=8$EBxE-;cX? zT*l9aHAGHFFpT$AC+-PE6XypdSx~(i*D!!Vx|YE-#9Eu?U{PlAWlom;#`W3OilbBc zb5C|9r(0El2d70lGW6q&dYcU(gI62YHzre^tSaUt(^?nPuoz=WGvg(4gH%1hT-DS& zk;b%!3_hT=(yCD@OSgEKKeUep#BPLNXEe-Wj)PjYjvZMRxOd@r1iG>j3}HdThj=Iu zQ$tqYg33livq1WCphhqO1wPi01gAEaxL`a_`7a9yaJ@aJD#FchzP=>uF#H+|44n@M zaJX|zET_Qi1=Ro31G0=>kag-v;G#_##59SyWm_*Cy)2!#$12uptket(Jk_v@PX)#< zFRrRt)VBPA-Ej3%UN`lktM3a8wqQ^Z+2n2*TLSY}noyOgrZj?0Y^ynZE->*9Q=ATZrlA3@hj<;vUH+8DSRKmONKo9z1c?$}w&-C(5-FegM*_CFufZH<(II)$kxiGd0ZD@X=ZBF>;Ty9`^}1fjA)*cd8B+aF1dUpOA_KSi&PJ(^$F3 zSSGEnC(h42czivNJdrG|;%hG9l!qT@o~nDj{_1HFPk2>NOIYzTRdALptN6jX zxu`OioAk_0(p(MeXI;(G)f_d>)71j2`ml+0Fkl_@U8&JgUP28o10?1?_vz=HmhMCoAj6}r_pY}Syg;l=B=*Zfc)hZ~;FCltRzk!wxx(Li(* pdF&9@FMA&!xqE${1>O};$OCPz`?DsnPyiMp*cZ$ZD5xxa`5#F|d|Chi literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/SherlockFragmentActivity.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/SherlockFragmentActivity.class new file mode 100644 index 0000000000000000000000000000000000000000..e7f20aa52d6389d6b3139f827b35024531541d95 GIT binary patch literal 8996 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/SherlockListActivity.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/app/SherlockListActivity.class new file mode 100644 index 0000000000000000000000000000000000000000..ccea5880e5058ad9fd7e4fbb01f10c646765f470 GIT binary patch literal 7586 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/ActionBarSherlockCompat$ActionModeCallbackWrapper.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/ActionBarSherlockCompat$ActionModeCallbackWrapper.class new file mode 100644 index 0000000000000000000000000000000000000000..2015aba0ea246b3f9539a05b647f04f50d9a0a79 GIT binary patch literal 2702 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/ActionBarSherlockNative$ActionModeCallbackWrapper.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/ActionBarSherlockNative$ActionModeCallbackWrapper.class new file mode 100644 index 0000000000000000000000000000000000000000..e0514eb7235babb2647f22df934715706dce6a65 GIT binary patch literal 2760 zcmb_eO>-MX5Pc)b-dJ87$%Yt50y)M>B-v<95`sa&kSGZ@mOqG%Q=y8(Xf-4ouXbIl zwJGlKZ@5rJJ`7d-0R94SN#(+Y3!Eu>M(bVK)|QFjAkA*~bidcHr#1Td?;m~wa0z!c zBpB9Bw`FkCw_K;ez4im)*{->5SdK3|hug+=<+{PWjli|aeQQrlckC-}Q`ER^H@LZd z*W)`o!qbpq$UNkG+_1TG-&kur6sE6XkYSQLP0zKO#-1g<3^L0M(+4RShFa0{T)j89 zxacawp#Q*XPtP&T$Hbmgm&|d^ax8y=VY}FGl9;$y;-xKyRE?Av0>fz?LrABQL{`Tz zMj4XD(w6kRtV6>o+EKS0vAWx82yc@&Y{4*EcTH|@anF+PfiWe;V7L>*<|HZNTTCLI zA~@A`!gigSC%7-7Bf(%4>oLu)9(JqTe)hwNqG8M+xPK+*=G^_f4+! z-%sBGJK5D)9dDw-pxqa~JUTS##SlV&yPu+D~#|=7MUsz64W@K16LPA#5 z!8%DfwM$lcQ%4oI7}ox;o&>d$=$7I*eq405MG1RTw0+P0Dry!({zy%ckA_S#Ue>XQ zIz##2GM0Bldc)oIOmW+izxnx2&SO_|Mc%y(`jX=auV(XhTeLNN!Z055dq&NOF5QWU z>47mA7=~=*3v3#Q)%o7X;K&$Yl5VgheFl)gsJzI4Oh#UH^lxN&z3p{uJlvaZJ8G#l>KGjG28HNqkEY9o)3Sc!n`NSD2HXY$0X^ zSMWAr5dyB_9fdw0qTi$45!Rpi1+57fddM$%Qbv5T=T2L6M&$rCKSjtmDq0{NFQ$4T8zjx=HICK9%-=02bgDFaQ7m literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/ActionBarSherlockNative$ActionModeWrapper.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/ActionBarSherlockNative$ActionModeWrapper.class new file mode 100644 index 0000000000000000000000000000000000000000..85099923819952c13df020eec88200a3e9ebfd43 GIT binary patch literal 2855 zcmbW3?Nb|76vm$$UIJmk@Y({Eq6HfQHWn+Qv|5U-O$}59Q}O*Kxxlu`1~(i0w{%A6 zjGghTGyX@8t>bex+Y*-DVTKPRyZ4^+yXWP(C;a{2AAbT^#9k5!h5O}tEvL(#U3W^_ zZR{DhS}#Az*^XyiM^|&J{?;AsZU$Q$+OrSLOly6;UNMhcy}xhVBsvvlqiF}W`6VEU zheBWN*k571pq+|aw=21j;fg|6ZQVFcg{49?`cE6UD@g(Q09Y0N?w zx@lXm9kbD_m5jTkOI22Ns8BEKYEiqkya$V&lE1=(a|V98(X2;G`>JU5vZrCZE!&d- zCNqV{`atKZ+S$#m?NK!5=caMWW@WCJ!ezXX#I(YNm~LCRgxA?|uLZjp$6~!Q`4;dk z@tL8IYa02Ag341{jAyf1@+orYyoEX8_B7fSugM}E`)Rz^Y+zMKluZ;X&Wx3G>4UWcHbd1t4}>bnZ_v32#! zDOtQUX1ZG_Ch-*q%^CHKnGzPhz?W>aTn4=>Rc%ZEVd=3cdx4I=vG53A^JaTuH+0&J z6se=^j-04sfRU_!vhY2AP`Gk-j?7J=EX}@2eQws9ZrR+k<+@&q$>o|fPQl7Mj&awj zy3sJ4AcHOIwvmr%k~{cg(t#nFNqkDklmgOenPYrU^REvU?fUt&#eK0K$<7~QAo~>Q ztUAPScHt1Czi~Z*3;Y~HCqMrs;U5g(Ifn597r8RVefnY?6a1E^NuHS?n{y*LVU_P< z)tmhtqw`0YI>x4CLvaqML>sR66|NU=;tDZ>n~B0r9$_|&>n1K4gS(21kK^=-!ZEsR z7}rOf6@yy{qT}3(!ZEtH!?-kYgE6?5(Q&3l;TYZZFm9B%u^8ODxZx+uaTnm0{CA*7 zT5*J>Fl_=!HR;nt9<&QO!C&e)#s^`>WiqBC8B}`^$2R38{3*sU{1-;E&v0wI71PI0 zaYyvWjbCZe;mdD8B&udep2fJj+D4xWBE0L{s&QgD#DZfM`R%9CLf;o)OV8c1t`^!r z$EkAIMf-mi_P-wK&(Rm{|1j*o6zR{Q72!W{gw3%3N~Aw0S>PYOdE4P$-KKh0eMsvf zx8J;P@f|TrW?DozRL_s$aPFQCC%wuUrvv|4p9gehk5CFZb4%ul%!vdl{-?nXzhzSL JpFHd$@jt5`JktOG literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/ActionBarSherlockNative.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/ActionBarSherlockNative.class new file mode 100644 index 0000000000000000000000000000000000000000..4180bec13bdab223811fac3cc5fb738c00305e6d GIT binary patch literal 6589 zcmb_h`F|AU8UMZ{WJoeOz=NA|1j$tw@OG6Jqu|_hk=@y4cQ!yZMB#5!nSH9L1@KZXstc%ec#9b(Du{sGxN^uWV1_<`U5+=^FGh_`98<{JntJ` z`0uf20IbKq49rrvcr=$ySfiekb4RQ~am+4ca-(|^j_cV4*UBU|`b$??h3$H2tK~W4 zwt;$uHPv;esVFpMqn8R7^;g%6Y+Ctz+3rw*KkY(Np;?1$$)#t;fUEKX(K5xf_W zGW6{17TYZ`8Z&{8JNCXrma+*^C<8QH;kb^sL19s6zvZS2IVYV6-57Vg1Ibj^phA5g ztu~N>jy z8@c`}6SL7E-&UAdiE|Vh{lp5pCUoFD1FIFzt`A1%4X3pF+uC%XZHi-Lu8Y>&z@oJH@=^jgF<j$33fXPNkQ= zK{0Z*MEaUqj0UBOHk-H>EX0M}4Ve+fyoy5|oi&Ow?jCntmX0!RQC7>#WLvO{rHsd_ z-^tAzMsJ{C=dHrjR4NRZxIs8A3OP*|WBG>|x(-sFo!xF{>`~87PiYSk3z1+RBrrFc z7{m~_>n>J`yjR#zC2N7kOwRjK63bx|JMjim3wc+i);VJ|HBm;?@u|(99#LO}{eH|U zZejtJ3T$aon)L2MSSH?#wC2yNu6f?<+ zP>XbOs*mz&b0JsCcl7(316IMx7L$S9lAyAI)=O%q6`YU8f@5J(MPc=6A(Ot9PFK)> zyNS1op*i$yhvUiISlrovvo&rdGM2kL(Kp6N|Ies~vc^iFe@+rgB_Xg}~~mS}8Ye^9Yf3T(+Sygy_D< z#NDF1_!Jr<_kI)a6*&%)7#5Qj(-XP-P24NVoRin2IXx({-5$-kX{&G`^hIPJF!3Rg zom;G2RcL32-Z5rp?I7Iy*%TJXS{Tu!gc5!(_IpVKA7v*G`*g{3GKn1r@^*UA%9J?d z58~s}<(7)oM@)PIpCrT3LNHN7-4K}pPp}korNXFP?C_~1>y)Z{s0p9JAp?&ptU3)H z6Q9NB=nmm>nQ?og=M|ihlE)k^>r6#OS3x+rQzpSde8I#QF`qkFw1r42ZQwD5<)LAz z?Jx#DMSTcr!eM+_JpPKp((*MA^3)@Pr z=VXHcld(6tZqDQVl*jMdx20)_9jRo7|$i2OE7 zda3{9<%G`#l;E|QpDp~AqNK1?qWi6<}dPK@B`huDu#$gfgW6x(Qq$$Z_857`yc`L{lRwT!zav?^}p1G3_Ew@+4Y&&F&;YM16U z^X=A%imV8gW^L^Hz*yX)YZ&{@F(b{9k!EeAF*3rAj_umZ8wf1WZ9a6*1a?f|_0!?E zvdjiz@NE%%8{UXF`Cy?BN^Uk9en2yC)yY^qft#kI53ziPW9Y3BdMid)mE5f{^1Kq& zMo&*izlqu-HPClWL+4#eqhC#%vU|cpBKNV%LULG0H~ZM<2C@-zlkbJOlKYoNyj}-e z?}5bPB@@V0Lgq<#Z;WnB1lgh?!DP64v-0Yu!TUAc_HwB6vTw`yt$wEWk@9}D;XsUb zdt{>>1x=gRH;p``Y0uTjJ-rj~szKjM>bG$N-yWksH-esvaqJ@`xVoR_rPuK4b_yeJ zt7hab8o8TB?m2BEyzFTsl__Pt-&&4O&@As|eC~_IChQH;<8H@0iKOJdrx7>ms5eS% zSRr>-!ac~g{ZI@pY?0C|@8X^pI9>s3z}-^`_b}lenE{SB#Tsz$tAu-$aEEHZeL%D0 zg|Y_ReU)&B3HMkHxDV>O;+?Yw+=naSo+R8?Yrs9|!__mkAJK3R=!U&sQqg}L2Ztx| zu`NN(K0NPJz4a6L^ic0p`20b%AIIV09{E0rFZK7xSPMG$B7fLUa_AoACVQG=>=;(@ zy0I3|`aFUTzFyb#Z1(HN@q}-GHJ&8bpo6n}{|9RgJZ10}sd$*5)D-X66nn|)=t(rm zV*#XKeR%eG?gQ--Z!tnmkSN;)x%%_aEpYY#HDg2bg<-cGWc(4CCen}g@!f)_9 d{!#q*_#^(zU2=kgf1%yueEyZszu_OU{y)}YX?Fks literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/ResourcesCompat.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/ResourcesCompat.class new file mode 100644 index 0000000000000000000000000000000000000000..453d4a234e96ed8ec3b25391f72d4aa1eb14839a GIT binary patch literal 2351 zcmb7FT~iZR7=BJj+z=P}s2TwgM9_eiSiedetA#`~%7+ESkG955atsTb-E?;Yai+cN zSpPtK(_YZ4-f&aL!I?VK-uJKcrq`X;>2vY{2soWyWY4=N&w0;#p7XrV{{H%xUjdxM ziiUu|NX{w7jht^fcGhscMd?~jZaHq+zI1KFiqA^VDZ4r8C7oi)@HGSl+LnwJBW@XX zAwH8`k~v>s-(}M_{VM`Zv7rTlVA9FU2%6BWBZPedt&^rLr_05xbmxt%B?USrot$AU z7_O<_>ytr$(ewn)PX52D5(3eJ^fznG@MYX_ENR#RJ+Vo{&byA8kLMg7%l6|*HCFsY zdgwtj+VPHt4uK;Ll;g$6%chkdShzMjm!6r{aS(?Dw7Jx+OnQ1=K%^sxqEo{W?%PFSHm&Zy)*M0KplNJE)dy%(qN1SQVCAz7{H)F zJO53YUdb|^OiAB0bL6&nTM1>~wBm0963sY;Aq_Es?nVK7z;p~NPWG>wd4KV?S&^2f z7M{`ZE=I^zUfQ1NKOt8WYW}Q__Y_`VlxAVkZ!9>EiyAHn9Nqi6X9u#pL>-sZ(k>(G zWimCTW+>H+q?qyJzAJB~ z#Dg<+eXkW$u6h|+$ysI3T#>=l;o4>&>ljlBPFEA~`X8HxjA2>M>R7d%rleg?`?5Gs zrQJ3C#WW!rk^=o(?US}FSum_Iw@@xpnAa*fSyHX2;Tom2g`4B$*@dbqr5na|Qg+8) zww+bGPfNGiAja6UXjd8k3>_CYNln*H*(8UMyc*ByZj+d3n)nUKm386-h)Rv3}kD~ zwz*6-Te=x}Jk~%v>wTMqm6LKG9R($pXjLplqtZ}Uw(R?kO$q-6y5Qzse%194x+Fs3~N7Qw&)zY>t-K1rBp7b=3lD0-aHw=zs)-6s0ogw;`Bhb#3 z$cV02!(OJ*^CJR21Ipm}uJJ9-QE&_mzeMbRs^@yhuK>`=E9>G{q=(Tl`fe}I(wncM9}_si4jaG>PO@)exQ8KR zXq*PlAcqkwkuaBNUww^n0bk)FzNXtf#VDR3QRV9j*&`>I#~qF;TEHPP)`@R$ml*@h z|0V7-TN5*t@PJW}yBqkFQ3#)L%@OQxf2~aYR3I=G_#5p3(JI>bBmbY{VU2(ML3EJl zM?3h>?8QF`%&nnsu*P3_eXwIu5vegSRj_Y8w8h`jTll+F)j*p3-6VfgJkvB!a~r40 z);Y|Qk$JLkhdzCm=5vpHKEMrDtaLP7t96r?N1MD{-{j?TofpMH3qtMxpkHwi4%2jC daWa4+Y>r(duN@A)sD4FUUPvb!+eI0j{{q3*ROJ8w literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/app/ActionBarImpl$1.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/app/ActionBarImpl$1.class new file mode 100644 index 0000000000000000000000000000000000000000..2869fb12b1a16c0049146d09bdfea22df1a4a2f1 GIT binary patch literal 1879 zcmcIlZBG+H5Pp_c3gv)`f`V_Lh`cDJ1r#l!rO>2FAtn%_esa04bmh8N_YMT{$M_da z6p0`F$OnFuarSxwk(dh6Cbv5~H#0ZSGqcl!AK$(MNMk;R28OilR+8NIrK?uC_R2y# zuDza=$`@L3C&{bTWHxv`%XOhrb^22=L>Zpd@l#R>*C}yT(ylCdNv>pto3A9Zf#m9< z^n9U&&X#zUKE}}Km!;P~MmZJh1V52fhP^Ec#Ofqs>({f{3bl zRbt53g;SsE%+N|4UAP>>C5Exnl53$GJq%6UwuKiIXs2#YCo42mkB{GBypyFh;U^b~ z^t|R3QRLh1hM$S!Dz3+HjbXkHkiQFP;RbrCxSsHrHCLV!bmdk9=4FlVDGLwr=qRHJhOIO3 zecFCIIibR9Gi~9qnF4*pebo`Zm=mvs)}k~gJYT!pwSq0s^k8T{jKYxn2N@8ROFp;P z7kD)sFYzUJL)#)Rg8_8dEM_#1zTumkT6tdCj_VPr3&JnEG()U{qBhDo-1CHoUYc^)TEKF)Ye@vkm`{4U8!VxkKs;Zarfqcq14l{D1+f>fFoG)QN&6B4;6-D z!(CYIlctB$@lcqje3%G^wZ4vcGT=tK{mfW$G8i@&W>IgGjEYvj6GW-nRx!g)uAKZ- zcbWqq>p11%B*Vs{$qjHCXBd`w6bWnVn+&gWIUW2$dFeQ`igN+ZWF6NCw212zqJSG{&|ISO2bwf| JI&&oG`2~gjc}@TT literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/app/ActionBarImpl$ActionModeImpl.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/app/ActionBarImpl$ActionModeImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..a49e0510d724c3f9793ef629273b027c2e5c8394 GIT binary patch literal 6338 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/app/ActionBarImpl$TabImpl.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/app/ActionBarImpl$TabImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..f0947b4b40b9a14d4b6090a45c7173ddee3f68b1 GIT binary patch literal 4474 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 XF{!8ozhb-4I0^5k7?X|KqLTjuY%teR literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/app/ActionBarWrapper$TabWrapper.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/app/ActionBarWrapper$TabWrapper.class new file mode 100644 index 0000000000000000000000000000000000000000..0ce995af77258c18ad44df3f39920da980fdb3b0 GIT binary patch literal 5527 zcmbVQ+jARN9sZ7GTfS`KVB)k%ND~t`wUszZ-6XUqaqK8{QLvM?a_lq>P1n*!UPsz> zrM1&=hj1zPwzNRQ9m=f~XlJO~^1#3_6K41ixIORyFTB7D%rJ%F`>j^1)n!#D57M5q z=ls6&{jTRH{qBFi_$7cbyc|WF!g$6m#Py70+SY4p7rbEFo?G+Y;-{a4xJbdm-G$Z3SFUZ z+O&*QD}@E4$gs#8;&VHr=jZgIDRb{-yZB6D;%4j}h---+s~Us7Im5Z%E}4=hu5nYM z?p_VU7*U9FHI z)Qf53u@%G07_Puw8V=x23edRa(@s~d+TyU05K}ayr+dmfG#td;3X|)^4vi;Tu-$Zx zGUWTd1xtl}!>JpidQ_+~xo#7|Ry;b2Mk$q5P^q%@%H~c61H8uCH%8-xhDqGZBGCe` z6}xuF_5Q7`e4mmtsOkp#KDknI?82OBTxRvIdTEs};_^0eWAtYxPU8l&*E&E(xLYsD@r>3SD{s#$(yd^U@NtWi>2F z2_Fz&+q{P@=Y&zp6wPI+KC&aH!N9nTOc^oudYNdIjg%A7q3mPs-4e7Hj)=PTC zJ=I`t9ILv&LCu8kU|E_f>bU|*%@%d5RPG!SBXd1?45cV|dEeFC6fN&c4Gval5IvJI zO74|A6Xt}LIE?-JfL%46D~Tu=r(?~DiB4&+@2Th}9ghh1U=>$1ych4|)k&+SSC*IU zqEp#6qg#4T8kSffh)d-?@zsNFi&M9kMfL;uP!u2JWl^EpT0+Bz@ezeh3r5bg0!CNZ z|K_I#_VeVc_;?f_Bi%PSIUuFs6LR{NtXb0YdHeEYHalw{*E5&W4!?Tw1U? z*YNdfCNNhsVJ2E{Cai;+9Q{oV-@>=6M~^9FZ|>+DG0MoC#L#y&JSX8$u1jaEN?nq* z?`wEo)_T(RN-<+hnbP|W_(A3U5ZN!ClY*AA_zNPL*GnaX<><%US&8+Uh@!{o0~Stx zSE_gvKU3JfjyNV4ig^cPkQF_`PY2quNxE(Rx@wdA#(lET1DiHUf6n;;_w{j?!do~q zxG%!zU~KOz=#RaM&9Qy2;Fj3W`B}r(d2g_D{$&?xH@~;=7~uDW{{sR4h+FU{?82Wh z*V*pR44zprt<7to6C>Y%m2Np{6QS@fd3-kze50zVZsHR#PMc;WSDFOe1m}h4FR0OeI8&K!*?|R zDu$bigaB3;p2WLD7*00=b`h{U1n@NOcNv}xwc!JefEx+e7Xp~}Y{+KMV^|kub5$3+ zQK~k(NcB;=17|(?V_uX*C9xi=j}WyL9co*EOw^B%C?00sN`#!pdpxkXI|n)#au3xr z*%@Hc;pfXB9`S^0m|SRJGDIe~hcMAuIfMzDK@aS(JNJ_}Q!NW_YHxs0mruwD z_0`2jU&ZOG0|8RO1gb=n5gPA{jev&;csK-b$%}WkrJj~`&d=AIJkeA`3$`c!8`jiz zmWV0(>%w(Rs#6^FzlP;sWA!<=y2|8NSY5;8Yk2<}J}Mh7#71AoCnFfWj=s?~eD)f; z_;}JSy%D!S#-yUF3EFs)`W$DAp2Qw?f^9?+F?AmfsT3yENw(uNF2h)vg&$i}_#(@( z6yGU4gJ&6{-8h0T;mhRv6)9&@^bM3c?1r^&N z6YoV(x!3RwzP;e>z4ki36G3^~wd>gJja-E{`jaQ+>giV$l@Kedzn=u59-#VZ{!cWE zF?EJ2&+@;5vq-6PNUMkOs5*~J>JgNb?wVj%nYV8O$2WoFnLrfpK;-VRC{=#mSNT;6 ziVw%hgFd{c)`vUGL>qkAKUz_izWiPURq}giYbb-{FVc58`ficFGwHiU`fiEJ6mV48 z0l$s=q{n^IDp#BfR-8l>Z literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/app/ActionBarWrapper.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/app/ActionBarWrapper.class new file mode 100644 index 0000000000000000000000000000000000000000..686d2bb66b8d9217641f0fa1f41a1bded5fac08f GIT binary patch literal 10444 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 f=2_-?2j$9>+whcqSK=xArr?Qv_X)d zlP!zsvLkb!8x~F_`Uc}QeUJ?#&-QV(X4j|`<*!t`mklMAW>@or=igmF8I1P+zL(nI zVo#WoI1c}{1-~(=gK8PyljE5WY;e}Ca?`pu7(R&ZGYyn8=Mp1>$-#Cthi*z2SYcpr jq(=ez8r?ApB?jdVPj)zH5j|Af_Y_0LN;}mz&Wph>@hgu4 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/Animator.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/Animator.class new file mode 100644 index 0000000000000000000000000000000000000000..281a4520b49ddcf669e94e560cd76f647a07f3d0 GIT binary patch literal 3231 zcmcIm+jA3D82_Dg)3hNpr5B1^q}2jRiv&;*EmUJKP)I4#+6rE`$+0YKcQcy}iqFpY ztRpWz=%C~H;y5s)MP)|u0*?3>_y_pln~y$;zjJnzEVK*{m6`0Gv)}pd-|zcQZvFe+ z_W<@{A%U1czUVII%%X3(&b;YW&PdO8i|2Bd<4eym?VMvd(zQ#bQ}SG^RLPl+wP-5t zTwd>7F9AcK{j7Q3%-N>1keix6D~o;t%>tbb>WJ++(ww)YKytBQReb44uOiT0&^%S& zvU7RQGcTyKA%WIuYr!%7sz-ryEAbpGtlIPbS_n0NhK6am`Jm-k{;)t(COa!&jJPG4 zL=(~}tU;<30_##pphX~EU~-OE7w4rn6NJ`LaEqorYkHRY4vB_;#$u!+t9O{*#Vfw) z`Sh}AIz?&IOX-vZ)-FhYTAhqa+q|HCKT2xlPO6bPszO>r@@Uo5WfT}E@qck`4Si^+ zP1DGPLQ&bZP2cqdGMPdMquhB*z8Qg1ly69R*lJZyRvlt*L5Ff$Q*?Z?lw<|Ar|<|K zWh7>)R4bmqTxRugEXPE4Hi3Z}mhZ%A5?Q3x>#-DeAxB^74>6qy02^tCp)6x)u|wPo z%sdEBS#aj4cy7`xhtO;D5Qg-Iv0CJ{s4wi|IjA&_D< zYjQ+yPbRxk7ZQ<+E1x{D{_F@G&)at0Jr%^WDddr2gA{FP5^Y>LaRkQb-l`|XkQxAE zDLjX9fv#G>(fTSEj-)UFwp|lbr%*5vrYy>rKtbT-svTMe(*%wSY-r5ee5E2iHK)fs z&-Id+L^^@z1^OE-dL$or{po7C?0UW|jlETrWhFx>s5ws%aP-%+%ulBpo!x>k5f&e& zd3yx%_f|}}tiN+aUMSbbWIG2&wXB;%l^D(R>|zw^0YM2?qKoy$PNC zQgY;`mTs=hUR~3m{wA%Vpjk8Ti3k#`p@$%*te6VA8k}8hT<*ZICb!CZmvZ_h(t+>K+~s(X zu&Z?Z8v^!Q>bw@w+Z8$-rm2$(*X|Ju$T%cyV!8Rbtd*l zr12Ad`WajC3;J;b1Gve=-M}b*qr@#7#_!tyVO@}^(Ek<;<0Lyr_0MihQ&Wu6y_mrZ z3}OeiV3s?B(k+<7i{v{+i>g@z{v`QT4z|I#O_T8ig#Kj(Gu-(P;zD2?_~(j(FXI*3RWoTH9|hlKljLtL7_>soBH8dNUV~`QtJ{!*uT#_@ m^@LWojXQ-R)w|~15ahoo9w}Qf6!p6V$yH6_V|?CdZv77khSI|T literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorListenerAdapter.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorListenerAdapter.class new file mode 100644 index 0000000000000000000000000000000000000000..ae4b86578ae56757a85bcd48a83b558cdffff041 GIT binary patch literal 1118 zcmb_a$w~u35Pcn!jEQmA7&k-^Q9%bpPl^zN0U@ZUc(2Sf+B)f$p3(pEBzW)x{3x+H z2@>bv9O9vC>#A4l=hyoOfPJib$O&8qrsGqPD5KkC<9lf%6FmA#C(>$)e66%JQAj$p zMuo9YT6M^I`}MA5Y)i$7)Y8^Ndg34td4Z`1dLcg|edk}aA7qetC<^P;F`wM4m`iL8 zU1MqD>pXtaoT>9CFK;s`U1ttc{J=Njw`mf}Zq=Yv-;B=jk zWmEauJljAvl^gO(dQ<)L*mIX5P&w0lGL4AhSjHZf1?oc&o{LH+&98$GgI|G9zQCMM zf@z60pSf_>oi~(US;(QnwAeM)FwSzN=YR=Jvc~Y3X6k|u`Q@A~9k|vFtoA)nx_QxS$CH6BA7i-3F@Vl(dCJpZyiS z`Q)<+pz*=zt3Sa1VpMQW*$}+E?QYUNXXZ?2zB4o5^y|ULPXIs*D!nX(jLxatQ?RZXwfjwqOMjLLJy+*LhHOC^{lMI<1?q!8val#dUIpRUY&{=-Q zceu43xt>)B0{%jxBGcrQE8J*?;c2cu(f=DKzsjH$2~Z;#S`4JnAa|_>8lme@(Qcp# z9SmwNzba2o8Au>Wwq+{S()Q+>6Rhwx&tYgQ`!@GhdEiR9s?=l(85Zhth3qiprPUWl zy+B=2jLSv!sY8k;<5b9oV<^@Rmyo7UAe|Ex9sRhF!T>}2e=2Sui;Gl?(0xg{q->X@ z{h)yy@+7Z2vQ=`W{81G>F4nCFYtI}znoMDcp;V6s%`U}_VB(5_tLS5BJm#N{YZysk zn4wT}Bm>uFMNDx)y)6JQ(2@* z15=o$BJm0hj?Ub_CCbw<+Jxne(GdXFiU_0}!7)ms1Kl`7E5ljzRDI6STMFrtruK&yU253@66`ScaO%ja>VfRhi$3zfaPHXG z7qUr^uUT^!ov$%XOJ*PEr`4Ia7?MKoJ}!NRIiYoHySTg$iqJMTerHUr8XZBr#5ML1~QfjUGil#y4BV*FxXP8Qdmhtwgsw yv{R|Qx=_F@G!!XL6VzYC9X9x#6e{kLO2Hf@8zhg>>-T8aMmm{7`7=qo0R1;AQ4pH| literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorSet$AnimatorSetListener.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorSet$AnimatorSetListener.class new file mode 100644 index 0000000000000000000000000000000000000000..d144adcbd8f4ffb29ad7151e5a19e3902f83fa7a GIT binary patch literal 3459 zcmcImTWl0n82-+g-I?unS_-mYfoj20+ihXFE=mEZg-W5cK%rm}bh!^3G~09LoPYlF z|KIoh|Cx8Lzwsu3b?^*Gfg_1bI%XwuPR1RzyzH3mr80?AF~`l>o@=FIuH)L7RMK*j zUdBmgW0vcrEoB|+_GcMy$j-G?%=?{e&US5j4+u1jTc@p9%5qP}21m#3M9zRNaA3}7 zmJckQCSay3f)MEKpYtJ1tV=-8jXBwtHJog5Tqn0p;Q6-d_^ytZ_F;iQPbO*CK%m}4 z4MJgPXfP4Rd;zVkeOT?>VZuO2U|v579hgjy+TKBHG-V4c=+7jq)Uf3_>bbZWP+1F% zR3*kTTST-(7?G_lXvtTQ!2FC`AduSXvD}26B8gQ%x=ZE140jo564+42bu`1-Cl-SBw!}uQ9O}Ohh|r=V;f~SB#{h zs=I0t#0C?MSRznUpp`TV^vqp96pHCiR)#A22)83pHII0A`-Iv`% zCU$|Slw`MF;Aj;h`?u_NS=lkdP0{VaUIYCs+F8*RH&@XC*eB38XL=ZD z%Yfek2XVl}kSfnWGUM8+CJ&hyuB^!o3fv$13Fp;8}z{0lMsQM8TU09<095?YO z9-9SuqrmPefjpv`cu3Wa%0ghz+{>l}iR!c2jK?0OT(i&(E0x;e=UmUS8minfbLoka z2x+=KsevGP2&6qY+?u&y}c@>Xrz z6q<_9O?kvFBgm%(uVcN$Gn!~xcHzbq6`JOUwnF72-$huyhsE-JESDdkQ+|lG@+0ix zxKDoUhZ`*fQVw@NHX_b2JJEtoxQ~IZ#tPienTE~uUJLCntQDg1cfKf8)fRFRU(&RO z2KkO?zK{Xa>B!^3!z#*4=;eI(Weo1^3`|!f{%m3Q;6NZASj9BsK`pLNVd<)f?&mmo z5&O@hMvDigQ1^^3B6=jqL?eNhFi-?zrVLmfhcBabv);&eSH=x39-2a9qaF!W!gZ8z zg+wG2F)rM=s!rD~;g|w0-~)GD@g_e(P=1Q}@-sBc&#_W|ftdUXo8;HnEWg2ac?G@l zTO5*CaYTNHqkOjI_ZXKyASZvq)AC20l|SR0`~@$_U-2@>SLAP)me+jHPf%n;stkI* z2zoPKgoRNexd~4pLFg6ePa;Xt26#D6!X^zXIbWwiz!$ z;!n&LgH8j;KP!rW&8=7jqL?5X&VRaKNzK;L%`PNT{@H1`9G5VsAU{Dey88THh6zSB J$nkN6{{{@+%#8p5 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorSet$Builder.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorSet$Builder.class new file mode 100644 index 0000000000000000000000000000000000000000..5cbbc681ba3072049d2753eebfa3cc56bacade99 GIT binary patch literal 3539 zcmb_eZBr9h6n<`UVIi!7K`5dTwGs0Mv9(xAK;%`x5JV^`Qrj-c0;^%eY&PxqANsAo zqTkw?3XXI-{pL)6Q>X27H{r#W&NyZ#lkDBQn{%G$oadZ-{`l+lZvZ}qp&=lUEtGfD zM!~hp_NL)fc1)*KE<8_Lwre`JQA*pEZI(+#!!9~yt5``JwzX@hx6>2es_d+oZgjG0 zm5QdLK?-y{Grl#_CBxoMFKs?E3$B2^J5_ZY({^*^qABpuAE(M#Mxfc`}2WaCyc@ihTCMaHcVIHyBHO9(-<>u5!XKrj|x3n7e)8af50{Ya{g zE_4gD7=?masYLGxZ1@z8c-E6h)wN3LIis?(XzXP|=s~ZBO9B`E^H9fSTp`D8lUnMJ z)&6}-V41qX(_0#@3e5Wvhp5t-iuyGjO=u1wf*UI8A5w8X1caGY+;8gW$1RfFtCHmK z86@9{w$eacM*_){%-t1u>H|>L`B9*~%uP6s@gi$gT;^^7X$^w{ohP|Feyrm*J|Z!r zSQO|wgIN5DKzo*bCRg3vG@Vsrv&1G5&Xx;CY0Ypfbzk3>U~Ns^TJ;(lL!0ri;Qn@hY(Dldlt-wdQSmXJ4pzOi*CipER8E z#KUXT+$uXPpeAFBXE>e27JN>32#Z+KkYfXU@0_n0rK))}Lg;veWdW_cHCrkh?0?zV z#%u$i-!jhjw1^cQtN2`?tzx>|ZC_`T~OU4TUu^=$_{yBcz zfk0@bTy+ZOtfl&6$5HU8>p|6aIcCk@UYGjvD`ay6l>6g+g4ovbo?HT+(!)vya*5y`p-V2~ zvV81;x#pEs#Fsu>Z&WWD;V&#MJQW~!KFpJtO$NEn+$epc19*y!JpNK zQs_f}K!22YCkpKk2=j37xifRloqOiu&)GSES9l)6BkX5po`|ecM$d#T52Y8oleYv)3Ckm+%Sz~KDvE{lxfu|aws$9QJ~%*pSeslD-i;e+ZjZ?}nba-{CT(pg zt*Y1j^7RJk(~T)Bj94jxk6w%w+$8wx8`CyF?skmph+TFk#xh!j&Y0)Ax0uhQorsz1 zt2Z{8D5kQI%0_sw*A=@O44Ixq{H$zA2dyI0J7>C7X&jE_ND%R>`EPpo$GMD z%jgr|aXg*jDQ*m3oZ!}Q?F6gGT=JL-=&=O+&j|c4X!~EW;(x{u|@}2YhzVn^m_dEIL@$ZiS z3}QJ5&M>E0#iY<2!!j3yU0TxZf~8$f8m6P$rYIy$!_=)pUYL2?GV-OQFpZ*+tCMNB zXW7%b(=)2C=w@CwwY98Ka&%L-gHRY+m&Fy4EC_QkIkm8?YfcaWhTM)__H6my^2VSR zx8^7whOz99oe)ln!C#!T@;bxWh5+_RFc&qqS|C)GVF;WwOv4#wxYgSbAE}0*R3gpv z%`zw>6m%Fqw5f=oox#`JHyZ-OE)_vE$zF$w5W=$8siGMwLra#3Gr3w^(CrzqAkW&K zwKP$f6}BPA)k(!!GD-~R8x!+(8d9#CE0lGKN{2Ds>r`wv|8168p$!pwM3|ahAnG*W z8d5TEp^9UIW*FJ|0qH2wx^PdM`7q`C1r;yiAo0KC2;0eA%IPA%#t@lygm!sCtW@({ zf6yEitDqWbtwW>bwiChtjs)=%!)PO_M@14ZQ~rxHx?MC(;pll{{CtSC=U5O&88VIV z;u2NGahxF1ImH!^1BOn-if3I3T6K&qh8u(`}Y)8fD!7^EEWM}B{ zAf{=Jgoq}}*sa_{Q=lMEcKIjz z6Pw7aL%puBxYGU2e}7ju4{Ty;u7-RY`zwR-O-xfS_7Jn)#Qa?C8phB@*RYN-{|?Rk zd%B7r(8+(qKK>Ju{AZ;2FBs>);tVfiif*_#e2&|HPO4k(-<0%3;0S z+{8tf77<*>2l$YZ(TO#DZVqiq@) fIP%b`Jw#jlq<5DBQt$_`NHk{DE>Sy3t%30WjuI(Q literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorSet$Node.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorSet$Node.class new file mode 100644 index 0000000000000000000000000000000000000000..f94b2b61a96696374038aa7982c6d7d5eedacf8c GIT binary patch literal 2506 zcmcIlTT>%N6#hCL7!qdzVF|1*7hxB3L880sHHaG_xJUrkaB=s^$;{L;yJ03y21}}Z zuzd5)SJy|i)KW{V;-YSq`nFa60so9;`Sm0uVChrvA)V7_y8C?RJ71sv{jZ;Y0dNJk zG(-dzO>aAEn1SQDWy7y+*?z?{?`0h~uzlC4WL?L#y^3YHmhU-MEo->WwxL#M^P%PW zB|EsZ;#szas6g*s<6R?LG2A=Z)$(223^a5K^tZfo70W*iHO~^5E4GazC!kw) z)pjl0H66PqFi;HR?gUOHoA-TVx9HRYE{m0%JFXGz_yn=_Z);}SN26GoKSr~gn`PLZ zV7uCMg#de9@^;!){vYwEDuqb8PsR<%RMcWs1jKED&Kbvbf?0uuWcw`SQX4#cj&b9V z7}U{^Apx08ZNwn(n2s3Y%DSlIT-_Sc(OtL3boAD(aUGAMPp!M8Lqiv-EK-&$JKJU3 zU#p9$ujrXZWyA0tHE%eh!Is19mfBC`SmZ3@Im5D=HQNvbBUj^~hMX_b%^niq7usL*to zo*NjBOV;C7Q~m-s&!z+|-dTw5Rsf}JR;Cmf=DlU3+9-dAshW+zax!%`;lm50l$_Tw zi&q8C^W;`tMHy_SJfVN3sO6IBK`kf%VNcw8*6c1_W(aR?T@2E%vNab9OH7jndbT^Be~_tMRM||0mK%NTkI9E~w#gH4Lj^ zG%XMCL^^YTi66qimpP6rK=KnrD%9B<*6?_Q=e_C-UKZ7PeN1yzHkiW#F{0i6P*SIdfK|y|tqWlh< z@_W23_rg@h>L8n`7dmVzK@_X>DFrNr)xS(j#q1zMZ|u>Cgaj$kDZ!~4Dse>cW;m9x T#{WLfuVNjWp}f}d7UF*c6zHiD literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorSet.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorSet.class new file mode 100644 index 0000000000000000000000000000000000000000..7ffd50ff10c42345cef48a7da577d72f2ad91cca GIT binary patch literal 15271 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 a@%k3FX#(^X+iqIVSJ`IR_Ok6k+5ZBTdzk(J literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/FloatEvaluator.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/FloatEvaluator.class new file mode 100644 index 0000000000000000000000000000000000000000..2d950bc3900ae4eb556d2840382baaa2b1f5124a GIT binary patch literal 1102 zcmbVLO>fgc5Ph4tacfMQCMDs!K=?>PTT6&TQL0J^VT2UXL#y1^&ZgbqtkK4)#J_?| zK^zcgeiUNXb{j{%<*+-mX@H%FXHOdI|{}kOl(vb z{G};QzJ3u`3=EY6sbq4)e=!-b7ihK)Xn{WO~dLZ9#;5)8F|9P((u zwKV5EXeDQI%J8wjw64X{dkm{0>jP2lxBdRS4VjwW^+=}>O5u7A>bPZNYoU$VeHRTh z8Jv-6`G7i3Jk$fJJx?&AT2ZDfg~5yMv7zfMWQM>-om1M`Vtns9x| zP%B8x>oAq7VXh!cPU#rlER>y1zgTu2DQd_=4j7)hsA7}&kK>sRg)hzU>M8Wq{P#?W z3~R^oRPkh{DMJ+$UQ#YS)P=`(P(aRWKkVT#NiEY_p&!UtdUdp~(a9sr$gXsM!1+#2 z2`=rGG}ypR^4%-}>)4ctT#8?o`pDuU7Rfc~5iZJz};fYrWgr`Gfi{tqVMx UGiLf(%4X0?#BTOBI;rjc2N}8=5C8xG literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/FloatKeyframeSet.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/FloatKeyframeSet.class new file mode 100644 index 0000000000000000000000000000000000000000..b3f70f87b1b6447bdaa9a4a87c858c455e3c8e92 GIT binary patch literal 4237 zcmcguU2GKB75?t*%+Bt5h>c;{xCN5NNwC*3TU-K*4Q^cUg5&iM*qDF|bi6w@WADzI z-L<#wI)< zW7YD`J#*&VbIKe1bQ-se8SF@-GVn}7fa`yVy=*xO1NIxDSCD; z;klku$YpIWTP(QQQo{D!ye*{@sa(M>_d4_AMLX{dIb{>Nz@as(TcJrHGVT^jk0>S;R=axGKjyH{_@7tJ1S2@|yJR+bUEM%Ps z0;si6gF1o3>v0fOhapgJA&iJXZJMz6&*aCP;;=oIqi^-;LdMRG*hN>q`%Jxj&MgV_ zuHDg9{xOIhgnG)4DK#Hke+&ge6HYa>(WX>$deWY?6FJ+PNDPckI+=1ugh*_)unpS< zHc(g@>Bn2=j#LB>;}H|zBT%?2TuHX^j zzNY4N#8F1G*+LvG%;tPGxd~~s;_pn^%_X{uMSDK&mZZzANSN3uut|Be`m=@aV;57e zQ>q4ZbTSP$ z43+K7RG&Sq3fjbjGHrS+JdLOLG0zTA6)#2DveU9C`cwv_q~w4F13^h0wP04LAq$}j zb=<-TPDnjHvYSsAa(1~;6nHG{ck{%o>s(mT(N~If)ZipWO|Ydl-h;S>AIoa3W7gc( z!YLtbJ7eK2ej>}DTb5|S8251fQ=*MRE%Z8?Q2SX zyGebUbJt2aM^J9}s7gzZU;>jCrer81<8q9u<|ZSYx8O;3jcj{(ncwbz9=ddbATc4&^AiBzx2jhH9uVQ_MIiSI*<8nj}>} zDY{cenWpx5o>M%?>q^OCkJ+$FjAM(%%iEU@O;#=`P1dbiS+#2A1%Ru8OR|qqegoeQ zQ%>Vr6L0wt55)EB*!Z3j-o)nvN@bi|c5rJ8Hj}rdB9162`B#G&9;7nC1o)1x^nkB4 z9B*92cYlkA-ld=hsWM0rAhAMKcv)2#kE!oMqT;Lif*u*%(G~vyoCOpD62JEKV zCkeqG)MGC_NYcN(2;1zVSIo`L=Jv_+Y<8$ZNTbf}(=ba8KhG7sTLj=Wv(0F zz`l5Z(TPh80?OaEMf6@rzv5I7sBi`)XOO@C@#{Fob@*e3mP_LeJfqpRthxo zacpwz9m$e(KZC_(kjo9&I&NZO5$-#UHLt&=%&4B+N1-PF%>E~6M^bNQe9!tym~#u7D>PGbKEsJK$;1`z{B>HVMVmr8#MeBz;s^ z93?-R%))@Ggj>vG@E2m{)-sbfGlw5%_9mIT-OScB+rtU;;0&(~lYIL*2Jj0E;tGyp z0mpC+L-+v0xPjyNh*yF?QTkIngTLYw{)SO}!P)&4P74cXL@h=|9nOj^9N0TxizLQG zCx`1HWX02P#2`oG2qwfR&WS80#WbeG1?0pl$cwk&iMRQF71QDx&Wrasus%Xb{268O z7ml6JFe^UCocKHD#Xq@ziHqXjcvjrPbDDwYwM}?IYr%`!PQE8_No&J-?Eo&TD*u{& zi>2mQxuhyh=n7^qiwmss1-O_a6`;Qv%(E-#^!hX|k}~M~2|P3>BZQSkK<3tt}*@%0fGUmsDa>br(t`TBm1*HrHbNKBNa zI#D^REHH>gr?MbOM3U+>lep|s)`wI_`Wfo~i|&o}+m{&XF#D2bqK*F=|4iQ1@HHOR zPO)ndC;1gvV%+aZ@Eg=ok@yBJO6AF0*iEGsU9tnplh^{=fd9a#>tgb~Sm}Wbf*dKF gR`Esr^v?0YdxkVd{a#Yfml;j4X$tB};uVDc2lUZPD*ylh literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/IntEvaluator.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/IntEvaluator.class new file mode 100644 index 0000000000000000000000000000000000000000..515af5da8da66a541e4d70e4c9b61d50a9d9be6e GIT binary patch literal 1087 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/Keyframe$ObjectKeyframe.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/Keyframe$ObjectKeyframe.class new file mode 100644 index 0000000000000000000000000000000000000000..699951468b2002cbae365ef7ad4d8f0571e07bd4 GIT binary patch literal 1700 zcmb_c*-{fx5IvoR31NUh*u)J5ButROePK~VQc@x=P^r?lOBi5aGDA%Q7N6o5@Tye; zRa)hnKKMs&VBb3f3GiYSK4k9P?w;;*PIu?~-ls1Bt|O-*LU>W|il!)(ZO@$-erehA z9j~xz+HTqMUE!Fn?OL9*AlwDtvlmLHaP6Xy(dJWYbI}(?tLORrid85dTs6c9qwH%WA$Q^OfT>Nq4FXK{{@ShC6! zjwqD~=}dnWFl8K;sW0fbh%Q1h;5WCq#vGeYgc2I3S^Jsw;=JY0iFrpU;T43F7rrg; zp)poowz=G^=~HWdtdp#Af;+5cgAm^cx=}w{7KPPkVojCT(9b|CVuakK454Z*M`Sqc zU!rsv(VD3u9|p(<#tV+;GV3|c@ZY&5xf9oPUV|HiI!0R=1s;=}^xl$VlaOzBblk-~ z=E-qWaxvCCN0dFE(8tii)i5_~>uuF~R0j^rEWb(Uf4oBK z38^1jYWemR5#=8;c9Ar?w^45lY@^8-_y#Sug;;bOX~X!4^gAR6cF?|scyq@#&VS%< zqqxM+PL=fsV))4!f1v@tdFB4V#2zlQzbnX(ZuIaC7(y>n3eOO(@V624v2_%&eY7L0 zfg&1jGx5tl+Yb$FC3>l>%;+FYS~X-ioq=pf$>dYfW!O#cIY&g{tdT|{g-H(rLQI4K zTxE;Y!{O)%pJ^j2Wyn^^P@&u)DN!78szEc?mo(dg&kkv(6*-wx<@OHlXDeI+0CoIlsiTAHs{nL{08&U|j1{NU oIM;X(*68IkkY)!DE9sOp?2tSpga{s~=L8<}DR)E;(IgUo0Uca}+yDRo literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/Keyframe.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/Keyframe.class new file mode 100644 index 0000000000000000000000000000000000000000..168f790ddbafe3c84019374b431ccd68e9d72929 GIT binary patch literal 2769 zcmb_eO>^5+6g|&z{GmE^z8au~K$DcnPN*Rb6i91GP1Kq?Ng*LLWmqV-(x}LiM|J{T z@Dun6>{&1j%n&>SGYsppWesco1jBif8q2aX(-~*s_pGOT&pY?r5Bte~zy1zj37;hq z6IiV}^@3h)nU1}uyUhc`wVdh~1=DUBuB}@I+q4bGs_Aykb5#^Zfg zuNz6k1x6p~M|#21?T3ZUy+=m1l|({dqH|iZ9NW_zoR!jY+m$0AaTRA%~nxh zNX_jC#7j=iP%wmv46+zaL*PON=a7-#p37ha=LNDA3b1il-!t58pZ<8osp{5_?wayB zIE=Rr%%(u8GO(QFJ?!i=5`o*QR?eLPViGS4tPjj=j-;L@UBNUiOW9^fSJI@ODVBp* zNIW`{8KvrF0ZrA;A_#e-DsRj&bA;rDNoQZP9NkyyOfE^{HG$2+mGWqHv|2<#GJoCE ziqsV>LZx8NzTYeY_f;)a`2Ok2S;&^en*#R+kI1Lg327PEWk_!eO!cMC^o;jL#F!6G zT9RGJrc6CFT0xIas=2-{%@d0YYOjH;gmVPx3>5-vvWH6CL)*)?uUJxGkf0VyckPb_N^RB*2z)=vEEQl;eElX;EC2FbuP7 z+lK2!VQ?glboBz05tUJ##X1AEO=THrFve zt?|9!p3S#0o)^cM%nu!7>L(t>@I2RX4|1OCbpjR%F^?B`p7Gsq5tsOs#*26RVam6{Y(Q7R9Io)a#CkQry5@yNd=IOQ`6$%qAu{Oz zDvdlAddV#A&dj!PHHuI_l}ySblkZ1{SZ%x!h5EWLnI&B7C9}Lcv(Uy{QG{1niGqFuHw!T;N<}CCG|NETWHKu6Uww((#+@D_3+#j_k-tggpHqmGy@n9@5O@0!sYHqV+e?J9a!LTBtK4rg z@_ST7=J+G8QDtZN+4==rQ8?kjNeN^4#9MdpDff$PpGCUeXNyg9-{ro{{Q*+{1BsVp AjsO4v literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/KeyframeSet.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/KeyframeSet.class new file mode 100644 index 0000000000000000000000000000000000000000..58317c43e73b7ddad2914276bfdf411afff7ca75 GIT binary patch literal 7200 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ObjectAnimator.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ObjectAnimator.class new file mode 100644 index 0000000000000000000000000000000000000000..32cefbfd4c9da57ccfb03a4fd5af95ba323f07fc GIT binary patch literal 6714 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/PropertyValuesHolder$FloatPropertyValuesHolder.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/PropertyValuesHolder$FloatPropertyValuesHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..be6568f8b2dd0eeb46bb7e8493648eb85b66e6fd GIT binary patch literal 3207 zcmb_e-*XdH6#i~+n@!W3(w3HA0v0IJBtW!?ih*jyMk)yuT7y`Bu-)9IOE|2yk-$z2Q&{uYXQxSpNdD&?vtG~jf?=1yZe^6HYSQM{ zYEo_Q71)QT7)13k)$&_sEP|6WaDZWE+X_Gh{Ioz1V#Gm#I^j~Ix+wj5bJ39uLj}(= zos#L>Y8`HN2g`Py!QOg4oz!@8Ur~*UTG)w~s0UP7ZMDL3WawLo_Q>uI<+G4al@gS1 zN+694Lw{WcTI^SP<`eE&f*+{p@X`-#4t?A z5nG)Ck3o=fbk5Ym?G<9|w{*qIWT#A^&!w%ae|6m#XR+0q4KjI`Rs*hp03kTBKK z3~vZrzzk7VrFltHo?%~vFJCS>L~gbygJrL*JNcqO0Yy@|I$y16fv0@mT%+N*5c#kr z%4J+JFw3x~U51Z?3S7k;MQ^*S-U>-_rbDP5kfW-G&f<8B1n;Cu0@rZez}pO&|AsL` zjxBwO&6_?I+w@14tf@Oq;2kVbEe2k*aa1)$-G=Ryz!23jecrRuff$d}qUPa&r zOu8T_tz*%&9^DJ=V8Wf$Oahh)wahTuKAmwKSuvd{%aZkaD?TDE&=Ei0`Dj3cxnOpM_u`B87rPz+u8m^>c~Jzotyi_r7&4UD(_^eZg> z3HkXHef+ZszG&f#7QVo7oY43*uS5JItyT7e>C7FR?3hf`$>-?dUtoZLsh#Xp0zxJ)sWyR}lQ`2xPJanZ%2vgo1ntXF|vcda9i` zA)daAmw%-9CgU-+&%e<~qG=N%F;zXZqjbDN)+(ft^c}o17C$jcOD$+>q9_!#w6;TX2_uu4bTXmkvA?FT zwX1-u4_&U+wffM%(yu?zy1MUVOa>bt%Hn~{+h&HR*aAi-y&Z z_1iR(?pWUTI_<~MB~aW`R|5O0^ma#Xthh#1&Pz`qU)Z&aolrS}0fj#8XDiEojshYt z5WQ~NrZ*+2 z(2v0w2FO4=JyIbn($%paLkw);@!Sm0L;2sdjCwuS1AzlN4l1KW)hBIXqbAk%VI4b0Qz?o#_IsCKOaDGKzig?r;*2k|WBQ;P{^o6?a+hNyMv zvDD3u7U&*V29*4|-{Jz1rM%K(N}!J%lp2=d$)Gj5#%C4Q2qtt~z(snmw6Q1|9_JOY zmvzJt7l^ZK{i(yQnic4$^=r*GG@c4&b#M8pEP1&E)p=dV4X^=YepvTbsJZcc*fvlr zY3eRnj!k|{V(nTT|En~LpAU4rhnoWT_u4BnirVt4xy9RLjJ0}=vEguu1Hx283*6R` z$48{B$~no&E^s8ott(e7lAA3`Z`CRLU0l#n#9h|8x=^k8C7yO&V?$v7Qs~20QReU< zhWi4C+A`b;s$(7tjNY`@oi!F@vO}mHki%6CoW(&!4t1(Y0*~-X437me{|zHg$0h&b zS}dtN-!&nr4Oi1M~AUH^N@xq6Tt-N_oG1lRcAOoV@&*ZhSVFZ@-i?}2jO z%auhdWp_NC5!=wy-(%k<7}BZJh6zjPFECpj+!jzoz?64m3Y%IT`SwRT5de z6F|=}I0cj6TOWkJNL5&8}gTo=z%hY8MgHE@Mc$f-&tXPHU5x(5~TvmctEg%8xaTE?Q5u zsGPzIDva?o1#MuJ_!s;)lW$LH*$b^4!=qvh;Kl_@u?b6wP*wJe*rztG#CH? literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/PropertyValuesHolder.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/PropertyValuesHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..483a115b293721e4da69af76402d6d330116255b GIT binary patch literal 12900 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 H1PXrx0x~r; literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/TypeEvaluator.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/TypeEvaluator.class new file mode 100644 index 0000000000000000000000000000000000000000..6b090a6759020fb582da717c253e6b502f11a601 GIT binary patch literal 329 zcmZWl%T5A85Ud7e0XZ1IV!1d8H^g{zPbMDNA82MLI56~>VV1;S^WX>gQG`al$R^!M zS9PWO@qPUK0x-j*K#x$_xHD|CkFw&le{(5ByER_2OTxj37Z*dr(xm8{yy}N%)-Ji!1%E$VlYx>ls1_VN1p97GdbB%%GLQxMx&CyRa{$p-V DzlB~y literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator$1.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator$1.class new file mode 100644 index 0000000000000000000000000000000000000000..6f04d6bcd0a9be24a2ee6c0641cbb2091941b1ed GIT binary patch literal 996 zcmb_aOK;Oa5dJoC>%;_7(w6t@08+~Vi*ig9sVY=}3>;cT;yAHa$(GHow6+oaE4WYz zr2c^ZD8%f#NKoY%OP^I-c?D_AXX8`u_Fh)z@b#50a<(0B#O0Jwsr)~ZzRi={8 zkWP&<(&~at;jAjkl#E)C&rT<#Yq=j>>mEOk5eaOc&}T|DnOS-~can6epoeSd3nWLjcDX!MVVeIf>zRiY_|i0bd0V4p{jadIG0(F9%H-OX z%FN!$YHo`d_XQ4DvsGT{8)Kw9&{USP#3LR`n_oPFiojs<0-bjg_y_krGVK#IGqM(<0a#4 qbJP=g!nz^y12-;TZb*1a5pJ<;;r2!GJGdK8@3DNqzhAzG;qMP5(Fd6T literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator$2.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator$2.class new file mode 100644 index 0000000000000000000000000000000000000000..c38e111f6403b3419df0b54d464ba29b0047d5ab GIT binary patch literal 996 zcmb_aOK;Oa5dJoC>%;_7(w6t@08+~VOW~L(QdOt`8920x#BpM;k}aEEw6+oaE4WYz zBz^!t3NgDb5>z?HlIO8A`^`5q`|J1jp8$rqAEPDkBDc$w@=94VBUdh@(>8yfDpN^k zNT)^_X>~!Sa8?y%N=7ZoXQxxrwLA!}bq|LzB7xmg`beoJGfz(zPEwKCoV38^SQ%AK z1loK1Q-SEv7BWE_-5xfuDbUZj%$s^SlkS9OS_%xp%_%wM{qw`9TBuUsRkkkDBY~c0 zrbvf&1g`JxXQ7F@QaU|wjy`9qtT?fItmcNQ+A%v?oi$z)vC(7{V_RT*1(O5=bOm<) zG6=(dJ3EzmHA=t@^l$}zf#lfME|*6tO!L2GJ@K#tpPEK5Zfm@%|21|t;aT>dn_Syc znfYs3Eo>3vuE5cHw#qAgX^eD-n#xj^c)&wx^NUB2{M^`&*?Y=bu-%;_7(w6t@08+~VOYJdHq^eK>GH_@WiQ~jxC0jPT(%ME;;zz-S zN+9tA_)&=2b&;UTF_t`!o!M``nb}{zzyAcVhlep*0xxsBNGY$BHB)lsTsm#@52-Sh zbcS?ll#x~!WC~|hQKn?nf_!#5AzjOZ;9B>1KSm_5eM%oG)nsPr$=pdQGMkeYSRW~) zsaqvctn6%iYbhcPwo0>a?03^snODOE+&~Z4&=*LKZS8V-q{1}+Th=oVEAXjl^zybw%lcnoXJeja|Aoo5 zEtQ$Qk=5K5G42Z-t!Asd(pSbvcc`f>Wr;^Tls3P31j)~h{g}Od)`Iog({psbve81q zGGPszA>!Z_wt7tx>#OWVez=^m!FCJR1JE8@9;ovJgZJmy`VwLu%a;N^|AW(Ma5kPZ s&NfFqkteJhBHwW1^5uqvrxf89%NA~56u*PJ;q)HM2mJfxdl>%y07{Do#{d8T literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator$4.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator$4.class new file mode 100644 index 0000000000000000000000000000000000000000..fea2a58716a8d2d51fbd023048695be497c7e140 GIT binary patch literal 996 zcmb_aOK;Oa5dJoC>%;_7(w6t@08+~VONCpaNL8T%WZ=*$632~#c9BwEDQl+W%DHsf=I>Hv zD(MXA)F>mZF31$ls-jHEs0I1#bV9n8`@yyD{*xGy!1f8fr&N=frN?t8smN?jT3~&o zjH<>0?Va6;Ky+XWnV^ks4{KN#=x1E!b-kEMcT7_)1qR{fgq-sJ*n(88m)-fa6F8$DX_VONrC~o z0$YC>gkis#p2)l!Cg28oxP-nya%5|l%R?2W`QNf0d02rDO{3?xHCopH3OgI~Ec?$) zu5GEz?3JwMwuo_C;BYlt<(0lLM!Ew{WhqPCuaq@Ya^+k)ZS!}j zGL>|ObZV55Ru^OnXH`+AWYmIub~+(l%l+V5cmGL@NMQSf-czc{%+lkzlT>6jCoQl( zQbtu{f%eYsL?Ak_g-p;!w}&;X3-mKC^SWM4r8}mnmI8xtb3#se|LicT=BgBUnXQWS zP@w0TDbk@GfvY>aS!klJluq}ZqmP*?D^BblshOdwcFc~JXN^`wY&agq*c8}Y!X&`} zU4gB?48pMAOiyH94HIw!JzPRxAUU$N%jKa8)BJB)k36ivho;f<+ZrwFe}$cmd6xZW zCfBx9X7)-}b6do?EpWJ+t@27=7$e<*rm~bJ?(tCC{NfQLKR5Pc_8zkqtk)i%qVtuF z77~^TYv2RR`+; literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator$AnimationHandler.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator$AnimationHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..a3b14cccd5f9a2bdceaa8440cd82a975a0b6eb45 GIT binary patch literal 3444 zcmcImTWnOv8UALx_noydaO^Hw(k3-zZ32rSS%PgyDG9~P8X9nLAp~-~KD7_tJ?oxb z+cAXP>eLW&QKVLaw4hj3>L`7vs#LDkswh%LRi!VzJVa`xN_|XU`%+ny?Kj8Ai>>nL zTI(}2|NZ~xzszTMe{~DMF1#Ct6c{L!OBu6Jwad<+=~hN8w^%NWW^AWwxsF-PIJRSz zi$kU}%por--7&Nx8OE0cjQbKOY{CN!_OMkI*tkl}vBC3Jq1qkBW`PYJ z^LW)RW)8TnIhD67RqfZ86~404mfcZ2jJ7boy83qgU?^(SG+S99;=~LIc04@C=UM3&vi7{F=o(r@d@OzrwR%yNLQV(YbRim7LZ^ zoWi#hPU(<`T&q-`VE#4ZIfXNLUZBxjZhVJav&57QqA2H7B#3)0Pihq zSDr47Rj0hTdY*h+VOU>6oqksgHb%oZPc8RKxX-MPC=^j5XUTk#6_C#5^vwvA6~^!# z_M?jB40+Q1@_WiEno}0F2GhN?PIFdlcziDPvanFYpDx~*;q z?1^eN5h(&@sb}RADxrnYAjW|C!R>@M0z~Y$wX&ZoxWadjogXY~P`ik~iP$IF@^`XjUo~gSk$}$$JU- zlbv&d3CE`e_?3E=^Bm?W!&Pt%cKi~NpK~J-<5#00yAkJJEfH`{@WeVm6Tf5*Op>;V zpg#xpEnwX|T0TYU=mH*G+I0oC{Q?htO#D3g^q*E_@c;4x9`R{{+vm}71My^l>rM1G z?3=@}WN;okD61=^cb&-)aoKP~HZq4tlOZEAkH+pnv|Hwz`(Q; zhBD%_wZCfCPVIMAHDnWW=-O_O!eeYqHnz~)(^_RT*{D@&LPLFk=yXENp>bN(mM{YY zM#50DwcFZbhA!>N+K`Mc3tPZhvKR>uKU@1kubrvu*h-0}R=|*(@1wONz~EVoPfN(+ zGBOWmKxab0%Y=WTiwqF=rx&d7I!CEpdJ z@|tkubumHwCHW)qhP)xJ%A4XE*AL|f;$!)t_>KID_^q51pK<+@{Hd4ie@BbXXg}Na z&P9cpE5#pC#W?FjiQi!YlPsiG@oT)uT>#w}!4!8vJ)>}eyAUj7aS>ZtDIi?&y5#Qs@?x)rzFJ|gq%+$S@se3U~w{E6x z-3+a}Oc@uEyo;S8j1+%&^eZ8shcu@buPjmZ?iwRAP-&!o`~3*?86$Gh433X2Kxo!B7qz9E8W4>2X-@ zhYLb?9=6fS#CaiH{$ah{@eukCS_sFUQ<7ApN0=PvKjG^CG%5n&q=XMp$)$~|OfA&= PdWKHv-J&S)=vSQ|ya|YT literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator.class new file mode 100644 index 0000000000000000000000000000000000000000..24581f1a1ab62e57650d8dc41ee897c46929f863 GIT binary patch literal 17514 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/view/NineViewGroup.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/view/NineViewGroup.class new file mode 100644 index 0000000000000000000000000000000000000000..c05ca82f7e5b8dc0d3bd90d3aa3cb1063cdaf74d GIT binary patch literal 2576 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 KT>J~Kqxjzf`Y<&B literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/widget/NineFrameLayout.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/widget/NineFrameLayout.class new file mode 100644 index 0000000000000000000000000000000000000000..664c61bd6a80f0fe016cd0041602caedbb6483cc GIT binary patch literal 2306 zcmb`H-A~(A7{;HIq;&u%l+OU69W84bLctwtN4HQ`N=eHaC>s@8cQc(N-tcN-kA+1nRbDZXXI9n0J`WYyY|3es5cM~>^u%)6tIsa_qWtTcFgU^$l*&Wq#tF=B5JzDIMok*E>o=C+P0Obc}Gw8f9J*%$2XP3Z?JsDpe*$0x|E zY~CThiWaQLvIRwwz&#zG;;!0oPh~n-6$Ktbial{&+e9p6yY z@mZi&q&ctcbE2+0b+>F5ES0|gWB;V-@8pieWu_*|{~Zs!>I9DB9PB(g@+FS1 zBJv7-h-eTR-cvX6iql8$!875*C`bkKBSR?I;oRi)2ClrBriYGt8MV)+84Esc(hP?* z6vX?A$LE?Xd!TpBV>w6>{sx@<`I3u3&05z<|3VB*bq15ETFgQtAFT<~=hZ={Jg z65>%ClekVBDuGi9bO5m?C|e{2JHv1%T6v(X uEFZUWlc8?W%Iw)z*w|-Uc@$b%Ic_CS{W)5hr>SXq6|%46D!VC_Fl@Yg>8 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/widget/NineHorizontalScrollView.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/nineoldandroids/widget/NineHorizontalScrollView.class new file mode 100644 index 0000000000000000000000000000000000000000..46b2f34edfda54cb733d1e4b088877af8cf3a5ff GIT binary patch literal 1512 zcmb_bT~8B16g^W4g?1_OS&&aH)KZjH{6Gaw2+~NzO2jnkiR1a8F;5hz&Rswu5Nd2UJi zm1Wy^JZr^NZeaVabWB&dw&#?kTlPIwu9%yu{M-)A0v`4~8bR)IueZtl*~v&DxG9zPKf zPvZ>MZlD95mun%P7>1a^38K=uVh2T4 zQ6=T5fSnc1&W{%3OnTVB2r>dm%dw?jZ5XzWKwY-#kTo!hoPa@uBhMqpG&$aM#9%Aw z9y)K}49*I~H;%*?^8$?=mlSgs+68$|d4-MO(n#B(2E zyyf-orlO@=rLq8Lb#UJviOs{i6NdU+xW`p{400oo&o?4uo#7(@(% zdJ+4)J~&tRW;(NCH8QVjWHPx===zSn-cyb5$z~VnZM5{hLn5aic5yD(yN9tuY6DCN zXyw|bCyE2rK`NaX;yOa2hg37asb+8i<29;LL^=|*sYi`Tfx94PdsvV}HSDFG+#W9P z@cL*)`dHO|R%b8_V^n{uh0%4WgGlm{QgYQLm$fWYA$C$@r+0B}8;!a29}k_lkIqNc?vHYmf&J}7^^ z`Ng9rUkZq?dKqj`#Sn(cvF~WR0+lwcXK;%y^V9D%H$4zYsyK)90)4U?rN&N0cOGjM zQx_O0+EvZm(i}s+2ZIrJ+o%hyy)DNn=Yr)?yjmQ%0%NC^M<8Bywd&IiZP(*aFiG-L ziYc(rPF;7QTOk^*Vdj=y*D)#$S1;@G49Mb7$>LuYIHz%rPE%*>P;iaZCm63N3f%r* zAnQI!R+3}{qBZ@SvU?~?BG#FSy6$cnb)#aKhRb$|WW4nPH&lFpd4WXLWZ(H+zY%;E!z#Jsuv8IzTxiA(%g62o`%cJO_<+29(made2Vg!p8#Ha`1S)r`~joc znI?L(zeD|rx4$rO#IM?)82OEJVT|&c@O0u-Ng#;3AbT@%bu3 zFENOa0-@kNc@Zx;eDdz!;~tEJlrTRsgoGW-&RlQe%A0BW>1cpa2R)iee{+jwETEwv z-j_Tc*No&ELfGe0kZz%M40Y0F0=i!i;SU%m-Nh!R-;6iRM2|3d(!Y)KQQtf6R8W)Us={;-q}8av|HdK#V|NN?j}-x=n!XuYy+DFqAX{Un&};SY$bF?{0?YJW3ZbeibI@s( zr@g|&9M_0YJy~22DH(2HH6pcWWOTMr`-a>XnoQ`FXAn%$7!!kth6;!x?WlOhe0qkbE{Mn9{!CnF{g-0#)FSct@%kPP@=qw|0lNJ)lX45 gfjO5|56^c<;!4Ohku*P(G>`k(B{ur$gt1$H0j-%WHvj+t literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/StandaloneActionMode.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/StandaloneActionMode.class new file mode 100644 index 0000000000000000000000000000000000000000..546d29f802a4ab9cec18b9c1325f337dd2ce85ed GIT binary patch literal 5188 zcmbtX`&$&}6@EWhST2J>R1y(W)Y!nHZZwI}peBGf5>P8p4}N{zw@5=ob!I?JM*u9 z|NS2T_TaB+)G6%Cdxfl-4{gt#F#TZ0@*OWfo3-80@?F!(&fC^Pc04rQNz?IMYf!Ho z^Cqn{QVQEww$?_;rHu*)S6;f@QNePH*)e_%6>VqI@*f*E9cRMK&nh$(hCPzH8Y*lY zB^}?hC$o8ZPlt{E16OJUDyYY&v- z*SQh2+!AldGQ%DU{iY=%|mw`@fQmF6k%QZt`vw<|4VU z@}`qBeOvyIAEv??J5YG`zI?CLRj9MH7M1MtlvIH`pMK&d&}s(>NjEX#Gj=HI-qf4e zFvByZKW<$q>U|~EIE3fZc#gbkRDBhB8W_LLSNoxczrtyNp!&Taufl-XHFR($4hraDjD{K(al-o%3c%X%Xc%I~ZD;SZzKOzr~ zD71+r5*?_sELtt_oOHP;K`$9NjqxIrHS1;4R0sN)jm9b6dnNqK2G*iOYVQ~* z;FxX#?&M%TZv}xpVLNts?Z`aOEs4uBFo!Fe<6$cZeeYU14u#D9a+GG6rck0Lzpb}g zYbleaBDp@^KV38^mwnj=k~kI&gy7-PDpE{n`!xes<#`*QCxy0waQBpyGR@(217F0K z*r#csuzs1_SVQbK{80iKai<)X-&g3b9njsy18IC!;qg_3l7w!-8`!SU;ko*0XcfjS zhf0<+^wny~uhE}t>1Bjos2QpL+XmjjH+1!*vdeG7j-8(s0w=2xcuJ?o;&P#fh8$o7p=ysMq2cN-N9ZiFu|a238wC9Ydx2$lE>xbA9w&Sv2i>! zGPN!E9)6I<_Z6O5SqCdnT@GU4hqz89&X_^Y=B9Nl$sx}+4j32G_|bh%&XR6D(4O+< zigU*;XU_6la05S)9{N*-)8&r*ptF?LKncGTJI|FH_|U-5Wg1Ea968t+f+)KjI;vE> zWRWEBwxYiA~b4{$Su^DPOz9 ze{$aPryOrV4A`pd;3YdTM6`^1ML%yHwPlRhxYA6rOBy5JEJj?{@`oKW2rTNL>F%tB zEo}Mq{4{XltdpseuUB<4bLuN6PJQKp$Tbh?`*!}$6GGo}ywX=rbG)wOnoc~-???FG zhe#2XFKd}w*qG^GM0aM#A|B1`TtrXi4z`}}zlFzAOL%+{{h7bU?Fmm~FaMJl#Aj%!^xZzjQm60sGn#sR z_bhp*_&djfQiz#XoHJ4m=g zRp5@sa056N!yO@SVb_)+z3xp*IKG4vm5@UWZ#V(jR$|zOlQdAtTB zC$E_0RpwM!ZjN(!Ce!~3*4#l(N`3AlzH=|)qPVDM>A+%2F-Dn)F?8cZ!p-Iq^Uc_Y zR|x+qS8hbzxir*&cw5J78kgd0jtjVVVit!8E0u32iyp~W|7}dv<7{PYr>W<0?bL|Y z$4(VyN?0?DN3gaK#=ef!%}i<$wuIN-vxHgg;Wpell%wiGBMr`SE1hFx7dT74%uVqM zdKiO9HFCBkb|!I=u4vUqz;D?(Szg6!gOL9VZ|Zcu8ui181WH4RG6$U4cu#EHBrKOO zUui#`ux~2aa}ZkD{#vEIv!eay@cGz&EcV|?{}(^eRk*l>FZ>giL;!*oRX>X6N&>Aj zkrOtf^?dEQM6fU8D>3xmxU$9_ym6lJ-M8>&CB69spiv6%EqpD;c!3xqJA?K;nH{(B z^?G*O0Um1P!1_<90NmB3U9OyS#X zMk2Eh@SPYeA8({CHlpv|Ktt-|JGh}E=0^JQ5`LBv%26Jrk%37{GfmBSlLC56dyKkN zSIJ`+et};SKUSQK`oF@jV~0-@LU!&w?B7XXEoU!S3ctZeF~kV3QHxr_ZzJvfKC$Pb z&HgUQzQ_E%pMXuasVKt=f5i0|Hn|seR~G664HNCCyL+Jyf6~GH86pkIYy*#xn~lvJ ISnK8bU!XexJ^%m! literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/View_HasStateListenerSupport.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/View_HasStateListenerSupport.class new file mode 100644 index 0000000000000000000000000000000000000000..64f7c21b81d4a58aa7a377e56bc7e5222ea670b4 GIT binary patch literal 334 zcma)&F^U2~5Ji8xtK%AZ0>MlZ8%#}H7M2wRg8@^iX$z;_v0Hk|@ooklz(a{W28M%4 z71Xa^pI5j0M(w4%G zLwY(MeUJp73jIA*qziI8y~_4%L}5VN?aFK>JDJ;&DrM`3D8 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/View_OnAttachStateChangeListener.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/View_OnAttachStateChangeListener.class new file mode 100644 index 0000000000000000000000000000000000000000..a0db78b2b5490f95bc45dcf1f2a0adfac74272ec GIT binary patch literal 274 zcmaivy=p>15QWeBccYb+lp_ zfjNAfZ!XvG9{^(vDzpq{PWP5v3MyNQhni!f?#l*A9EBQt3VgPkJU*5(Nr_y&N|bn7 zlYH_b91;u13LS&tj!tBoe7DQ(j$JYssTB0iv0v+Z5U=MPJTFLm)ZqUL-d;8ak9T6m urHTDK>i(A*tn?Ti&qKooPyZ>s7Mq@dK|6m7w6b9rJrvWb?3_H5JNh?(K~dQN literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenu.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenu.class new file mode 100644 index 0000000000000000000000000000000000000000..984fbadacdf578bf9e9814573396f9c95340a560 GIT binary patch literal 8731 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 RGyM+MdLJV?E&8CT`TsjX9aaDU literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.class new file mode 100644 index 0000000000000000000000000000000000000000..8d7071d3da027cbd3a0d6347028e18c46b7785dd GIT binary patch literal 10750 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 S{%igYpTxDCU*+%n{C@z?7m?He literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$ActionButtonSubmenu.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$ActionButtonSubmenu.class new file mode 100644 index 0000000000000000000000000000000000000000..728c15c96da85c3797379742c52aad56d14bfadd GIT binary patch literal 2911 zcmb_e-BTM?6#w0ugiFHGQXr*N)Yd{9LLvPSD1`DA#73dThN9xfW{LVSQbIxz~_s2i~ z0^kBH0nRX|S%rkExrSvfskW2T?YyO}Bn;ElZBxxBRtJl$PW@fgr=Bno&JGt5_;t(ep*!W~g&>hSPbDVRWWu5TDSJgfwE9hC9k| zD|Rrb8P&|%mXS?p7G-U^iIiN|-DK^sM2^gKvSj45x}EG^U#_gAGJCVZ&K49Ahc3OY?CB6PVl@A<`0t(=_${>Z+vwmQqo3cwW&SC~`Dd8spJRr9fqDKVa{Mc- z@VhYSY@L6N_xLxsLO9ncMM?{4yg;kmy@(k~UhZabmAtiL1=lc#AjUC#VF#EVR1cRHkQR-IHO=e`!+La5zot2OS?PD0^5H*tsEP4z<}PW}WH& z*eYjcfF-O6)bD9_d(G?)b$8c#fDLR4lm~x1omtrt@G_ZGmR`AS`KNLL|7|?BA)RPv z?dFWfJaTU)5S$uAwh^f$p~S{mM`$|Gw*ZwUH|D$eGwHr%JN&;TE#Y_ KpLN(_dHzqu8QP@) literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$OpenOverflowRunnable.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$OpenOverflowRunnable.class new file mode 100644 index 0000000000000000000000000000000000000000..503b009d1b355ccad7f5c47cd70f6078ab9a19b2 GIT binary patch literal 1781 zcmc&!TTc^F5dO{<*tRUCl#7Tcs8xGGmb;fi6;Knj2wGAT-?rN$UD%#&wk^aT;Ttdh z3==@&gYiL0yhQ(yG0tg=VA2OnA57DoGjnFU}VU{gN zWDU2J=dSITo4O^++!cncZ&`d>FK|)O=c`W3v|M$0iA#s@N|B3|E$+Uso$aR;A&jie zRkSb!H;gSqw+*qbuVgp4Sys`;5IVLVc{8*XR-Iy{$dF1khoz3Ank_+j%XzC59%D#0 zl~-n(wS-kpGQ5g3m#V4g@KK>_7mQ{YS{9ug_kp2PgAaZ`Jm}KUju3+<63xh+9t|qI z017j2_d;>5R}Mh_`v|BLb%CO&)U-wK6(L~9@zl*Fg^ zTp@cqH2QXs_K0*3$wY za&?xDkckHnswdtdU3w*By9n&!+&(VWR#!hDmWm%@D87%8L-doidmm%3>2&gx+5u+d zk{#fd#NmO&F@QG0@fm*Q3wo8Wh$-JNt$fFv^5X=iWF1p4qL@RHu-u_oFW65^tHc2X XcS%<;j|Gw;S}_{4MUvwr??L$ukxL56 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$OverflowMenuButton.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$OverflowMenuButton.class new file mode 100644 index 0000000000000000000000000000000000000000..4b31f64206a414ce916c3f38ac6f422231e55103 GIT binary patch literal 3062 zcmbtWTXz#x6#mXh+G*2)UM!{MCX}j4S_t9=u(eWB3ZW?l0;v=grsnxRbHf?u@cQ2KK zz;!f)1r8aG>A9Af*s;tl6(mvxV@uV~dj*zX!)TU>Of@+q^OkM$o`ybwi`@XS^!=-b zp9zdWr7b^Dj`A|4V$t;ifk>gg>Pn{8%?+Wu}d10hE%dvuaf%WK{L8a@t%(;|u zCrBju{Vlnllf%DOqvS=Jsaz)Ygtc_BjIBBU^R>LuY;btx=`*}Kw;3$qW_6dPd zG?rx#PU`4KBtl>B=y(_J3Fy8GlD3uGHa3`2IJzFo@_9^0ynepq=1M-F^TCXcQ#dWK zj})_(Z*5q%73{JmQDK2II^Ji^2nk$vSk2^GvmAB3RM=47?W(1bw3{>Rtl?R_u5E_7 zGz4zGQ8wE&EY*ruN$o>wf{8{r|C? z*v+^l$Gp6`sd5zUi@2m=L13V93wAJN263xkK@$cFJw97{z-09HmTu z(JEV}@-8VNP3aqM-CWqD=_N4Y*7{MIx7{_%G2I<@DW&5IP7GifD;m;--z*?19v#=Q zD$r*Ugb}y|GZu}tOoUWze|7*jk@)%Dr#f!q4wZ&Ott2p7N3dxmBvv;bP}pWQ ztO+c36SB%=>o8jeki}gc>$pc`U5CZ1bExSzd(lXKnFJCnMNQ6Le5vCrj=h#Q{Oc9M zeRger3M_S1k*}giWjN|Oi;AbCGM7BJ(9B0phr#*CLh0CKC&sHz{9jz)m|>b7LLrdq zZXmvrFo$Lt4|Ht9rgk8+0tceiLTF86Y+c}lrwVRab>PKVu8tyO^;V^6PEZ$lIkjZ* z{26avevJ$GG#3`NX3C+fENL6QuY3*E5(nFt4b@_pCoq*{YYWw{W|~#!+ADT!Q4SSd z0Zo35%NfUME`%V_1Nz&*2#;9W8K55!34LgYFAe(cqrE{4(Q}wq-yuvo!0Gt(Q;fuC z#LpOgjzjU^aP;nTy!{lD@$fTD@go`!J;OAAC4Q=4o~7p`;Xy8;M_$2xxrhmw!ZCRb zC*?AtGL2Jm1s{;y7;zvg_z)k_o4-EBIohN91{Z2v?p4;nc>Fm&`2juQCv0&p{tHH) z;j^{y6VeOO&lIEekky;effUJHb*K~UFqp?SZJW|&7C;c}qACp#SI8FKC_xiqTOBqLmI{aECMM}UE%Pm*ovE=sOv%5GugNOAJ`DMS9wCj^8Vwi9 zdzkyX4XKR|q|6SaY$8=4QVx+S5UJwpkP_HJzD8=1BE`j`Gok4{SQ2Z^f{XB(3@{)| zEr#@(_oP+xUZC(&M5hhnE+IbZh$!(5v6ArM)B6x*<^TeeF+sd9Vuwz8@DPuB`~LyW CEfOC9 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$OverflowPopup.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$OverflowPopup.class new file mode 100644 index 0000000000000000000000000000000000000000..01507fb15a8fe744d79b221dd4a7dc1774da8dbe GIT binary patch literal 1875 zcmcJQTTc@~6vzLwv@Bg0s6}Y;idwOh%OWD8ix@32YKoAkec)}o9m2|9$nLh_la~iC z4}J^3fC+-}!4KevGM?F#LQPFti7zu}CVT$p%$eVr{rT(r4*)Y*lp!%ZHa$l(%+T`O zvf&3C+_yb*Q?uNV`>tVYHH&X+4tJ~Cz38K5GFN>baPdKQrN;er+uL6CwyIk)VhrqSb!?;*FhxX;iXZdgHfnqjfnwn&SlbW&QdTq|5;_?$bQRMBuNzGqc5)1&jcp;i#{ zPN=spD~@@;YS|U;>kYZ6swFC|zBX23h!wmFPk`Zsia5FzbfH&;j6R0-T*K*q=8!-V zDH$gj7LHSU6$3cMkai*<8k`gi+b$dCCd2dg3)kXmv#n)yg-SQ1B8?1{FyP@~yrm8R zXh!=$Ll+m+U$k8Qr0SHp|I8@coFP^8Ov5f2z9rW6&6psVp?JJQHZ>K|EJqi=6EY0{ zl?7tRAG2#$Xfp%Nd+V1!z&i~b)hnG{bISrYBY=%Fz|t6F_GlOO*IB|kAa z92<=9L(PxxqJIyAUm}lT8dHdo^DD%q*XWntAT7PcY1*G91t5bnI7_pz&fz>o5!MBY zFQR8~5toENS(lL|484rGi@PdX2(cY~ zU(cAjwUt>Z?1-YPB1D*Pn(i#o2{a+(ZX4ynQNr9((^z#<&oa`iVHxfmVIgrbsN_1K zC1-DnFbM4$RJ2AAK!=7fVuV0KI&>@FrFPMT5U$Tq3xvo2gwEdSYvOL18 z3uV-xFI;oGZLRDHYpqg{`VywkQM!y+tQh8|aI(n_6+MK>rd!}M`tcETNva8N+Nk2c%NnRZ!JyEpTn-P=g6 z%MN5TjN(3_jiq^E+in$fs$m!Yk!=JI@KD7#VZ3QYYpT^Sfk{HJDC^^aN^q8Zl)UdW z&Z|ZGmKPi$1u(2F)_8;P_8bz_TLaBErcQLDIg|1d9?AKS5F%@K#VLwsh8+5yIxr)0 zRT8wkWeF!|>gBTF70}gax#kEH=MwmIK@(a}7Ag8U!vOz+pjb?{=rH&E(z?Onb{0y-Vl=q19U6Xf?>cnL}30KhNBfRzz`qIA;3>>6BK}-KY z_YrzO<2vCG1Azk$33!lEKB0U>NI68Wa^yjGc?tCS(BOrUM2f-FUKGhJ?&6-$R$ym_ zKxg_Vy5AvMr5XtwVN51o%kmYf@(pq2yT{UB4LfD&#FWRvP?*LH!}@&j7+9aI&o|`r ig;MEb%+}XN>Zf4Nd(PuApK-Q{ch3T!K`i1)DEt?Wcq5Mh literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$SavedState$1.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$SavedState$1.class new file mode 100644 index 0000000000000000000000000000000000000000..5008ae82b6dd5eac956ba023ebc1741fd03f7128 GIT binary patch literal 1463 zcmb_cZBG+H5Pqh#JzA@UA_!D`tW$g@$(EfaJHp%dO0nSWMM42sbmB!K}^3hBFp&Cxay{6Vk1q$JMr_Y{@K+Dd2VMPDr)Xz7|o>FzoXv z<)|>{%eOW$NjA9LvM;pf2cgpYJ2E;5I)qF^YiTxp5r#5!P$tZeRNtT}oMA&bctEKA zPXSr!&RQF{SoJ9$3I1=`!9B^V6we;BCA(WbMfxjGV#x42%@(mIi1XoPUS|d%TtSvs z+*6q4w^%>up0c%6iTn@b zF4AnAqe-06B#_5-&`g~pS{c%;GKr;0mMbT?ae;?1HXlA`pQXMqHjBSL`4im!rw{9K lx9?rRy}n(=8rwLxC{X0F%xWZ1LM55vz57^aC9S;t`~jzHby)xa literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$SavedState.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$SavedState.class new file mode 100644 index 0000000000000000000000000000000000000000..115ca101f433c69e40f19966e5cf9745bd83472c GIT binary patch literal 1418 zcmb_cZBNrs6n<{^(yeqbK;BdYVc<59ilAUvNXVk5aSCCC#E*B~6^iB7v>p5@zZew~ zP5c4=DC4>9940J&ktV(AJ@=gFJm;L}_UEr}KL9+&GaVYkOUFO8xD&a)Z1EsG7J=tG z?=4qGB9Pp(&RlVBoeJ5pc4DX3^tl&^P$-8|lb?xpGvblZk!C2K@H1|CTpn4wtrOuy zIZCie5?eV}79&dSqq2PZIve{`VNW0CzYzDo)|9t0Qcb{RV(KoDA4+M|= zV2dH&bdMyDIssvw{M)G4w80`G<=79hdglAJ~kRiVU*}a$8Jd6ZmbDJ zqkO<a`lt_b{tthGF>H^i15x98H+!*S2L8_s&)&l}zZ!F=(!280~{g!fK1q3EY;b z`=mP=Q8k70z>UO#pD2o9q8}qWp|oUT84qc2aZH>%U8XZ?4FMCC%sY=C5vbAhJ0#E- zuF~gZAH}aIg)^A8lp?5mJPbvsW1V68TD@utf7Ggko#dBG~+R9&qv@Qli8I^A2 zEApngkzcBQ!TbfPS7ef^){xWIW02Xzu}372m6!+x!=gT`${xk(SLq)M@=H<2GkB6! OQh$m~noN=G^!x_dZAh{J literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter.class new file mode 100644 index 0000000000000000000000000000000000000000..6dbc520046994b33598bb971e7f61abedbf13e34 GIT binary patch literal 17603 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuView$ActionMenuChildView.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuView$ActionMenuChildView.class new file mode 100644 index 0000000000000000000000000000000000000000..bd4e448ee0527e6798193f98ae5ecfaef4cda3ea GIT binary patch literal 347 zcmbVIyG{c!5S%^WjvN8;_yr1RutY;0f{-El6uT zY4$NY+S%FfpVb$DTbxuV2u~&~ls2smexhTVadg3aDC=8}UOUxU{!|P0OEp-N#!|it zcDZebGwYg+RoEw-&UL4i)BasOPv&e|!ntQ|(u3`6!||S{Au?g_>iUgv_IEUxiYTFe z3Cn2s(K?}BY<054P2NuEkG$tNbUGzY75ap`fBM)_*f=Q(a-qBlD8$nNN@Q(Qa~C_j4yld%$_;-+&gFY$Ioxy0o=oC8V192+iP0fR?>58+z%SUcRc%} zC0!+ampfKViX*Ej+|XL@fVL>D(%xc)fAT`L!+qWi(nvDoxm))=S+|a4{Xi(IB3;4# z2zCz5Fd~EPmhkr-@90^ml;<+AJ%)@e94B}eh&rvy3!a>T3PH35GsS%BkQ?7jv;6hI0P@=qXh7NM`j&<`_z+)9v^~8{?(#g@=n<+&_@+ zS&z_AGhn!yLmyHk+f(ETr4PKt8FFRU75;|9gFuiiiwuR6`~R!LH104=_J%WzU2G|hWt#iRfgZLeJ!eOd z#tJ#|AANxZnqGpw+!RF`A!Q6{^mk$=j@fvBAdb0COcIhTOwVCLmx)F5q|M^eF-AU9 zYG90>S&A@Bq>LiQX?-n%;SwfjMF%j6%S58HE0`j*rk##yU(uS*W5_HXW5z6g!TeXu zpRx~WHlu_-!@{7k+^H}bo#<8=qM8%Lr+Ia|TJD=zZqA&UJ;rr2(Svn`G_PX7xPL}> zuFIOkB8^Au&fz9yk?vbD|9j$3>US~!To3+-#Q%u+A9wi82>%CuT}fY2f@<9+ZUcD~ WC{ELki6xYfq0GWvij0266n_B%0ZeZI literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuView.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/ActionMenuView.class new file mode 100644 index 0000000000000000000000000000000000000000..a84ab5cb106ffc18e62be882eddf32c1acd29a5f GIT binary patch literal 13086 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 vsGHR`j+qXyKj+WP+kGfF^0 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuBuilder$Callback.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuBuilder$Callback.class new file mode 100644 index 0000000000000000000000000000000000000000..48c1cb93dd79c06908797f72c16fc3a95e5bd8f1 GIT binary patch literal 466 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 sHVpnOpT%`0{_o9a`1Ab5%4+<<Fyo9 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

LTIm1lq{gtH7HIljjAMg>vn);xL)cGWJK?JD_ z@ex8PDQftTAx(X}lGKGpQWr;(`hHShx+lwQt1@>%9a2>k3Ovvl*tqjTA%d`>qL6ww2e1w!wv|i+A(EM%{^;0_My;S63uK$xV zZuJw~>hX|&bZv_~4Zjyus0aB7jq}km$nxx_1i2kQ@Hqy;70>J+njm)&^6?1Bhsj^| zXL}^epPC?_Amoz~kU#eYXYIsi8QP0qRPMzy8Y`TfK89cU2t9NFF-S3*?!Y+@7VuJXgl8++co>KWK5E!qYzTFyDf_Sdho@j6zSxLr8SohaFdBCvj7M)-FHf~qkhyo^_Tgi(KMk`gNxQHzVW@wFANuIFv(zq}lY zVx@Up6z!$+o{!IG?0~An48_ZsviSeH7h|bfqSx~-Ldgk#N~&r`nF(KCI=fcYs2M(m zefXB}ID^Y93g_apHJ)s7m71xaF;&a=LHtJ)b*f%9%&b$5EFjFDS;uH|fSSYitL*0= Nl^{21ALpCx{{!sO#V!B< literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuMule.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuMule.class new file mode 100644 index 0000000000000000000000000000000000000000..081874177b9ee2cc47d6a450cded36d9f3508332 GIT binary patch literal 4067 zcmbVO-E$LF6#v~eZAw~9TcJ=s>{d{dRvMrMlpu(qz)C-)!3qU*ZZ?->X|h}QqqUAN z&N#m4gD?IUKIn`Lqt58Nf0X07_imbgZIkfO-Mjam`#b0S&N;vI-~ayn8^A?;kwh26 z14JXSBimWJC!`c;ezY<0e6CBUJFGZ`Wb#K zaK~{2Lq$M=85?#`HC*MyC=1`NIHGJkb3G#v^)=Vy-X_^f5K9tW85E5X-X+U98nQ_LubR|YYb;H z*%+MdM0E3VnOZBet>lF&_ln}nP*9oj*||N9Vp28pNt|UEYxap*tBDG)6$2iK*{>|I zCfhWHGk9B)^A5w&?JlCOQY><>a-QLMTmTFwGG<&9R5+7iCS#gr-2M2g3G#e_c%#=v z{hDStEwK*pH%NS$G;vO_s8XbIxypTmCd*Z)xq?eA?~vUBuZ#TSEgBo=8YCaLZ#Hji zl}izyrG&@!+}i0)XEQ_n*F@RnSDRdt#P5zgicDKv)~_pM*u>fy5krbdDTXCIe&@Fr z`k-ElZcyuv?x}F|Y`TNuHgBEUuZ+#(9;+s}N0MRHT%V?~@0snCCA|#EiU{;7UFH6= z?b|e;a)T;O1HRIaJ1~>DOI2tgGXuDVS&|ytCyns}D-7<5O@@;hbBl6CB<;?wQ={aw zBtpkx&gf)Kc%-FuvrM-3Gh2945M76|pk(FUbY#(R$3Qg1;HeA!o~XO);*RHrBp3;* z0?ArRZ)y&Pd=aSQLRDC+TDp2O=E{n+Og9c^9eF}JLXqq|iTEQH$oBq*@Pf^GQcdYh z876%DYx*K$sjX8*H}ouV+m-@(Say^A5u1`CgK<*RZu;w?=LsayN9#lM*yu|Ah-7hdQG5G?=f1|A~G6fkW=y`;m!vuMhKt^zq zc1H9yoWg1PA^^NWZb))41|tH`sc)cX;&&YXm5elGFKq*(3T8m9dmNlBPHw)+-CTNzP9UFY2VB~#=QvPF0rd7JeJ+6 zLNK&d%xuk(PlkCcw2fMC168UJqu+o}BGe^{LCSr+4tNT6BAV)k_&2H`>v0Y;R=LvJ z#&91?5q|5b-cb1QRW5db^-T+`2l%w@yuWQD@AOvQY2uM#8J|V?t$W~mg@14lNPLEe p9iaZuHtHj+M6tH6(ND3wrU`@LF`h(Nt(E0xg|%B*o~jx9{C{SV%ya+% literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuPopupHelper$ExpandedIndexObserver.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuPopupHelper$ExpandedIndexObserver.class new file mode 100644 index 0000000000000000000000000000000000000000..2ce6f8c4736ab85481b289bba214d187780c35fa GIT binary patch literal 1255 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuPresenter$Callback.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuPresenter$Callback.class new file mode 100644 index 0000000000000000000000000000000000000000..15e9b40b58e612bfabf12fafafc1767b77844f30 GIT binary patch literal 426 zcmbV|&q@O^5XQf$y4!B8iqGJ|UJQ5;)PvxHASe|I9(v2hLDQxaNp|bIdGG;zC^1nK zJl4xMFn_+8`MrOmE3q&&KzJk(bFc z%d~60%})PmHl7ixsqcc}E9;oB|L3Kn`~+e9T7*OGbc`HJj0h)do&Jl6(Eou{5C|KI eI?zkFwoo8rE78vx48F9&FvTi$rX#RZ3_by7?}0)9 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuPresenter.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuPresenter.class new file mode 100644 index 0000000000000000000000000000000000000000..c6ab90ed7103acc3a0015a7b7c7d8de9480f0012 GIT binary patch literal 1120 zcmbVLO>fjN5FM9xx7{xNW})SyfH-6?SmMBeAR$;(6sZ+eSL&fR#~GHiUOTd#rN4~> zKY$;F7`xr9=q()Lr#PASX5P&F{`2z}0K9>hU07o9R+=dn(w9c(!n*Hhm62Dx)E=!C ziqA^?!KbKeenQ8oMTg;27nT`pU5c6DO6UpynqQ*y4Ax6s`Xgh*&kW9zW1$Oc%7RNn zVcPRiz-yl#x6=Jom#RRU4$nzqfk>1$UL~>LrqTdOAHhq5`R)s-7(;Dqa3Fpvt;W>j3t@fbdYvzc->U^X+ z45(t-ZGb*)=L&QnY-tx(Bd$R&;yUyr-iM8do3Ise8+Ib@!d}D&w>W@@@%<6(M?8SX Vq_6}};`tPw5%x&=ke(NvwZDu&S|I=c literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuView$ItemView.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuView$ItemView.class new file mode 100644 index 0000000000000000000000000000000000000000..5f30df61124e014f6be52e6179a92fec84c70667 GIT binary patch literal 678 zcmbVK%T60H6g}pVArokMl$J-Al{(qfDm%z>Xr+--b&-lic8=$gF-+{#c8JtZ>w*v9 zqY$Y8qR?BnZmkA3{``1c;b89ruMW4MrJ#)b6C=!vkdA=?^x%a!(IwP^XBq9vb^ zUhp4bxC*OJm8V&pWY}QXy%BeUw?a?(&&dr*&yXvvyb`VYLkxpr_^J+3yqeA1LDj!v z=uOE-=2CdUa9;HPQ;cEDk^iN98!Vj`!+)mBM%WSkUXYeFh%NI__)UvROEtqrF^=4J z;L3*NZKR(|(lVCx!rrJc*2_h>`(`mNS-NM*2=$dB}Sc9mL!-Y$fa>PuRnD!krbqS>apkCVmh52@mit X;bBCq;e8rE;3(>cP7KF5?R1|2KzO?I literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuView.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/view/menu/MenuView.class new file mode 100644 index 0000000000000000000000000000000000000000..fbf5f9a20465c415dfef104c71b51ca41d5e7d1e GIT binary patch literal 361 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 Fxd-Bk#~lCw literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/AbsActionBarView$VisibilityAnimListener.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/AbsActionBarView$VisibilityAnimListener.class new file mode 100644 index 0000000000000000000000000000000000000000..7360e62de542c4d62cb97b6a22325a3249be953f GIT binary patch literal 2074 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarContainer.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarContainer.class new file mode 100644 index 0000000000000000000000000000000000000000..c4d56c54a3a0c4c66f5b48666942fa45008c30a7 GIT binary patch literal 6539 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarContextView$1.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarContextView$1.class new file mode 100644 index 0000000000000000000000000000000000000000..b9e1590021d4fc9a3199450890ab6227ba24fe0b GIT binary patch literal 1123 zcmbVLU2oGc6g_Ucrb`129h7gzwvM&gSQw9VOhCmXq>Md)`tGJ)>n*jVB@v`<|tRYY=Z$M;^JbMDE{zu$iVc#d5QIfngE4}Bh{QmZbHlYxjM9iI78 zr6N{5@-JksFH-+?7V(D1ZA~Yi(vB1t^*sv(2KSVYxF2!V_m8`$B1|n58P>S!#aj0K z5k>l0__1n7GCT`pk_shahGII9N&Ojt2>u^Mi=i~)QGKX;f?;b;r3}TG#1REjQgL4@ znI15lH0IBO+D}bjYI)kEPj9J{F9C3GIRY}fdUBzddCNGDSDk3>4qJqu45 zUd%?b2yq7uG#Sdq1&2B|u3+%yd0~nlNy6Z~Q)J_I#FIoM7IvteSF|JCQ?|!r>U*BX z5^}Cp7x1bB_I^H`_+95zs=xqwY< S!J}1`zAa%JPm9LT+4B!N!!Pmx literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarContextView.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarContextView.class new file mode 100644 index 0000000000000000000000000000000000000000..a1ee08e5e3d77d976f872fab5f175a75b9d14cbd GIT binary patch literal 16500 zcmb_j33yc1^*`rkGB26DEG&bDrG!Nd6Ckcp2_gxLMw5UE1X(mpW?sn1EMaEC;#N0Q z+>2VprD|)Xwc1uB1C`d|Qm`8>wXJQ{F49_CySM*VTT1@FbKjdKAtCD5d|&3?xy!ld zp8ec==UYdfd!C3+Rks?Xm}UiHk!pV+8Hzn( z+S8G=hq)v3!m$L#pWpZ)(Q!!A3@jV*?~gb7H^q9AfL|1u*ON%bBC=DaQH{AV!Nd(rBQk@s z?PZbH?rh96OZ*ogG^I1>#T|UySqYxM0GIk-{9{ETh;TO3YHv!?Z)F)G--1K z3}Tx1VX1jEa{+l|#0F_KL>EQVq~aA!B~Ay{YKjHHJ+rR4p{Z`kg7${_jSD~p$Y~*k(FhZSEUw8g#~V*!7- z%^wfRcc;;n>bUKY@ zDz(jr@IgzH5T!^`yea6Ja3X>EdWi%G4t1d0c2U}j=H@qpC;6OvzvEjJWm zwKkJR(P*h%Y?7Bo%d8b9t&~|KG0Rr(`JspvO+c+>;3XzqDiT%_nP+R@`BrF6S5mrG zn>2=w6Br#P1qdq{aVxMXAlj2xDe_Ygv^q6^VDkJ-6`8#ZL3gInvFLm&=?`>S!G-Zy zWLYR0jBOARyUe663d*u!lOhE3Hag-+juq`$47R{Ji1V2Rl$NiCnhpwh;#ZFx3hzSI#n{F^^Gu>#5wV)+)nVPa{)gNN*v=2`5G`L!WZic=7 z2qYF{Wbe0_bSvE^fkYZ6)7c*!k*w?pK(PHLYL<^XO}dLd0kBX9&##VU+%2V*(dh&&>gh3)K24v2bmrI+Nav&+N~EWWMNFHU z1SWr$wj1;W!l^V-1|4Y9=jii@TL6E4DA67EZ)&pOlLJ^}V$LGkfcGCzTS#A^rww`v zyGSoF$S{+>D0Zs|t~lAXIJD6UL)yFP%O*WTJD_LKt7X#F7>a~I5Ew})Ro=(@`ub#8 zuSqG|h5ch#L(+;kqg*iU(7dbZD<(ZB;PW+jY5A&2Uy~MhSH?ho-K4$r0w`~*r_Ih; z!^!Aiu><^^6$fo!qHPAf44*!X;tUBxOzA$8Hqqt49b}iSn;?G1A~2osfn*CBg1jKD zA;%9f2f+eXkxBGRX*^XSaUDKjH1O*Vh z|6$Vq(LZ6ELN=OAGbbF;QWR_ro34_h0G0HL7C`LcQMpquwl9~&kY z2ufxr!Vy`xep5rxU{6kn>a3kk0wFMLnp8$31cMTjOJ#-Q2d&ho+9;Dp zQ#B+l;#g!47xEaBkK^NEFh$OhYSwjkBi;2QnTDm!dWf{Gb!OJWT*>UQCXb_^fpgAm z4^QBU27fHab;*%JwLo5q1Sw&11y2%ACl*Aylbgh03?<*wR>%rdOr9zRQ|xM6C=u!i z!M1D?>P^81-HGiuQiB*Rn`vua4v<<5?eZra#VSHItvj&hqNodFaXVY^RSscGHB`sL zBPD_(6uQnd$wNiZ2|n56Q-mSoav2iA$o7C7M5G0tPlLeo=}gr_i}{Md|{51&DIiWHq~@+?7m!VpL!olVA~7|w>l$i#+=UkCFM&KbtkQ#?GI z&qZL!bD27aB6DUd#{gCPfm!6?dY*4E62B2?x32jp3TN^HM#?u5!nG(mFB}T2&7L-$ zn3ev__^AU%NhrkU^96>SyqqvNV+II~$rmzGI|F7)0!+lyF!9HjDT8VaZe}`t@KG6R z>4hQ~UM+L#dtl?NID!sdZ1P2t5{w9j5|L0Mu{hS<(=B5pa^Y5q(@&7vQj^=nfeSeh zd0FxGnHHCjxch`vWS1JwWufe^lZV9?9QM!P=g0KKNI}AO*)>+Jsjtx!H93`hGD_* zU`_6k9p&SAEuIv>P>_w%l4nJOvaicczCym2*jYziINSy;f*8F-_ex0C72A-Tm5NY( z+~li7_`IP+ZdWUYhN5d^#C0ZLBO}JGkz-zjDf6vPe^1zn#O#DpPCo{*h=U|21|!3q zc9f>uBb)s3H6iD;(FW|{&2%l2{`A_m&qyy?pS1x!N1yKv5u)_VgllDiN{MQtO_o2= z6Sq8kJKt&W9XXkdmTRHpRA)?Uw-qq?E=Izr4TaVUNfH|J=He{V;CqnHWaGkyaM)Vo z494NS|9Sk!Tu6-b)=AU_0ImpCfy zPe8Cn^$$X&5!?C{KWZ@YztSuKJ>KNU_|tYA)*6a*hplFR1Ufys9}pWEKzW>>F!;0m z(6IYV-p-%H_SefP@1jm7*yHR7EF zv1oWxMTb?2@3X(A!V-MfWPZsc3Ak~8b zw$s9MCU3woe!CNlV#^!Q>aErwnX& zdg^0v{0PvQUpDz0(pi%2Y_vL)(zV~@SEQ>n+tnfmd3o1BP6dr`oBSO)2P_p+m?PdY z`GCpauz!D@i2_(U=j29zPs9Xp`pxj8lk~tk7 zRiHeEDr7qEBRf;uG}*|-;-)H6CWI!|xiB2_Cz;me8WhKj9c52yS1ueXDEt6XLVpZu z^P!3I_loSU%v2-PNbm_Hnco9%3wkg$R$lPGTThl5Z7Q!CgJr`)eN?l_G@1=IYGEH!C)X|<9bHBpU~k13{_s!o8g$}uL>-TwpX4S%LSJO_Z{)U?Bs zqwV+PX>=%;<0Rbm3u(h3#+{|6l+zG2)H*hZQJx zynfmlmc_D;P)i{A^*=EbZBT%WRzl8l)>$Bt@ray;d2(O~WOLhEESw|)`SHjKd%{7j z7@8Q8{3G7h*$PgOW6=g2zJ>f@#He+F0Q#Imz6I;`E!n99l-{2^26wFkXULh1veX(w zA!!)k6mka-GSyUF!d1DP(u>R0JrW&tnW@%FOfI>YWHSOkVydVdeacOa&U&5h5IcO4x^8tMils)IX?7TA7yEW)HhkU2MuE3TBpG^d|^AVN$VnQWk8 zIR1$y;UGT`|M@sGS8_drI7rEbi!O0&t4rJw=@OSiy2SaqE^%UppZ$MRl`WzH(Q7iq1<> z6KZ*AyQr6zqUy4%%TP5?UEWKpP<3NyFSVDuQsmEK*Nhh>fR0@)M(rZ(wgp7L2&8QV zIhTNhtyD=%fq5JDzm!g+i>Zc|1JjFX4ql$r(JEXwuf!vgOR0(4^$t(BG0yC;IkUrN zXNR()1?J>o&06ZDHJ~5M0}*G}?I;;|jrZ-MkZ&ig-AALONKtH=UG^-KJ>-#aY>Zwn z02o0Cngy7h5R@*Bi)q7gaM`Hm;4X#b3KgG_1m22?E_CbzZRS&@pV-%?HObd^t2yiot^YNM#xex`o`^|Z)C~R zfn!UeFmx~ieT(72P&Y^wgI=tI&cwma1f4-inoB*@NbAASOf=?eNd zT~F8GA;h)xFkOdB|LbWd-GF=Xo9G*~C5PSnGVI<*`$2wO+0hg93Vjm-Jr|gKi@ptZ zeJ)cIRvb_H|D{HQt~O}vzp3ajtwiO0DiUG%4(+n}12I!t1>L@JkmRiB+KPG`n18#* z!&X#x1`oGf=mQ4Rcj-O{);0%L4QO@%>=Jq(NYVFwRlRfo^@IDUOxg}g8~4(|s(n=8 zt4h(U;QWuWwDmz*2`^0y`UGfuH`ciad%l;Z;I&94-47hL;Q`=-pzlLDxYcBEtD&F3 z7BUGH@+q(M_yT`5=Z4kdUqyX_KfKOVufM`2SQ%K`7nfcMZZ!FJjD zuLg(t)?hFn2h7g`<`YA}{Ivt~H}tlHr)>wZ1(59ZFJmuCE2JCUM4#7SYz54BP-FV- zpp)MkIQi*8CM&t^w^zntm~C<27G~|I1laS?ZhEJ&Y6txZ^}jFk`B41J6-?28_EH}> zsoA=Naq8#Z%Z0tHd4F&R7pEJ_0BY$r8tL1KzMYJcmZsQ?Vwv5F0lIaWZk0jwdWy@@ zDpTLmReF6lkKaZ{-ga`iW=nI<_j6>Z)0hU6!_a%CoUZ&@v zwy)AYdJ{_e8z`rEIG;9uZ#yh1r7k{+D?#Un@q%)iR^_MZZ1$n1w7@o!d6@hL{qEo7 zoidjXQwgpa`|tuJ&%kLMq|V^NKFoK%DtzT;gZk#-zh66Um!Y6s#nWxBs&SA&csrf~ zLe1DuCknyA)h6Hc9bE0pOYy0D`HWtk0bcS9&}BP;J*e@SHnDW0wCv!sQe4|KeGkuG z?yK6xb5dMamE!aEa#J(N3x6WqTbtrV%Y1vNd$}yMi(7haW9>@ulC1TIqlII5fU3o| zV+uqIC8TShCqVNSaj&rX?aq)PY<{^*jDEQQ7OQ^@z!>3Je{JRk{EI$UFR#ps#Epo) z2=>x|ohzjSh;zONmVTd3r-OLb`$L2=KY}BF9k%@qJo9{$)|`-lCi75UluH zbO-$!*6TN5`P=jqbaW@ZLod*~5SBkcT;8Q0)1NTwFBtJx)c!{Qq`%|U#XqReEGc` z@S(Q0mt*LRrFdPIX14u441;!ra0*Ff5ZlqL$ctT-vztD~2AzmkBQv-##}LhQ_9a%^ zMXIm}uibGsX$vm`58F>6QsG!59ES-H!ZC>5`s~6wR$-I!xflzVKy^xKB#+RG*bZ!z zvq(PPP<0~kwVed4`C%Gqa2#a79jUYACWj2N&n|3z6U62DeN-X^{}bf9fIJP5tBwho zaRGWP$b9Y5kWU8WQvmt2V?lQD^?ZW^`3%U0P@`xMZ(gp-j_l%_26#7~l>@8D*+28m zyu|@gC*lPV#R5WH8%)?O1A&~Yf!IP*>;S79@fSz&4t%C~=Pus$_3@Zf=Z2XT#dv8t3HL42*q}IIB9cZv9IBO@9G-En~%y%L452B))aW%UL#mj=q((@-`vgL zs=+iyJUvredT)W(1LObQngVG}@xi^kc~+6PpuA`&|4=?&TMZB*@cU?j6bQ(DPr#E) zJ$JIicktJAV87jYuwN$v!mFe+#Xp->1hBNb?8qYojJ9qkH}I-4b>o9nrb}}fJ z-cD0|-eN>Bvr5WKQhdm3tgb1=jH1WM@RrsT-B8Q|=CQsveBOL-QHtN*4!?$~8`Z4M zc^g?J@qE~v1!VFu z+vovaMvw8u^aWml=eH~IEOr%rmoK3=c{Ltn`SGl)wt8VoPWyK@~@$Mf57#>IG~>+#etxw)q(%Wztc$o+W7aV zDNx}ZeiyYo?EP8(18Oep_!`U^4K=wI82t$~H+JpkKci+~@2&h7)Cxd>Mx9jP2{Udb z|B5yboNgKajsH$Xus!SeZ*XHpJeOASKhTSpJoqKd|DjgQQJTsBM6HBxf}8mlYNh-H z&EfY@E8?f(K#uE1 zPJnAI(LG!LjwG{s2n`J0m{Ke)qg1}@tM27_MHlT>Mq|}zRh&|#%c^`SHL7ZlI&S$c zRi0Ag_Na-dO=_B6l~R)>8iUq`rAVn0#n60;F7>)x!J7QM8uxabZHNx%r_@QiRpl(B z+$c(^ndQbPbxOXy)N+?8%grh%FBq*(lLgCRP0AK_ZBD5(W|SAC)Y;2!$nU$s&EEWn z`gTqiGiv*!Hl)PFH-qL|5T4u&r+*9d;#P3tHvAOob~>N$#BY1-i5?`spfq?+*FI2501O>Q;r(7KrMtEK8gsu6Hp4Y6nu>G`Vit9 z;Jcv;3^mbEv%o>3|4_qw;y>hRl*7ZVm@P+f&*pMz2wr|@-bt*R<=sVjHTm0VVLz_9 z%iWr5Zg4FtAi~Tv$KVYz95ZZ=fn5*w?a5(R3&=tIIN0@B1SpT=wa*h^*LFICKSy)< zNwDh+)XYzVgkPjfp+*7zGKKgVuxkfh#m~|myc56V=%r6Xq(6_oXLyfhRf|m;hgFqy ztHY}EX|2O599B83x|CWSR&~;a4y!icm%zdxH{w{EL560~1YuB!-2E9O{HcE*{Bf!C z)cFp7UcqEJP&gzm(e{$!ASZ}-{F;31)&5O9Vuxm%YA7psgxYKtYIj)Zb(a@H8CTc1 zy>8oU!lim4{*AgxI$uK#Q&w)n!5VT136IsHY7E0*Jzm#%$DLyp(Q0Sz@bpC*4>MQI-=JFFM+@tgD(-jawL=(Ne1 zb^~-sEzyZANUWAZjwHA`q}ouEW7|V&8ESF{cu3WwmJfEksV+v%jjZ-HwH!4Aj}-T- z6{r>9$nrdG@(VSei^z2ZNHJHGPsOd%O0~-7Dh_|-Km;-?d(Jr-;X@inJ96U;j;t=x z;XbQNGay!Co`8@;3CVK|$buz&3S{XxQZVP=B8Yznbo@Q+{JS~uM`qxUbl^+&f)E}D zGpaqa(2%(PIS1BYxUL=^#NUSj;m-u+atIGe{l*&2mk;8 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView$1.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView$1.class new file mode 100644 index 0000000000000000000000000000000000000000..964edb3bc0ceff84109ad896cae09a6fa57f8448 GIT binary patch literal 1739 zcmbVNT~8B16g|_HE-fpR4=c8!C{^2{EXcPtCP*|X7I>(si7#flos@-Tw(c(Q=5H_> z6aR*Z#*YUdeeg#a?<_@VQ?zND>CW7pIrrXk&)oj{{rv}kd$_M5#IR^O`vy0C%aK*? zdOO0k9dpmHq%T~_ZR5zQ)rD`Y1v?&bw_=H-%$$Y@Lt>X7a>M4bZfsX~h3RXEGCb`L zuxNT~HQpdE0phkS`eMHrPF?z;Ho_hWsU48kjiPO3KWVPxk?=4NNKptFy8~)I?}kp z(9ca%ctO!#bsJu5)pF+$#2bxMA!fGa7C*G=TuJvtFogkJ#iWL7RPW9i{2xQdb=+VW zch2CS6(>VqmdJWR+G=oDNS|TpoPgVJQCk&AS&Dy#(GK+>A{&lpsq7e7ks)N&XtF^n zEc@Kt+vJU=tcEF4homLzC-;Y8wOi)fLQ-mumz@LG6i=)`$StLrQCFTJR<`Pr`v)#5 z{bi}W4HSA}gX(#f<-ZlB+x1wQHc=t#o5J65hy}eUsXMIO-1CH|VUb~~i)u5Bb<&K6 z6^4b*=l@+mhGgfUF-grLOrsAhkx)H@I&PRo3~{m!&};=E`U3I%^k?Y#FBtqts}P2j zEqJ3&zrhHtbvmQ0qZp$n!$l;UD6bJglx*qzC+J^s=_f{;vx#Kn8zv%nu3*Cf>|hYW zTLOBA6y68W3*>~3H=)&R3YoxN8aHt(2qcZ$$OdQA$RSTIrvpruqK$WOw;9VK8C6E? zG?8e4^daz+Y$kP_gi7PsQv@@?K?AeFbB_L+Kt9Ilcb-OyJYU5EmZGWyAAkC=jMZrD E4~bmob^rhX literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView$2.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView$2.class new file mode 100644 index 0000000000000000000000000000000000000000..3a996aeb011bd4c44750be29cb420e08b1d505df GIT binary patch literal 1390 zcmbVMTWb?R6#gbjv&p)(=~b=Tn^DuWcH7iqAtGp~P)Mv$iQwC0Gqlt0&W7Dh>yPjs z2rB*qp>8lnG z!d(%#zO!#j6^TG`*FKc(9TC}2V~b}zXi9NdtQg2J6!!Q5w_UDw?5)~)`6ffA=C?&2 z41*R7V7WFe0NL%O65hU!v@7hSI*rd3Wkxo?{K%t1F7Y{GNX%Oc$6fOVugw^ z{9b<;CQ9`)-K)+wOhxkP)(xUW02-U zL#Xb{K!iebteVFZW(-U-Y$qtLcmceHS6eqojx%Y;F9WacZLk6O)j8h-nj<~bm;GI4T z&27IMIO4gCd3tJGm-L(xoi~)@`k_=i4H517Z3b&o(Kyyz9)=<`P+=H8LqGC6GrrTu zT|CMA)SY66rYcQq0IX2Z!$m)w6s|)Fj$({$E`ErgeFo9TU@!mmaaV@O*>XU zRy9vL-G&T8p@h$n3Oh2$@00b$9OkP;@LVbxzF;^g%*9Y_G9+u-6=^VBv0!2`0|Uzz z(#SFxg-Bt!A(c4l_gcb#%UhmcSZ!#Bdrj`k=sgxDqhJ`G&ErVELcy4Nlpls%p>ZjD z)nYS^n^-q-i=i?{x-8tr9g3!RDwV5;HST#W?sOS;XLuYJZls)_Xje1j!#xWd*koAb zjw6B~UuJkeXZ~lH{@Zr34?Us!Jqk*H*ue#G(8v7ytnWG52<`wO?Xa( zM-3}nhGL;U!F|Yx{+LRJ8WKMM7cf=bRx5+=#vKNgB<^Q#EJRL~YJ``a` zlVz)}Xc}rB4+0UG*kf3^RDHr-m>v^PXvqE>J5^~?J8V*u8?+a|ve~HDY5o(m)5wr? ziEan(;U@lS;QfK_^1go&hUxJD<#b>zk@M`R^p$(7Dwo#TcP zo!@ZxJGKm*US#}8$WJk2ZiE^$5+09GAWj2CVoRWe9XgZLfxs^9b^2MrW7w%^d`D{= J`zWW4E literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView$ExpandedActionViewMenuPresenter.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView$ExpandedActionViewMenuPresenter.class new file mode 100644 index 0000000000000000000000000000000000000000..1922d8904743d40360f0e696423b1ef65cfdb277 GIT binary patch literal 6311 zcmcIodvH|M8ULNlo-Enigyj+B9iS1CKv^E)86H9~8XFV|CN1`LvwH~_cK3$6yAW(^ zD@sKxrS^fKqF65@48WA8op zJLi1Q-}imz?1c}WeICFZydFY8pe<%3qiQUp8>vp!OmEc8gb~{u)l(VGOsR?JHa*^@ zWuhyr6)RPXsW5j1q4M+ZZNVb8p{~H$w#7vema?}Teal!egqX-MA?wmGEHhC(MeGi zST#VayfRzk@@V8l55zhJR`jERSI#X}7*&P!)n`SO#7MPeJ2?PtT7v2}8^2@#Iy#$O z=UZq`+YAL3UAlt3_>kL-R8zu8Teur|`nmcLQmF=#_u0bq3R7dAda8>`<%WdXWoI~J zfXX4^m!dvWv)Ucg{QM8&dbEYGmdgKtii?Xb1?zAFr8Z@R&s3nQw(i4u*I0%Qd@6)b z3d}7ctglw1U_EXW7?E^4U%tQ*eTWN_xX&o~EIubNM2*F?bh>7)K(;6d`jTF}3iY+C z=4vCUwR1sYWmE;7i22Gi2;4YWW!%owWvbm9^;kL@H`Q(238Sl=0g2Sm6~YFADaBVS z*a#{C5eg(Vv2;dFWvEvgn7|YkO4KU5EZx<>Tm+n{N~iZ3#fjDu?^cp=%MoCnr)RThJb>b z@CAV~^6(m}#awvD#jR@sY5i^1 z`a1&4KO!r(>>dUCu-~_Ap@9DXwX7wUZtK=lWDc2fADePNrRAlW;_qeMA5ich4*I&& zVdk2_>h1!-hcPG5P8Rd9f=Br1UtwxnvRXQ0qla77qY4gVCiNFWvS0q)h7iK{`ZdfF z(`284bt;qo?s6Q#_Z2+O5=R;-f5K(U3!YH$LtapozrbOq#aZd66g zsvgsvvOXrS_893XRh^iY;08ix=TSy#E&1Irdv6-+m!HBtd>WC|HMn71=Jn#jH3GW_ z2bN-otv)-i8$Casd{XjGomSBlILo(8@@BZr$dUt^b?a(r?{WSnn92VD2q-O_K}`uY zo!00~RZ-CILU_4&b+91#KMt*wSME_*pt^|uwAejc(9ML-c=VI>1YaKM3BEc4kqF8la}wv<*4rLPA13eY=TKm9l&^(Qd=Df$Yaik_vk266{R(OBUz@wp76=}oshjCDAq zX*ElmRDTTP&SDh3CY;4k{^DT{)gARSj$<72EwT6xN09j5fl7HN#>%@;Eq7ZoCfR%( z8N?BnV=77E(KNCpfLe=(V9|A`rze{*pWbXjKs?FMJk{^E*p9MiJ+=W%#|+vd@Nvv^ zc)UxZOKJC7Tl>`|OIiQ3n9HvmqRUF=2M?o~zp8>c%v~(UNM8CVh6I-$hH_g_R0StI z^q)7!-%DQPWjve1f)3y8`Q&!Udk~WQP$p@eybq)0{g@~ZpiVx3Ir2d?$b(owv@7Hx ztdfUuy?o5FVVSL+XTw@7MkDE7hO4oJMga;-EtX;#*)fjXwwy*m@=+zOzzTu`J1zqG z0VWC|MhD)5{1<%-tVEOJfq9niD73xf|3sb>DW$FWGXhrON_q-3<0^-R7l@L_EoMH3 zp3dVD@OT7B`4)@EHTZ#_)G<`^o6BY{_BKc}CFc=~Nt(G6?{{vj>FtejfnD~%F z&sp4TP`e5VT!%&WPO*bL%4%GsFh*wNu;w`0d3X|^wqKvmA)dpg9J(3Y6PS1m?Ky1a z(IE`umq+{}k7#QSU+Fb%5uNEY_n)IA<`4^zKoQ}=q*y-dB= zrXKL92blU0Q*-$43_|ZA9+S4Gab!P+J0GWT?2~`R!}4vMl<(k-yog`Qckz4qcf2kCfxpRr z;@|Q;A>{jh%tVPBGa5O`Mk7CFWeAO5JSkjVJ(*(lWBMQ7uFC!99+g?Yq4>G?Jbu!9 zXYYDmD*N1d3a6c&{nfD2u(i={1o_3|1)PD1fC}@A4vVQy;+NJ>KY^e2u7!3l3=mQS oIA=Y7hV%5ELdAA7U9v9(%kUDF+gD2YU)v76O6#`J`!$sP7v1CUH2?qr literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView$HomeView.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView$HomeView.class new file mode 100644 index 0000000000000000000000000000000000000000..094326d5d76f83476e646981a744d43034370445 GIT binary patch literal 4970 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView$SavedState$1.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView$SavedState$1.class new file mode 100644 index 0000000000000000000000000000000000000000..a7ba80c7e93e900e898fa327fa808c9d2bfad1b8 GIT binary patch literal 1459 zcmbtUTTc@~6#fp~c44goMNmMzR%k)lC{L!Ov7jVP>LsZ*F+NSVlQOu>CbJ7ff0e#K zqR}7VfAVr>+aS{VVjpJDoSAdJbD8h#_n)7?0eA@C#Temn5bgUSNK~ZT!o<7Mgi-L$ zS2~eKi_kw(ovuv$T57Q+OiRh5VpAN-PBRgSEIx4I5T^FTq3}bYyZ(#zo(vKfIl_|A z9TTaJAI1JlVFDS7b|{P6Mv5ddgxsdmDyb4OrE-hlY)2jGA%hEfxELo)Hk6jn5BA&A zyt1BzLL&-9*b+ury?^K=yDBDZHAXF^!i5AjIk{t^{a(g|*QLfl9hLHk!746h2-VRt z_E5mA?bRHiH7v_fleDigrZiz@NDBz#S{~Jm5$_34O7-&FQNu9>V)cQand*d;<;pPf_ED%$)2vB!286TG35E{v4ryj4qskmJ>N6JB}}r$1BPk- zT7W9sur0hVD7;yt6I}ktS`Q^>y_{bu!d%a)k6z_Vc?48uR ih`Xs=#tKV^M;IvaTHrosQN~(sg3s<@J?%7K0KWmb#&Vzl literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView$SavedState.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView$SavedState.class new file mode 100644 index 0000000000000000000000000000000000000000..fb4c07bcdc467f4511a738a0e9bc2350804c02e4 GIT binary patch literal 1783 zcmbtU+fo}x5IwV6v>*!^LyWHof)xT%V#UUZ9fK8v;)_x^qzt91_-&BJu<^1>?XDny zkZ;HrKD&Fu8_oIZ29dmg>|{ULzU_|AbP zP^ty1MOlm8z+aMKw4y>UsNE{Meyl=Ydc_U5zO3TnjPaP2VbxU|xdpkd>I<=ql>=K~ zMEdnGaO=f&ZWfKltc=vQmq5Szd5vDGeogs}N~~5ZbpcTk$hgt`x(aW4!N&ZW@@c#w z;FPalnpvE`E-*Z|g&jo2A7oflo?P-&t{f^E2jP@J&w{(`%eWCL0r`IK>AAgKcB;g9 z-P1MC_1(B6kQkq+3fSeKP8|*iT-+Oc?o#Oe@ zt4k_e)GAQcxu7P!stjGdZW)h`ca~vlqMAYi$8>-r z4eX}D!v4{DQ&eA+Fs?>WCTX3`a;lPKU{WAA-vU~Cx4RbQXpONeHE5H8AU2`a8Y1r zm##az$-%6^!HzDvCz~zj;L?u#v^$=i{C3YfxGFID0Ue=l)_z|w!pkQ3Ug@v z9FORx;O;(tThLX|jb3DE*-y(PZTh$G0s4O2ME@Neyv?PBLmV?2&VC8Ueu0$z2M(JZ z4!Sd1044frh-AL7iKE+RQ`&0(i7xxGIXBq!!f^~~08-3im>8C>=oZ#5TxqPV#`-v4 zxQ`R}Fk$9jN#ZxyiF+vM7zx9#A2wtB%@|M6YyX2G`{|BY*>4!`MBy5Zj(wFRfqG1l@3MM^r2Q{4_J7FQ z&kd`QCQO^vFwPlPpblSC56kd74C@AoX-1fxd) literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ActionBarView.class new file mode 100644 index 0000000000000000000000000000000000000000..0be7be632019f4ac73b995186f198087f29711bd GIT binary patch literal 33940 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/CapitalizingButton.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/CapitalizingButton.class new file mode 100644 index 0000000000000000000000000000000000000000..1465ae4f165466bb73e42e3db94d9f69c8427f26 GIT binary patch literal 1802 zcmbVMOLyBu6#m9mtk_W=q-~yU8cH92Bz0RJDRF2XP8v)d2Q1gn1n`;2a}rTSGSavt z{05e6vV=|7q+kvl4oepNC=PcN+oVam;pj*+cjoH5-~H~L`TL*W{{(OkH60O#`CLnu8`S0Z`hJM_P4gXyV8`>b9HD8m$+N^J-gm< zJK16wFqcbat&m@<<;!c!8w_lV77J!=y--?TE3eSvD#LKO7RW+3m%CQ*!I+25+?O*g~7(T(a1qV|gULOPZ_k zK<2s|O=&yXWhs4orzwRgWG+=rAd2e--o&*8ZX&7U7Q^UkkPM`dW*G5yB)45tNnh{6 zk*JIRaX24pyO8P<=`i#~kgXgx2*vmLVJ?9g+}1Hm^*hVpWlsZH++j#iXRUZ1HGs>| zlPqkdwv?pz3=ANqz}_+NE{3QQzOW80C8{R(Y+^cJ{J(9RBeanIfn*pzmr+M^;=@U3 z3N_jFIj;%zA!nHGdb~y#YSlo<3e__2?Ke0Do=g_M;?H>2;qGoWzsG%3eBBhTC8(l( zSVmsQ3Kie%O=3z(;sQVwN{I zE2>e??o%ZUTP9r;>R|9BLWUYx?1S-(}aJ6kdriK zkib>ikI*|!Z!a`si481K^AYoF?by#Kwu(NL&dmIZw=%@xatk*~>Dj2(Lgp9Too(T5 z6)h4*8=*`=_goBP6la{C30%Qs7%6>%g!eECA6fVmQXb7K$yDpJS}O)WYM??oDTCJgdnR zse2Wplzp1=ohM}$aVumxauTo0bP1p0Gh#DMEMm~oMnofzCuBvig>4#D3tqtI_!9Ad E0UWulxc~qF literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/CapitalizingTextView.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/CapitalizingTextView.class new file mode 100644 index 0000000000000000000000000000000000000000..4b95130d0675e71d5e2213cabf1856f9823abd78 GIT binary patch literal 1995 zcmbVM-%}e^6#i~@VUw^>N^2ne5=+1&U{hNuZP&XPTMK{c+Cy&Ue0h?)m56KmG!69Tg2BhWV}7bKCmfa<(_bo?o)W6AdcEAa`n> zYt`D0Z6iaUxl}OAMsB5?E3Pc9F|bYAG|cjMmQEk_iZyA|PW$eb7k@@|#eCGJ^r-P-ImeO`UM#_O$h_d<)|Tr%ILQ+4SQ z9MWEndw#ZKX!@3&S@M0)sx*CJ3O}1FMTtW~$6J_UxcOQbMj(y9W09;2`PVOtEGZUH z-}4#b9nxpBVd&zN0tFlC_`I4}6bceiT*WmFnN!tv22IDixXuuBD?YazQx;UMBM^mH zI#J}+7+Z#6q&ghh$ew6qHumd;<9U2P8^sNLpy7Rn@w4~yvZszY++>K-t66qkDr|=` zO&Xi2O<5-MI{MHp!4`CUhv4yvgTC%|3`@`zaf12W^(Rsos-%l z$^19`JD#z*vz^K9aL*LqHic6aR3JULi+dVYNTu_AbgbedV&S_cRhF|&Z!?)Xg?GH0 zjo?1=8Xhq82RMPAL5T|;Yben3Dz2|@$htpkClNnJQNt(gvjNXzTpcFpP>=6Etk;E? z;|)?|x|PqV7};|u$=WaJ_!P?|XG;

X8JclvMeA=6jq=DMC)tID;tOBzuUy3HriN^+ndVNaaV&ue4&{r`R%waC&A| zd4WlZ8wzlv!O0k9G#KDa9Q$D!ZEHF=N3Qsp2U0?=j*rj!B9x^SE)0*NLC##80&1Q#9Nr zy%jop5qGdixlwb#a*NYXWRYqt9%AqSbLn4k>j2kg{+7bW4-iYw{Ei&MA&eueAK~FM z47Ik7@L8}Xm1sPx{S}HfNh(Pm)0ih!?vNgmbL==?hw~yfu|;eq$kq)tt%p?d_?%WD Qe1R`%l*N7tWpG6P13qohr~m)} literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/FakeDialogPhoneWindow.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/FakeDialogPhoneWindow.class new file mode 100644 index 0000000000000000000000000000000000000000..5d6d2e80838bec9f769c92bf455638a0e6f70527 GIT binary patch literal 2352 zcma)8T~ixX7=8{(*d%OdprtLP(9+UMQfRCnR2wQ(Fq#?=0fTM*T9PB#lI-GU!$)tN zai+b|OJ}q*UUaB4z1FFzqci>hf0EPb_?%6$1sZ3(;GB2QdC&XtywCfFzn}f_7l2oA zM?;4|x?opQM!_|0Yt?Y7CFzvy!g|WITICtVn^5TiGZEaZ1C`o>&g#rQif~>2*F@lvTUt6ePnOZu3lq;j6Hw(|B9MHI}Gd zO?^cjGnf_Vq5WC2x=}WE<|NyuKqsg6IPq$`Um+bq2JdNjcTeB9QPYvdb%8Dp54W^n zZp$)Fi>!K_(=n&+^pZ5!N^av)_2&mVUdMz2?L!@lSQ3acz9yzcZ-jVVnGH;Hd_|GR z#~N1lq`GO!tyG@NNb}LshAil~ft#dXh4X9AakEB@D27jTe5xV}x|~I71bnXJ3$W@6 z|5>vltty8jNpPU!4j_}rsJC=j1S!zPw;87~SCz9&CXr!A9w7VT=xN}v?@X(-$}#8@ zuMNs1XVk1N*pBNMCb=${Xvp)x4yd%q*x_yxw~EOOVoR=3Sf4XCn%x#%^0<{TRX?6+ zJK`_iHZ~O$S<8~nOxdVbWmQ9s@GiRh!VUXDy6U`-NW;AXB>)A=JV5}4(1lZ+ zMZ=utoaY!J5a*fTC|fv5oiVHsjsgLx5R7kd33qw>9b5Q&rvC#b@e_yGE+JF^ZqOQG z@Bw^?FLB)i@FCVHb@2X2lwdN3LEOV_tP}DC?x4)u5N&MH&pHd0VXs=;HMVE~HgCiD z+L!L4w|TZfe`gVSiW3?#)8ZL_=!BTj5POOtu0v1xzt2DDiPH5~RPBI+D)(MWdAQhQ L-Hy@e4*LHE=%H9` literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAbsSpinner$RecycleBin.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAbsSpinner$RecycleBin.class new file mode 100644 index 0000000000000000000000000000000000000000..bce395681b6fb7fd44ede30823f4addeb833b365 GIT binary patch literal 1689 zcmbVM&u`pR5dLQEjkAuEY!Z@gwoMyKTJ}e%Lz_Tp(xqvjbYTk;i&lc$Tkli)TE|}5 z-c;etKf;MCNHj$tp&~)077iTvDZz!m0~O{u+ccE)vIpC5-kbSm=9};N!NV`V25=T{ zS;!D-Uby87FHvF87Eyd%Mt@UHZBJYQZ` zfd!M0zah4T>x*F1eW!gxdI`baYI>3AUX`LtC^kgUi9*$Jdx`ShW|tGm^(YcMtAt!r zZ3ZIgMUvn?)p2eAWLwEwZi`>5HI5!iuB&)qiLlZbpb-tQrUI4J2#Ogy1)-1YQ{P^x=y|5Q>_oTQ# zO&GKPUpeh`A4$q?hP}v>S5zvx`oSxIMvtA~)b;(}@I@R;7N7n2M}T>ju)#l;3?{XX z*|Jh=IG@*-g4ZTLBXIa+lvf+u8iFG;G2W&8)F2JsQj+vv2yEy(N%D0U2U5YZl=h;WmS)Rqo6xqge zSV#*yh0}fHh;5BrOp$l-{9RP8E#AXO-(Fn&luwPc-bvji-G@UDkf$F|pdSxpEbeD4 z_A@#d!%~{@MaCEg{f&Z!3a@#T{rulEc9wTmbiPJ)7w0Y-wNG%OI=73Lxt0s&ta%Tk zd^$F3nqT0;M+VIu`}m)~*!7Yo!Awg#&2s?#ge?6Gn|{GK{fb%o4aezsl-ORPKd?-H zrsXd0CG3}*|E94`7bUK#8^j@Q{TafNf~0qyy7Gtf;rFdkyu!W2;< V!;x?BUItfD=daB^#P{k=;9nZ8hztM# literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAbsSpinner$SavedState$1.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAbsSpinner$SavedState$1.class new file mode 100644 index 0000000000000000000000000000000000000000..b7f5fd409b60b32ee1030514645e85876b94b3a9 GIT binary patch literal 1459 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAdapterView$AdapterDataSetObserver.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAdapterView$AdapterDataSetObserver.class new file mode 100644 index 0000000000000000000000000000000000000000..27169b1e43f535f5adb36420afe2f82f0f5f9a6b GIT binary patch literal 1989 zcmbVMO>-MX5PhSOB}*RpBTf`>62~}(SPEEnFebtI#KE9M{=fGa zZdtxt(pKd7-i8jsO%v38YpdjVkqJCqFYP$?JrkA6R(Rdk_sLju%+5qSzo8>tHPOmO zXo77Mq>&UD)1Dppj$N_|+|Z#Z{mV@2BOMumqKkysW-W&y5TTA+Wte>3kmA!3Ucj%fK znAfKPbHt(v;AX!BJ+bol+~`Ig=l{;*p`VF}B8 z*V}Gu{!ZB@o!n%2RpCRguw<)#gI<$GhwtI=;YV!hOTDd0BxTPt!9rb!p&^mvU;MO@;7LHlEkR$p z=fL0~zXW7Swiss#@1xn}mIp9UJlBLO{)GObXkzG5D|DFtv*dupAIK#B#8Fx+3M6+N zL!L%@3o#g{`kg!(dsuu7m2BcA9{KkeqfLyrSG#!iXA}gQ7-dsySrYgTGqfCfhT>kx z`1cswn~nZ}JkJ<@f;U_B{fI1^cJcP!@Xp?Fnd_F|x~G_4;yHQ~euwP6!E&=;rScwz&u0Vv(0m#Mt_UI6TC}p zWDoxBcR)k&&c;99(VCydUMDT(;@WAVH}rvjLQ*B%M-XD zPvV+9g`08|Yw|Si$T8S*99!}X0y%MjW_W-m5gI2>pL96R#%Gy&ks9P#^vKBrsZw#O U1U{v{B(RRpXk>{AlKvgwAFl%9{r~^~ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAdapterView$OnItemLongClickListener.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAdapterView$OnItemLongClickListener.class new file mode 100644 index 0000000000000000000000000000000000000000..de5845ecac6827be381e7aaf1dcabea879211d56 GIT binary patch literal 497 zcmbV}%}N6?6ot>NI^&E#6=8)D;SP`zA#5Q?#BolJ|M32)uRA8sCZ>z8A{2ueR2%L~r8aolcROgOF_GZ zp`e#Ng*R_L-ptF#=i57gYaGXD5S}u#6f$$l=$W+DoNZ~c7ooIct7R!RDlgcHB&+Un z`RapH#hbHfgc5Pj=Slg1e8rX{6?LV(aZ4%AR8J`_Mgttu*oA`uiMZX0K5wsq{tcIcU( z!7t#9R9eJ=BL{vIVm2573a5yJy)&~jZ$94ax9^|709c1tfWffsM}1HDsfxmmh?Aa- zgUCPdRG7**6oGfBx_dJ9cKqaVR}9G5R`Rggl7Sq>>_(}2tz=w4j=|m+Z-f_!aL;?z z*(Zkr@(iWl*5|`86rDgaJ>`O=_>EmPf+`J;kr2k_0j)2ZqTV)r)9w!j30>%B%uHR literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAdapterView.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsAdapterView.class new file mode 100644 index 0000000000000000000000000000000000000000..96c541aaafa5acc1ee469756a65140badc7b01c9 GIT binary patch literal 18383 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsLinearLayout.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsLinearLayout.class new file mode 100644 index 0000000000000000000000000000000000000000..6f20f8563efe80451b84b4b67d148fa9c9c77eb6 GIT binary patch literal 5944 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsListPopupWindow$DropDownListView.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsListPopupWindow$DropDownListView.class new file mode 100644 index 0000000000000000000000000000000000000000..b2720332a29fe510db82085570036df8acf5f2ae GIT binary patch literal 1526 zcmb_c>rN9<5dO|?p%)e?rHbVu6)LtxDT)`gYNAC#V^Kp%P55E5-951f+TCV%Yw=O! z8Tg|SN&Mjh_)x|<+k%J%6Jwg3%bb~SX1;H>-+z4l2H+MR2B9z%4ZD%k4NursRd?JP zcj~sWlM|N59ZRq0+QNLxyLy9RbBSp*Ey9@j6g+9LkOb` z%V#G(uBhdSdhQ7!i)zc`W$xvRnMxRxLPHS!5ju@&xP%15h|9f#Zq#_euG`KUaZ9zQ z$(>=iBrN`-)u?i3Q?JTOVkO(q>lNJ*^4>KDyqX|po|k&J_z!C38G=5kyHrf#xU17V zGYr&DYBMO@qP1zajM_SJ&!DC=Te9hthCbP}ia8BeFvBod_DIroz1eMHsHVG}$?;{D zu2~If=^7TUZ{w!4-q0{Ftsx3Hc3sr4;2U+r;I5lmWO$kWk8Jq!6e-&+$Kb0%>M-`_ z$S-W`?{pg1qGfTXP}g0TyFuI|-`=upkj!%Sf_OkP)!XOq(lJC&e`-h)=?F|CHUpza{K4IVxBiYFV#Ix!bT>R)qjnf(}3x;%&=AJf89R_?(%^pX;mN0N!HG2WR+_nxj~xg)+J)Y`!mTX41o0 z=|Wm9viL;x_hb=org@_B;=4I6k9U;ro0ECxcVs5h!r0HMFRhOnLv$d1iZ~N`FaFj$ zphF*ZhGrGrDzz59OfuAqeU;C@VOURwCGn0>-Ycz&j|?9chlg3}GSoIqUygv`Q3xN6 z03OCdj38q07G1(vqO|;49`&T%zERLjOe(Uju*&&^V9m*5NQP!}x3VPDv!xEu!c!kl z7}ka@Scqp%P&3V>uvG`C`wYMSqk#7*cBvas7hbyB2Mj^Sls1*0lpC4W-8p>iMvEcb z)LPn&Oys$w>W^322GfaG1nSZE04$1Jhv_fyz}+hpeMsI4d7Ny}UOq?IzQpJ$c^u=k z)+q=42b#1G-JWhu;4xW-NkjvLRkH4^(LO_XfvM_#;E?$ae7<`Nqj7@~fml2rU@TCk fM;P_?@+DqW2)7wHmK@Xn))`Xf*tnNlm<9g}Di;b% literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsListPopupWindow$PopupDataSetObserver.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsListPopupWindow$PopupDataSetObserver.class new file mode 100644 index 0000000000000000000000000000000000000000..ec726ae02b869932b2cb675017a8b73b7b728816 GIT binary patch literal 1159 zcmb`G-Hy^g6vzKlkU}lHfUE1bsJH@~SYwPae%)X;A;PYT!Nj|voxr$dhO`A)h@Bw@%^*E`y;+ytW^AWSqRzlj-EGRDqt?QvW$mcuyn;gIGi}5!uKxRJjTwEdwv0 z%>j>v_eT~(E*Z(Vc9-E%XWjcB6Xl6iGI_@Ew7x#3(PzlEbRY^~IPKyTat<;my0Edq zkg1!5&5l%Je>xtB=nWr)f}zsUJ`ejmk|th$%oBuG_M{o#_TLZs&U-%N3~pN~5w$`d z$AaW+o%GC6C2ofPB33Gy2SZ*Kmbr$$7bv<kYzZ7jU}N=*6dZ9pW%GP)?8%FR6nh>i_@% literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsListPopupWindow$PopupScrollListener.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsListPopupWindow$PopupScrollListener.class new file mode 100644 index 0000000000000000000000000000000000000000..13db2149d4740c1c39d981807d8401b8447e0e7b GIT binary patch literal 2220 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsProgressBar$AccessibilityEventSender.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsProgressBar$AccessibilityEventSender.class new file mode 100644 index 0000000000000000000000000000000000000000..ca6f3b758dab2305a15862e0ac90356dbebbafda GIT binary patch literal 1002 zcmb_bU2D`p6g@YIn{JFY-PT&atCq6eLL*WXQ3Ndt3#%_+C$K4Pf;gu{7Qz0u|m`vDmPuaYX z2dOrdvPR_Tu^tRnm3C#hV~e3xW%*p#m1k12r!$@F>fMVYWvX3e2FivA2+6)U5@{~X zFx}4fm8?QE2(4-M&Bz#$<%-a#_H?;&kMN*Zr;o>s@I)J3JtaJ9*MnH=6N0T`pqe0D zh!J8Yf{)o4O(X=r?Fwdl+Njr~!%W$?XLW;aEtakAv88|wG?OL7ubEwSHw<8nb zGOmPJB5c-~Rg9~+Mp!IasI&6%4BB1C^nJ}S{%6W-{fOnb=|qSK(QYxaQoYn}XXgLj z#SOPtgt%*rvRk<*OT`i_ouxS5P%Ja9&(Aqfk~p>bXYk><4{`Q9N1GgZY@^QlSHztY zT>Q+DhdDkQT!Y{PTI|Qp=UekwU`x1!WP3Zyv( pN%#t`Pe4|=(r1uHXZ-{>rU<87aBX_H_2*p1ZMKdC@uu8?_ZtOb3+4a- literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsProgressBar$RefreshProgressRunnable.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsProgressBar$RefreshProgressRunnable.class new file mode 100644 index 0000000000000000000000000000000000000000..4fc92e7731355670f831bec2b5a86651784b33d4 GIT binary patch literal 1339 zcmb_cT~8B16g@NDQd-xt@=Ym%TD2_7f)ZauA0#1ZLcpN%z=Jy74(-Brm&|VUC-{3z z+DLrx2l%6m_m=YE122sayK`sm!H}fgL|?d&*CPII1g?w6qCh z|HKQTRGUbJ-q)bf)TvkVleZ>r8l5C>l&S3NBMMs=OZ%NDQuR>hUWlJ16*axR z`my%Y97Y7juU0R13uM~0hJdIEW^e5 zz;W1uG|$ji#2D>%C^ED!OJm7h>EVw10~2n!hiP}Ahgo;Z>Y?^a_y|pF{oy&W%P+ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsProgressBar$SavedState$1.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsProgressBar$SavedState$1.class new file mode 100644 index 0000000000000000000000000000000000000000..1ffe42b68c3553420ad2286e594a68bf2049f5ef GIT binary patch literal 1468 zcmbtUTTc@~6#fouyRcS)A}AnUE3}|&yu6qa3^tH7DM~CsjZf3^^qma z3*EFvHA9nx+rmaN7L8aIDprcrSVDGHX_c-KhKr?Lf>$w38DJQfa_})i7^^8QUmhMb zq}_3zgnZ3JBHk5NIlX)6rF$wNRB8j)Qszn`mz~_S=Ae@@VYgW8DWqH)G+NomB;omh zIS0sN%C&2n@TOm$1E=X;W=LtmWS=e&MzlO$w^n>4Y!s`d_XEdc9wh1$zcp0}i~UL} z)h@EF9Dr~uhjC00rrT-sHMyI^3}y*I-5fFS1PQQ2g$Y`FKcp`adLd zT{;_c+~x)k^UCnQ!!4dq)<${vgeAGtrBei7cr%0?e*>2AUc=+d%dF=*M!148)_Be^ z!Cwck#x`t=;2ZMqmgy8%KeN_B$vQ7@r;RY(vFakY2-k3(@5#Ms7wZ{Ihn1Q8j{HTK zx94CoXD}Je;Ra}Yol~0c!YnX|gUK!}pWx;N9JX-<@jd&@v^(R<_~SEof;<28;bQN# jy$iVCmJ3*9>G2!`MP9Sq=L||%&W`fg1FW<=%@@FLM@V)0 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsProgressBar$SavedState.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsProgressBar$SavedState.class new file mode 100644 index 0000000000000000000000000000000000000000..344299f04972b39dd435e41c9d6496852dcb6a63 GIT binary patch literal 1676 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsSpinner$DropDownAdapter.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsSpinner$DropDownAdapter.class new file mode 100644 index 0000000000000000000000000000000000000000..464dd5b3414a3061fa8cf719dedd988b56ea0048 GIT binary patch literal 2674 zcmbtV+in|G6kTUxcYK*NiPI!*Lur~ekT_{v3Y1FRuovAfA}mqhwlV#u`sr z^;60Z^rc83(W3Bx;3Y`>1{Wdmzyl9FfGBIv98X*)tw3a?ImdJMUhC|=*WUU5@2|cF za0(xqFci+#{Ef0*3tit^wS(5W6EytVt+MNdPT<*%@*TIn=7i-+t+m{AJd z(ZA!(*X<^aOr#Y0Z`!x*a>Mr4%GXwJI-uO*9_W3 zA+wQek5r#&JEvf6bigY-*X_`8O6z@RT+a>PRv4e`Hhl6Hb5kn{sRh68g3y1MMop@9UoehPd$;woBss{oMtS%h{>2>#dYo|%uiO59N*@bvV5M~ z{pn)hZ#L(qb|1{;nBbEZUcxLBO!l?}WBh#0_ij5u82=jF!=LqT+JPf^DDFOvdFAdW zO}wr!(3V9yPje0P`_b>sWe&D?O z5n1&U`qj@Us$Woy&J4Z}@;Ss+cB3Ta7~;MU>M@NB6UyX`h#@V=x9~4eq!M6K0u~4I&l)p8BFZ&79c6=~PFi_R|yUPvq5K7~v{qk6Cwz0-m;6i<-5a#mgpMBRS`WzCv39 zBf`6l0a>=d!F~_v)PtTb5ik&8jzuuiAp(|Wh=`ma8n-QhLW~=ge|ih=7}(Kt6qJ#I zX{0egh3;s%kfgGJd7LAr1VEAjZaGq(O|rO~BuA1wNqYY+2?vuV`IxH|P$C(sPH!W} zI4-h3Qai~hhyaWONE<`Q8pG%}ihB^H+4`eV@+6uJSj&Es{i9^kX|`MBVyQ7GY*%Ks zk)L7LTsHQgJ4(87(j8-56A|55?3yHRQ0p+wi6g{Dl*Wj7ASS+otD5+<4%3Kg-l1`$ z)Deo2U>h1+;aW0JW{4s4#E4SUi7^{t#JXu?C|pmHEEN^ceCZM1{bWz+o$7$dKPkN| UBYRJHv5XsBW%wz)&pDL)2f$e7j{pDw literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsSpinner$DropdownPopup$1.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsSpinner$DropdownPopup$1.class new file mode 100644 index 0000000000000000000000000000000000000000..302265b64bae0919537d201b39a1cdd101c00cc4 GIT binary patch literal 1534 zcmbtU>rN9v6#ix@U0N1esTV{*)T*T@3yO-?5TR;PQpKdE|EIf?GO(R(cBkMon5fTU zqGH;kzr#%O!;Mc;%L|>kzu7!J(=&)k#3LJcTEUNmCgBj8k3l^agkwdFvcBR!ZgDO z_dF5D`6UKDIPa$>sg%Yn=4@PMSUT-{99+Rw1}7G}CIZS~DhY~vp>oJl-obSfZQGY| zOU4w#WSd7qX@=<|a(mVCN1{`h*d9af$fVCdvDFS^d3X=2Fj&$j>rIAqE$l>|crHyE zW%{+ZXv&NsRg+D{btfY2M)lv)>xcS(G{==4AGm? zh15cncFSgdqx*`EmVvvjbtD@dEowrSh+*QrV!BH?;BhQs8xI(!PEKbc^wQX_Ai8YL)gzk}fWMhEx24@sC}bGe*|c&}r)}CTQ=_86(Z% zEX@q(aK7iIMV3jD<%*x+e8q*C1I(D^0j~AkjT01D?=Wh;$AtBv>vDyl(XpOOv$}zs z-D`3vV7?0=hawitS<>FZZ6xSlq@4v9OWk>yx;aQXiMzN*t0}S`#(k_NQzVH7t-ma-%O literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsSpinner$DropdownPopup.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsSpinner$DropdownPopup.class new file mode 100644 index 0000000000000000000000000000000000000000..5b646122a71ef3dd504f034584639c12befdf3cf GIT binary patch literal 3627 zcmb7H`*#yX6#izCHf_4JwSXX{AlPD?B0*3=3so#&BQ0QqRPnjpoiZL9L;_{YlU9Z&Hu6 zjh7r_z$$pY->_vjtWY#@?GO+wyt^_IFnA zJ`K!pXaj67*~jG}uV;Fo=vmq17SD67k)o&4%IisW?G=djIi{+Iz-1a5pv4ivd=2xk zK;XvCY3FL9QrI}fyIjK}EEbqoP~H~X$T;p^OHELJCF()yNOEsa;Ic$RE0z-DFm1L z@n-j44KdUON)4nHAFi+M5qb(!hp5iMjKQg)=1fo;QWF>DuDTdfo|^n-Y4BG6aompwV|ajwsig2h-OFgu zF+%j^^h2b|&QywR1xyW!6G;>4Z6+WFJftcDwIug;z#bsd%Z!YtrF(r_gyEJA-Z^p%{Z=>;k|+XKzb z{9vJWEsf7ZBYm5wb%Jbbs7xffze96k^)-=&(Q{}?beFI&5iQ}0M5Kha#E)2Ucj6qb zDq+>ve#``Ym(dK6$511mLZf^J^W||Ymd~P1oGDMQUALd*HFprHAoUBuC2wj zgp+IQu%7G$-%ug0+sKBk8WP>-a07$eSedwy-Q*iI@tcUtxBQ7N56n@Xr~x<8vIYJ2 zU{e@0>9>KJ#3VMKrRb984j6$v>4(wCgbczk0ypE9(7886RLfvCSHQ%1V)-F~IW+@F z?KF^DY@vN%Ad~`vSmF$=mU;PufHaq|brYA9xV`zGQ`ivn4Q>v~-MtB}(BH=2kPiCp zEaC2@t!A4!h5Je{PUCv+Cx3#lJTRHz?pyk1jeaPyqgEJcFw(pFceJkN<`hOt*gqUr zCz1Dh6K$;zmQYO8lyHdl|Di+)kB};!V4EPq(AR-Kf}#b@0Xt=Ex*7$@=F-(8jj>vCtRDO$NauUbocX(Zva7s?$wEP}l z$RBW4{)j306MmOJ`y>zf(*7ePxemYLd6E$Q%RxOaP)(wpeqW?ogf7(uVV^+;34v1BD) k_rGu8O)6K?M!$u3@NO+Xp0?pV8ec*E{8K~i_iN+-0*E}~)&Kwi literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsSpinner$SpinnerPopup.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsSpinner$SpinnerPopup.class new file mode 100644 index 0000000000000000000000000000000000000000..b4b1e9c440e1ec973479fd1b739d6415ef963766 GIT binary patch literal 477 zcmb7>zfJ-{5XQenHLITX4O-yO+n7cEMDkzOhw#R zKFPH)FJzL@hn*F8qUM9UKA7EeL{J(o+$nVY705-)R r0n~Vho8Sx909&QjR~n*G#!a+J-A0>VRM08U9qh7(OcL0`K`s0OQfz=r literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsSpinner.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsSpinner.class new file mode 100644 index 0000000000000000000000000000000000000000..af41e52a7685e009f2f796d343c2ceb83db793f3 GIT binary patch literal 10794 zcmbVS33yc175-0VCNoJc5WoRL5rKv&5MRi)|^k zpjO+8)wY6lZ7sE>RS+g1F11!{U0S=hbhrE7+SyJDR;7obdj}pP`NGj0~j$~u0WOq27>9NxBRAhZaESa^^$#A@3V=TJP$~Lq` zGF`o~WYS9e;T4?qKd)-(E-ow;G=!7UbSf5Yh@`kfGTYD^3&&II+H||M;fOVPNpgNX z7FpjO%W&9A3r2OcymfWkvIQMot2-97bY0fDpj9Akf?@Mh$xJq!%q|bd`z#O7G=iNS zOIjDKZtYyMv~|gf#o8%?(!|nKZ(pzA!uJ1}Z}+s5-PR`1Bru6(R-(5h8tx^-f_W!T zur;0PZB1=Vx->|0cp~4oA{Nc|2m*}EktqBWKYcgL;yJ+XK+Z6#OqSV^}l zN;#|&l-VqGT9K?^Y(b%go>(N)paa~bbZ#se%Qg$ntt-sQ>wtpHTAQ*>g@L|o zEZ)$P&8B1BeOar^$~H}3F7VDzMXfSaqt=favNp6VJ12*^&|o|Qg3*p;<tn;M4PRi|WFh6Pr{T zOARhXCoL;uW#@$>>(`}IeaUEkieOq%Z*M}$IpQ*d%ar}G%1xf}rLj#`e979iq_6v} zFnB9g3P$pMxs}ew=yc8~A%c8UR?WEF;0m2Inv)i#(y?nO<@_`iz}pOlVYmuljX_wq zEajFA13DNn80AQZCcPHxh;bb3A{-_898}p{72XhTh=-Hw8l3K?3dFG9kE;Y1oV0-r z#CU@^5{x6{duckA=*=!8GSa#025dRMC!FrGuI{sv5sS#EET;@c;}kv5)dp#GV}II; zY>vbUn1Zaq2vjPI8w@sLlc1dR3sGc3QA2LH)$o@O5DIpIsI}JiNJ4&?@OhjSA8Ulf zE?=(`@-8}Q7dh77G(K$@q~*$#Z;;fpwXNX+5yVkZXcb{{dgU3EGvty<5xp3TK{C?`%& zI!=YIQ5ChQC;X_Yf0rM32`)NmGtEa)mt;Ba#660HyU0j5pOH)`n1*XggZOZeW?ndB z#Th@_8924BLnlxi%~ z)sxz2BP6|Km5x1c@PZ9R(O4!C%P@wIA?z$kwq>ovpe*~WrHvAw59wdxJmVj}BZGQvku#0ju96_A7}$8@!Ca z&@dAYUv^rQ%-Y-u79M9FgJ7kghd0?qq5Bp5-H*Q!ABtwv5zh7){6lj9Pa?cYMg6M5 zzw&bIie1Ai!z=i=!RyYPSdt9$D#j0GIdXt37g@1&J&Hr(G2+Gd=s`5Uyrc^W4HZCH zW_t!Gj&yqL#mDpwbA{n3iBOkvy_}DAtC;fI*^Wmlj0B{NASc6&496)7az#K8sWdWD zMiB<$c1md57h@g`CDOwjMuVUbc7%v1-Ad+EBUKo~R6gO#d1*KrrEiy^UaF1M=-tX2 zx7ONc9dBep9*8^h0yxdcB<)mFZ0AH>IoZe*UFl2fEZt|Ckve79BwEASF!LH^M&%bW zQm@c4l3mfbHDFYi%``Gg36&>oTyVi(W*a#}7nLy^;jYYKbn;n7&eqAn#A2pWT~?eI zQY*SNm5C`x=w^*Z&edd5(P{8FQ$n3`zL7afdW4%*DrIN5Dl5hv>WNr?jX@Rvfkl@=W}JMoGdZ2)Ul1lmKE*VoQ&wYP9t5q|2Q6gC;?Fb z+&yZ=vrPQ_;bbhq4XH6ZRInhR4Cf<<)(4ytf+u4U9(}f%^Xz=HrJm2?_sbPVuGB#7 zp?xSDtBtJD)KU}E%X;mciwY^aeF5$W{7eueVk9c$L+wjrgx(K_3YrCAC=j@q_mkeH zBCHh#m}&-k3uduHdJI#stEh7|VcT(*hST8$!`QR|xK>zh)15qUqGF@OjU<#x^*XI5 zQFg7?+Hha|7>YVCWu#ZG=5F*fJy70%1#^dz!VqU2f`RF)lyt^OR%3LaC!ATBiu7gF z?lu_Nh;2;A1{l3g-fZL=H=w&2vf9o&jJ#8=cvQl{xB)Pwp8YN(TXoozP4(*gyN$d@ z-%Gnw*=#CNCfntDzg#CcJ)hCNiP((XV6Sxmv0QGH_xa@}TEoz5jl5rINTaDG+iV7~ zMh1B0b?&^f!^ka4cO>(eW5HM1yVb}_z4Psm4;lHeLbu-qU+rV`+#x#^MK#$~nsyDS zB+is-$_Y&DSW}>4ZI5xpr?HxDVfWbFI2~nnhvQM@_Op!x)SUfdXK)qv<2+lgbi-cO zEmLVHonmGt_Z#^bo@MqWyN!HO0l}MLUPi7RBqh}Qi3(cdBKNwp7SNc-}921rzeBIRP0eB5D^}nNbwPb%MEcL*GW04togX+|9WKlR&S1 z9TuEAARQyR6>q|hEj#nu>?rbxk;C#RwWqe>)LHZ@UG)7t3+^Bt_I!EV$P@B8iiwNz zm+xb4{KssnF7tUK2lUb&a9C`kjJ05p=X@MDET$XBtX4feW8{nSv~w?7#4?ob$s|Oc zHS(M$93%89Gr*{I#}|xzS);4gNgSxRq8bYG(M1vRMI&F;Bu3#&#}rhw7*Jyjkq}lLr-z1 z!b0A$SoK}Sncan&l7K$t*6#}wk1tA55i$3??xP-?R>f+4nz71bC8;5khk9o)5ROEw zOlI&;kG8QAth~s{L zs2HGnP9LZvzx+WkD=!hoT57uCzuZ9l@+S)X#A^toL)^Cf!qj~1&=rGDLX4K6)m`(I zU>>`8N#>~rl@6FM98*-~x$=3YR*i5PF9aTbd|~rGN$lN$ERW%>F84(rgOGZR^CZjo<^y?|2|T#?MEnd81*arG4lXs>sDvh zdU7~#j`uK{S2{B;n&S&qdHt2I=P>^O+Nyk2USAHEdN@Oof(J4y!YSxF-tl9Qq6*jOe+sA_IM%Gm~apv2R!8`FT{{H~3#jUKr z-Hz*VH*UZlR^ayHCR_5IjwB0`-&c_QK3DRX^gjG z0^4c$uzkpoL%VRuI*zHajAHqtP%@n7q<<^qJ z?&`ZSwz|^4Wf%O_rCaBQs?{WN_;8W8aTE)1FX`ULD)Gm-%l&kZPoRcnI5qn*4zU7X zwUmQ8NW2*zr272k(p%rz9J(NEBMU1m&?eDv<3C-PH9&a-31e(yWG^i8`H_o z$B$r=HixiVa2LjeJpI_y&YlN7^*KDu6^H7{IG-QApym!3K0IEtW;eVgdrJ0@s^cHC zs06TZSAs)CiAU%ohlvf3(()d|*?1i1;Ys?#=h1?vuoO?*r*KfD(>+BA`=8_tUSBBu zrzqGGTdN?(?b1tTE%+=r)qNu&j|Hnoag6+ z;>$BTiUfe?`27N5>dO@Ei#9{XA>=Z&)t)aC+4*IBh2M&jOL<;ZYWZQjxN_9j`tgk? z>}iS-rS|fp12j}#&`>$Pjqh;$yPW52lkf3rRm-KmpW0T|nnKkz{rJ9fn%UI{@xxI+ zy9d*#i=Q`#YC~*)#n10@_|rlBmBar$h}YQhMovnKr*u^EBeL~lTJBHyYw=5{#ZL*( zFVT>GhS_Y-!p{j;FJTU=VQS%y=QS1BZW0YVD&8hh5HBH>34{iPm#yq&Xqv;nLSV_o zJ;4p!PMxTRC#Vg2gT8(#C(sH_&Xbc7ArBvw#S$A;9UK2MZRcf1tiO=WzjA|DY*v~b zIt5m0M4et)si7>D6+X!+HY@rRXg%lNyqL5mDS zn^dBMGQE`YS}9`@kyH7bT@|zUak!mzt^1{xsq+Nvl}RkePr(y14Nu8*dR0B1ml>=$ z&%}3Gd{VPAGA|XwU&mrXfXE0{Jb%}46pN3Nj6z!j)i8CJ4X+PY=j8H^8Aq7N z%;=Z5&3K5i`*^j44oSBc9c~|&IJh;5dx1qOzciy#E@Y@{L6yu$wJbuNT!NX>VV}@( zjE2Gq8)Pk4vV2L~Rn#hB^!2+>TW#u6%|Gg4A;;lV4)K`f9LUw@WL?LMXKb@t-w~?! z%*aV{MLpG;&PgAcWhkxC*G-I{Jl5O!q0Me_nrqk0*e}}-%6psnuET21PII~reUL+q z-uj@oHYc|^{aX|noX2ZjJKqu|7axhzGPV#0GpP^GEbu~=nIyuX)LX0>kpO& z139_9XkHtLA^c+(_~dew$rTtbs~LL37%$zJA`uE~9nO#*w6a|!F|^B7Sj{#n39Oe4 z(k#Gikv?o^dmY;w+1|wVeQe*)ah7ASQ#Rpl+0389uHkQA@8EAr@3fV$){$UA2{|`l z_-Lee$VaJ!MM%n>RE&qIS*P5^CocozDRMWTe0TuE72A;l6x#48G67*I<+Ill-D?sJbX$%?efq`4%FyP zs3s?S>JQ0-PH=NDb-0cR6D--moo=xO=R{gl5S)>H@-V59hV19jnXl`;-K9UD?|Q}x zJy^Y+D;FW#z6!|gD3_f!X@~iW0_h6LNk0jR94w?^3&@fZ9LC5chv=V=<>bl1B<~?F z_YNRAtUz*@Xf~iEzreeM6Nk^%caki(g)c|=qbA=R3D|L1cH6Y_u{M8G;V&x=g%XWD z!?@;!`e)$t?C~_q950RE<2fi_YAkgczlRJz&lpSZu=Ar}pmM|-2HVE6U|BE_Z7la_ zPp~{1wI>AwjTO7GygpcQNWM~nMiVqa-`yw=nnoYVv%kvg0MQ&TZyvJl8H}#-9+vGZ zD_^gCy2t*V+iG=23+Xm*tB_ztu;@>VuaJ@W3e|;J^%a<4`o~55YhCM99JS1Pi zA$bwc$=7Y+Z*v4(P~;14no6O|59LQxR{&4jKIb8feqMe|AocPJ`-J?2BR>Ao)j>P| zC}qgsYv&(+UUzoOOB@aGFRVTyKV@6S5W0gmhyc-H39hv71r@wpEtH?J&)D8P9i^pj z;1U@7e)CB`>oj&a5&frEoUtB!$S>{h zU&*i8c9IXDJS4veF5XR&>S?S9rP|Hid< U(#ZeL_04SmLE164|12&456H-@W&i*H literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsView.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/IcsView.class new file mode 100644 index 0000000000000000000000000000000000000000..5f358247b6f4e2b4cb1055fae08bcc4a72bb5002 GIT binary patch literal 584 zcmb7AJx>Bb5Pi$1;3*s+ep>^HuCc|~m>5YA3k=rF-G*B{?vlF&5)0xFva!*`!XMy| z5@(TuL>sfo%+Ac4c{A_x>-_`38IH0@FdRGKhzm!nFzAaY_GILT&I4D0mQf&lK2`2O zYTk0OF?kW$4O0lE_&|Bg0T=t3Y^DGL&h@8!6&(B;BqSTDAh(s#PxX z@(C@^%>~VRD-RpxEJ_Uaud;;-w&=u_dH2fI-r}-Wa!$&b_8kkm24}C}uB94y#F}76JqbN>6EJOe#=#g#|XDQ<38ToYM4Qnrpa-OUyg8=Jf ztsemS4T^HuM1eAELuG*`1c(Wg?jP z;1BQz89x%^okGF``qWKkXYQRl_nbZV&VKvzYwkdec1+vGp;* zP(Jg%8)(hDN-#{=p3JHn1l=AJ`w7F;kgKZYT}Opsw#{{t8ks~xvLolDn29Z^rG3V* zR~sAg9{{TzhJ4c`q6mhW5I!c|>SBl@f&d<7LrkH<;MH8{Oq-;8J?M8uN?JNW%54*K z)#0gh_Ng=PRAOk3%ecBp3V7*22Ux&$AJ>T4Igvsv;s%3Hm2Qjoc0{!mU>PeuZZbR{ zvrZwZF8w5>-;;^$IVvkI{hbgstTIezePe9zq{(&-L!s7ct#*nO(g?AJy9{BUgxL{_ zTFayimG=48q7N-*qdt9WNIKSH2zJaMjm1mpbYA>#6R*2uRGMuaE0a-|zY?}*k`NE@ zkf6DieQw3BAqrIM8c`!}OVbr-DxPH`!xB~8qftPvRB|lW!;`q~jn_0K4O90gvYcQ86Y-0>ZAWV?eDj?1`0Gs9I>PE#pL>+)2(;ym^$dj))LF ZY*2g-oAmDhon6L#Jfc-VdyXMJe*wq59h?9F literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ScrollingTabContainerView$TabAdapter.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ScrollingTabContainerView$TabAdapter.class new file mode 100644 index 0000000000000000000000000000000000000000..00dd30416d6c62cf01918927cfa88fbeb7208a60 GIT binary patch literal 2343 zcmb_eO-~b16g{u4j0_`URX|YuLTpQQ0729$Sc>3i(FKNuyVvOiMu(YZW(v{0aqGWu zqlqS3jSIuh#D8Go#*G_|@fR5H8;06YYHI3cUfF7hT6JZe5(=o)PXdwD~KhH#owO&9`VaLtvLp+w`XxW)m%=C6^dtIj3l} zgP}vgF0{#rVvhm|oea^0IIuTQLEkE`77UkywhV@N-qE?W#9dR&!^M~gk|E!!Q#H&| zw7V$_Ij3y$e zaf(6Sx|=1cyT$P>MX!OuHDQ zE!`-XIyN$*qjczwy=J&!X7<-7LA1FNcMVbYz4hChIU>C;`dq)iz)N8ZdeX>^rsK>s z;IwIg+U}KH5|X(ln(1yTutlfr>c*TYI_N;d@;EE1ltIyKdTDYN_dLUsKvF*0gx;u0 z2KkWbTYY^bnuy$ya%rF5K-SeIIz9brLqs@7>+Lifr&)wXIW_#6K5wABq*(-egOiLd zenJ=hR_HvP!al@lWY~`bA;JWWVy`3h3i4YVtf2oHO=}@O*FbbsA*iTAh`G>-cnHy7 z!HEqFRgieG4e3jO)E&4S50OAFrEw;3<1Ew=b27w?_CI>Q4diPLNVEzPt%8hTGz57} z+{Ng2GW`KP!nqW=HnxHB*jt=mc#3$M+}v8L;8I%n8x6>di;L_V{ZIIgUiO2!=+D4x zY7?+(HW`{FBbdT;5LpsektLiNLW?2N+esOakPDp}qBA0;ZK>fmnB6&DBBc?`1>bpG Yr?HRjj6=iCn0WWQk*ED38W+(18%wH5#BLzt)a88e$g>9K~l_-_^al8B8b5EbX^T*p~&jFmryosFP zYd3n}C^z+^a7o3cyc7oJW3p*-M=TH;#h950}4HON}T@l^=TXqVGML z(uTlyS6hCPdNi6a1f~1xp>hHhE<5*@?t5-(q9{12!gd__ZRa5mI@#%a;g-XKV!Gld zQ)dOUtv->}>Fk;x`ss{duH3h`%A&w%L~U;nf)8w%7_gAXkc~l<1o^VwFw`P1U#&k_ z@?!E5c!Gni$W_6jihVubG#WZd!8iSa+Ce^ZHlr@3f{}7-2jTU~qKPAdJAIO?BkK#a zFp8r#KEy|4n?j*kP%Bq<$xN-SIkTDAZmL-Os9QLO6DE!ePW6Vg7*MY3C7A?&cn_-Cg^2B_nr@<{qvDqOK3Y#nO9eF(Rl%jb zrM1n0jng`T0KA-fK*%~w+XE_*Ecl?x8_a7mS>UHu4}dt~UH6-Y~w+8?0T%}k{!5MNMm zb^2stAyw|`yjr8^^t=42|GRx3z_(OCK2D3prJ+lT#miZU)??SZ?Q6WpcFliU*II$y z3|V~}fl3mOwPk2qWi>%UCVOjX%M+tWND)go+b!sLX*6l3ae^rG{1+gllCFgOpyZL$ zuxZ`L*+tHB?5%3;ci7b@*#9eMIUHbHw-`4WLpCsmq6sl^A)B+$CL7$g-Jatj5fw@xp|f2&SetT; v#Ld;(6Wr`grY1axxvaf~+w3QZslZToii51PU*N8xzh0C0GQ&TK76$(V1kONR literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ScrollingTabContainerView$TabView.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ScrollingTabContainerView$TabView.class new file mode 100644 index 0000000000000000000000000000000000000000..0910edf7b30158a3308ede7bc25ac79971f4bf6f GIT binary patch literal 4625 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ScrollingTabContainerView.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/internal/widget/ScrollingTabContainerView.class new file mode 100644 index 0000000000000000000000000000000000000000..9553dff5149cec14262de50b9a4f22c30246e955 GIT binary patch literal 13167 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 Cy`^dZ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/ActionMode.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/ActionMode.class new file mode 100644 index 0000000000000000000000000000000000000000..cc64b67a51a56f796f0fddc5a59538bad7ffe448 GIT binary patch literal 1164 zcma)*TW=CU6vzLwP%c}LiiIk8t8Fcp${JsMsA*zInvhU^pz`3`uuNgvWjF2xzmZQq zXreLk!4KevGM<^;23nHp19Rpa&gFN`p85Uf=Pv*+@H`8HVbAtv7Pmv`xg+ieQ{g+F zePPX|_-MV><`Zu$vPd&*obx%i9PUo6x1)1mhYac2DW5Qu``70qOyk{^6UgX>2SgH}17F*X*Tg6c5xvucL4i5qmWYJ;h+%Shl_->aw&WPI=G?mM1 zdYe9fiuRwuP&+`k4Z71p(wQgCBFRXuwSK_-N*4nKIy2f>N0IJ@*a5dtB8}b!ZquoP zkI36l-mUg`lo!#awl=9?OJ}IYUP%U(eN$IpsGyqUT7Y~*`3ogo26?#(LJxEcccC8Y z7Vc?TOY~Zz*KuFlA5gc-?_nYz;jz}Y@kGm=MDAiw>rb&y^%)vyCU6HN)s&3%=WAr2 YmdK2xL4(>>{B0bNG%4~K{j5y>FGG3ydH?_b literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/ActionProvider$SubUiVisibilityListener.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/ActionProvider$SubUiVisibilityListener.class new file mode 100644 index 0000000000000000000000000000000000000000..48f981ac8649be3655759519f27f2f1240486fd0 GIT binary patch literal 306 zcma)&OKJi^5QhKqG2<%`aG?iq5jSb@1|kT7fB}gMcRg(p%e39lJ&t%a7db!<719b> z#Fd+>q8|VMQQtr3F8~ufTi<#9ia?H^sjPC{}3~m7akTU|Ip1uH3f^Q;ARSo$yw$M(wlQt3|dRhAy Diq}~G literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/ActionProvider.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/ActionProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..1699a0fc2ff7877f89257704dba6a586b2b7a00f GIT binary patch literal 1428 zcmbtU&rcIU6#k|yyR?*FMUfwZqA2}=Y+~XGB_UN3lcFSOO}I_BgB{rJlG$y=qyKOG0_-3c=X^OWqdPTOEHu*@iH^-?Y!@O?|X0d*YEE?0NjRSBf(H`gQmmXNCtk5 ztFR%I7r2K`TZ$LXrg876pe^e{*+?-=9Pl=GJnlbt9@h?p8!^l@cU!fmvMNJalb(!T zR%93nUnquhWnlE>J|OE1)?Mk#XoKN$zQX;w3S`}J1D|q4PFe5A(R!iEkSYgtkwFq8 zS=h)jB=g!mUXi|d)N0m*dctd-V8~ShmwQ#Nq_$&cDr(4(p)@#UqGlT&$E3n+Uuu*u z@XJc@NOT0PlC}&N^M!7RQCqtSaysyLgxU{O^S;>UEidW>nQHbJG7TP*RNKODQ8(zW z5=UH#u4^TKUIFnnBbOcig;^dXgqTr4Z=cHz8Us-$;q!ZiY8nhzvKWFjf+bwHagAZ~ zzuTY1G8SmY0-va#nLI5+GkUtQj076pjktTb&5z=~&V?fSC-!7Ox6W1T^!)doP(5VB zUU%p-yFp92VoPd9Q>QW3^z&iJKJ@8*lsz7Xf@bbgAAYGN(lkkrl_8;prISr(8^g4w z$+~C007J#E$b2G40;9BMXa^o3g)NNHY1-IB7{>%zbRCn(fzflG!UeKv80k(2a+P*Q zzC`k)UJagQJfXqLcD}|~#C?FsS7%1fV3x3S8Fx%3;&D=D*=;0va=E$`~_Rz9IeIk^t{|uybAP9B$wyVXl}cHc7`k v3UQK+IEhs(eZk@h*^b`tN!JfOpjH>uLXn!Mn^-cHuHqK$8S>}`uUY9o9|TTY literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/CollapsibleActionView.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/CollapsibleActionView.class new file mode 100644 index 0000000000000000000000000000000000000000..e33c6664963a27e2452eb1db90e78ad0cc9e18d5 GIT binary patch literal 219 zcmZvW!4APd7=&kwmYy8Ac!IiE@dhGX9VESPw}04LyG>i=*&IB8hZ4IY;ovmM%w)cK zJa2aZ3&aruhPkvSE@Y#u$wXBjsM1y*d8_EcS5|9L)+*Dqd^b|(M(8pO3(*R$h1v6M zR*-BMM%H{w>uV`YPB}v-nWhZm-|#c*(|Bjkm86Z*#4!2Gn|V~o;HKPdAaM8|Liihz KSC{m?kHHHhLOhcI literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/Menu.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/Menu.class new file mode 100644 index 0000000000000000000000000000000000000000..917380a14fc438285277ba6d63428ddb9e205b03 GIT binary patch literal 1766 zcmbtV+fLg+5S=AlLumqq0);~F7-(_tx3o|b9J(TjQ#()r50P;eVn}RiJ0L3c$NJC@ z=tni3-I&BhLLe$d8l5?3W@pB`liz=S{sMsKp!PrqfoaRF$)*+9uCrr$eua5e*E*1o zY<4W?m{ae8P6Ek&^T?E|rn4t&JNwKE2=uKRs$R+|#u@=a2@IrN#}7;=*f6Vg76WKB z2*icR_)IfJ^Z;;~QdCzpeN%+S8V&Be-g362NdldDEw2*j%23@9;e^0YOPSX4MTO>7 zJ%$PJmuNA@rcqRLG3em#c7UN`$cmzG#sF&}Fx(1IvPD(TD@D4Y#-LMhnXIx}QVIn% zzfvk{rBz*9FAx|J?t-dkG(A_!Yo&BnGqA+*rab#q*)&S0wBUHxIOLdFE)!Uivh6vh zE2d|#Z*}HaEH#_G;49F8)lvi`iC$K^EKy4T_q=(Y{-52Tx2=q67tDajw#CK#>nd#wOlsGr&vp^8( z3bPK(ohl>HEzzwlP9{#t4coT`)rHhQjOy?hywr(`>4!3YIF14j*doxoYdhtz9N+$q z>Cumc_Uy5s>BfRwAN`3#=Iy#(&8WCuVAXNAOiHvh60wNZ*ok_CV@y$=dcgKiwMY<{ zI9JZqqhWel#sv1R%{)bHJDdo9Gm#J5{c_B_;3Vgkv7k;#^cpwZx@WPB&1cicZ}kFy zzTLR*_y&Oi7>6$CM%2S!IrJj#i{Loo{s_K?cp!qWBThsx*C!)*5b;n1-#|PZ!6S%o zM(`-&u?QYVd@F)^zKJt=7v6)cwg3PC literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/MenuInflater$InflatedOnMenuItemClickListener.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/MenuInflater$InflatedOnMenuItemClickListener.class new file mode 100644 index 0000000000000000000000000000000000000000..87ae93fd519f4132fb079e1d9894822ef3b2918a GIT binary patch literal 2570 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 v?_Wwu<6Mqy4vr5lsbuq9mi7`0{rj!$CjR3 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/MenuItem$OnActionExpandListener.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/MenuItem$OnActionExpandListener.class new file mode 100644 index 0000000000000000000000000000000000000000..c90552436c1a43eb97d55bcabb120d1c0db1561c GIT binary patch literal 355 zcma)2yNUuq5UgHxS64kQlFRP`O&l=PNW=p{F}UoqajwzTaYlC5$F~{y0e+O+tRRRO zm~_!l)m7E!%kc!DgSQ9)p{wj#NR=hl%w*~ooNB99VwdnpXg0?$xb<4UgpbD?1FN;%I3~nDcAF~x zPPAX@H>Y-2J<9Y)yL0h0im}-BNN*BhvROMmMx%K)W&xS8@#qP8y_&8X*kDOVf4@(mYcAN`T z2;EGbm9)z3 l^#8a^=>15L5D4X12S71P6-iVji1)0a9(N-;;#X)T^(VRETOj}d literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/MenuItem.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/MenuItem.class new file mode 100644 index 0000000000000000000000000000000000000000..647b3331189b0201d2ca799aa6dec34f3c4ae62d GIT binary patch literal 2676 zcma)8TUXmg5T0!)!dx0caV{iH+Co#gO`;^d2HGU5VuBijD01zDKKQKVEmjbcE6I@G z)`$Lp{-~bLj#eNX?4t*J_M7{zzFFzt|Nj0503O318hpTD)r*b{?xlVdc6priMI1!l zp>gbs6JuM1Lpv2m8cZ=*e9Moy5%BQ9aJp}Wmoiv(x14szbUUWiw4I&KPQ6v%W58?% z3sw{+DG$>Y4~F6r76b-YNBr&0&Yt6JODkhg9kH5?w)w`DMr`x?h_P)qw>r)G>!!40 zcdH|I%V{*sUALaM*0Squ={m!pav)NiJrUzF5oyy; z1Hs^#-ZoYEgPi8rI74-o-XcB*w#+t%Ruv zkv@2)c?>oubw*|?-2gpGl}(=1m~;&0u&mpU;?x^r;hJt)WuL_oM(zxcMC^NK33R=D zJf6{e@kl!h36H7GV9@7XkruO8G2|lsJo;OG;T_7SB?+}(b`x`cQV7KA`$+mcn`BKz zImop%wEV=UB4{{WOG7=B#j}Xh^=zLf?yxJbi)@%qf#k)6@lbv^9V?jI3G)lb3ViRd z;U~xmIfp%cQj$DqZA^S=HqGI=Q?l^Sh{3%ApXfHkfl9?Y@>naZZS=+sT*eI`K~BuX zq|21S6b^g~FUb+ZX21^;ydY7XdA9JXWw3rW3{*{OOLx8?8AD~WWYy8$DO+}7WPZDG zbnMe5w>R-{&wH0{NZvx{LmAwk%!Tvrc%qBq-2ewV(`Wly@}eN%gG3aS%f32t=~Jf| zNzfa_sLV0bo)OBMxaR_)E($Mw2(xZ9j6JdG%V}N6vp$gT5eD;ih}^aUo+KjC;5VG- z{PsGQ@7@B#M%ku;i!a1+-blqltYoJKNW=9BW0<#w6Lisr@x^_yL4!98Hp(T=YmAKc zwJ}3Gjh_)9U)UeQ4g5_b(&U!_%pk55@GRoF0-i^_P{1D{zFfeIP@BR*fF=5D_*lth zC980i^i{Y<@;XM#&x;kMzp3yo_=NPgl;3T*L-i0RAgr6(? z3s{6-K%L|!yd=4$^4d!Ns^lwZ(9_ta{~d5puHf_9g*|9aSKxPiUTu`GQSMJy{s$ku B{4@Xn literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/SubMenu.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/SubMenu.class new file mode 100644 index 0000000000000000000000000000000000000000..6bb94ff12afee48007e229fedb29953b067366e8 GIT binary patch literal 608 zcmb7?Jx{|h5Qblu57YF6@HHc`kSb7UoTUA44Ez9o6v9p; zxkF{DKT7nlhL##tVud%xb>!+q<68@K7CY_ zDH?AnF!;+oQF+GjO2WWq~&{@s6vEVu4IssxNjE!7oQnc3^yC`8lK(VR;#B{ zl6sAaVaFTI7`Q2ZT{e%*s-%Tw*ZOix++H;796ztLqKCvH?>9`ZEKbuklfsNW^9#DB pvm6Jo9p>oP)@ghPz1r_%P}?C6YwI@WZgYNwW23}yV&)D`e*sRsu3i8D literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/Window$Callback.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/Window$Callback.class new file mode 100644 index 0000000000000000000000000000000000000000..7dfe35603f4291a25158381c4828b8731ee2e8ef GIT binary patch literal 283 zcmaKny9&ZU5Jm6!$ioMSe;`;G3m0rH1tFkVq!8>j>!6A2E+kR^&B71xqr_FQwV4@) zx%ZxVJa2aZQ*?dQ2xDbWLaHjWCY42b;6ht<6qk&zVw0Jjy$r|?vj|QQa%Zn6R zn!Q-3Ijf4$w`RrW99MiwSi2SP2+=5B{;~cEX3>_=O6<8%yvQ^Y+TYa4JBQGTjp1Uh sWm$6RqfHq6as5gO!4KIZ5bEw-fE;`io||g$KQ%z;ddpon1a!Rc1t-)_i2wiq literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/Window.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/view/Window.class new file mode 100644 index 0000000000000000000000000000000000000000..13353f82289ae0e0797e0154518e23c7a0e9761d GIT binary patch literal 789 zcmaixT~E|N6o%hZ_lp9GVlXU-u6zh<;;Oe8l3I$XDXr<&HC{Ed-ASmFY0`FqzvY#Q z7ybZ$l<{=2Nwdb#q%-rJ^Ul2I%>4TO<0pVO=(nK}dQo~Y5K$4QYAmw+OlC2LTrUjlz_F?$sFwTad+&W~IIMEq^H#Ob zc8{&V@=tBo2&`~k*(9{y#wsq32%Gy(bpuhV3aN?#w^+#Q;_zTZXqf3l>bQf)OISyj zaLnj`*+B4_tg0TMIVhH*$oo10d ziA&SPnreMk$JhscbQjee4lx>#t)g-YW#>#);QMXd4nB}n6%Qj|Kd9~zs)?ic+_XnS6s_$ iJYinDQQ;|iOl6(Vusu6#he^XO_ITDg@|^#J*1{j$<)$S7 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$ActivityChooserModelClient.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$ActivityChooserModelClient.class new file mode 100644 index 0000000000000000000000000000000000000000..10861aa2154b1659f7150278fe1944341d575b50 GIT binary patch literal 383 zcmb7=yJ|u~5QhKpa*i5>bU|wiZL%aqnpAQ?2pB8``*j_3&AJP_8^u?%@Bw@%an<%T zHZ#Lqzkkk`;|ahgIyowYiE>*ZRn*Qdqz`NM#;HHC*UJ@0F-nD}5I&xkOz4$ec!h;u1!ofewll9o!0?Ww)#dN*0G z6Dl5f;V$tTcxrjc14z_CR6@KV@tY9h%(9R536N z>ga_Y2gk6EJ{)1-$y7<*9Mz#A$}mtgEP18XC`)I}kIhigt_ZUv97CN0VMMviaPjbj zpOi2PLbNWLbw$&oR8W*&)Dc5Gj!C?%;U%Kh$=$MP3s=W0m}2O^tqyB;!E*D4OQa&n z#KLN0Yf1tF;;g)|wb>RK>Glaz;(sgSlOBzD{`Z!ipnZUP*J zZri0YW$0UVMdi+l*bE{Rqf(&yl4~}@rDsU&6XT@((u5V5jJo!!>ljvz>iRL-zBH%d zEW>EWcVC=u8D>>Fam-*iiZ`i*Z>s&QjvVGFY+`d$T2+SQ;jjgW;n+NemWzT4SP!+) zY#i?(uVJ1N`S0zdQ~RHZVv!-1oAmo?Rs;2w->ePc*0Xt|wkRt`LzrDM*Ax`DGrXvd)0`XP5Y7&&<5l!?iDM)?N_X@GV;HAZ?Ubo5f_x6o2f$~&GtiruNdJr% ze!;}YyQJ!aDh}X=2d1k%ar40#Ud3wx#1EvcxXq+9_t72M&HRCGzMF32^$dOY)FJab z*h+vu?VI^t$s@`Z_Z&zo@3}=%8yeq2FL%(#T^!>rjPo5#@K11(-^FSEsmEv1xB1Aq z8Dua`j3zLG-Z&VLq)Wa5#r1f_7? zL!{me5Wl5#D#ZLl%&hO>Tro5BMjLNk&kUWXh44q(c-t2&(DD#V>&obNd$`!fB~n}Q zF59^JBcb>S7^gA-{~S^N1qS$+nB-sK9RC{U`8Oe6`G8jxvv?2hgC*w4(`x~*RN!eW kt+LR@>H!x?O%;ox&hde_E8)7geu#BiRrfO7z(*MT2RG#x?f?J) literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$ActivitySorter.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$ActivitySorter.class new file mode 100644 index 0000000000000000000000000000000000000000..3c1a4ee88754a2183c6ddb83f9b3dd6ff41c784f GIT binary patch literal 774 zcmb_a%}Rnn6g}6>FU?G|7PfX#n}*sNQAv?t1PblP`6eBkW?*JCdbJikfDaXo!UtlT zlorFC`**nKaAx11UjQy}lpsgA7WR#C5tKCp?)*qPZN)2lSLsj&b`u*@6+YS{YrS-j zHkG=W75ml&=@R4#)iIxPrnwoir@>f?K*;;pCbUkv+@#K`lnHBsG=X&%q19dNOoGy^ zt9y+TSCxvxsM4b~W z_3gw7d9QS2*2olHmicTh524&KM!L4<-b=Nt~&ew(_)U#ukq#{(ZYG#T$ z;dX8G=BirJS*xW2fv^=F3{Z65HVQFMVwS^Be8t7DgxwgA<6IdPR8fmF71Rnv9K?8t F#t+zw{yG2v literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$DefaultSorter.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$DefaultSorter.class new file mode 100644 index 0000000000000000000000000000000000000000..f462a6fc6171eacbd834ad679aa62a2c0a65456d GIT binary patch literal 3484 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 HC!+QfstYt( literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$HistoryLoader.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$HistoryLoader.class new file mode 100644 index 0000000000000000000000000000000000000000..d08e2aed05992c57fda69e374a57c2e19786bbda GIT binary patch literal 5629 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 N+wmIHXd~(T`!C1VU)KNt literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$HistoryPersister.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$HistoryPersister.class new file mode 100644 index 0000000000000000000000000000000000000000..4a0ff822e34244ebaaebfa2aacb39d961650d182 GIT binary patch literal 4576 zcmb_g>su7p8UMZPfmzpy5+WK>4Mb77h%1_)Wr>X-D1?gzyqn;#49no`4xOC^u}xcB zNn>MMZQ9Z{t&K4i+cYLLhD&Ut)h2E85A<_C_jA8A&!c_M%r3hWq)Phmz&YnV@BMb( z;nTYxegt4EK2?xKs0~}upcZxvE7q;q@jl%)t?-H9kkJ#-o!~CM7&M&Wx<1Q_>voIP zqnpKhjksgk!~1kQ&O6;!APBkr+MpIRwOAzB*4?j%9R)dryfm~u5sPWvrcTIl`iyw- z7Q(jXhZY`U@){#%I6DbdC5xahJwOn3Y{wE19#NsdAAk?bRV+a+!B-*?mNy$Qy)_Z- z*6mJD=e%YsteFQi+mPoZP)I`vyB}VSIX+~&e0Cxhz$z3dc$`rA(5_MO1inD{*n9n$t1!A{kP!hVYmRPB?}c+-2L^a5KkVs#~a{2v4QuZX?ux4!N!X$vYIl zYOIrCDJB$@cv`u)b(U#zf^o)%N)JdCHmKN$lC%n(TCIyyL5ua+meCUoTQNtEIl(%) zo|L+*LYazkY)VV1{69Fj!?BH6gxPP#76n1Vs{3f5q7od@W!8WmYcNc`E#V9#96~VZ z7`O0}+!{+gXBk#7jmmer7Ih7ITE#P{N*l6+u%aYMlgUQ`->gb!gU7x$VVFI-?MF3X zL%nTVcF~Y+IBZ4{R|7W&gA1j|*2A{dQ`F0{YOb`%}uXUV>Q>6^&>j5I3Znc?8Xo z6Uu;e_Sx2uYy_dw#sHeps-We+MI4HnD%!A*yG%?U>d?7!n8qpHCKR!=EjtoC88rtI zrWqWp3^H;WBeWFl=v2@_SiKOQiv8ebwIr@PsdOk$TEe0CK*_LY=7fDt%mqhHkbv?r65N z+X^S5Tt$SEg&mw?A$8)o=cV(gg7e6-d*ad~y(%K;St1fW7B=3F0`V;v~LGC~Qt;db){42do$eqE(CPTqiH#8w$QoShFCa zif_tNTHb4F4)?;&WJSqHd`rc*afUOGZ)~GG;jkADJWwd+$-{+%dMpXEAkUCO7Y`IN zD(;LSr{c~{547G}N_`WkXdc75)+ubef$fL$zBq|c@@@hq_SHw`Nbw-B$+VVs1A!@Hq^oa-2# zz}Kd6THqiPPvDnhI9u%>!Pv1~muA}riU1Yp5dYi5>o^TWEHYX;;R%D575aJmu6IEEl>v~a*kO-kh z)ZmDC7DvT%=n{2^h~0>bdb}j|U_|W2tD+I3q6wG8^LSr0<73f+zl&DD zA9uwOZrDeuP-wJHgsDvQP*5DBO7Q~iV^}A{jxy}Hc#*nA7oBF<2*b`X?1DH>ukm@5 z&lmaphUlZqd>-TTH9o&547Vr-WC_uDvM93XUHlerb6E&_2fxERTt+qQ-)nf6i>`~> z@gBx`H-cgO9`Ca+UO^bwd6$h*G~okG$p0%a#U!SfMT>JhE&h0FaSxd4jbdNR26w8-Q5}ph03Aeotfeno0W2&68@=4s8zrV;H dl!cGozn|bQyyo#a&flhgWrg`$4Sz%4e*h9X8Uz3U literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$OnChooseActivityListener.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel$OnChooseActivityListener.class new file mode 100644 index 0000000000000000000000000000000000000000..151d2d570416d5b4a4470cbca99bfa890c3f9604 GIT binary patch literal 396 zcmb7=y-Gtt5QWb~z1PGDmZrDR#zosy5)dLcrbuVE**hc~*B#hhBfgr258y+IVRV_oqQ=Qiafry%apy!dv(#oXv(?aS+EDUvx&q~&ln zjX&*n+4x*Ia;mXUI9b`XHNnP(na)@2ijL&Z1L6L>*;#kk*w`lVt#J}nu$b{C4KE%D zy_q~G$G1K(VX!6pjeYqIM(B^DqK<;inRAUJ!qv_sgwy{#s0f5T^%o#@;{cUb9n_n6 Oh_2?IUMMj7Rrd?K*La!8-Pbx*P$_NyYi^b-NcvSfJd<>qCmQb z?PGs95=ncD4#s}+zUxUDi>N1uBCz`+@_DdxBHT2Qk=@aeWv~wTn70ESj@qvV2f|Hs zumhh}C_D zY?p{BfT3bS#}%brHBo?JAcHv*MbsEF4Ry8R_@UTMj|L*zJEx=SNS6ouoJb{lrkh#C z5ySJDbGAD~LMBSXB67H4Vi7e1b*$)EX4ssSe-pPilgJxN(=YUmJ9j8xAqg8}SrzO&! zkewk}X|~Q#ZmyldYJNubbaL?;y^VB#9T)rlH=ERKb^;zO^O2oRtQVTQ&!JlYMUr&Tc~Nwi@_#4GxyHDbIv_;r@wxG{RUtWD>5X8m%80nHQh68tFAe2lRKuZ zx6}_tW1oBKE7~|RypL;5+jhCLVK=xrUFD9UndM`y`=0H{h%zJ&v?EP5HEUmeS3lso zC!?1k6L@{kFjd{Qbl-8f<*Ap64883w&2701Bb82M#jskuQ88Sv$k10c_ASlx9nLV{ zHK=sq4WQrqmZjBAURgkCZ%!&_m9WOFr!=o%FlLj*|$1BlDGNtxYf z#gIa>55!u5j2jGtM44~;?K*e11Uy5kV(Xe&(?}<>Lub@$8dU3Q<+_TC;&`AwL5*g+ zRhO&DxJ_8sg_;ZH% zxij23#ocXk%>IO&KSfp?9)UPKMRXvQkd(?8lh%=zUIzdpM3N2(0mN!90G$sqS(-YG z`X$8N4r@r~1?VXrd`DsT1hYS&2+%Kh#L$7fsOK$GQUw#z=9PNVAzTPDkpKzxGz6KU nS#athp_V%8^pabsBUBOF5|)GU8J^ReBAcOz7o>lNZ2J8HmNR9y literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserModel.class new file mode 100644 index 0000000000000000000000000000000000000000..d933174fe3432bd3e29481993f895c95745ca04c GIT binary patch literal 12885 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 Ht8jh-1t~Ba literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserView$2.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserView$2.class new file mode 100644 index 0000000000000000000000000000000000000000..895599e8d98b0ba3f0d923d9456e5e0fe03607ba GIT binary patch literal 1361 zcmbVMTTc@~6#k|yEUgPvRKN=eShcjuVg&_3BOz)?ijaUc;cYJyID1Kmm6R#25;$tXQ@i2^lzc zsLDL_rMqp_g}2EgYk>}GBHCRnOR0ER61<)%7)UUrx9pm2`F5~rtvFlUjSO@$Oxb}K zO5s^Gvb41MddT^TL%ua0W>$hnzI1HAXz$8uR1_-W0S_5Eqq0z$NkUU>7tS1c&x=4r z_ZX(L?Yobc7!r%p<4G`dn=sIoLL9v&l1MYev)Z7yC<6YtT5))|ZaY3_=qpOs_Dgms z^uDP~=rX7YZKKE(sEi)@M|V;fz*z%>43q8l#KbwAr+`AOm1SK7o2zoCy3;6TLx&wQ zF{}-YLxVu;Mof%ijG@bRU9ME-21D>a?L4M-5kx!;Z2xGmmRzN;zX9y22s~MzOCf_R z1}-zqv@ZDHF-%<5mu7fERfJMH;<$;N)+H3RB1wf_GjSag49UuBC~Lyg^Orvcbz_P( z2V`($OfV-w6rlc$w}#om$;3@eG4!jd^F)+{5{~d2tRnhwkHBR&^q6(8MYg-WZ0|JZ zDYYi6q01i%J#m9AxHzFnNaOh+aDA!hqL+D8mK4xj3W!*XzO58j257p5{>n_k)|#6b zAzH*~b%3SQnjQ4-h|x+SMcNZ2&Cp(JQn~y`n7L2r`OvUAsdbGL?fndWv^U8|Yfs@c zeHqRm-HftFmilZVw-56G{ckaQC|!7mw3a^O;sGwb$Jnn;R!jTHe?w1GN*ut_$>Y$; zhY2pQN9mqZx)(IxFOkP9Oyf1~_d7s@qB%|9In3<&dvjj!) z!5`o+61?D<7%vaLuru^%CVvHj@QgqVYjS&fKNnKf^s;rV;7Sd7nkd-6y&k9bQkri0+6Xm))++(sR#OV|<+5*j9NLU{#O;4xC1=;7as7YXB zXi8a+q*cLQIHRzJz`doX=NDK2A`QDs?@ zbKSdrf#k?cZAp(+*kJQN7rXO9&LpqQ$W`cyCoP^~6UW90mf@L#@f?wRDagwwUTBzbw(|1io2o@E2p1{Vmq^*bbg# z`}RBjy+`_Hp0gf&^N8TOFX*tHa!v4_!3IkaNL!%nvkbA60nTl|Me+d`{^GRf6MRL4 hZ&<_kf3VU8Rufmax`C^>#xmkdT<6I{uV1*V{sar~%R~SG literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserView$ActivityChooserViewAdapter.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserView$ActivityChooserViewAdapter.class new file mode 100644 index 0000000000000000000000000000000000000000..9c0599692375b73dbfe3416764e619903002f837 GIT binary patch literal 7243 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserView$SetActivated.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserView$SetActivated.class new file mode 100644 index 0000000000000000000000000000000000000000..a42d8f2560d97bec1d3c1a5599ce3187a502bee9 GIT binary patch literal 677 zcmbtRO-sW-5PcI{V`J3Tulj8d9@-v^cvUM>5QLxyrH9_O$6k311%O2<8sqyw2mI=J=jRoIuAcgBfa zWe@Fv)~QT7O5X2X%WNDLnG9_d2<4&3g%^pq?_KqVGRO$i$0}A?i!fDhbO?pE4yA)B zlw1@sO<3?%EHCdyJ(=8yUL*;Nz79mx5s5PVD_F<|DkYry|N7(+|3}5SzU61Cbzj6` zqE+bS+>B>BI_fq$4k}o(u}G-=%DY&`3c*c(G|oNMxs1Wc5SAv$5=zF{+!#fmF2T9h zcS#`6mFakGg1P&~N`C4hj%Cu0M4HOf#tz}&uMV)t&q1LE9tO`Huz2whnA^-eMq(^B zpE2_|PCLAtG^{>m`RsmPV4P!C!aNo@Vv1X1F}~g0d_wuV+Tl1Xg`zbaE36vMnyaWX Yn$sHAS;N8xGYgy8Vstn{*v2lL5A08*rvLx| literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserView.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ActivityChooserView.class new file mode 100644 index 0000000000000000000000000000000000000000..f457429e567a0b541ae996e28e399c4b94b06ea9 GIT binary patch literal 14560 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ShareActionProvider$OnShareTargetSelectedListener.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ShareActionProvider$OnShareTargetSelectedListener.class new file mode 100644 index 0000000000000000000000000000000000000000..25d140b52080fb8e378f750cb20fefa2bc23b436 GIT binary patch literal 407 zcmb7=F-rqM5QX0)dS_w;8^OlTB5AT>n@R*Ba52JJ*==@*WaGLEyKDS!7XAQ#lsH}; zgf#Ppc{9w%`~La-0&t778a=|JiEm1q;$m3olsBAwG_UHz*)|=Mo=sufxLi1Js&Pa(-|C%KUWc_>uD0S6F5h=ghgrDdFZ&4#L&HQB(v%U!n#`LODhy TT@Q6vPcRT2%7!pwR1JOsvT}e{ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ShareActionProvider$ShareAcitivityChooserModelPolicy.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ShareActionProvider$ShareAcitivityChooserModelPolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..6fb964b34f69169a039c05767efc3e5dc10fa4cb GIT binary patch literal 1778 zcmbVNO-~b16g{^C9Vnv|6s!nXwJI&hKoO0pF)<`2nDSvtSh#zgzR(B5JTo(3*t_t@ zurbk~E?m0sM;Y%7Lt@CZO<8pA`#krad(XT5^Y`a309CA*$PnH+`p_0msI=D(UTLK9iS+pf+cKbIj(Ti&^ci_N+ULg`7LkPX`^C@m4H^{%if9BO>~rSeqx zim*D@|Ml`NVPK6Z4});cf{CFV42)VBMxJ2IMF&Rf%9EQ%hfV44h^8wE<8|!_cUSl- znkS0`5e-74?P6AGPNu<#q9a1J)aheXMr zuR@^j6ek+!*nVo|-5kHlO7s?Ugj_=(`Hp;}q6b(=5zu1PsR-7($6aO36+s{a6Eq>}@(CkG zo#bdhtDNa)7^CNyWIIhSVlTyWq{Itj;sHvr=UF_&BaZ8Fj6>6TFp0S&glHoQAzPV0 kLphy5L^6Z<_`857Y^V6nAQrKd9cD)bEVJc$@c&%qAI3oxHvj+t literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ShareActionProvider$ShareMenuItemOnMenuItemClickListener.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ShareActionProvider$ShareMenuItemOnMenuItemClickListener.class new file mode 100644 index 0000000000000000000000000000000000000000..acbf8a67d53b3194c2985dcf6e5c975c53692251 GIT binary patch literal 2027 zcmbVN+fvg|6kWS54U`DA3bZJS+-wUH%f$;t6su^RR-8d`#wQQy85${xlLpX#@Kbzo zyrB<1`rt=7?i1Qkq+x)EX6Kyl%Ub)EU%$Wq05F9|8bX9;rn6}X)3Y3VO}O={bZd^e zVeD9yb?F%^RpH7-|KBIBvu#zRJL2D!rM*@3LXVPQ>E5^f`RARdfu`vZ-FqIKE8Qo zl@KX771;s8DIFTxV+f;LM+f4Ba9SyJmn>U8-r8J~?o+W=lY~UcF-2`vxRyFME+dKt z;rX#q94Y(EwAS;jH8@XGn9(pz=nE*6j#*seA*p-9_5O8w zATJG<{%lzcjxZXKkA0N5!#gU%6MpUq(*ZV(CTk-2w_s`;sDLUPR3zv%v1OapJv@YD z5K?Bf;t6x3EMEJwtYMMR`+pvqZr+`sGY{u-(v6(Ytj2h6-Ba5tMu@FATdpaWEVZJN zEu2oOM&+~=ZC>YvnyA+$FRZ@6#eAg2gh7T7=3g5q9# z;WA-iV&Ds|%tca>pXhEVr6OODi@ayEupeqjL8BgM)Qc{b3F_mGnB>Ki!YK74N9TPQ zGkc*LFgPf#;|2ps;1X_Pj-jN`k38nt?;va4!U7_=&2gB(Z{#!#k%l{Qa0>1=2#m2+ km^Gr=@vkVfrms>I!hQd_ga<4WKJ7FfM%DKzi6TOO01`V!0RR91 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ShareActionProvider.class b/android-libraries/ActionBarSherlock/bin/classes/com/actionbarsherlock/widget/ShareActionProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..51329f7bd09dbdaaf014e38d29fb46c0d33e1c1f GIT binary patch literal 7288 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/jarlist.cache b/android-libraries/ActionBarSherlock/bin/jarlist.cache new file mode 100644 index 00000000..1b5ec3f9 --- /dev/null +++ b/android-libraries/ActionBarSherlock/bin/jarlist.cache @@ -0,0 +1,3 @@ +# cache for current jar dependecy. DO NOT EDIT. +# format is +# Encoding is UTF-8 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_bottom_solid_dark_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_bottom_solid_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..42bb3664537cca466589b07c2c803c680ad2796e GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBLh=eik{OtoIDu?@KnN%)48*cP zEC|k1|%Oc%$NbBLh=eik{OtoIDu?@KnN%)48*cP zECG!z?_c3|xWsJa`omcN} lXWN<`q3&tPf&sp~WbEi=^5BhSO$VC8;OXk;vd$@?2>?W@E#3eC literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_bottom_solid_light_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_bottom_solid_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..612889a4554ad409d74f2ab868600232777482fb GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBLh=eik{OtoIDu?@KnN%)48*cP zECr2?)zqaX+1RBHO>FVdQ&MBb@02f<1(*OVf literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_bottom_transparent_dark_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_bottom_transparent_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..9a80fb7ba66978ff946a240e75c4c9ac55d7f71b GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBLh=eik{OtoIDu?@KnN%)48*cP zEC);J=d#Wzp$PyM88HO_ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_bottom_transparent_light_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_bottom_transparent_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..2b4a61ab046509c3c75d4a28d939e9c39e892eb0 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBLh=eik{OtoIDu?@KnN%)48*cP zECDoan dX@*sG(PAtS!fVUebC^L6@O1TaS?83{1OU*7G>HHJ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_solid_dark_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_solid_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..b110188bf0e1a440e2bf4285fddbff87b79e3a9e GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBLh=eik{OtoIDu?@KnN%)48*cP zECP|4&tX*tOYlb|mZM x+EuTPEZVf&yz)_RDkB>BD?P>d@rC6M;!Ho-=Y0DkdmU&RgQu&X%Q~loCIBoYE-C;3 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_solid_light_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_solid_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..95c76e3d25af83843c1ec13abb3ab83c71a0b18e GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBLh=eik{OtoIDu?@KnN%)48*cP zECA_Z!b9V9&q4baJ=>4zLM6DqV#67&0K1~ wL#}qZK0TB3>4@}cCN%KNTx0j`h5n6tJ=-}C$|cCG2O7rU>FVdQ&MBb@0O=t!WdHyG literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_solid_shadow_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_solid_shadow_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d6b9634957cc238be0158c9be5557fd57977530f GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj9(e^J$qY5VH*N|KlQRfQWH8CdIjJEs@uJLsBb6Mw< G&;$Tl&qde( literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_stacked_solid_dark_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_stacked_solid_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..20d7080bee607b82926d5f5c78b062ca7811a318 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBLh=eik{OtoIDu?@KnN%)48*cP zECPC1TDz+!tKW+d6F>zQ_B&b{^VM>dFmjr*ms%yxj|ZB@;OXk;vd$@?2>>#4C?Ws= literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_stacked_solid_light_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_stacked_solid_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..1dc40c9b736c8bed00fc9e165932a7df15928929 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBLh=eik{OtoIDu?@KnN%)48*cP zECBD?R1z+Y8Gb#E-ahPKi~%69_bo!PC{xWt~$(69CB1GhzS$ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_stacked_transparent_dark_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ab_stacked_transparent_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..48bc53693c941233cd9ed06c7649ff5a003d9d0a GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBLh=eik{OtoIDu?@KnN%)48*cP zEGPB<|9@;4D8~rHwR-C|0ok^mE{-7)hu>as|k1|%Oc%$NbBLh=eik{OtoIDu?@KnN%)48*cP zEXNBZuwkGuBMfhxpcMmTTYI`VhD02Gd%=|k1|%Oc%$NbBLh=eik{OtoIDu?@KnN%)48*cP zECrS@|`(MV4h$B>A_Z*OemWKiI72~^&e_xMfU6RC9d2z8H^`p{J$ z9;`Z|@^zAinr7O>n=@^#4?6^|RE=a{WMbhEP;h8~Fc$ot^6lQEkZ*f7<=pQ#dnPpX aFUu{b5>esV$&nymF?hQAxvX|k1|%Oc%$NbBLh=eik{OtoIDu?@KnN%)48*cP zEQd!SBTx>E8`i{$1KAOtE{-7)hu_}V$jP9<<8pD1#iY&Fld_NaZSb4G@qbmwrxT%W z@A4!kmOMK#`)rqMr1UAToxF@pEF1y~4h;-Y#`kcmDwzeFo=*+kUH8RsdhkvE1-wU7 Vg}9bDoKOO}#naW#Wt~$(6952>G;RO@ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__btn_cab_done_default_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__btn_cab_done_default_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..11c794068b67b75e7329df6e30254857c66cc3f6 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^OhBx~!3HE}dUn+VDUZB@kYolXCXf&zzz9?z1jNF~ z3f2Dq{}1Ie`Zqn!0kRc6T^vIsE+^+?WF&w=QbUvD$rbC@hbw!EKVI-%oMBfJ%eO-< RZ`Oh|db;|#taD0e0sz}SB1ZrK literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__btn_cab_done_default_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__btn_cab_done_default_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..720f52d3cb98a830c74e4b6d1b0d40b4e68d5d7b GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^OhBx~!3HE}dUn+VDUZB@kYolXCXf&zzz9?z1jNF~ z3Z)Pn#y68L$N;&Do-U3d5|@*6GBOgtAgQ70;IV{;T>)Jxu|3WA;u*Ggu)IFE*dh_6 N*VEO{Wt~$(695!N9{2zN literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__btn_cab_done_focused_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__btn_cab_done_focused_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6e4332fb9128f2f47581ffbc00021af4078fd141 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^OhBx~!3HE}dUn+VDUZB@kYolXCXf&zzz9?z1jNF= z##^6)6oY8B|Ns9(`HZ_ys;U5m-LnJOI8{GSK4tAVM-L<>fBZjK8c5 Xz8q{>ex(PPK}LAG`njxgN@xNAbMz)q literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__btn_cab_done_focused_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__btn_cab_done_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..ac9f39b42686e873b15a6b409093d5dddf3883b4 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^OhBx~!3HE}dUn+VDUZB@kYolXCXf&zzz9?z1jNF= z##^6)6oY6fC=H|-C2op^0BJ2x7sn8Z%gJWHq%! kkMAvc+uPf_oo(%YhSit2-!o|62mzVq>FVdQ&MBb@0CNH@0{{R3 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__btn_cab_done_pressed_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__btn_cab_done_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f4ddedfd2cd2127e3ce572d409b5f80c82743211 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^OhBx~!3HE}dUn+VDUZB@kYolXCXf&zzz9?z1jNEK zjki7pDF)F}P#Q=vE*E|&0i?A&T^vIsE+?Da`&E**OX|Lu8k>eh4iDSowf^Zw1_mAz j*X>=n@Zrq`U&R@W&vCq;aM^V?P#1%ztDnm{r-UW|X{9M% literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__cab_background_bottom_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__cab_background_bottom_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..fc2e90a8a7df58a7bc8a87ff2c40634430f9ab24 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBLh=eik{OtoIDu?@0HlQ-h-HCT z4u~0H_&;hMa9c8MTdU1Js0~+|p8atVlrSAORh0B3PF?hQAxvX|k1|%Oc%$NbBLh=eik{OtoIDu?@0HlQ-h-HCT z4u~0H_&*NdFw+F2$JW!uF(l&f+e?PL3|k1|%Oc%$NbBLh=eik{OtoIDu?@0HlQ-h-HCT z?mvT`9X1S+VTFwu7gOV@Sl|w>Jz085DRJHi|jwyxHL?&t;ucLK6Un4l1bt literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__cab_background_top_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__cab_background_top_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..0a42fb2be8904d2a31f29819f7667c37e40aba34 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBLh=eik{OtoIDu?@0HlQ-h-HCT z?mrFylw*Wp#g=V`K(?)?i(^Q{;kOqYc^MQ0SPT_BoUA8p*x2!)SW%Ys>=%{HR;jfS k4rrjh`Pr@GiVLRex%aS%MMvD;0yK!h)78&qol`;+0B6HJ{r~^~ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__dialog_full_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__dialog_full_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..8051417d7f7c690964ca57f6cad72601d971380f GIT binary patch literal 1335 zcmeAS@N?(olHy`uVBq!ia0vp^6M)!;gAGV_&M?*mQXzQ-A;}C(Oq@VA4DbLM$QUHf z55$d78l;aA8UNSN&_L#c*ou*Vf$CZ2dAc};RNQ(y_iWy63z1fS$&>SxR_E-JJfmb_ zaMt?F?=Pvpm^Q!g_HBH}%QGRi=}&?|-`qLN8u;e@5!wKrOs zEy-`!iqpRKa@_pHs6U<}OnS$@$ zxl?l^$83K1>Z{L||I=Fw$~@ z=%K8{{E(edohy>>zPDyNseZ>@{i2Z4s+_Bw4QJGOZZ$SsmTqdVc3{ac#W*^Hw2%YiGx zZ;Kk(wYEpClYW}^NToev&iA7N#{}H=#&RsyU~&;u=wb-;W;-#O6I*lH5{pq4xH+`j1lLUgy5=yQ|${!tc%}vixO4a7Bvc zn)V&H-|mZxi~IL(Z~b}iI1!up{QP|Tx8HxWGgve5Hi$D$In&GMx1_#NW4Xccr!m(U z>KH%hP4Nz_7r%AgV(yglD;+*dPdlEmiT|nUlzP{n?pMke?&Wl~p1jj;f?cAxpIW+( zm7!Pm;e%h7)G(R&H&|Uv7g{v8VBU?iU40>{evf)4|140D=X-VZ`4jQZcZ(H2vt)=d zoU93()l{}f{Gr8L4wq+Ao!5E~a|nvqeDuCz5qHt?uyez+#}3U!in8Zs^)S!W3+cVX z{)&eoB|6oDf4S3n=|%SnlsJQwU#)#;=PuCu)S+-{(Ooglb%!|Jr#mf9V+`P06lOVT zpSZ~^X3wv}`#Pq^6t8anc_?}3g#}I_-H%;Ot$XaR892}ITc+Ej?^1W(S7 zoT@rI?>s-zxn`}-&bz@s6M0VLe_wL&<#MJJ$0NMYPw}Kyb=YrvD6__82U=w3>}R~SVC~u0wSQcJB^HCHtDnm{r-UW|P%1wu literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__dialog_full_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__dialog_full_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..c9065de58ab159dcd44a24afe2bb196ed3174422 GIT binary patch literal 1375 zcmai!eKgYx7{`BGdtuD`5i4s`j+d0FP0_GvWgLa>Zscusg}Cw-8B4ZAlrnjDY;%R1 zaaXyRUcBs9Y+adoD|EC<$y>(K!maK)=iYPffA@RN=lOikbI$YcljnEX6Nx|}002OG zQ7K0>=4c>l!89|keD@BGXmJU&Z~zR}*7Sd)t118G`(9rI`yYS51N|REgQ0E!0O|3f zkZFwZ1@4`=37kRBqRqH$pfy+oHs59PeiMWmc4I$hqa--l*00*3@RAmXOzPDmi-55U z_T*Tvc>}pKmwNfKMOp14K=!tz>#81Rx<{{TVX)s*7@-gvSy)&|8!P;WQ#$A@GmI9% z%4Ke#{nUsPyQ6mB+hdB$znBBgV)yFc(!dcpL?jy_z6fGCWj+jOsBqDtq>01p`%UZb z2@l~(rf8U6*FjK&O+x-+l%>~J!l1FTz1m+d*8}5K3oq0$VJ2@aA-5P{9Wvi5iBtty zpZH`$5vjNUoOmi^S}fm>_rtp8AhFdhPZAS23~3S7HzP!m{G~i)%1v;vKA?t;I6=xd zH$b~KXG^$F-NGy7&fK}nZ{)mdy$0$QH}uP7?p0jwmk@hXdUHDTs?=_=lYeFi-xVJh z*BKfX_H_nZBfnl(CC1Yo-61r`^&%6Sd0 zYImoGu$^UeD6d(8HOR2^Q8r%^9xJ!}3g2ApzamE~^kjY}TKd7`a%|?6+)a^qmHSS{ zUJBfGAp2o>MfJNNLntacsYyF=3nePJ|VGFF@ z`}iA{K6r;HuKbouM6nK)Q)Xk@u1T&b=P%@ zwlQP*X(I&9p6&p>KJ5nKHLLnj@hdsCVBggo=k%tLe9FEJRE3wzEzwA*E~#@gswKc@ z>E})G4`~cK#<;Sg(Hw#TPEE8O`f$LQakfakx@xYd+sMiLjpS$*J0Ol}4YG0`0Lwn5 zZ9$`fp3o~D8Zu4}wa)UVPOhXQ)oOJ@YHI2}|340Xqj)kf0@Blw zk&(wzsZ=cxxD8snrnpW|s{2G&dh0$D+mMvMm>C%vAmFMey9%uZ3Pbsw<6ALWimC=AzmfRnuIn&sEe>Va=fyY_-xT@)`Vn$LVf0^~Tai z6G>6BVb3doi=^@5cwkZEJ+&Z-o_OJb>P?Q`UI>b((F(l%y9 z@vE$JJjwkIkgmwZY~G^2cg`Osjm;nR{dkizKU%~`WDiS3!3ErmRS~n6wOo#H z7l{ThzA|gpoEBZ7M1O_u`iaStfTo@Hba4#PIA0ocU8u=G;EY?~#-nUq3l`m|e*g7< z{i)`UtbF-u`n$JpKN;8ZLzKbOeZ!|tmmu$@o&1l5ByDG(7MEZY3H6*R8Rxh)ZN}HO z_ag7M&pK6RlI7rXp(y9-mWB-ui|!WkUQK1{ocH+U-wlj{Ld^LVTi6Ycczi!L`GkU^ z%Ccu?=IRTaUDC8Pd&g>1<%}zBZn-x#l**3Totx9({HB!CVxG^x0}7LheN-GfroZlO zm+*L3_l7@@*(Nh^{fR|P|F?gBxccvJ$s6B)GKFXGE9{)PqXg(J22WQ%mvv4FO#t^u BP4)l) literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ic_ab_back_holo_light.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ic_ab_back_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..5b29b1cc81062c2ae177b9a4183cc0717bc6fb5a GIT binary patch literal 438 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAO%Cu0aRt(Y4OCSsmjc~nSQ6wH z%pj+(swv4R92gQDDq$7isVC**$HnB}9i+s};pVSx#^-A+>dY$cXu_}Kt}M-MZE$(Y zj|`yZg`O^sAsXjiV(v|NrZe@sVZe^U7W>&Acr5xA~w! zm%H5TfK|sPXR7tvrOo+#=dp0q2E9*9^EYVSyurb7?OH+P&!)52GS4+6r1#!x4$Qu6 zvW#u9+?0)m86_pR=0;t3snfd7)i5?eTXCJ#Z1s}n$N$9kh-Ww|$~Ahdc$LuMWHa^1 pKPR(%%PZ`jLDCkv4~)NjVEt0bH9w(!OC2cmJzf1=);T3K0RU?kYajps literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ic_cab_done_holo_dark.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ic_cab_done_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..bd2d459b03c29cc4de132fabf7735a2eb5d0df27 GIT binary patch literal 791 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBgK_VB`+)32_B-|BnK22z1)6oCge! z$dVwxU|{etGfB8|Eqorc;PL&l!kqJ;+`4Eo@3I-koTujOv#(grym{4%ZN@cg)@im= zuiFW-Ou6CUb;@RvO9@l`J%#9y89hUuh z5;D!_dFps|I*x3r>sBPJh*$G%hdj!TxyN|w||emoI3dMy!u)Bz+ zl54)aV!7Insy+6Pb}iq@qv?{K@vo=olE)We&BNWh98V_4e|YX$bNkb$Rwn_c=~Lok z)t@gFHFr|<75uaI!TViLS0@W?`>a*L@lKOp>+W+$?Ij;e5AaWE@8A2(z4fgvr}q5# zOExucZSw;oeC62Id`&Z&9~GFrYt7d@lkH0M5>312J?(w!>!oa}DqT5P@BMv1bn=%)Gk#1x`Y%QF^Va0& z``e$g6fSvee)_MEwvFum+wY2l1nXSpFJSR+;WA&~(l6uwM{nBC`kzdi{GwgG@;sYC OiNw>@&t;ucLK6TAkFFB{ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ic_menu_moreoverflow_normal_holo_dark.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ic_menu_moreoverflow_normal_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6ebdaf462407f7c57a6b18ac29a50c6f53992f GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sYymzYuK&RxwB~CLP=u)@$S;_o zVYarP1dyld>EamTaXdLeg7q-Ffz!biZH-qAW|_E|_Nes+@;cjP_Ar?+FjU7f9K8F@ Ru^Fg=!PC{xWt~$(698OXC0YOg literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ic_menu_moreoverflow_normal_holo_light.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ic_menu_moreoverflow_normal_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..48d472841031c40a715ddb20562dfb67207ae1c3 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-soB=)|uK)l4HwJ^LW@0OVg3KjB ze!&cB3@0yg{0DNiJzX3_JdP(PNU$DeH*h+*qOI}j0T$LR-Izopr07fMz*Z=?k literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ic_menu_share_holo_dark.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__ic_menu_share_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..f5c5130540838f21e4f57f8af8a18fe7ffb70b39 GIT binary patch literal 578 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sO9OmDT>lRR5dF;tJ^688QscUaz@_=`uCCzy9W86L z`qsq5N8MFq9zRz7|KDM)jd#jx{_|c9&nBK$p6;&KA0xNZrl|7CrxQ;t<7Z#?J$(6K-_rq}IN z0J1Dgg8YIR7^Kr%yK}Uyr_KzNoUR*HS~;m)wpl2dGqljlhs9+=jeJ&5o|;*^LWUcw z2e*pI6b%b2%_@E4V5>aSuM7-~TAnVBAs)xyPKgdap|0`@S=BmmKKIs`Xg!#+uVtdg9j8z8Wb8!@iHx6SXh?E1th}qtSWW$cDQa v69g2PA9S=Za54%psjzr(Ob{@5^-?;pLQCcL-1|%O$WD@{VA$bKM$qYEak7aXC3le~hEWCkWCkOUzBQ^TnC|Ns9Y oz2bd94cwkCjv*Y^lYgvdV_;HeRFix#H4$Wvr>mdKI;Vst0L=jt+yDRo literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__list_divider_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__list_divider_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..75bd2d7dc5f17d84a4a5a3083666e031eede4d18 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>le~hEWCkWCkOUzBQ^P0)RCyv- mXe*H7_H=O!;kcfhFac1|%O$WD@{VA$bKM$qY~9=cQ7uf2C5hLba4!kxSVWq@7I;-jSLA%3QRp(Nem2!i1|%O$WD@{VA$bKM$qYEak7aXC31|%O$WD@{VA$bKM$qYEak7aXH!K-melhX2t_Y99Semk1#N(>M~XQ+w|f9Pzi<Dnm{ Hr-UW|eW5K` literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__list_pressed_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__list_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d3e72411ad726e3ad3abaf7bc1165b03ac18bd87 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VA$bKM$qYEak7aXH!K-melhX2t_Y99Semk1#N(>M~XQ+w|f9Pzi<Dnm{ Hr-UW|eW5K` literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__list_selector_disabled_holo_dark.9.png b/android-libraries/ActionBarSherlock/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/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__list_selector_disabled_holo_light.9.png b/android-libraries/ActionBarSherlock/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/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__menu_dropdown_panel_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__menu_dropdown_panel_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..29ad572b234b70d4b2b785d0f5777066b1631cf4 GIT binary patch literal 885 zcmeAS@N?(olHy`uVBq!ia0vp^2|#SX!3HGXiPfJ6QXzQ-A;}C(Oq@VA4DbLM$QUHf z55$2`S`kPyBIExC1_sD{5W7pvte$~^>5iw1V@SoVx3i=3ZW{==>boBGlV|&N)%MHz z)n~rF>R)p}T7zp#=_2;4{gX~4Sk-v;O3x@}RGN_Ee9+cdri}B zcfY+>;<%-I;(bAe>aXUjWu;kn zo>;MB2U`Sdz+A?K9Ov&ji~lYP4`|SAnENYw3S;>_N2P6m!{ zed|AwkN2>D;5*>XAYW7c{{7pJo47<~x9wf}Na|XZd;TZm2JVJ1H``wi8YmIiF6@G1SxHIW}iw8&cf>>n+ zna?fG5}Yhi6S^5aw!CcWN!gdn!@z&0vBXlw;p?+It_yN+*bB;?x$fY*Xy2VfbNa5B z_Vc(fJOD=ErDhcaVa5xl0)K9(88 nr2|jr&z)4$dw(mN+Uol^En@Ok@R+6p(>sHwtDnm{r-UW|qE2ql literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__menu_dropdown_panel_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__menu_dropdown_panel_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..612b887278dd80ee2c5d0f7064db3e83758c5264 GIT binary patch literal 997 zcmeAS@N?(olHy`uVBq!ia0vp^2|#SX!3HGXiPfJ6QXzQ-A;}C(Oq@VA4DbLM$QUHf z55$2`S`kPyBIEz>-@ixZgV^6c9(~5Z!0hAc;uunK>urp8-eUtEQPKS8BE`(g?k7U4 z*6j53o8Vd=DY}_|6UQVT0R<18Qo}HZ%POk7kJaP|2`pK%HFnQ(cQ2#J=VyT6->icn z=Br*;1s>SDfB*kTCXNGpUo#{GvK)~(D$lFP!R5%#mQj#q`#>^jksF)F1Lm0z7sPOT zv(1&<9^>+6Q<5R0L=BTo$}iOk2OIUi#)?UphO|C-EH~r4kYuqM!}k)NOdf^?4~A7D z2{m>G53+rgk~mo|Y`n5T$VzL4#q=c&?^_MskHo|TrPvi8U^jXf(>&!uAmfFb_mlJ) z^}kNidS>%k+1WuMh2>ZET7fvN6;lqJnfPG)?YH{Tg{QXN%-Of~u!CCSlOzY#H73;u z7N;$fKC1Bm7{+?Xekd&pO53085h1xRGMaOW2kx8mR89W!^v64vN}yT>8bmj zJ2_50Iia8Vb!MLVr_8j-(M;E^?tt%NK?B<`yTeMqn{KX|!SL%}#RR4;U${5hFzT__ zb#i-&?~Bv3pYPusvEldMK28o*!-LxUx@%w8@4m~Ec~Eb<_pCLJh0e16le!tdEGn>@ zZ@=#P>g-v^1oGd0tl07R;|sp_!|crac3G`5s?%8-_T$K#yzSM|>#y7UEx%ko=i3bF z%WD$f{oeR}_M`VdK2_cOJ^%OLe`mjbZf+8@Ke*E`NNhUm#9yJ_5n0+-US#jEoF{#e zWz7|-EAv(?eb4mjaQ?aElH8)Ol}thR6%sa{S)iJ(ElB*z_-o#Y zou7U&Z1iBh-o4R~;iuBC0-M{5H*?Jl6g7JFW{cEDN0uFD0-0I&hwEmBPKqz~Y+j|Z zGbnVm@Vt3Favy|#L_Sy(RA(W{^8L+z-5)HwQnh($qY;^AR$748L9w8ivqC( zk_JW~8-&5&-!o};AVbO1#W6(Vd~$-svxblV|NjrVp)#Z3r9x~|Yh&X>oL literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__progress_bg_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__progress_bg_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..82af131a84a8fca91276a7b8ba01a28e136113d1 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Ol*0U~b-^ehHa0eJ->$qY;^AR$748L9w8ivqC( zk_JW~8-&5&-!o};AVbO1#W6(Vd~$-svxbR{jR(bNvk2?SF7Y-nGB8+S*u$j4z_28c Up{DmdKI;Vst0R8D2x&QzG literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__progress_primary_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__progress_primary_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..15f110b9e1fe7a72d95ec411af341677b6989291 GIT binary patch literal 858 zcmeAS@N?(olHy`uVBq!ia0vp^ia;#E!3HEtCQboK1mqQjBr`CvfP@GEW~c%XEegaE zNE#S{Y!C*6f6t`Z85o$3db&7YALc#vho@$zzttCreR*k(o52lZgUiC|GfRGz?hg;W?z(HM@I4n-cY&e@MX!S7 zx37A)bG=+acXSMEd@ToijcD)sBw;=orXM*kV zFF%^`eEHNhs|F!#l{jG&}b58C`TWxnYK_+AU=UuhJd0}_o zzhU@v>3Y=f^&xk&{#dPl?EJU7wBl$R-{+tg`E|iRCT)`QdVXOo&)K(34f^YJTkMOT z?-IFGwNLXvc+T}N8{bKHT#bo-eLYpepW&Iperdgn`V0BD9e6oceO330pT!!jep}tT zu0^K?%(vE_d(Ay+LFBfacRUR`%906YALc#vho@$zzttCreR*k(o52lZgUiC|GfRGz?hg;W?z(HM@I4n-cY&e@MX!S7 zx37A)bG=+acXSMEd@ToijcD)sBw;=orXM*kV zFF%^`eEHNhs|F!#l{jG&}b58C`TWxnYK_+AU=UuhJd0}_o zzhU@v>3Y=f^&xk&{#dPl?EJU7wBl$R-{+tg`E|iRCT)`QdVXOo&)K(34f^YJTkMOT z?-IFGwNLXvc+T}N8{bKHT#bo-eLYpepW&Iperdgn`V0BD9e6oceO330pT!!jep}tT zu0^K?%(vE_d(Ay+LFBfacRUR`%906$qY;^AR$748L9w8ivqC( zk_JW~8-&5&-!o};AVbO1#W6(Vd~$-svxbWmr-kElgnV|COwc=c=)i%3$%!Hgj0}vC VOn)mnckBge^K|udS?83{1OR229$^3g literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__progress_secondary_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__progress_secondary_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..4bf430f1dfad7efc0a53189cbc2a11a37da26d00 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Ol*0U~b-^ehHa0eJ->$qY;^AR$748L9w8ivqC( zk_JW~8-&5&-!o};AVbO1#W6(Vd~$-svxbWmr-kElgnV|COwc=c=)i%3$%!Hgj0}vC VOn)mnckBge^K|udS?83{1OR229$^3g literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_48_inner_holo.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_48_inner_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..919c328ba5460724b6057b6eb28929b43f145660 GIT binary patch literal 1819 zcmV+$2juvPP)oPF5tZS#B`;gAqnG^_^l}HI##t*3+klXi?(!VgdWv zKmS>POini#;;hEVf4d$)vk=#VY|}>4(w#8(1uDG*WjLo3T>VzD#z0wV4cmECP3XTi zEs$59;6U)YkfOwiD|#2yb>7w~roZW$0o{u0VV+he(fN%6vbxTw#>r@sxi^D-LTaE{ zt*liiZA#vOp63E@>hd>&8UW3pRqWtHYMMWDLE{YRg2u^GyxS|j4{@!cOPlCX8Y{ImFSuxn%%Np=O@Z zW5hz7DV<gN(Ar8NsTRKphJ$gLE2^iHu&Nt+%2^2p@4fJcL zS}A#ER{J^jQhrH5lL>ZdXLwmf{-wWjWtFRsy+4W4qmR%P28(IE%BdF@)Nyp7A2Ja= z!iQ-HaR&7o<7qD?8NB9aCm7Qjnk7(z2Q>Qp)L$3)cjW$G--J#-?KBtypXYDBzBC+w zz19e?Y7`4lJG*G2Iv^VSq&vW1kFd`Zjmyg6FIywprwJjDder|)v%E0qH|%{Dg}aDn5#*lcPbFBUnavsegLt6%X7fv$@lZ!loE z&2ri`H&+?gyLdADpg2Ed4jqD1r&69|HU)ent0tb)EMp? zaLZmi4i%WPjd6n;>x1(P)T+1;$}{=pGI7YBpkR!X?ij8QQB>`U31Ch)%LK-5e9bv9 zj=RgTx?EUFostlm)MWYOI^i2(tlmIfE=_CHA%xHs&6Wqs`mznitG!{U<~YBMs7I>= zXik^zttaj+(2Bn3+0cr%I8}3^7HuxgLo}(8FO{ztd+>X{8kT4qz2R(4X?_)n^oAE^ z4U?&?>zHBCd1IXR2WY6N{j~D_(B)?sRK6mh&4JH(%%xQOu(u4>EQS0!u5IcJr?eMz z`HK~It{F~x&KRfsgx8*_3C?fCCT&wp2u*nLn@rCNq1%UeOi#{4&Tin~(d9vZe zl5u{ITD3>LD$Qi4IH+r%uW~-b);!1jE`c#5z0a8JItdRo>{w{h;IF z+Bu)(4QD>Rc<3y5$`j%N?{*)Fum-Sa7!Ka`h-WA~b)OY~!Ev{^+kJkYQ(+Rqw>ajv zJoBk?vAn$E2cXg0y~9mt9%|0lJ>pT1d&&hDgTQjc5y#!?4zKfix0WI;)Dk=9p;o zBkp&{9VZ7&00j8HFJ?XB0S__z@k-NgH75*IPI7d4k&oe z)6RIpms#r^5HUv`aRl2ATyWu8R%At1WJRiw{{Tj9Vd5-dD)j&W002ov JPDHLkV1iI8dX@kH literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_48_outer_holo.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_48_outer_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..ad987cb4f067ba54f2a3cb1beaf605fbb78e9aa7 GIT binary patch literal 2380 zcmeHI_dgqm15JquI)flCb#HvxdnxaNk zI!>!bks2i_sS(aPwM(@|&-d^6-urysd!P5~`@GNRQLZ`KNr;^i0{{RLh|AW~zKFuzF*8bklu|cG!#)Xb#ts>4NXw*nM%<;oJLx0`s_Xfo&g?+}Q ziP2AfF}d{im6`XO*JZz2R9RZJzIf?kZNqwAsb^~!XMelp3ezF4@mjd^Enl^JqUKk2N3Ru6cAH0v+23{k>n&wR?csKbVjgC0RSN>gtdh$rUUP*AXE;} z_4UUQ9`pl2AhfctAAVu_@0odiz}bPHL1=SZ0>ReY9G!5?Ld8$oSwBh?p<&=~kIEoW zaRh%LL`_RgRa>*Zw5Eb-No~R?RH9I$BkdY0;>cVuXK-Ygp)sjo9xSgY?}f^<@cg~( z`|;a1ly7B-XI^z+V<;Ew?7Ke+;Iicg6+oaX+My7v30c_AO4UkJA`t8bKZoo0Lp4RW z0t+f0X$Tnz=`jD{FU_q8Ug-JA9hgcMiF^nI-V`6E&sa&JK}+qWzCN=j&P)w904)99 zSIa6XNl!=Ab)}*z<(w*Nvg+?71<_1Yh;gLy4%Pnr>nWP)q>Qqpq$JBArsU+hGbKH1 zRs!CgtDYw-lOyLzr5LulO(f7BvMc$z?t*; zba%Affv5I;F@eoZ)5fw&5rTmE+VxH%b7{W>;oW+{ zfdQx>0>bq>_ndZpjTX536cNTkbExQt$hQIIy|p3ELj@inrey7-)~AiijWpkgAQ(3^ z?G0MyGS&#rCF#jxtud{ODYu_;@KH=M7KJ^nW-Ms_X!r^8s5IM8@s?nCywB8^YG5`68AE?z=TVIQmt+$^vgt8Im zxPiw93XFIlRdU7py1!d36=~I<@9i0805)s>CbqyXEE$CtzZk{n4&npD$cz$%CTJY2N_xC}|WsngLkH@p3T1a1E=y=us8F2#7YYgav zBE-rU=b8csypxnJWw6J`d&ksTq>;qXkPvhkj}3LlVog#j7T3J#`AavY4`514{_Yiiy=S<9OYRy`Q5ew+0ZfOkC>-q^|YPwX*fmQca`4!A(yfCHb){ajFndB z{rr`<&!r@z!>-N3wqPE7MjMK84N0$?V8w?*bl*S2fA%IV4DJ-BuFho1frzc4t!v>g z5)%Y|TYKWMY8n;TN4LUO$=J8S7?6nY7eA)?T?Z+{3ij?Xl0>tDxP=Xdjnj;%1{|a~ zSA8f|VwT8HZ05F>LgCl%du`qrQrsiIRWtUrd$7p=1crN$O+0&<)7|0emWl8{ zski^WJ*s!tZYR)3mqfx9>O@_n>W7vjcI3Eu#`5sIw&JPhuUZ!;x8Tl^Q!fJ(zwl=@ zAA`fK!HKY1`a%iMYu9u;GZ-_NTO;q&2m0$^etY#fC(CZCnnN8)^&ibQAg+2v-#SZ= z7-2OTWFN<%*c>^d<{v=FNPYCoh;*GqlW+>Y#goYEPa#z1#XS`vH$=8 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_ab_default_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_ab_default_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..9ae770c18aaa7faada417252df4ec40ad7759824 GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^ia>0@!3HGf=LrV_sgS&akYolXCQcw520+phKn$Wm z7z98xNDYhziQxl`8<~78feKc8x;TbJ9DaMvknfNIkK04{P(u;E!z~ewud5%Zb*zj& zI%%UqlJ&|7|I|ynme$Rb3GmWfIwk0pzwzdaXUekEoz)Mp%xQeA*1@!6YW{vR<1(f@ zjXy8nxxi^qJ6m=en~CEUrb~iy4qAt}J)B(_G&?jDdQLF32t+cND+xbvN?~3lsLK%A z5!Nt&`-+*e4cXidXSMb-EZ@|Z{(S$u1451xA2{MF7~`s5Xf3tb%h)C7V6@hlM*-w7 MPgg&ebxsLQ061AysQ>@~ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_ab_default_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_ab_default_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..e932deee9f6f3a0a65fd308a3ab2c224c7a93058 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^ia>0@!3HGf=LrV_sgS&akYolXCQcw520+phKn$Wm z7z98xNDYhziQxl`8<~78feO}mx;TbJ9DaLkBiA7Vf%cE*17ue5E6a4O{`E_?M!4`* zSd3Aa;dJk=5C0bg^Zhzq!nkxwkeBAtew%mulO8j(-MA56La@y(y>!Vy^l!XH-b`M|X2%Y{&{$|`1;Lvo7SW^Zu@ OdCb$*&t;ucLK6UK(OTI6 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_ab_disabled_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_ab_disabled_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..5caed9d435cfb2a5a6175e66e7c5f73f9b5b46bb GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^ia>0@!3HGf=LrV_sgS&akYolXCQcw520+phKn$Wm z7z98xNDYhziQxl`8<~78feIFRx;TbJ9DaMvkc-Js!0lnW8T$m*um8T!+?}yj=f;wl zqi1|Jar|!%;e6t4%D8k&keBAteQ0@!3HGf=LrV_sgS&akYolXCQcw520+phKn$Wm z7z98xNDYhziQxl`8<~78feIFRx;TbJ9DaMvkc-Js!0lnW8T$m*uL{NgjWgHk+*lHG z^o-9Yj{nUeoKL(>8JA88^3q)T&&1ez=FN9;Gg%@UL|3#cNIkf9?OkoD&;z!d`RAs3 zHaxw3v&bZYW0ClTz7GsRf^iN~N=zP(E{usTYzi$Wn05%xWDr-9zR)Yd_`<1&>5q-; z*)>el1smoC?qhmx)@S}a_PoX;J{uvqzn9#@HJ`rZHC`{e$E=gx4&)tAS3j3^P60@!3HGf=LrV_sgS&akYolXCQcw520+phKn$Wm z7z98xNDYi;1hV1S*LdqwWIl*(v9L!0NM(4sIEF+VetUCo-XQ~l10VM%Z~u8?!mZA= zvM(4yn)XTy>Bn4jPe{^?UYfV|7lY;mlZnPtxow*>53!bZ5uU*VhFi zn1mIM#lC4Qf8Z;5KxV>@-WyL`8IzeWIHVoh=ghG1q;;4>lA2Khvy6;_QbO7>m#b=9 z7~ja;?R(tC9^+Wi;toYet|~h%Y+i6HFqX}5Lh25WOBeU*Eb3NZ+r%^7)2epY+2w@` zuC6Se!hPWJ+55$eJ3r4_!MxBY>A^lP4e_z|G3JnGQEhlcPoZ8~y zUAs%ZOf0F^!_I8xzc)o&m%9C*l676`W9*8!-w}1E>q9%Ld^uJ{DoS9L9^64iMK40{GoS3j3^ HP60@!3HGf=LrV_sgS&akYolXCQcw520+phKn$Wm z7z98xNDYi;1hV1S*LdqwWIl*(v9L!0NF{r^IEF+VetUDH_hAQ-;~(>9wR`S*t)#T0 zWW(Adb93|m5su=WyI&}AB(XbcbZ}_7YG%w9yKV7AM|O$H^wV1p|DDzx^PqNz^^OmZ zww{YOYfN6i=yKyU!wz;m7sjZD{<|)#^q8)QDzLU?=~&ANtk_k`xGF1&;|^0Ns|$zB zij7*v!Yi4+=;j_TIjX(JLFSMm6eWEXT)gB^${St&i?7*Y=3o6$!8^VAMJcnM|E!XC zvv~GD-5-90>%q@N{&=@<=a1+l{1LukKf{vYsX`Ic8D$fOG{IR6#T`rx#vM%!k2shc zk~o|hYFiu|U zT4|T`|HZ_+hy6D8PM`91?LNDtMJgy#L7SPb$wA){d*qZK*C!-&QOBV}1O2S^czf&d0!DXYh3Ob6Mw<&;$S{ Cg0+AE literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_ab_pressed_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__spinner_ab_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..8747bfc5617f90045753a952a130c4409f7f5e03 GIT binary patch literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^ia>0@!3HGf=LrV_sgS&akYolXCQcw520+phKn$Wm z7z98xNDYi;oN2uEDUc7QL2P6`NPNmdnbSZ@#nZ(xB;xSfn}&Xe4I~^MrXSCIb*RH( zk&v;FE|2IVt{91_)d6gL2U;SmCa7iRvRz{3)GU;leK7yaga4bK9GrCY)yrBw8zyfD z;dMe4jPpXdBN!zUFTagZ+0emYF^!R%^GwHWpHKW=9W5R(^kR}wSjP+w-8H+kSA7o7 z{GIiH5k2jSLKP&8#Q7-SsbD%wVOQ*Zt~|muWh0(*1~y z<&s}gU2=70@!3HGf=LrV_sgS&akYolXCQcw520+phKn$Wm z7z98xNDYi;oN2uEDUc7QL2P6`NPNmdnbSZ@$#1C2w^8D86S3b#httFSk}C+I9z-FATPW4S^fBB z2UsUCDgT+usQtjpyuni7@%BJtan>_T3}r_T_%J3PG7J0D%%aHQ$l)Z=B+#M|6*^V0 zR90YOzG?qy<$ZRO3_5C7SMIQT_%qKd^2k3y>jTgJ`8(|IxX1FN(wvS$Z zn{oZD;>iUnl2hC!w^g%FTy<73{dxYJW$(j|_lBHJ*>B+P!^c&b%YDdPi96?n$Og7m s4h>up*$EeQmK?aCtnmE#>co${@7U(#m>8w>0z-|#)78&qol`;+00)Vhx&QzG literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__tab_selected_focused_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__tab_selected_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..1e6ab9aa1108d361e0f01799212d3fef21a9b4c1 GIT binary patch literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y;!3HFk*Rf{-DT};gTe~DWM4f45J|; literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__tab_selected_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__tab_selected_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..4dfaac80194d78b8320b33df1b9a46a18e26334e GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y;!3HFk*Rf{-DT};R!*uWai-oZuO`fiPF6*2U FngDw|8m9mN literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__tab_selected_pressed_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__tab_selected_pressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..4060199bb5b473ade8b7c2fbbe109a33658f0abf GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y;!3HFk*Rf{-DT};aNY)^S49j9r!YOMz7dcJ O((38z=d#Wzp$PyAp&>2+ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__tab_unselected_pressed_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/abs__tab_unselected_pressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..86304e5ab58d830bd55dbaf61171eea64bb252a9 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y>!3H9qs_+0Qi@bu6WCkWCCLo&-0BHsR<_6=f zPk}V!rC(<}fwYXLi(?4K^<vqs&CKj<8z#xHD~st?aANODkVa2e KKbLh*2~7aP+!}lU literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/ic_launcher.png b/android-libraries/ActionBarSherlock/bin/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..bcfa0581febfc292711358f156e856315e800cbb GIT binary patch literal 9193 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�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 QrvLx|07*qoM6N<$g4-B2hX4Qo literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_bottom_solid_dark_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_bottom_solid_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..c2fef9ade0c5fefd25bcaf5f3a80e05bbc9dba53 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjA$bKM$qYpSq;OXk;vd$@?2>=#FF;oBm literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_bottom_solid_light_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_bottom_solid_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..baa52989324bcae6d06bcc49b9fb8f631919dba5 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjA$bKM$qYh+6h5wJlVVb1lVU!$yZk+0u6$3FLDs<) htc%5`faI6wdZ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_bottom_transparent_dark_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_bottom_transparent_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..fed7fa6af6384ac7f5db4de67410f350f0476854 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjA$bKM$qYve)rpOlM t+c9?+I5aY`?qgt?P;--i&Wdg`J{bW?o)FglZ!RE{Jzf1=);T3K0RYViCB*;$ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_bottom_transparent_light_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_bottom_transparent_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d582d39012dd30cf49c1411e7cdcac646b961562 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjA$bKM$qYqCGgYJTq t*{h{RGy)bJ5N}|Zr2o57xb)(&M&{?+Il~LJ-7`QYd%F6$taD0e0s!AZCm8?$ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_share_pack_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_share_pack_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..735c0490d3cb6989eec2db92f27f95a2a2b6e68c GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`C3yuQ$qXz^{6IE7zyg$H1!8U> z<^f_3Am#*OMjRL@3 z<^f_3Am#*OMjRL@3G-q^fAk^htM$UYhJl?OkN|fLV@lMb&f0XUYO|SIQ-Xfh_ZM^>bP0 Hl+XkKWymNK literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_solid_dark_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_solid_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..a9f2be43000f440490e8b284222fa8382c4d3ed1 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjA$bKM$qYJ>FVdQ&MBb@0EucbVgLXD literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_solid_light_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_solid_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..a51dc9bcaf139934e4be0396829ebc6ffffbcbef GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjA$bKM$qY)&E-Wv+SJpgTe~DWM4f4&*aJ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_solid_shadow_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_solid_shadow_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..89eccd47e0370201bec2efed457e5b3b6fc6fd72 GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`9(e^J$qY7-Dhy?u3J!4F&=%&y!Ydko~Ri;d7l{;T8?+>DvdjL z@+KViU|7w(;(*^3{s1lao5;V}Oe}-N`{5dpwVtkiF6*2UngDyqJ6He! literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_stacked_solid_dark_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_stacked_solid_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..fa4ca7574d42502ad927327c38af7471a3c74dfc GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjA$bKM$qY{%FwiGk=}twF3n+SJph4VxO9RC6G= so36yxgey%DM#B!T|F^g2JKtt!P&>?7qn|YS3eW%sPgg&ebxsLQ0EqT5%>V!Z literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_stacked_transparent_dark_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_stacked_transparent_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6584f9561275152923fd35b11ba303101c4aab46 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjA$bKM$qY*i|KBgd%*!au+teBR literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_stacked_transparent_light_holo.9.png b/android-libraries/ActionBarSherlock/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/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_transparent_dark_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_transparent_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..06010e925ffac44e29f33d862e01857ee95cc915 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjA$bKM$qY?86W@u|KIcakrO8l0D(hK+$J3b zRs+Ke5^SsFeLy0 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_transparent_light_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ab_transparent_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..ff64b454556935e7cf22e98e9145916aa70b8ef3 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjA$bKM$qYpZ zgRFxqSQm@+aBxd>uC;J05a9hO)q6DM_U8Z2x7Zn8ofrHx|DC87$X-uZKbLh*2~7Z- CurD6~ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__btn_cab_done_default_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__btn_cab_done_default_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ac62c78e262ad200b713181ff4cf37a9a1e18d GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^Oh7Eh!3HGR7M(u=q&)HpLXsJnm_R~=03%QV4-oSr zD>VN9|38$^SlexR5Xe^aba4!kxSX7mk&yrfNexU=#;;z#?)AKM)Wcnzi6O$5<@K@$ RZ!$m{Jzf1=);T3K0RYw5AnpJF literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__btn_cab_done_default_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__btn_cab_done_default_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f292424787a395cef50f442604de50c35c88a3c4 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^Oh7Eh!3HGR7M(u=q&)HpLXsJnm_R~=03%QV4-oSr zE0jWT7`+rG!~(gBo-U3d5|@*6GBOgtAgO`rmZ8LgGS7)ix+nJOu`u{wX1Odl(R?jP Nucxb@%Q~loCIGXZ8?OKW literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__btn_cab_done_focused_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__btn_cab_done_focused_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..b1d51c67afa3cab680cd8286865dce61da5b8489 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^Oh7Eh!3HGR7M(u=q&)HpLXsJnm_R~=03%QV4-oVE z8gG3HQVgPv|Ns9FW>mh*IR43W5;Y;f<_mG3}l9v_|nhw3)N$X(|y9c*Q| W+R7HRSV%V-WP+!wpUXO@geCycb}04$ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__btn_cab_done_focused_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__btn_cab_done_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..10b0432ba9bf7a138d5fc26ecc39ffa3ca650795 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^Oh7Eh!3HGR7M(u=q&)HpLXsJnm_R~=03%QV4-oVE z8gG3HQVgP{pfr$T+?O3D3ZykXT^vIsE+?Da`*p=Uw)ef5Ftf;ozJm#SzOK|~W^NXF ic}rSKYTm_ztqdx?9I2CjcfA8@V(@hJb6Mw<&;$TDODK^5 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__btn_cab_done_pressed_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__btn_cab_done_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..963299580329b75bcf5941918f9344f4ab28a90a GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^Oh7Eh!3HGR7M(u=q&)HpLXsJnm_R~=03%QV4-oUt zG~W6Yq!>gS|Ns9V%4am=VmJyE*79_543W5;YbP0l+XkKojENk literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__btn_cab_done_pressed_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__btn_cab_done_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..0837e7d2db710167193491de326ca15c43787d8d GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^Oh7Eh!3HGR7M(u=q&)HpLXsJnm_R~=03%QV4-oUt zG~W6Yq!>g?L1`ex$hdH2B#_qfba4!kxSVWu?^j9ME~)!sYHS({WSb9GyuLh>hleL< jNp^llMui)@I1@v4C&%@`74j>9x)?lN{an^LB{Ts5Vq_-Y literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__cab_background_bottom_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__cab_background_bottom_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..0a71f49f9251c75505ce572a96fcfdae891dccc1 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjA$bKM$qYr6ai(`n#@nn;GzrNTr^D+uE_cETFVdQ&MBb@0N*n!>i_@% literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__cab_background_top_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__cab_background_top_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..9da38a326a0e3a4695565d064b7be2d0458f4b2a GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjA$bKM$qYRdWc*)4Lj#!)Vry=3uwYnDh^MwKluQ-->MeHHE#k%h7(M%42cH)0{5N|R_x^0X zKfT;RPwis476^XzU24&@>*dOzfa}W|FFm=Y@jStT;YI7oy;@827?dQQiEqB&DfB6w zw`I1y$xe1Fg=go31Oz59Z29Rp#Zzw~)1lI=8g?1i&YP=OD5%IXu6^+_IAK?W&b~GQ zxul-ASO4p&evZ2L`j_|qYVX`rua{*8^?W>DwDS*}Oi#<4H5?f(>*q6Vep~i?L)6-+ z_fPcaC;F*P)<005TBX0ouCu}DnSX<1!Tz}QcmHUMCg(KlG}w3g-#07v6N)Q%?8^`A zd2Ll*bmxM#IHzS-4a3cXo}2zB7}D|{XY4&MyUQnqO<2Nq&z2;PSym0RU+7h9o;}{x z;CA*uH_P=32H}URW88T&PRyLp@<3|2!XKN+J=@N&X=(mlZp=_6&Zx~Ep%C*pMXH{U zfv4O#R#`md`JOAkEw6=b$+l^jwcIy);p1cb<5YOw)%Mgga~^uiAmi{>;by7zOu6kh z*iZesWqR(%tmP|f+omz^h&}H={TV~;s`parKSNxs*d3(f`2=Gghs^6SaExFOIy|}d zx`k}({FQ7D-|8~|H7*yfy?#3M&tw6%zzb53r<&AnznN24r4n=f^X77E)`i=@sXs~l z(^JoW^7{ex2gV-+e@u9NS~C6S^Ka^p=Y4w0Si!RGfcyjV58M&Vvt!~LTo&-JS{P>{ z@`?XeO#PYO>B?s81zZm}-fTV@o%kzmmR_-gfs~f>1-~oD@0_^u;xFF=6E41+``s_T zE;W*4m~hilE7|+5-`5(TCI>gC&bGZL7z59@tWorM#x`@x--mZT3w-(I+0>C`o8ZR4 zH)x@`K;lHM1uN^kTU3js!b;kZhCDshj6GF;o{AV)CsMw?& TrM?}QxEVZM{an^LB{Ts5?hI;l literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__dialog_full_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__dialog_full_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f5a473b2ec39d3caf4da5d45adf6b9d8bd2f5fdb GIT binary patch literal 943 zcmeAS@N?(olHy`uVBq!ia0vp^2|%pD!3HE5C;ztuQXzQ-A;}C(Oq@VA3~&G$$QUFJ zG9(O2%K>RdLio1*gLVc6W-(6}$B>MBZ)e+XdSt+Je5uNY^~q|c%O9xSNs8b5_1v}S z+~0WzeQTJbywYCWn118dF*et2huy_KwVg1Y*TOIO#zA{0h%te3@pWS^d3B1&e9;saOTyne=9${-!xZOtXqDba=+5t7lEpql;o&c`|C6Q@9?zS^*g3Rd`ZxX5A5;A+xwb6^mvv%`mlc1LeYO6 z*L6hx?YMr$rvAx&DV7tFm##dpci0iPtuSyStdtQ?6^69ba{Lqv0DD+`;w&Q{RXE)|BEZnllR<8fu zMEhq`_onT?Z*4Js>5eH3q5L)63~$SJ|BcX_{$68M!Qtr>j^8QXzUTYA^Se^)uRII8 zIBVI$yLsOk3u6P^TLNaZcHCIm_Tg{u*Zc?Gp$m4OS+>?XL;C)IrUMhd`rnUc*x-`V zYk1{3<63iv|9e_LbM0R+p;Zd}wF-Emrbi;3YmnZpmB zIu$U+crnauiu(A_%<$9Gs6$g8ey*8c?Zkce*98sfM^9faw6f~SiR(G-zBeZ2+O>Ge z+?$p^ugvQ)6lqmZVsa^w+a&r?H+zopr0F6qWSO5S3 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ic_ab_back_holo_dark.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ic_ab_back_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..7290c5c8e26e2f95a58e7169e88dbea0dcc584a7 GIT binary patch literal 384 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}V}MVHE0F#_pdj|X638*yB|&~b znvH{tnNc9GCWXnbt6f*BJ~p~ey}83Ht+RyNtgXe!!Z1T4M%rILpQZ4$T>(&Av!{z= zh{WaC{_8?b1_G|dp-loDt^zt=7Jd3Je?n^l%Xihu#?_~d+?Zz_{+Pm;BUx}G{dg#Y zz=s-1hn)I8gGq+A0S}ZW2QVI+7`J&&$*HFM@A}ns*GMwCMqaIIbWmP>jX~vQnUK-j z|GtJZHpUycE!F$B`roI`-@|Gx-#y+jdE(;p^BMVN*qp^aOf&;Jhr!d;&t;ucLK6Tm CB-M5R literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ic_ab_back_holo_light.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ic_ab_back_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..7d944d3a304cd9968dc8736085267f2c812b6dd1 GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}a)3{WE0Cr&NXsa>2ed=6B*-tA zfrXWgiOb2$hEYE_P+Gvp!kk~iKS;;Uja^Yr*4IGB`M^=f8ld82PZ!4!iOb0e4NPuo zX<}?D2TmP3*Qj#f%7ctIJV=8U+FIsS{kTDI8T+ z>RrO1qtLvlSvZti%=zM4R!bkTqlpfJmU)4dBE^xS0XFSVY8fKqS(YvMCGrB~e@|CG Jmvv4FO#qazJvjgX literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ic_cab_done_holo_dark.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ic_cab_done_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..3382680c42384cd44847b4ad92351200c4dd58c3 GIT binary patch literal 554 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyy8?VdT!Hlep$R_8s2l{k-mWCb zFPMRWiJ4I^T;b3s3;6@}a{C)(_kC`Z+0!h&yM;??S6k9H$(>(1x_|7D=oDua+uGB* zrO$BPxBj;`Cr@HwkL0u8Y<&Z0(nC)d#}JFtS1;WRJ7gfhmhdly<<%jvvJBQk`#2VD zTCwMU_QbxgGEBKUT6doLp8m2VXr;AYfn}_RyHZJ!OhU{fMc$^v#*yy@m2S?Tw^v-S zp0ir-z377vNuE>v=Ve}dVSg@e<*He4n-;ND?_D_STKcS`VlFch@_%b>nET;YrgKrT z>Mq;6>Z^U#3?%yg2?;%(I8Weau8Ba#{=AT+TNjxNAEvo4kP~`wHawvGGsvx5~*42%5wf$jqA^oE0LQJ~6bXAv}!5gyY+} zn!iBJJ3U<-Lo80;oqSWQ$$-aY@(vf4$fX=gJM?$_`+wc@I})2ZrS>OoT)EnQ(~Yp>Iy(=)Q$N04vhjIwz~{?9L}w^` zaSi!=Smj&8JR8Bwv*Z=$swOT~IFU5*arr)vADi5cUS{j#KPn^Uy)o-S(dhEak-aXL9cqNqWTr)^i$#R3W5c0~q;M-Lcs_h}!!1XRP|>FVdQ&MBb@ E0F_fAbpQYW literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ic_menu_moreoverflow_normal_holo_light.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ic_menu_moreoverflow_normal_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..aa5ea4fd0d13315a7fddf9062a507def90994701 GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyoB=)|uK)l4HwJ^LW@0OVg3KjB ze!&cB3@0yg{0DO7JY5_^EKVmUNE9^)^0e(@QZrcKaxlY!XL*6d5(Wm>_Y8BnYg}1? PDj7Uo{an^LB{Ts50?i;q literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ic_menu_share_holo_dark.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__ic_menu_share_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..00e499c846d8c2ee883dc9e5361e300acce2b3c7 GIT binary patch literal 464 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy(*k@#T>lSBaE5#FYoH5_N`m}? z8RRD&S{1~%?Tr7Xoa5$GHK#9Yl5O)a%?jaBt50GVt~j+XjCK9dJi&A>?Nq%uFDc)( z^6?8|fV#JPx;TbdoW45grcjdskE?d~m99`1M;AfSJJWysw@*(klv$pcRr1s>*H~`5&W~UGj`(vX@n2IPEUtMF(&X}?;7IevM{z5TK5XgMOb)d1-gm-g zYIo|kQ`cv&{gyUm^(xoQt<7Z#>8V&}l#y?axb# z1F=ei{DK)6#PcRK*m8Hyv~CTYs#zdkSd%E0YNp|D&nX-4#mW~oz0Z-Qc}g&^FS~+| zlADEyanoA$C;x%k4|%#chFF}wdMR4CF+hOfL72F#r;3--!U?Z`{kK1N@#q|%+cQ6= z#ebhYcdzED{VXPnmS^o^bZFXlvVtcgVbA9?iwH)1H@GnevaV zv22jnIkaAL+QiLK$7iSPzFptddBDHos>$W1fDAX5yqn>7X1KAGG4eSytvWQ3rIdg9 z9EO6vIo{Vr4#@@WYk&QAUUSOiYtCidU%zLc`oHjx#$u)$zb4<@{LeFo`H)-y(*`z| g1uP&KQdz_JAXGS2cj2c@pl=vFUHx3vIVCg!0Eecb2><{9 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_activated_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_activated_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..92030f2622fd91ee1045fd4a37aaf8a65f014397 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_`5A|IT2?*XJj@(Mzd8JL(jfoyz$2`I?|#9;ai z!^|^;@X|>FM}g|aJY5_^IIbtB%&2_E!z^~-NCWc)XC?+WNhaIw6~$>FD?MHPT-G@y GGywpGWh+zw literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_divider_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_divider_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..a57e66ac2c090e8ce326747fd715549ecf0de28e GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>le~hEWCkWCkOUzBQ^TnC|Ns9Y oz2bd94cwkCjv*Y^lYgvdV_;HeRFix#H4$Wvr>mdKI;Vst0L=jt+yDRo literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_divider_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_divider_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..75bd2d7dc5f17d84a4a5a3083666e031eede4d18 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>le~hEWCkWCkOUzBQ^P0)RCyv- mXe*H7_H=O!;kcfhFac#K2W`wr;B3<$Ms~Bd%vzsXXH*uI>7isk&(gjDU+JQOC4vBm7cDCF6*2U FngCUOD(nCN literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_longpressed_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_longpressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..92030f2622fd91ee1045fd4a37aaf8a65f014397 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_`5A|IT2?*XJj@(Mzd8JL(jfoyz$2`I?|#9;ai z!^|^;@X|>FM}g|aJY5_^IIbtB%&2_E!z^~-NCWc)XC?+WNhaIw6~$>FD?MHPT-G@y GGywpGWh+zw literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_pressed_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d6717c1f5a52493f99d458d68e6a0a47d7b1ff53 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_`5A|IT2?*XJj@(Mzd8JL(jfoyz$2`I?|#9(@+ z@z$q=@R!y9)&bRvdAc};a9mF|x%aC?jalr#kp|`q&P)ucwoFBaqW>3ytn_sCb6Mw< G&;$TWWG?{# literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_pressed_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d6717c1f5a52493f99d458d68e6a0a47d7b1ff53 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_`5A|IT2?*XJj@(Mzd8JL(jfoyz$2`I?|#9(@+ z@z$q=@R!y9)&bRvdAc};a9mF|x%aC?jalr#kp|`q&P)ucwoFBaqW>3ytn_sCb6Mw< G&;$TWWG?{# literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_selector_disabled_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_selector_disabled_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..9428f21a12df4ee850794fa284100a2652efc4b7 GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp@K&;8Z1|;8ITO0$VLh=eik{OtoIDu?@fE_5w0mQ;U zEYbiZKo|%Z8-N4|0|5$K(P@JgP)ya+#WBR=_}kMP1sN207!*rB`Mk4izUF`aP(|@J g{-r@HL$s!P?YL#kcwq|fSr(8fp00i_>zopr07eEQCjbBd literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__list_selector_disabled_holo_light.9.png b/android-libraries/ActionBarSherlock/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/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__menu_dropdown_panel_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__menu_dropdown_panel_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..99cf362c5dd0bfe72360d5bfa491562d8ad1b324 GIT binary patch literal 620 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQXzQ-A;}C(Oq@VA3~&G$$QUFJ zGQu$U8sPXWc9b&J7`P_NE=PzdFYVDdE9gOh z2Uh`;j|XEAEAQPI)de2{nYK91s5W^cyiRP-1ST8Ko$Yt_yND{B)JWVde*`asJ5>9G6!v~$S#VyW#$O`sEQjvZ2FU{) z3-WJ&n|t%*oTLR?zqh!CHU^$!EK5=7V~Ate6Ij3G=UxLbP0w1E3yeD$G8k(Ze=OLy z^yj?!+*i8(?EIp?WvYouxoXoY7tRl__c8ro{GjV_e&c5b^%+}uYL54~PJJME@S>Ib zw@-B|OBb3%C>_XGl)c)}ouuRA^k63!o6^F?*Vd~x*tcx9+F(Ba)yoY&4<}x;y-;z< z?seKhn~*btQEI@(jLv`1IAO3e3E?wMs V@zq}W9l&U2@O1TaS?83{1OU!k@Q45a literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__menu_dropdown_panel_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__menu_dropdown_panel_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..506368734772fd2a01a2fe4e24710633bdae13ae GIT binary patch literal 717 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQXzQ-A;}C(Oq@VA3~&G$$QUFJ zGQgA`}fFv5c?e8b!G+zCKFE=$B>MBZzH{n4lD3XHF&#j_Z*e<6SY;- z?x?3f;JcTu*6n9j>TtI~_w=Fpp^eidc?}KcRr<@TFn+NA_wB%1@pI2VKeXL%(_wG% zyiZubvH!oK(zO+_N{><|xUoHJFut&JX9@R=vpqeMf;*V()Kw=RaMX8EKIoO5@W40C z&5=Ru$!D2@3C2ol-Uqhu@BGI4!&LLE(2i%!%x`ag-XZ6y@cd2+qt3ZPpw=y~_0j0df;=Dmpju zYz@cbKSHKk&X=@#DJd9iaQ>qkn|M*@Ld=2guX=Sp)26Aq{!-96XlxWBzG3p|z*Q4E zN_`vzf|P#f3N@)Tu>OsVmbn?*(3n~*V*J4S4HtWBPvFLr|Ce&BXgi3pr^IOd%u9Id zm++-_-CtIYYjW(YI%!(RE`6#E3QCx@Aw926g>y}DkkW&@Ejf4j|1s>}9C(58Yr=J4 PI%4p2^>bP0l+XkKN`Dc8 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__progress_bg_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__progress_bg_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..efe935f2893abb8864287249ad534b181c78e9b2 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&4!3HD^x83^;qyq8^LXsJnSU^IA025RJh~@)g z0VEBKKsE@2L8HiOO&~+c)5S4F;&O7r0``PI|Nrk7*~B2ci%YHTAR`0UKW5q7&CE?8 N<({s7F6*2UngE6J8L9vP literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__progress_bg_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__progress_bg_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..8672828a7f0724bdcf1252519b4b0c3d5b70eef6 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&4!3HD^x83^;qyq8^LXsJnSU^IA025RJh~@)g z0VEBKKsE@2L8HiOO&~+c)5S4F;&O7r0``QIgoF>SVhK*+2agz7Fff?DVhBF;>*+_3 Na!*%3mvv4FO#pQ+8gc*t literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__progress_primary_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__progress_primary_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..333dda5af58b6894752fdf70cec603d9cf6f03a5 GIT binary patch literal 545 zcmeAS@N?(olHy`uVBq!ia0vp^Vn8gw!3HFS-u9~jsertKkYolX7LX7jzywtQqWOSW z07(NQkPX6M&?vH66UgoHba4!^IQ=%nHb2-=V9w3G)=A1PPIC@1eH88FQe0xvp=W>S zKW81&AC{^rsTD!Ni#Vn*6a_r8_*ngI_wA*X6O$@9H8qScW%%#ju73B<8^-Gy2Uq8p z9$?(Vx}D)p6;q9b{HMUY8S;7;ZvTB*namr{H#xcF{Lk>u(gOMozwhr03cqHV^6cb4 zA2DfdiDyx1vr+@yd*haHO=wv#Gm@pxV;1|B$5~POvNjcOYyQ+M>YdwBab-eRgz~{I z_C|K)#g&|1oo@XlE)6F;H9oLhcu=-x!uvZ_`?oVYLdm)M(ba;gV@%Ve6za!+2Nq z5`#lJO|u@%yJamivmigRi|gCUJKxUAZvFIS!Ivj$isvFtr#tTVFcj4fG0)I&E!wk? zD=S&7sk>{zjGra9uD^V0CujK~@8;*`{sRd-=T-+_;}S zKW81&AC{^rsTD!Ni#Vn*6a_r8_*ngI_wA*X6O$@9H8qScW%%#ju73B<8^-Gy2Uq8p z9$?(Vx}D)p6;q9b{HMUY8S;7;ZvTB*namr{H#xcF{Lk>u(gOMozwhr03cqHV^6cb4 zA2DfdiDyx1vr+@yd*haHO=wv#Gm@pxV;1|B$5~POvNjcOYyQ+M>YdwBab-eRgz~{I z_C|K)#g&|1oo@XlE)6F;H9oLhcu=-x!uvZ_`?oVYLdm)M(ba;gV@%Ve6za!+2Nq z5`#lJO|u@%yJamivmigRi|gCUJKxUAZvFIS!Ivj$isvFtr#tTVFcj4fG0)I&E!wk? zD=S&7sk>{zjGra9uD^V0CujK~@8;*`{sRd-=T-+_;}%xd!LSoM>cTAvI-x5z`&5yz$EumbmIn) Na!*%3mvv4FO#p448Djtd literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__progress_secondary_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__progress_secondary_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..29ffde6ac9e1661ce63dc61a2d7b54f8bf508de1 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&4!3HD^x83^;qyq8^LXsJnSU^IA025RJh~@)g z0VEBKKsE@2L8HiOO&~+c)5S4F;&O7r0`>%xd!LSoM>cTAvI-x5z`&5yz$EumbmIn) Na!*%3mvv4FO#p448Djtd literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_48_inner_holo.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_48_inner_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..ff1dc7f59b890431c8b7c2f59c347cdc2af307a9 GIT binary patch literal 1102 zcmV-U1hM;xP)9(E6vzMnJD;6)+D>bzwMM@BMNtuufS8H`22DteF~)^);nJ0fQAABlOo&@uxO8P= zVgfESL=#L=`~npy6^BA;3IbxOWjdWsJDr)%`MW3(K3<2J=gx4Gm%Mx5edl-2x#ym9 z4{)db?;9(bG)F{Pk2q^ig!ce><}k@Ay;r9b< z=VrD5Eb;&jzHy5dftv?14jZw70T`0l%dr}j^N~J1c^PNf%mf2ypk;<=7-aFoA2~hU=~0SF>k=U z<#N8ogT{I7qn;)*8VvrI54-{=2X}+-U$4P@UW)h!e9S9WD0px3lpv_#Px>Z=SWB?P z8E?RZN(O6E)VCMKTs^@&Gv0ud%?L_Z!uKXGVx0psobm=_G$vS7%Z7c4|HQd21_^h8 zId4EwrzKH6s`a)0CN6j298bS2Prx#0$kKwfXvN8@H~Le@Rjz^HD9JqJ_6Z%f6 zwPn)J7gVcl(NZ~?epBBIg^I3@$Lsa9y5vk6*Dp4x>GdA7_EK>@sCCvLsHCIndw#a! z%kMy~Hfgnm1eJ8jk~X3V%lBT8mq^qmIaUwFa& UnB_O6Gynhq07*qoM6N<$f}0@%`Tzg` literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_48_outer_holo.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_48_outer_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..0b113bf9369cb5a8f4b1dcbbb879582c4934864c GIT binary patch literal 1527 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBgK_U~&ua32_B-|Br&v5TGmsZpM6m z224qZN`m}?85kIqQo~&}`I%UlL;wB#^5k%jGY31{pI<+}zupLsR?%rx; z)gyN{W9 z1X^0=x~j_hsktq1-cj=P3olP^PmiyUYr%?e6XWL>#GbkoZS8BFuypFy-nBMiU%AT4 z(r(3M%)27EZThrrg#t$()w#N>Tj%=qI3$*o6_%Qo9R9$*c*X8^Yxc1BJFBZIE3+4N z7g_!MajP)-`<(gv8+;kqXR#JFHaae{Q0g?aaIu}j9y;mvbxR-d^d&{D?k+Biq818> zimqt3c3YgB^!QO=(-miZD@OlS5B+$2z1;W&*R2q-t*pt^F;&sME7Pfee%{2Bt^UpK z(>%?rh2pOtQsT+K6@KdES#Q@z)=$Mn9{K+8aXotUm&cz4lZ4{`NG{#7W{phe>(xu2 zHpe$RyRvR-Q%Frs-{Y6WvwqDQr$_1`;hP_S-4fxuO<~h=%dBSak`I|1iUrrKc7N2Z zWzJIk;Br9F^&3}u=IqdoYFYfDqG{#UwR@RWKeBUf4()z$?Lo$b(Dq3`BwVa^?=SyR|pdf4=2Es}9e+ zZ%3Y5fAhP&Ilunmu|DRlX)YnfF*1oidD(ZjY&AN&!)-Q40t3V1`u;_e$~3ir`HsQU L)z4*}Q$iB}gFEo- literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_ab_default_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_ab_default_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6c63dd4bf97e35d762f6b729215dd7f561d9e379 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^VnD3G!3JVY@8||nA$bKM$qYiQxl`2Kt6AKm~Q4E{-7{$KPHtoY2UmK3&EA=($_KEVz9j+*34|xwzB(xdI{64ANTe)rX7?r zk-WCZvw&+=TX3N0oaTFncD_*k!=n06H<0-PWA%*HVF$7wN=8iK|8gMh^$&H~CAW3` T_bXT@ft>2;>gTe~DWM4fa3D&O literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_ab_default_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_ab_default_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..3928d0d018f83ea08582ad528b2fe3199f265e4c GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^VnD3G!3JVY@8||nA$bKM$qYiQxl`2Kt6AKn2~NE{-7{$KPHt|k5Ks`vDs=7R4w>7qLv z(hppJ{!aRZfR5wtM9o{Q-xnn95EnhD{6f#B%j}`D#@FnXyBLKxJj?vbVy3x=f&U?^ f`GeH@U-Q4P&5@VL2{Yli3UarntDnm{r-UW|ZnsMG literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_ab_disabled_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_ab_disabled_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f7219e891cdf75916fa95513d91846e934ba9ca1 GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^VnD3G!3JVY@8||nA$bKM$qYiQxl`2Kt6AKn3NVE{-7{$KPHy{W^^2KkvCEJkiZXZ+8F#uLJ*iQxl`2Kt6AKn3NVE{-7{$KPHyQD}^g%~op_AZ`7Qb@8AIxW)Ojk%=TcmcQ zX;q^3s;1%#;TGbxE&CTN$)91uAiF_xj_8f8A9!?5F_%AOjN_GUO%eF;S8L%XkQ+T+ L{an^LB{Ts5lcYqw literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_ab_focused_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__spinner_ab_focused_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..e4de3f63b1514743b2538ba177a4c8a85fe291b0 GIT binary patch literal 418 zcmeAS@N?(olHy`uVBq!ia0vp^VnD3G!3JVY@8||nA$bKM$qYe=Ptt{=d zY6jOML9Hu{_ol7nZ(!+fkVs5e%FC%@$Sl5+Icv_9sS-tE-qXImJazc0;q-ES?gYLk zM@~vbbS>gr!LVOB>&mQdzbMB3s&|ukb}$uP6y=DCehH18`E$$U9rb&A?+E**d z&AA;WmS<|~_sY}6V*A=V&)#p&3_Bb2c(TR^{i<1YaViRd|0;yH)-Py&Ah5+;rt4eN z?*#`7;!QZ@n#vA22j2Mf17JbCbXzZUf8bgho`T`JFawQ{fp1rolmvixbu;Ji^%Nb+zzh~ zH)h!GV3Xpz?sE76TZZW!0oEUX3%;q{i7|2d-;rZ%uwH2iLpRG8GJylIc`mz+atBF)O1=BTFb>MW5uu!-Z3+x5b&JSR4t z=-nR>Ayzq$`xWo*MR6PWU-A52?=@QxTJtxnuyeaUH)-DJL4@0oS&X6~vd-2eQS zCRBH{q!lbLUvSrUmZ+9u*-i6iZ_)Sv`|kN3C}k~}QYc>VE;T#zM^B`1Hqd7bp00i_ I>zopr088h62mk;8 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__tab_selected_focused_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__tab_selected_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..bce0e08eab239760944b86a62d90a0afb2b46e87 GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-R!3HER>*_fHDT};bP0l+XkKG^8S+ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__tab_selected_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__tab_selected_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..dd022de2f08dd0066f5f4c89eb21a6a643e26e1b GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-R!3HER>*_fHDT};@X8|(W)78&qol`;+ E0O*YzJOBUy literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__tab_selected_pressed_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/abs__tab_selected_pressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..2852fb5de733831733ba3a7ccc6a2cb60d80fa00 GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-R!3HER>*_fHDT};cXBtTEWxBF@)oKvdO()TN**2laVVzLPBCoLQeo25HJL$Gu@D2PuvBvz|+;w JWt~$(69Awh8(9DV literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/ic_launcher.png b/android-libraries/ActionBarSherlock/bin/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..85848ff493b5e00585f86b37c1976f54576380d1 GIT binary patch literal 5057 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_bottom_solid_inverse_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_bottom_solid_inverse_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..5fc7d87f604f6428031ad029367e9d2afb33d022 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtki3GBWCkWCP9Pf}kN`?b0V@b lc8kW@JSg4H3{;C3DC)lFWlAu5k=_kb=IQF^vd$@?2>@Q3Fn<65 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_bottom_solid_light_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_bottom_solid_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f6cbc621b17040bbb088f55828758ed22724dac3 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtki3GBWCkWCP9Pf}kN`?b0sK(3F#W5t~-rI|eoD2p$EF1IAIRBl!a&72w=W~ubjE(m< l?G}x*c~H8Y8K@R7P}B{7$^7G6$)`0SWuC5nF6*2UngGCDIS~K= literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_bottom_transparent_dark_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_bottom_transparent_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f395cbde0cbe868d7033ca1f10dff0c300f0e0cf GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtki3GBWCkWCP9Pf}kN`?b0F0~iK4W7S{$ZGVU+3K9 zr;+?Kwn<@{02le8H(6!&d@tc&wN8C`4W}8|^$mDhc6Tqn3{v6g>gTe~DWM4f<>@Pm literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_bottom_transparent_light_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_bottom_transparent_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6e6b999bd9a4fe07b5df7fe48ee915e2b5946b16 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtki3GBWCkWCP9Pf}kN`?b0!+rq7lgH? x+bq}>&5UURT;zL@r_s-qCJUbn7nLyA@L6!DakhU|G&cq*@O1TaS?83{1OU`*CprKC literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_share_pack_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_share_pack_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..ca2e57bd0247186e1eb54480b28bebfeb481f648 GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJlDvYDWCj){ejpnkUuR zO9HU~5DNk^BMuA{h6Ai>Zn4}90jdb|ba4!cIQ;hdM!^OH9_PT$&t^C4MVuR zO9HU~5DNk^BMuA{h6Ai>Zn4}90jdb{ba4!cIQ;hdM&1JkJj@5v9~`u)G7FwHr7cmV zbym8!$F49&wO&bv(9-p%RQCLR&b(XJ^VtpF|CTko9xt+FV&M=_aA;s)1Tz-MPI&kI Z598VvfxQW?d@3OOJzf1=);T3K0RSIfF}VN$ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_solid_dark_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_solid_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..2c4dd4f9863d3bdb4337676bde27976fb0b05e51 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtki3GBWCkWCP9Pf}kN`?b0Lec+${p6gFRgwLo)8Yy||H+!H|c=@#YTMukkaPT>raD@HE}z y%G)t@W<1ZkkgHGrZcMHKs>cWPt?#~NZ0N3AVaLA3-tL$xNUf);45$d literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_solid_light_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_solid_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..27d6c8b9428ef2d4efba75e10f0fe1e89be7082d GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtki3GBWCkWCP9Pf}kN`?b0>#6UE^W9I@O9qj4i7?N@C?ZrS&216c~gIlibKQ`k;`VQeh4VGt` zHxk3s>I`>WzB~E*@xF&3Gx2~uZ$hTBGwA(dJkiN{^Yg`Z>p*HfUHx3vIVCg!002id A^Z)<= literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_solid_shadow_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_solid_shadow_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..58263065480266d1cc6bf4213d54aa74efa2b1d7 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzkGz7AWCkWCkPtq=1C-^<^k8&5b$3b`)& z+1RFLxa~H}od&1H9tT8s@MQDul*s;kHL&3~$ANc&4bQLbzj4TiQEuw&SR-TC z{{5E7aJgoc$1(T94j(!8T@33D1ehJ3z2sTTb@~6Ble+y1-0!aQy!AHadLL{%m6tbj?An|a!&BuwuR%5eO=HEspdgec<)es3F3-;s>1w12^`uOZ*rSj^-x pX%~yE1N#NW5{BIMNe$Dkf0XVLbZLJsa&{xgf1a*>F6*2UngBw+YmWc` literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_stacked_solid_dark_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_stacked_solid_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..3e722238575402fad5e52c9a51d823fa1fc3612f GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtki3GBWCkWCP9Pf}kN`?b0F(wc?hyB*we)^B;(%Oi-DXBhCD6@w_I`iBYh@+hj5?<%QMXz yiQ#E=hC6~oCx1WQ_Yhvwf4z?)Ox!5xvXbP0l+XkKpj9*8 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_stacked_transparent_dark_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_stacked_transparent_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..140518f829c157313e7b8bae876b2f95e7e42a7d GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtki3GBWCkWCP9Pf}kN`?b0gm=n?4-n{&&@vO)*9`#%k5oqqVVe kKvnp_0q=&$Tz0;1%zV=s<|p43dIVDJ>FVdQ&MBb@09x83t^fc4 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_transparent_dark_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ab_transparent_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..3069943fc311d75b0152c27789e25f5e626737b0 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtki3GBWCkWCP9Pf}kN`?b0J;+wlHwG9z1_+_1%cy(^8~wG;^{)+QW8& zB`>6Weq>DP_cslzR8C%*Q+S|czYag#JPbxcc6xUQqqm+%>rrk MboFyt=akR{0G*LEX8-^I literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__btn_cab_done_default_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__btn_cab_done_default_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..dfe74064dcac0e161bb9bbe301cf4373ed495978 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^%s_0$!3HFm<|{7*QXY8)A;}C(OdugbfDx!b0*ED% z6{`LJ{~yX{oNc3+17xdvx;TbtoKMcl$Vg~lRAW;yICb!NVq!uY-r?&At0-50H>gTe~DWM4f=Jg$( literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__btn_cab_done_focused_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__btn_cab_done_focused_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..df97212497fb3a86fee04af02e57fd00ee988d6d GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^%s_0$!3HFm<|{7*QXY8)A;}C(OdugbfDx!b0*EDj zjki7pDF)GM|NsAo@)`5XpQ`|cH9cJ%Lp07O8{GSKb% fy`0y}rtc}kaDtVyx$Eu!HjrVSu6{1-oD!McIa literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__btn_cab_done_pressed_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__btn_cab_done_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..b3d3e1991936fd4b1e1eb4993d86bfdfca50924d GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^%s_0$!3HFm<|{7*QXY8)A;}C(OdugbfDx!b0*EDN z8gG3HQVgP{pfr$TEMBV(lDG17aSYKopKNmPSIM&XFK@o&0RkT$kAx}B{f86we0}M| u#>S=z!dR}p3KFVdQ&MBb@0I(`7Z2$lO literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__cab_background_bottom_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__cab_background_bottom_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..100d3166ae943b079a58d62c84cc0135a516c492 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtki3GBWCkWCP9Pf}5CTdH1FpbLj8-O>gNi6pZEhJt z%rCiL&#&BnNyjNCmL26M*PV5qbI#NIJfHXTdEe)G-@o3^^QO5vJHX}Cg_uAf{96CigzoZj z0Ax-bqa5+LIwACe#ORvAGHetV}+gBX!kSzLHIQ zs6q{nLw|LSaD0bxG&|OC{kky@#n>S8VE3ymsx>Iz>jS5&=Gk-K1d99|%#aROX(#zPOrTeJ zLj~$M(kY*@NC}Rkyfv=btxN5?=;15HVU4NHMCoh@g~EC>Gc(Nl)+BKjzwW_;?>FnF zq=9o06_$TqrvA9!shQ9}nBUZqK(Zo{#Es*TiA_yS>o?BI^T>C60tvDLqns3^~u1{MCLU4)CG&zrs0Aidpr+((`)Q#LeP_P`HZ2?pP4eF&;Qb}t+Ps0y= zCH01Y9zvHMAAr6G5bke-${AUz*kwy_8On|V#62hD^JSy|*}9&n<|P$;UeI?Ilxz&D zXF?dded-`ZX5TG%ECkHexHA)v@x+Mmf^9L}*3056km@b@bS;X8c8?P9hUt}B7OqB9)OL2aqn_D80D7(GlAHt1Ysc?9m;u%hoh3`2~5Y;)b;w%IX%o3f1OwYs(Xg z?HSxsRHd4*OhSCT!scSqbOF{5Tz^}((`HQeNH$&|xxOfy+XY7OUg^`_;Lba#sc*e= z2HGSeV8rM!b4Xn&x}YWcNRzWsOu*md=rc{VXn3f0dO$urcy^HY2~OTtFe!38jx}bY zH>oK9mf&O-GH+LSspEc>v-+p0P^+ZyR}i2o(AT-rGa`RWXHWCvUF99n9KFj26kbPi z0#vbQuhqI?IGCZ57wU8;9~>#9-N80OsB_4c%TtO(p&igoPnUhQpjf-ao*ye(0huQ2 zuWwRH)fjTi0HemMHuS2kvKG+vDcOabeq@oHDcNxC(}+AZ>fi;9E~Wc=(Ef?+MDaa3 zKJ4~pITAA5Q2Hf+&N!)0kz3ts`+az}QY+w2RZz*sFm+t&yw^6$KV(c!l+E$t15d$` q$KNETeaBkGeC3ioRy-OO!iGq_%v~j=`+?ujhj`4+nNnfn&-^##>T?eO literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__dialog_full_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__dialog_full_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..b405843986db8be40d80e69d0ea88211fc95a34c GIT binary patch literal 2058 zcmai#eK-?(8^?be+8EhHMY5T-yfG@AbX!KkonTbT3ag4K+PA0Dy)& zg>+ECdWF2;8x)=TCyS(j?>U-pFn~f;75;yPRG7c(N3N~VzyC`|1tI@W{m$^y0Kn+( zB%&{~eHry8aI`Z$arhuSnhT>$PVKj2+{q>O`$C|~PsNuP^e3eoJV!!l@mD@! zZH6r_w=e1Rrr*{!9UEgY7!>#BoNxaG6%+e1p<}pp^-ax^LG-kC#{`$1SafpOiGL6sYZyW%O>%uYs`==9COFKQCDSfA;ziP z#xQMZUpn@)4#Xj?-Mzoz_0nyTnG3w$pe6A8j@2RzJ;S(ErGvHlVI(Hy+YQ{-No2W8 zztLt2(z4IhhK#N}vVcXHW&iTZak#Vd~jSKm3Gy@3*xsK0W zFJenfcL#P+id-QK?hw|=GRFkYBP7_VJcir6d(chrQ$A#EfotNMCf}TUVF-A{`i`$= zCb9nzdM~}4XWzVa3`Mi3dfn;4Lx~6OnO`?m1}!MOC;hjyIeJ@boaJvH%)Rp0s@~yE zXji{vzF9uFKN$zO*JksTz0Ar?x#Fcr)At@p&(i=o?mk&gqtoYCbIho0|1v+0?Lu{B z&B>*im7IzTTiOqi_(OH^%YBl*N9z}srbR-lR(l_0RD7CKsBT@;s@z;aJ&DrSn zDt~JZOh#NAfbQnRFc?dcm#LZ@_uJ9@@#(jjg#ie%7#+WM?$;`xo+p3wOiiAw_y!q; z$(B!b2iqmj4T?k}G-^w&xp9tY^|-xSkS&Yj3_qbNO_FbNz4XY)OsqZii@7Q$uGudW zT0FQXL5^8(++%sy4OgZl2q=x*ULIhBQz^fNH@^f3Yv$MPIV7>R?KAhXhQ``&NrOwN z;gu!Sfa1W|`0FDDK31?H1odnsw&XyY zdwT!J$}lbb*e3m{*F8`O3LO8o(G5sL%zJ=RjjD0-p!rOAfpFyXi0J94%wrJ%DK*_| znAdu!y}KynJru!3GRy?JTG{v(V*J6al6^rWz~w~z>zB3VjsR5s!rE+WY*NDly6)}G zoC7bs7r1%}Y6fT&7!@M+l=U$(E4cCQs;v<;Xn%FEvceTA;?fr|94)4$b z8lYWMI^?IZ({vg$kvjNb`f5M%!wc@4PYv}8XdM}B_IJH7Qr7I8yxc)Y=C)uv9p>e^ z_+xe@K-6S-`0B;|wvAC6tpJn#;k;VWE@nh8{KW%YS4S*QO=a-;{Bt|bv6g)7 zDMMcC!oFI8DVDV`{&uKsOggc$Jo{*KrfY>k%j(uic~`ceeXMr+%ooAR$G%+#&HSe| zHO1Lze3xQvz4rNYwpd#3`Ha(lqj1BOjH8yE{oRIanRG1EE!&_o38u+5Dsi1m6+F+U zgj)^e4-R}}6izty&~tnDDLca#Q#H{ALe}Ech0IBBhK%^_ zD307hihUF*jF^a}-9`4(*;S&I@JZB!VhQXBU2exK`NbO;3b)0$Tjc!<} zTZ>eV!Fy!@Kl<%Wgi?6ez-ss6y5@{ZR|K>y==3RvGrS9+yd*&frB}){ZIjey3@_bF z5FE&1GF!E4#m~^rV7_h<=r%^#4p6>+NqXASr}NU?qVbl$Q^@#)qZ3?H-Tks7Dlxi- z)5z{z1J)j|jwq)fqZ^mG2F@Ub48;yva`#mi8gZ^AyBlLdi4rS@At*8i7GK9h5EFZ6 zD%QSNQW|2Bk-dndE;fM?R9MntO?6!FT%EN7A1&5kJTuhp^=J!&AHUJv)sw_`4!ZOo Dvr?EF literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ic_ab_back_holo_dark.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ic_ab_back_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc1c660d1bd18d3cc51b93b55bac845f81a4303 GIT binary patch literal 626 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyX99deT!Hle;R38CJ>&p+uO!GX zn1O+jjg^@xp}wlRrc~IVt+Aogi8HUIE{Dsuy;YCDyvbKix;CPWSFPD1HO)x5AlOl~ zLd?#kvdEM@T_al7U(g|+TP^3q2cS8Eo-U3d7N=V$pA0)}z~ic{zLZNK=khf*m4NN3 zTms9C&L95&UwBjE!9zw-FJIi%n52_>GrpOpuJ=wyrRx*dz$eTMZt;>yJ9ll1YwTcR zGFuWXLtzdYojYs~ipsm(X0iZXNT zh_YIhaO4F`%yhXO4;i}d|BAm8TEqKwueYe@NA_9Dx0lIZc^sS+pm=n%XYVax{Yy&U zBNUHne>(ryd5@}?8pHe3M^3RmQr5{mzdfp6YD?OuquXzJKmBo7QF@8r`}>c3=lwSq X=o8f}oA;s_7}yM+u6{1-oD!Mz z-|BMTbuRx~B{>&KTo;z>zkE_u>+;spbN=a@e(juhw)k01phU@nEpK*4F)=L)eQR_3 zhy#1CK*hdBzP!s07aSOO2{UcK=g{~&=EqxRC4-CGlGbfg4q0wyQPO|GaocIv2b^31 z=}X)H%GnjJm}~LE;NXRJX4Qv!av_|Kg(b5*Z`%L;W_IE$tiJf3l5R_<)>Iob2F=BGbe zz?<>#=3*X+RJ#jH`CKpFPfA?I|LW2T!6oqm39E!w-&-rZC~{%c-SuKQ;TuHqBQ}Z8 zeU=s|%5`VU)@$3OXG*f~lv=01$&P`6Nx;*^F(l&f+i5qWFFS}FtyaJK%Hgp@Z^qOJ zubU~E8LLCO#aP8f%#Xyz1l;-iKi;-{QJ~$grDxwZ^FOPr^?E+%{>d|QYs{yg)>^&h zUtnP02k8?ImM%%`o0dM|6IlI+aU=6#QCS_CBzDF73lCRi?0BIy=~MrV#rHNo?mNR! z^P;vmspXQi%b&?ozk*dy%0>LkeDQUr;6cp^SNqu>%-5Z`VDf_U%#i7|#$iIAwa>_} z@A^5F;SZ-}{iLtKMgL4*r?29yi785bUlsmuXXK0L&xC(etlM?#@kDR#tryI@zpB_B z+;ed6wsO{+f6hw%==Q9s^S7#B$a%w#`C9wD$Sl=&_BX`!x86Se{g%_5 zgP-!ZwcFNa?@j-I^Qdl$#^Hl$9Y0*3-H&^F^#9c9vVRO_^ps7~?JhrXf5+|c|F`@y z?i$xsmfcEY_;2?mEqO10-JFI082B7pjdy%05dPyHU3*`Cc4A$htlZ?u%hfN;UVi@9 zlm90T4)dMwj5GNEbalx0>uD?U4?p}mdwbY_Jy!d38;lz_->9*F@{+&z%6Ct_@7GUIp3ih)aClmq(HwD#ZqyGQ@Ub6mzk1Fqmnv7W%@jK63rk6)VG=!`S`kT1%erdvi zaG|n@&}%|Zj3dI0XX>P1;=Um;Yv0bJ5lr_4Zd<a`=btrgS$A0Uq~|AY?|O0NaD{qBgJb!@ z?T4?`UwEAy;ZQgK$KebA+-+SYb@&Y}!aC&Jo*3uNn{(@05IZ09qw|LcwsUoBq!?&i~7 zn0>96yy}1dRonA`8jvq6S0Q(&9i@~O`ec`GCv3yklK5hH(DsoPAV{40!r1Mu6{1-oD!M< Dl6Uxz literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ic_menu_moreoverflow_normal_holo_dark.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ic_menu_moreoverflow_normal_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..ef9792a44faf9eb000fb4432c769ed2ce1a9fbfc GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!*aCb)T>pbXXwBCgpa@e*kY6xE z!)$Fo2_R3~)5S3);_%zc3mF+0IG7yo)Mw7V>akP$fw0Pf^u7iM;|6Q)9mZ`c56)fK YJk6a^S9jh=b)Yr|Pgg&ebxsLQ01QDZHUIzs literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ic_menu_moreoverflow_normal_holo_light.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ic_menu_moreoverflow_normal_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..3f275ad1a19741003f55a42658c92c99b4b4073b GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!I0Jk_T>t<7Zwv-g&BRs!1({2N z{DK+M7*1Z~_z&cod%8G=L>zv5c_A-@0f(#Ot-tNZ61BaW9^^HsbJ#OgSh_kS7!{np pXIgjvfHLQd&6eC8Ti6mNvnZ4>)@E8PP6ism;OXk;vd$@?2>{weEj<7L literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ic_menu_share_holo_dark.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ic_menu_share_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..4492c4987d5daf9bc6c3df15ce63480ec77da312 GIT binary patch literal 833 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!-Uj%Dxc(nW;O(*p(}5oMFA4Gs zW>CsmJTF~>DeKgkqmdPHR+Bb~9p~AtJ)zsNmalMM*s@Npgae0IqqnRL*(s>$6(sAn zzGasAR5g|9rtHG0dGb!|>5g%cR4EaU{=$kJ^V{>^eTrGx%M(V_T-*T;}RK?S2=pn=2f5%RR4ocgIrxLZ0F~ zMzw#9sxLHlZvIr}&Ey}`a`AQOkt3U#*Ov%1h;Z+4X3*-1n<~)2IonZ{lRd&WUYb4f z$Gr>Yv%lX<%;XO^w0L*z*@X&{C0b84Z=7C!v*b}&zGZkM?{e0XiqlK-9tys*%0Bb* z=S@BT*q(#jrH+E9r%wI+NB7Et4)Nz*Q?}pLJ-{8QTl@KA*N3EY_cq%xC2X|6{x$wj zO!gj04khLb1`XTecR4T#ibenZz0OYJfL0~nxh1i-oK^mxB~$+z{`&U!K!bd90TYLM g19qb9%M;->Q-fG0Pv0~fm^2tXUHx3vIVCg!07L@mpa1{> literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ic_menu_share_holo_light.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__ic_menu_share_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..a61854b47fead1966bcc1f79ea48900058d92bc5 GIT binary patch literal 869 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!J_PuLxc>kD-*^N7pm!m@^!lzS z599=t1o;IsFh~YgmHP@Y`A?rY#W~7NJFit>Drb*EPKIF|cW9quO**^Bgh?ze?M?RG zyz&;dVkXVW#hL}O(uEqVd_KYAA~9-S)<#(k`bsLDX2ubz`FmR5GB7Y+@pN$vi8%cB zT4eAc0|ADFAg+)gfv0v$HOx<~^>B0*2#ERn|NpUNB0dw1R4Om9e{VH7T({ZM?BLU1 z{r`UiH}bVTnU>mr-M!7Gq3F?Zl`9PD0!Lr?r)rztB|( z(F*TLG(CEW+iR^~neL4Z`^?uFzdop_P;)tF+co>_a*vaDubn?MhjD(|xy|Z|SIpIG ztGDMT$}~FOjar%Xd0x$l!+)h8v%HYKT~~U`kNq$w$Ay<)XEjAI@=uM|k;%wYZ?OBY z;~=9;M#2%sCo5}0A2J*(Vf`s!y&ydI_Koh%Od4@_?(E@Tw$#>$=|yJk@3LPWnUjKF z&hNRw&@ylN zdc^%>;hSBHZr}CYY`^Yw>)V<=g*H0IyUy>DY4EdOxB7lXjQ1i@g_%qyau5C<&^r)V zzvU05O<8 z!!Yv(y Jmvv4FO#rhWEL8vi literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__list_divider_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__list_divider_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..c1692f8e3de0582321d2bb0876d1883083c20b41 GIT binary patch literal 139 zcmeAS@N?(olHy`uVBq!ia0vp^Od!m`0wizjKe`@BndB9OBr`BEF#_3y07x?kFsc3j z|G&c}bpenqU05O>M zHQxG^5RU13E)G;L>FMGaqH#XiU05O<8 z!!Yv(y Jmvv4FO#rhWEL8vi literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__list_pressed_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__list_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..8acdbf453eb284f963fb1bd7496ad5982abb4e40 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a)4ki3GBWCkWCP9Pf}U;#>U05O=J zX}t9*A#Av~;u=uBq^FBxh{pM3lY75P)R;LNIvZUKRwXXUU|^WJpQ+BhHqQ@atEa1< J%Q~loCIC75E`9(2 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__list_pressed_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__list_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..8acdbf453eb284f963fb1bd7496ad5982abb4e40 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a)4ki3GBWCkWCP9Pf}U;#>U05O=J zX}t9*A#Av~;u=uBq^FBxh{pM3lY75P)R;LNIvZUKRwXXUU|^WJpQ+BhHqQ@atEa1< J%Q~loCIC75E`9(2 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__list_selector_disabled_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__list_selector_disabled_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..0117091fa1cc258e626e81a7baab55ebe3ad32d0 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^GC&-{!3HEJvV~6taqgTe~DWM4fp+_kn literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__list_selector_disabled_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__list_selector_disabled_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..4f123024c82a9dc20d0d7d8d6ef2f3b6988869e9 GIT binary patch literal 217 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 S#>pK8>G5>+b6Mw<&;$UlwHUSl literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__progress_bg_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__progress_bg_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..380f8d1eb1063e106b3262944bf286a7b51d5ae4 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^96+qV!3HGtKUiJ>QUQ4dA;}C(EFd95fCZ`mM9ToN z0+bJ;7@-&})TI9HCy*iU>Eak-aXL9cg0-2|z{tSh$D`l_E+<+JE=UmJQDLix S^HjPGNROwhpUXO@geCy%C>xFd literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__progress_primary_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__progress_primary_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..a6bd0ce71aa49d3a2f483a35704a46aad830c2a8 GIT binary patch literal 1239 zcmeAS@N?(olHy`uVBq!ia0vp^IzX(z!3HEV-DXt*sertKkYolX7LX7jzyehOqGfAwB3?t*RexBr?`{jMhUnDUzwi#51T1gW^K znIOQea--?Stoa9;Y_pHmACKF7zAbi1&H-+YK&Kq`oaFQFY0vHz|GIMeQQyacnVgds zcsQQXp1N!G>Q^PDD_8I0i+L<{eaA6#hPVs!4tj4%FT8&!z2yJCX;0F>ald$7_%8li zLv@CD#c%c(C8-;~+>@Vw;2ht3yV`Y$i#77)m@e4;o2@>%^il31u9I-gdzp%S# zS(B4<3S(0NW9wyJuA6yJq&%mHC}zkACeAvd7_y-|fO%5N96y&C8A>KQB7XhLm)~En z$2gsH!JOX0ZQE@2&5BoxzqUK$U)S?HJKh{O{NPx8bj$Vq(;Msis$#e6P5I4q`}CWw zTkcoREq%~_cKZ78@UjcuW{gjEa_pP*bZ5R^vgPqxKjN#K_N_WBe)sF@7qKbDg7uQW zesKB49eM376n~)DQ=#fX^J)L$>yPw)y|lV@-zp^jcSP~}$Ieq7LwWnmtj_wFOfqU) zwnSv+QOQMT*_7Qim6X{{wJvpVt1+2#wZ3%{3d)r6@Z7CYJZ;I5ITB}M{*;@aJ^55{ zALE<@iTqEGD#<^~d^JJu>bjd%XO3|R>$=>Myc(DzdRU@QXWC^ZVWW(T4yk=Gjp=OuiqhO`~1sUVc+6qW??3IGmCCz zn#r5I_D-36YgR<^^hsSSgsv{tT^l60I4Jh4$C@R)Vp)zof$r0fXay*U9S@S!?K}B~ zz4Z8evEE%pmp^xJw*I=hf9vO;Ez--aS6Lg#U-$@aYZ%I17!ttt$Qt8VDTe_!pNK_k6e*NL*t0ncj3XQ+UZ=G0u zApf89+Zz78R}Vf@HhJHed*Xcjs`}LicGKUlgTMi?6qLu&KGb{KIS4@7sS1Tzy%5>~Vwj?JHCLSuWVf-SK_)=i$4& wBL2AwB3?t*RexBr?`{jMhUnDUzwi#51T1gW^K znIOQea--?Stoa9;Y_pHmACKF7zAbi1&H-+YK&Kq`oaFQFY0vHz|GIMeQQyacnVgds zcsQQXp1N!G>Q^PDD_8I0i+L<{eaA6#hPVs!4tj4%FT8&!z2yJCX;0F>ald$7_%8li zLv@CD#c%c(C8-;~+>@Vw;2ht3yV`Y$i#77)m@e4;o2@>%^il31u9I-gdzp%S# zS(B4<3S(0NW9wyJuA6yJq&%mHC}zkACeAvd7_y-|fO%5N96y&C8A>KQB7XhLm)~En z$2gsH!JOX0ZQE@2&5BoxzqUK$U)S?HJKh{O{NPx8bj$Vq(;Msis$#e6P5I4q`}CWw zTkcoREq%~_cKZ78@UjcuW{gjEa_pP*bZ5R^vgPqxKjN#K_N_WBe)sF@7qKbDg7uQW zesKB49eM376n~)DQ=#fX^J)L$>yPw)y|lV@-zp^jcSP~}$Ieq7LwWnmtj_wFOfqU) zwnSv+QOQMT*_7Qim6X{{wJvpVt1+2#wZ3%{3d)r6@Z7CYJZ;I5ITB}M{*;@aJ^55{ zALE<@iTqEGD#<^~d^JJu>bjd%XO3|R>$=>Myc(DzdRU@QXWC^ZVWW(T4yk=Gjp=OuiqhO`~1sUVc+6qW??3IGmCCz zn#r5I_D-36YgR<^^hsSSgsv{tT^l60I4Jh4$C@R)Vp)zof$r0fXay*U9S@S!?K}B~ zz4Z8evEE%pmp^xJw*I=hf9vO;Ez--aS6Lg#U-$@aYZ%I17!ttt$Qt8VDTe_!pNK_k6e*NL*t0ncj3XQ+UZ=G0u zApf89+Zz78R}Vf@HhJHed*Xcjs`}LicGKUlgTMi?6qLu&KGb{KIS4@7sS1Tzy%5>~Vwj?JHCLSuWVf-SK_)=i$4& wBL2QUQ4dA;}C(EFd95fCZ`mM9ToN z0+bJ;7@-&})TI9HCy*iU>Eak-aXL9cg0-2|Kq|lTQMW&%u%a+qb5o$f90rD3KPHt` Rx^6}wJ)W+9F6*2UngEpg7)JmA literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__progress_secondary_holo_light.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__progress_secondary_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..058c512cbdcc3673eb5ed49d79dd54f590bf7bf3 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^96+qV!3HGtKUiJ>QUQ4dA;}C(EFd95fCZ`mM9ToN z0+bJ;7@-&})TI9HCy*iU>Eak-aXL9cg0-2|Kq|lTQMW&%u%a+qb5o$f90rD3KPHt` Rx^6}wJ)W+9F6*2UngEpg7)JmA literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_48_inner_holo.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_48_inner_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..662036ca8b2dbc39d7e43d5627ca5b3e11c6ca9d GIT binary patch literal 2490 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 Ef>X@1s{jB1 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_48_outer_holo.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_48_outer_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..6d33f3140f7807f7b11f1bde0597572594da8768 GIT binary patch literal 3083 zcmeHJ=Q|q;AB~8Fn$4wJqc$m(T2&V%W<;&h8m*a@7%h$3gitF*x%M8lN4Y9dv!TSQ zb=3;BHLa#bMO)kL`**ze_dMsE=bZEHeEJbA%#fVt1kM2f08W&VzU6Oq{vTMGfAf@K z-0y-JU}18{;I}>d@BUlh|8)V#O?FlQfC=DdX=VjrKhFaJFyY!;|E@^&zb(hd24n`+ zoSmK=?|=Wg_$Ja4#sWS%JlGj25@7wcxBgJ#+|M6d@4N&#c0bh_aH`zB@B7#5iO&q` zb8&92KSXXtENt9_st0v%Z;m>NJ?W&+T=p6Iw#@tTW7q|L?3A}P<;y?Lmo942G}bCL zyW)k+-wR{rR#!5nJw&gyElD-pvyv>EPnUL(m1&usyz}CU?Qp%))zS|G^3UL|<0fN@ z3Vj9F-zuvX-x$nO)9LO1GxpI_LQfS@Tek^8j?U84?|7ADh%`bOlbTCR?P?p%vMu5Q ztD|hnL+u?yT-*!M4|4Kz-8?fBQXcyS1Sck^g~yyoyWIi+AZ;jpojdM}n>ik~RyG3t zsDVzfRLV$>>`{_cUzxEIpHZZ!(UphHpk82<4ks^9f;6ny!h*_cCkuTe3IfN96Yu!( z7-C(lx>+c~3C+{x3R`p40qQdQ!^#E0zC9zHjOt@@Vdxo|QOGEKy7;t#Fjyviy?UvT zRo`mjtouTgXpqS`?`!I$2aT8gmMmwXT4?sDvr-O+x^Qge+19V^;cO4r#}B+P+lbth zw>=!u6tvht1mJgkozA`emcHLl{rL!_G*L7viB%JtxQPGmgwIi4%2Uqz)>|&l(-`8HX5j7s6V0d(8l4+AC}G6OEWEC5|BRQ2Kj7`oF!0ScH=i1*fIP}l-y z90X(n;CYNhL9ety!S{xL?K&*w*r+5ig)|CW(bhj<55LAhF8ldZP z!AYExb&oBV83;JFe!;%*EC%IzTy5KpFj4$dAF{5;CHJG90Xng*X%5fM$62zmA2Iih*e|eql`kr+9zSL&+ zb|do_V5>cxO$=(F*{8-%Si3|AA7>$v{W$TyE%T(xAsr5JXzYo!7}j-f*WHUAgGF6r zQxMYWq2P*M?7v7KPEEtjw3Sz26(y^Br!rnyz@%cor6unD@b+4ujgqKcA`w7) zWgVNq0UsID%N!-i$7i}5_IQ}Me0hl-J{2`o@_=;7i*tCUCoaKYl-q>~LDUBa zedyMLg4!~fg>kk@B|M_5*n-pNo9<=3j(F>8iNcxwx>|;G1}L0@l4he))`qBa6@(HFb3+vDwS% zo|Q#Q^$zX7ijx2mJ>5*A&?hs|`JJupnQ#ZsI90Wr$Ht;C6lW0V6D3a%gfuVdyjd&XkHWgZBv7RbxZRSEk;BK`E! z>B-896UqY0ZW(6z<>#5ZpuzJ_s>+X=M6Z{BpE^m6lvXk%CPHClnM zCbXeK`Ki8L@!TLgnV$TD0uAm`6?U%5GC%*A*ky>{uR3ma_FH;#_9+#Mi;K;0_?DfU zWU6_AI_XqpE@xo5nMCprv{|_I1?`a|H^-6g(IbP`kMxgHy3ED*2G)taP5U@MCw-HEh%+O3xv!y$&-<^#6r1hS793HT-KuilXvxNQ~ zd-dxn*Zxwwh|7w?;*ImRVS{I$kNh_lJj%K46)ROuHX)}P;?tTPS*gW0SoKfzMhA2d zE%!T(+`A?s2@3`qTS!fzllBik^n8ietQ1f!L*yT|e^DV1YLV!4u)OK43PldhxzjLK zPY#cNm4?MtbcJOMgbft9W2Lt%V}341N3uC^=Y&_jcq^+^@C7-j^H-8~ zx$Q_EzR1DvWz86!3LR=->ZxQ-yLxWjFO6`1coieO1ABW$lpyG$_QEr8J}?z0L~e_= vzt87qVkxlM154HWaOZ3jPs_AJ(+wwMslUh5O-xC@zj^@5z)Zhh*E#B6@0DC6 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_ab_default_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_ab_default_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..487c06b3044d939d1ef5f2511435ba34265caa2d GIT binary patch literal 370 zcmeAS@N?(olHy`uVBq!ia0vp^Iza5e!3HD~H%(OlQXzQ-A;}C(Oq@VA3~&G$3P22^ zK^O!;G!GID62k`=zc(9i2P(Mf>EalYaqsQ*y?jjpJZ%rdn*yH{$@ts}(7U%VuBR|r zLC=TpNAa!0ia+n|^qrNit+8}Uke4QexM#e1?abU~X{(z0?lP+{(EOKRoZTq5gK789 zo4W*V^6g+ay!_`Xftzv}`){t~nwY!q?rQNVZ`E!-n|?P-cT+dV@)K#|epAnCy-}R) zd&AqTd&Baa9UHditSD&7nNct$r=wuWn%xCk)~qhzi!^^2vq|reW$NVC;?ruJ`ij4| zZEalYaqsQ*jeJc3JZ=w_4{Cg}koCC}Ab0O*yI~&B zk=B!p7jMVuoveRmmbq{3f+;~>noA+XuQO-9rEQx%dnK3EH;y@t%YHPUUBg=SfKBFE z+H0p2>jzvs_n)nHN~vBDyD3;y>9)?@)!|d#s@;4x{ce`_rqvwFPo#Rvx9VGSq{JYD@<);T3K F0RWi2e5wEd literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_ab_disabled_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_ab_disabled_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..b7088e1d92fa312ba3f85dd7a50125a344f4a04d GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^Iza5e!3HD~H%(OlQXzQ-A;}C(Oq@VA3~&G$3P22^ zK^O!;G!GID62k`=zc(9i2P!!0>EalYaqsPQL%u@>0xlOP&gEv{y7S+zTFiyF>XGZ$=(yc8HDSGQrN@1%22*YM3_n>hFMjqBTg zXA0ar9k$1$Bj?_)yjL35;y3@CzP&~KrrsgbO=nxPQ)hEkpD+{tHYr!>ji$8T8(nEF z8AWL|8C7W|8O_&vGPEalYaqsPQL%u@>0xlOP&gEv{l1X`Auj<0vabd?I z4#xMl`o8Rca&DU2`pqtIFn?yG(dMhxnF}^XUJ4A7tJ^Tschb41Yxw4|O`LoB#`W#L zGX-v*4%=hWk#p}?-YX4j@tc26-`*mAQ}2-Jrn9Ztsk6DNPnZdRo0O~cMpIhvjjpto zjH0xfjHLtF! zkA-oOuVa&_qN33k_7A~78GW~}N){8?uu){?WzkFCdhZUnatSgyzOh!Wy+7?qTX_Fm zkBw`-ozLU>z-qx_#^@b0nOXb*e?mfoUIAAPgUH8TRy*eG2BW2KvN~bYpVawyle}rE5R9$1b@)ZPVS{+3&YqUGnkHW;M2(an`TbnY+cS8}wE2 z`=?r)-8Vk9G_d|4URvb32tCCQReD`rn?{BV%xfKE} z(E<@7uYBM9S;h2c<>w;SFFKsx8e-$mb3b$tK+_(dI61Ie!t{Vy!t|Dk8oM~?G~(tAJ5*>sUBdqS^Y#N-^4LsF?{ zxwEI4YUemyo3lYN()bWt>Q`>*X;-yn8rRr8>`3{_;jUr5zu?HG&z#2iqi$yBhC3*n8OOXS20(%{u7`kuP8H`sp97`ssXct>*@o z_3Bu5YG&UnK4dZ+^SzZbcPW2E%M&?jW)G9d1k-%(~qn^|KUm sbhH;p)m1X2G%iWqSo=WCf_YW^*Xy@7ulmva3K+Kxp00i_>zopr09LE^j{pDw literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_ab_pressed_holo_dark.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__spinner_ab_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..3b6ec51de6ebdf21ece83931cd7f6bcbd439579b GIT binary patch literal 548 zcmeAS@N?(olHy`uVBq!ia0vp^Iza5e!3HD~H%(OlQXzQ-A;}C(Oq@VA3~&G$3P22^ zK^O!;G!GKZIMaCRQy?EqgV@M?koYBqWLF^7?djqel5y|t6-O^-Ly?Au_J+oDFU?() zq`PB<#?r11kvk&(4+Cu*s+bn;5O{g6w?liWv99l(kbO z)NnDq=rYxZS}D`T^0d-dO^A*9VRO2i|4d0WU)iIOhsJ8#tFi*mWq)wKSW&BUX}ds` z*i*YT^D24&{dwGeai5To&OxC)ZU-xStBQGhvPEpJ9gzLNx1+=P?xK(97#1HruKhs3 jL#cZ%UvP^ppXs*`s3gHe48D$lI2j^|7fX z(MP|F=h+{gzv*z^+>EHA-%EdMS@-|BAGfS{^4qPed3Jx@f8?3+o+UYUhcr_*i~DKL zUb}(u=9?DYlWEF10oV3zNQ~TlNG#ALLn@wE5ug<^Cpp^WWad7ZqOP zn%3NWRpUH=?$7ODui3M=v%caLHP8z9;K8W-fVD%GuXpmXX>7kv9yCr6*RT|mX6!#8 cdf`7q#GP}A-2)78&qol`;+0AU{0x&QzG literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__tab_selected_focused_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__tab_selected_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..140ebfde1c12f867785e6c20f384cfea51a07002 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&4!3HD^x83^;q%86ZLXsJnn3#ZULI9*01XzrX zw?6$3#2mf4+CaX7r;B5V#N}j@d%v#CVB|C~T)=pUNr#7rCtbrNc>@On!#O^tcdhFl QodId~boFyt=akR{06fJW@c;k- literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__tab_selected_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__tab_selected_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..a94f098408158f898e883b4967b5a462cc92204d GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&4!3HD^x83^;q%86ZLXsJnn3#ZULI9*01i8(%6Wu=d`V9i#}J9j$q5T&45adFf5}HSaK;|JAjrUA%f|HNNZN%IkSbP0l+XkKm@pt} literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__tab_unselected_pressed_holo.9.png b/android-libraries/ActionBarSherlock/bin/res/drawable-xhdpi/abs__tab_unselected_pressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ed3cb95d99a927a7eb77cb3e9ce219cfc8e514 GIT binary patch literal 157 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 be a boolean value, either "true" or "false". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int absForceOverflow=0x7f010039; + /** Custom divider drawable to use for elements in the action bar. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionBarDivider=0x7f01000e; + /** Custom item state list drawable background for action bar items. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionBarItemBackground=0x7f01000f; + /** Size of the Action Bar, including the contextual + bar used to present Action Modes. +

May be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. +

May be one of the following constant values.

+ ++++ + +
ConstantValueDescription
wrap_content0
+ */ + public static int actionBarSize=0x7f01000d; + /** Reference to a style for the split Action Bar. This style + controls the split component that holds the menu/action + buttons. actionBarStyle is still used for the primary + bar. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionBarSplitStyle=0x7f01000b; + /** Reference to a style for the Action Bar +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionBarStyle=0x7f01000a; + /**

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionBarTabBarStyle=0x7f010007; + /** Default style for tabs within an action bar +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionBarTabStyle=0x7f010006; + /**

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionBarTabTextStyle=0x7f010008; + /** Reference to a theme that should be used to inflate widgets + and layouts destined for the action bar. Most of the time + this will be a reference to the current theme, but when + the action bar has a significantly different contrast + profile than the rest of the activity the difference + can become important. If this is set to @null the current + theme will be used. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionBarWidgetTheme=0x7f01000c; + /**

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionButtonStyle=0x7f01002b; + /**

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionDropDownStyle=0x7f01002a; + /** TextAppearance style that will be applied to text that + appears within action menu items. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionMenuTextAppearance=0x7f010010; + /** Color for text that appears within action menu items. +

May be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

May be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". + */ + public static int actionMenuTextColor=0x7f010011; + /** Background drawable to use for action mode UI +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionModeBackground=0x7f010014; + /**

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionModeCloseButtonStyle=0x7f010013; + /** Drawable to use for the close action mode button +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionModeCloseDrawable=0x7f010016; + /** PopupWindow style to use for action modes when showing as a window overlay. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionModePopupWindowStyle=0x7f010018; + /** Drawable to use for the Share action button in WebView selection action modes +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionModeShareDrawable=0x7f010017; + /** Background drawable to use for action mode UI in the lower split bar +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionModeSplitBackground=0x7f010015; + /**

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionModeStyle=0x7f010012; + /**

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionOverflowButtonStyle=0x7f010009; + /**

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int actionSpinnerItemStyle=0x7f010030; + /** Drawable used as a background for activated items. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int activatedBackgroundIndicator=0x7f010038; + /** Default ActivityChooserView style. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int activityChooserViewStyle=0x7f010037; + /**

May be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

May be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". + */ + public static int background=0x7f010002; + /**

May be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

May be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". + */ + public static int backgroundSplit=0x7f010003; + /** Specifies a background drawable for a second stacked row of the action bar. +

May be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

May be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". + */ + public static int backgroundStacked=0x7f010040; + /** Small Button style. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int buttonStyleSmall=0x7f010019; + /** Specifies a layout for custom navigation. Overrides navigationMode. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int customNavigationLayout=0x7f010041; + /** Options affecting how the action bar is displayed. +

Must be one or more (separated by '|') of the following constant values.

+ ++++ + + + + + + +
ConstantValueDescription
useLogo0x1
showHome0x2
homeAsUp0x4
showTitle0x8
showCustom0x10
disableHome0x20
+ */ + public static int displayOptions=0x7f01003b; + /**

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int divider=0x7f010005; + /** Drawable to use for generic vertical dividers. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int dividerVertical=0x7f010029; + /**

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int dropDownListViewStyle=0x7f01002d; + /**

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int dropdownListPreferredItemHeight=0x7f01002f; + /** The drawable to show in the button for expanding the activities overflow popup. + Note: Clients would like to set this drawable + as a clue about the action the chosen activity will perform. For + example, if share activity is to be chosen the drawable should + give a clue that sharing is to be performed. + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int expandActivityOverflowButtonDrawable=0x7f010050; + /** Default background for the menu header. +

May be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

May be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". + */ + public static int headerBackground=0x7f01004a; + /**

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int height=0x7f010004; + /**

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int homeAsUpIndicator=0x7f01002c; + /** Specifies a layout to use for the "home" section of the action bar. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int homeLayout=0x7f010042; + /** Default horizontal divider between rows of menu items. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int horizontalDivider=0x7f010048; + /** Specifies the drawable used for the application icon. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int icon=0x7f01003e; + /** Specifies a style resource to use for an indeterminate progress spinner. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int indeterminateProgressStyle=0x7f010044; + /** The maximal number of items initially shown in the activity list. +

Must be a string value, using '\\;' to escape characters such as '\\n' or '\\uxxxx' for a unicode character. +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int initialActivityCount=0x7f01004f; + /** Default background for each menu item. +

May be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

May be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". + */ + public static int itemBackground=0x7f01004b; + /** Default disabled icon alpha for each menu item that shows an icon. +

Must be a floating point value, such as "1.2". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int itemIconDisabledAlpha=0x7f01004d; + /** Specifies padding that should be applied to the left and right sides of + system-provided items in the bar. +

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int itemPadding=0x7f010046; + /** Default appearance of menu item text. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int itemTextAppearance=0x7f010047; + /**

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int listPopupWindowStyle=0x7f010036; + /** A smaller, sleeker list item height. +

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int listPreferredItemHeightSmall=0x7f010023; + /** The preferred padding along the left edge of list items. +

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int listPreferredItemPaddingLeft=0x7f010024; + /** The preferred padding along the right edge of list items. +

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int listPreferredItemPaddingRight=0x7f010025; + /** Specifies the drawable used for the application logo. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int logo=0x7f01003f; + /** The type of navigation to use. +

Must be one of the following constant values.

+ ++++ + + + +
ConstantValueDescription
normal0 Normal static title text
listMode1 The action bar will use a selection list for navigation.
tabMode2 The action bar will use a series of horizontal tabs for navigation.
+ */ + public static int navigationMode=0x7f01003a; + /**

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int popupMenuStyle=0x7f01002e; + /** Whether space should be reserved in layout when an icon is missing. +

Must be a boolean value, either "true" or "false". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int preserveIconSpacing=0x7f01004e; + /** Specifies the horizontal padding on either end for an embedded progress bar. +

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int progressBarPadding=0x7f010045; + /** Specifies a style resource to use for an embedded progress bar. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int progressBarStyle=0x7f010043; + /**

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int spinnerDropDownItemStyle=0x7f010022; + /**

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int spinnerItemStyle=0x7f010021; + /** Specifies subtitle text used for navigationMode="normal" +

Must be a string value, using '\\;' to escape characters such as '\\n' or '\\uxxxx' for a unicode character. +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int subtitle=0x7f01003d; + /**

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int subtitleTextStyle=0x7f010001; + /** Text color, typeface, size, and style for the text inside of a popup menu. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int textAppearanceLargePopupMenu=0x7f01001b; + /** The preferred TextAppearance for the primary text of small list items. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int textAppearanceListItemSmall=0x7f010026; + /** Text color, typeface, size, and style for "small" text. Defaults to secondary text color. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int textAppearanceSmall=0x7f01001d; + /** Text color, typeface, size, and style for small text inside of a popup menu. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int textAppearanceSmallPopupMenu=0x7f01001c; + /**

Must be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int textColorPrimary=0x7f01001e; + /**

Must be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int textColorPrimaryDisableOnly=0x7f01001f; + /**

Must be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int textColorPrimaryInverse=0x7f010020; + /** Specifies title text used for navigationMode="normal" +

Must be a string value, using '\\;' to escape characters such as '\\n' or '\\uxxxx' for a unicode character. +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int title=0x7f01003c; + /**

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int titleTextStyle=0x7f010000; + /** Default vertical divider between menu items. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int verticalDivider=0x7f010049; + /**

Must be a boolean value, either "true" or "false". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int windowActionBar=0x7f010032; + /**

Must be a boolean value, either "true" or "false". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int windowActionBarOverlay=0x7f010033; + /**

Must be a boolean value, either "true" or "false". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int windowActionModeOverlay=0x7f010034; + /** Default animations for the menu. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int windowAnimationStyle=0x7f01004c; + /** This Drawable is overlaid over the foreground of the Window's content area, usually + to place a shadow below the title. +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int windowContentOverlay=0x7f01001a; + /**

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int windowMinWidthMajor=0x7f010027; + /**

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int windowMinWidthMinor=0x7f010028; + /**

Must be a boolean value, either "true" or "false". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int windowNoTitle=0x7f010031; + /**

Must be a boolean value, either "true" or "false". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + */ + public static int windowSplitActionBar=0x7f010035; + } + public static final class bool { + public static int abs__action_bar_embed_tabs=0x7f050000; + public static int abs__action_bar_expanded_action_views_exclusive=0x7f050002; + /** Whether action menu items should be displayed in ALLCAPS or not. + Defaults to true. If this is not appropriate for specific locales + it should be disabled in that locale's resources. + */ + public static int abs__config_actionMenuItemAllCaps=0x7f050004; + /** Whether action menu items should obey the "withText" showAsAction + flag. This may be set to false for situations where space is + extremely limited. + Whether action menu items should obey the "withText" showAsAction + flag. This may be set to false for situations where space is + extremely limited. + */ + public static int abs__config_allowActionMenuItemTextWithIcon=0x7f050005; + /** Sets whether menu shortcuts should be displayed on panel menus when + a keyboard is present. + */ + public static int abs__config_showMenuShortcutsWhenKeyboardPresent=0x7f050003; + public static int abs__split_action_bar_is_narrow=0x7f050001; + } + public static final class color { + public static int abs__background_holo_dark=0x7f060000; + public static int abs__background_holo_light=0x7f060001; + public static int abs__bright_foreground_disabled_holo_dark=0x7f060004; + public static int abs__bright_foreground_disabled_holo_light=0x7f060005; + public static int abs__bright_foreground_holo_dark=0x7f060002; + public static int abs__bright_foreground_holo_light=0x7f060003; + public static int abs__bright_foreground_inverse_holo_dark=0x7f060006; + public static int abs__bright_foreground_inverse_holo_light=0x7f060007; + public static int abs__holo_blue_light=0x7f060008; + public static int abs__primary_text_disable_only_holo_dark=0x7f060009; + public static int abs__primary_text_disable_only_holo_light=0x7f06000a; + public static int abs__primary_text_holo_dark=0x7f06000b; + public static int abs__primary_text_holo_light=0x7f06000c; + } + public static final class dimen { + /** Default height of an action bar. + Default height of an action bar. + Default height of an action bar. + Default height of an action bar. + Default height of an action bar. + Default height of an action bar. + Default height of an action bar. + Default height of an action bar. + */ + public static int abs__action_bar_default_height=0x7f070001; + /** Vertical padding around action bar icons. + Vertical padding around action bar icons. + Vertical padding around action bar icons. + Vertical padding around action bar icons. + Vertical padding around action bar icons. + Vertical padding around action bar icons. + Vertical padding around action bar icons. + Vertical padding around action bar icons. + */ + public static int abs__action_bar_icon_vertical_padding=0x7f070002; + /** Bottom margin for action bar subtitles + Bottom margin for action bar subtitles + Bottom margin for action bar subtitles + Bottom margin for action bar subtitles + Bottom margin for action bar subtitles + Bottom margin for action bar subtitles + Bottom margin for action bar subtitles + Bottom margin for action bar subtitles + */ + public static int abs__action_bar_subtitle_bottom_margin=0x7f070006; + /** Text size for action bar subtitles + Text size for action bar subtitles + Text size for action bar subtitles + Text size for action bar subtitles + Text size for action bar subtitles + Text size for action bar subtitles + Text size for action bar subtitles + Text size for action bar subtitles + */ + public static int abs__action_bar_subtitle_text_size=0x7f070004; + /** Top margin for action bar subtitles + Top margin for action bar subtitles + Top margin for action bar subtitles + Top margin for action bar subtitles + Top margin for action bar subtitles + Top margin for action bar subtitles + Top margin for action bar subtitles + Top margin for action bar subtitles + */ + public static int abs__action_bar_subtitle_top_margin=0x7f070005; + /** Text size for action bar titles + Text size for action bar titles + Text size for action bar titles + Text size for action bar titles + Text size for action bar titles + Text size for action bar titles + Text size for action bar titles + Text size for action bar titles + */ + public static int abs__action_bar_title_text_size=0x7f070003; + /** Minimum width for an action button in the menu area of an action bar + Minimum width for an action button in the menu area of an action bar + */ + public static int abs__action_button_min_width=0x7f070007; + /** Dialog title height + */ + public static int abs__alert_dialog_title_height=0x7f070008; + /** The maximum width we would prefer dialogs to be. 0 if there is no + maximum (let them grow as large as the screen). Actual values are + specified for -large and -xlarge configurations. + */ + public static int abs__config_prefDialogWidth=0x7f070000; + /** The platform's desired minimum size for a dialog's width when it + is along the major axis (that is the screen is landscape). This may + be either a fraction or a dimension. + The platform's desired minimum size for a dialog's width when it + is along the major axis (that is the screen is landscape). This may + be either a fraction or a dimension. + The platform's desired minimum size for a dialog's width when it + is along the major axis (that is the screen is landscape). This may + be either a fraction or a dimension. + */ + public static int abs__dialog_min_width_major=0x7f070009; + /** The platform's desired minimum size for a dialog's width when it + is along the minor axis (that is the screen is portrait). This may + be either a fraction or a dimension. + The platform's desired minimum size for a dialog's width when it + is along the minor axis (that is the screen is portrait). This may + be either a fraction or a dimension. + The platform's desired minimum size for a dialog's width when it + is along the minor axis (that is the screen is portrait). This may + be either a fraction or a dimension. + */ + public static int abs__dialog_min_width_minor=0x7f07000a; + /** Minimum width for an action button in the menu area of an action bar + Minimum width for an action button in the menu area of an action bar + */ + public static int action_button_min_width=0x7f07000b; + } + public static final class drawable { + public static int abs__ab_bottom_solid_dark_holo=0x7f020000; + public static int abs__ab_bottom_solid_inverse_holo=0x7f020001; + public static int abs__ab_bottom_solid_light_holo=0x7f020002; + public static int abs__ab_bottom_transparent_dark_holo=0x7f020003; + public static int abs__ab_bottom_transparent_light_holo=0x7f020004; + public static int abs__ab_share_pack_holo_dark=0x7f020005; + public static int abs__ab_share_pack_holo_light=0x7f020006; + public static int abs__ab_solid_dark_holo=0x7f020007; + public static int abs__ab_solid_light_holo=0x7f020008; + public static int abs__ab_solid_shadow_holo=0x7f020009; + public static int abs__ab_stacked_solid_dark_holo=0x7f02000a; + public static int abs__ab_stacked_solid_light_holo=0x7f02000b; + public static int abs__ab_stacked_transparent_dark_holo=0x7f02000c; + public static int abs__ab_stacked_transparent_light_holo=0x7f02000d; + public static int abs__ab_transparent_dark_holo=0x7f02000e; + public static int abs__ab_transparent_light_holo=0x7f02000f; + public static int abs__activated_background_holo_dark=0x7f020010; + public static int abs__activated_background_holo_light=0x7f020011; + public static int abs__btn_cab_done_default_holo_dark=0x7f020012; + public static int abs__btn_cab_done_default_holo_light=0x7f020013; + public static int abs__btn_cab_done_focused_holo_dark=0x7f020014; + public static int abs__btn_cab_done_focused_holo_light=0x7f020015; + public static int abs__btn_cab_done_holo_dark=0x7f020016; + public static int abs__btn_cab_done_holo_light=0x7f020017; + public static int abs__btn_cab_done_pressed_holo_dark=0x7f020018; + public static int abs__btn_cab_done_pressed_holo_light=0x7f020019; + public static int abs__cab_background_bottom_holo_dark=0x7f02001a; + public static int abs__cab_background_bottom_holo_light=0x7f02001b; + public static int abs__cab_background_top_holo_dark=0x7f02001c; + public static int abs__cab_background_top_holo_light=0x7f02001d; + public static int abs__dialog_full_holo_dark=0x7f02001e; + public static int abs__dialog_full_holo_light=0x7f02001f; + public static int abs__ic_ab_back_holo_dark=0x7f020020; + public static int abs__ic_ab_back_holo_light=0x7f020021; + public static int abs__ic_cab_done_holo_dark=0x7f020022; + public static int abs__ic_cab_done_holo_light=0x7f020023; + public static int abs__ic_menu_moreoverflow_holo_dark=0x7f020024; + public static int abs__ic_menu_moreoverflow_holo_light=0x7f020025; + public static int abs__ic_menu_moreoverflow_normal_holo_dark=0x7f020026; + public static int abs__ic_menu_moreoverflow_normal_holo_light=0x7f020027; + public static int abs__ic_menu_share_holo_dark=0x7f020028; + public static int abs__ic_menu_share_holo_light=0x7f020029; + public static int abs__item_background_holo_dark=0x7f02002a; + public static int abs__item_background_holo_light=0x7f02002b; + public static int abs__list_activated_holo=0x7f02002c; + public static int abs__list_divider_holo_dark=0x7f02002d; + public static int abs__list_divider_holo_light=0x7f02002e; + public static int abs__list_focused_holo=0x7f02002f; + public static int abs__list_longpressed_holo=0x7f020030; + public static int abs__list_pressed_holo_dark=0x7f020031; + public static int abs__list_pressed_holo_light=0x7f020032; + public static int abs__list_selector_background_transition_holo_dark=0x7f020033; + public static int abs__list_selector_background_transition_holo_light=0x7f020034; + public static int abs__list_selector_disabled_holo_dark=0x7f020035; + public static int abs__list_selector_disabled_holo_light=0x7f020036; + public static int abs__list_selector_holo_dark=0x7f020037; + public static int abs__list_selector_holo_light=0x7f020038; + public static int abs__menu_dropdown_panel_holo_dark=0x7f020039; + public static int abs__menu_dropdown_panel_holo_light=0x7f02003a; + public static int abs__progress_bg_holo_dark=0x7f02003b; + public static int abs__progress_bg_holo_light=0x7f02003c; + public static int abs__progress_horizontal_holo_dark=0x7f02003d; + public static int abs__progress_horizontal_holo_light=0x7f02003e; + public static int abs__progress_medium_holo=0x7f02003f; + public static int abs__progress_primary_holo_dark=0x7f020040; + public static int abs__progress_primary_holo_light=0x7f020041; + public static int abs__progress_secondary_holo_dark=0x7f020042; + public static int abs__progress_secondary_holo_light=0x7f020043; + public static int abs__spinner_48_inner_holo=0x7f020044; + public static int abs__spinner_48_outer_holo=0x7f020045; + public static int abs__spinner_ab_default_holo_dark=0x7f020046; + public static int abs__spinner_ab_default_holo_light=0x7f020047; + public static int abs__spinner_ab_disabled_holo_dark=0x7f020048; + public static int abs__spinner_ab_disabled_holo_light=0x7f020049; + public static int abs__spinner_ab_focused_holo_dark=0x7f02004a; + public static int abs__spinner_ab_focused_holo_light=0x7f02004b; + public static int abs__spinner_ab_holo_dark=0x7f02004c; + public static int abs__spinner_ab_holo_light=0x7f02004d; + public static int abs__spinner_ab_pressed_holo_dark=0x7f02004e; + public static int abs__spinner_ab_pressed_holo_light=0x7f02004f; + public static int abs__tab_indicator_ab_holo=0x7f020050; + public static int abs__tab_selected_focused_holo=0x7f020051; + public static int abs__tab_selected_holo=0x7f020052; + public static int abs__tab_selected_pressed_holo=0x7f020053; + public static int abs__tab_unselected_pressed_holo=0x7f020054; + public static int ic_launcher=0x7f020055; + } + public static final class id { + public static int abs__action_bar=0x7f040022; + public static int abs__action_bar_container=0x7f040021; + public static int abs__action_bar_subtitle=0x7f040011; + public static int abs__action_bar_title=0x7f040010; + public static int abs__action_context_bar=0x7f040023; + public static int abs__action_menu_divider=0x7f04000c; + public static int abs__action_menu_presenter=0x7f04000d; + public static int abs__action_mode_bar=0x7f040026; + public static int abs__action_mode_bar_stub=0x7f040025; + public static int abs__action_mode_close_button=0x7f040014; + public static int abs__activity_chooser_view_content=0x7f040015; + public static int abs__checkbox=0x7f04001e; + public static int abs__content=0x7f04001d; + public static int abs__default_activity_button=0x7f040018; + public static int abs__expand_activities_button=0x7f040016; + public static int abs__home=0x7f04000a; + public static int abs__icon=0x7f04001a; + public static int abs__image=0x7f040017; + public static int abs__imageButton=0x7f040012; + public static int abs__list_item=0x7f040019; + public static int abs__progress_circular=0x7f04000e; + public static int abs__progress_horizontal=0x7f04000f; + public static int abs__radio=0x7f040020; + public static int abs__shortcut=0x7f04001f; + public static int abs__split_action_bar=0x7f040024; + public static int abs__textButton=0x7f040013; + public static int abs__title=0x7f04001b; + public static int abs__titleDivider=0x7f04001c; + public static int abs__up=0x7f04000b; + public static int disableHome=0x7f040009; + public static int homeAsUp=0x7f040006; + public static int listMode=0x7f040002; + public static int normal=0x7f040001; + public static int showCustom=0x7f040008; + public static int showHome=0x7f040005; + public static int showTitle=0x7f040007; + public static int tabMode=0x7f040003; + public static int useLogo=0x7f040004; + public static int wrap_content=0x7f040000; + } + public static final class integer { + public static int abs__max_action_buttons=0x7f080000; + } + public static final class layout { + public static int abs__action_bar_home=0x7f030000; + public static int abs__action_bar_tab=0x7f030001; + public static int abs__action_bar_tab_bar_view=0x7f030002; + public static int abs__action_bar_title_item=0x7f030003; + public static int abs__action_menu_item_layout=0x7f030004; + public static int abs__action_menu_layout=0x7f030005; + public static int abs__action_mode_bar=0x7f030006; + public static int abs__action_mode_close_item=0x7f030007; + public static int abs__activity_chooser_view=0x7f030008; + public static int abs__activity_chooser_view_list_item=0x7f030009; + public static int abs__dialog_title_holo=0x7f03000a; + public static int abs__list_menu_item_checkbox=0x7f03000b; + public static int abs__list_menu_item_icon=0x7f03000c; + public static int abs__list_menu_item_layout=0x7f03000d; + public static int abs__list_menu_item_radio=0x7f03000e; + public static int abs__popup_menu_item_layout=0x7f03000f; + public static int abs__screen_action_bar=0x7f030010; + public static int abs__screen_action_bar_overlay=0x7f030011; + public static int abs__screen_simple=0x7f030012; + public static int abs__screen_simple_overlay_action_mode=0x7f030013; + public static int main=0x7f030014; + public static int sherlock_spinner_dropdown_item=0x7f030015; + public static int sherlock_spinner_item=0x7f030016; + } + public static final class string { + /** Content description for the action bar "home" affordance. [CHAR LIMIT=NONE] + */ + public static int abs__action_bar_home_description=0x7f090000; + /** Content description for the action bar "up" affordance. [CHAR LIMIT=NONE] + */ + public static int abs__action_bar_up_description=0x7f090001; + /** Content description for the action menu overflow button. [CHAR LIMIT=NONE] + */ + public static int abs__action_menu_overflow_description=0x7f090002; + /** Label for the "Done" button on the far left of action mode toolbars. + */ + public static int abs__action_mode_done=0x7f090003; + /** Title default for a dialog showing possible activities in ActivityChooserView [CHAR LIMIT=25] + */ + public static int abs__activity_chooser_view_dialog_title_default=0x7f090005; + /** Title for a button to expand the list of activities in ActivityChooserView [CHAR LIMIT=25] + */ + public static int abs__activity_chooser_view_see_all=0x7f090004; + /** Description of the shwoing of a popup window with activities to choose from. [CHAR LIMIT=NONE] + */ + public static int abs__activitychooserview_choose_application=0x7f090007; + /** Title for a dialog showing possible activities for sharing in ShareActionProvider [CHAR LIMIT=25] + */ + public static int abs__share_action_provider_share_with=0x7f090006; + /** Description of the choose target button in a ShareActionProvider (share UI). [CHAR LIMIT=NONE] + */ + public static int abs__shareactionprovider_share_with=0x7f090008; + /** Description of a share target (both in the list of such or the default share button) in a ShareActionProvider (share UI). [CHAR LIMIT=NONE] + */ + public static int abs__shareactionprovider_share_with_application=0x7f090009; + public static int app_name=0x7f09000b; + public static int hello=0x7f09000a; + } + public static final class style { + public static int DialogWindowTitle_Sherlock=0x7f0a0033; + public static int DialogWindowTitle_Sherlock_Light=0x7f0a0034; + public static int Sherlock___TextAppearance_Small=0x7f0a0047; + public static int Sherlock___Theme=0x7f0a004a; + public static int Sherlock___Theme_DarkActionBar=0x7f0a004c; + public static int Sherlock___Theme_Dialog=0x7f0a004d; + public static int Sherlock___Theme_Light=0x7f0a004b; + public static int Sherlock___Widget_ActionBar=0x7f0a0001; + public static int Sherlock___Widget_ActionMode=0x7f0a0016; + public static int Sherlock___Widget_ActivityChooserView=0x7f0a001e; + public static int Sherlock___Widget_Holo_DropDownItem=0x7f0a0029; + public static int Sherlock___Widget_Holo_ListView=0x7f0a0026; + public static int Sherlock___Widget_Holo_Spinner=0x7f0a0023; + public static int TextAppearance_Sherlock_DialogWindowTitle=0x7f0a0045; + public static int TextAppearance_Sherlock_Light_DialogWindowTitle=0x7f0a0046; + public static int TextAppearance_Sherlock_Light_Small=0x7f0a0049; + public static int TextAppearance_Sherlock_Light_Widget_PopupMenu_Large=0x7f0a0040; + public static int TextAppearance_Sherlock_Light_Widget_PopupMenu_Small=0x7f0a0042; + public static int TextAppearance_Sherlock_Small=0x7f0a0048; + public static int TextAppearance_Sherlock_Widget_ActionBar_Menu=0x7f0a0035; + public static int TextAppearance_Sherlock_Widget_ActionBar_Subtitle=0x7f0a0038; + public static int TextAppearance_Sherlock_Widget_ActionBar_Subtitle_Inverse=0x7f0a0039; + public static int TextAppearance_Sherlock_Widget_ActionBar_Title=0x7f0a0036; + public static int TextAppearance_Sherlock_Widget_ActionBar_Title_Inverse=0x7f0a0037; + public static int TextAppearance_Sherlock_Widget_ActionMode_Subtitle=0x7f0a003c; + public static int TextAppearance_Sherlock_Widget_ActionMode_Subtitle_Inverse=0x7f0a003d; + public static int TextAppearance_Sherlock_Widget_ActionMode_Title=0x7f0a003a; + public static int TextAppearance_Sherlock_Widget_ActionMode_Title_Inverse=0x7f0a003b; + public static int TextAppearance_Sherlock_Widget_DropDownItem=0x7f0a0044; + public static int TextAppearance_Sherlock_Widget_PopupMenu=0x7f0a003e; + public static int TextAppearance_Sherlock_Widget_PopupMenu_Large=0x7f0a003f; + public static int TextAppearance_Sherlock_Widget_PopupMenu_Small=0x7f0a0041; + public static int TextAppearance_Sherlock_Widget_TextView_SpinnerItem=0x7f0a0043; + public static int Theme_Sherlock=0x7f0a004e; + public static int Theme_Sherlock_Dialog=0x7f0a0056; + public static int Theme_Sherlock_ForceOverflow=0x7f0a0053; + public static int Theme_Sherlock_Light=0x7f0a004f; + public static int Theme_Sherlock_Light_DarkActionBar=0x7f0a0050; + public static int Theme_Sherlock_Light_DarkActionBar_ForceOverflow=0x7f0a0055; + public static int Theme_Sherlock_Light_Dialog=0x7f0a0057; + public static int Theme_Sherlock_Light_ForceOverflow=0x7f0a0054; + public static int Theme_Sherlock_Light_NoActionBar=0x7f0a0052; + public static int Theme_Sherlock_NoActionBar=0x7f0a0051; + public static int Widget=0x7f0a0000; + public static int Widget_Sherlock_ActionBar=0x7f0a0002; + public static int Widget_Sherlock_ActionBar_Solid=0x7f0a0003; + public static int Widget_Sherlock_ActionBar_TabBar=0x7f0a000a; + public static int Widget_Sherlock_ActionBar_TabText=0x7f0a000d; + public static int Widget_Sherlock_ActionBar_TabView=0x7f0a0007; + public static int Widget_Sherlock_ActionButton=0x7f0a0010; + public static int Widget_Sherlock_ActionButton_CloseMode=0x7f0a0012; + public static int Widget_Sherlock_ActionButton_Overflow=0x7f0a0014; + public static int Widget_Sherlock_ActionMode=0x7f0a0017; + public static int Widget_Sherlock_ActivityChooserView=0x7f0a001f; + public static int Widget_Sherlock_Button_Small=0x7f0a0021; + public static int Widget_Sherlock_DropDownItem_Spinner=0x7f0a002a; + public static int Widget_Sherlock_Light_ActionBar=0x7f0a0004; + public static int Widget_Sherlock_Light_ActionBar_Solid=0x7f0a0005; + public static int Widget_Sherlock_Light_ActionBar_Solid_Inverse=0x7f0a0006; + public static int Widget_Sherlock_Light_ActionBar_TabBar=0x7f0a000b; + public static int Widget_Sherlock_Light_ActionBar_TabBar_Inverse=0x7f0a000c; + public static int Widget_Sherlock_Light_ActionBar_TabText=0x7f0a000e; + public static int Widget_Sherlock_Light_ActionBar_TabText_Inverse=0x7f0a000f; + public static int Widget_Sherlock_Light_ActionBar_TabView=0x7f0a0008; + public static int Widget_Sherlock_Light_ActionBar_TabView_Inverse=0x7f0a0009; + public static int Widget_Sherlock_Light_ActionButton=0x7f0a0011; + public static int Widget_Sherlock_Light_ActionButton_CloseMode=0x7f0a0013; + public static int Widget_Sherlock_Light_ActionButton_Overflow=0x7f0a0015; + public static int Widget_Sherlock_Light_ActionMode=0x7f0a0018; + public static int Widget_Sherlock_Light_ActionMode_Inverse=0x7f0a0019; + public static int Widget_Sherlock_Light_ActivityChooserView=0x7f0a0020; + public static int Widget_Sherlock_Light_Button_Small=0x7f0a0022; + public static int Widget_Sherlock_Light_DropDownItem_Spinner=0x7f0a002b; + public static int Widget_Sherlock_Light_ListPopupWindow=0x7f0a001b; + public static int Widget_Sherlock_Light_ListView_DropDown=0x7f0a0028; + public static int Widget_Sherlock_Light_PopupMenu=0x7f0a001d; + public static int Widget_Sherlock_Light_PopupWindow_ActionMode=0x7f0a002d; + public static int Widget_Sherlock_Light_ProgressBar=0x7f0a002f; + public static int Widget_Sherlock_Light_ProgressBar_Horizontal=0x7f0a0031; + public static int Widget_Sherlock_Light_Spinner_DropDown_ActionBar=0x7f0a0025; + public static int Widget_Sherlock_ListPopupWindow=0x7f0a001a; + public static int Widget_Sherlock_ListView_DropDown=0x7f0a0027; + public static int Widget_Sherlock_PopupMenu=0x7f0a001c; + public static int Widget_Sherlock_PopupWindow_ActionMode=0x7f0a002c; + public static int Widget_Sherlock_ProgressBar=0x7f0a002e; + public static int Widget_Sherlock_ProgressBar_Horizontal=0x7f0a0030; + public static int Widget_Sherlock_Spinner_DropDown_ActionBar=0x7f0a0024; + public static int Widget_Sherlock_TextView_SpinnerItem=0x7f0a0032; + } + public static final class styleable { + /** Attributes used to style the Action Bar. +

Includes the following attributes:

+ + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
{@link #SherlockActionBar_background com.actionbarsherlock:background} Specifies a background drawable for the action bar.
{@link #SherlockActionBar_backgroundSplit com.actionbarsherlock:backgroundSplit} Specifies a background drawable for the bottom component of a split action bar.
{@link #SherlockActionBar_backgroundStacked com.actionbarsherlock:backgroundStacked} Specifies a background drawable for a second stacked row of the action bar.
{@link #SherlockActionBar_customNavigationLayout com.actionbarsherlock:customNavigationLayout} Specifies a layout for custom navigation.
{@link #SherlockActionBar_displayOptions com.actionbarsherlock:displayOptions} Options affecting how the action bar is displayed.
{@link #SherlockActionBar_divider com.actionbarsherlock:divider} Specifies the drawable used for item dividers.
{@link #SherlockActionBar_height com.actionbarsherlock:height} Specifies a fixed height.
{@link #SherlockActionBar_homeLayout com.actionbarsherlock:homeLayout} Specifies a layout to use for the "home" section of the action bar.
{@link #SherlockActionBar_icon com.actionbarsherlock:icon} Specifies the drawable used for the application icon.
{@link #SherlockActionBar_indeterminateProgressStyle com.actionbarsherlock:indeterminateProgressStyle} Specifies a style resource to use for an indeterminate progress spinner.
{@link #SherlockActionBar_itemPadding com.actionbarsherlock:itemPadding} Specifies padding that should be applied to the left and right sides of + system-provided items in the bar.
{@link #SherlockActionBar_logo com.actionbarsherlock:logo} Specifies the drawable used for the application logo.
{@link #SherlockActionBar_navigationMode com.actionbarsherlock:navigationMode} The type of navigation to use.
{@link #SherlockActionBar_progressBarPadding com.actionbarsherlock:progressBarPadding} Specifies the horizontal padding on either end for an embedded progress bar.
{@link #SherlockActionBar_progressBarStyle com.actionbarsherlock:progressBarStyle} Specifies a style resource to use for an embedded progress bar.
{@link #SherlockActionBar_subtitle com.actionbarsherlock:subtitle} Specifies subtitle text used for navigationMode="normal"
{@link #SherlockActionBar_subtitleTextStyle com.actionbarsherlock:subtitleTextStyle} Specifies a style to use for subtitle text.
{@link #SherlockActionBar_title com.actionbarsherlock:title} Specifies title text used for navigationMode="normal"
{@link #SherlockActionBar_titleTextStyle com.actionbarsherlock:titleTextStyle} Specifies a style to use for title text.
+ @see #SherlockActionBar_background + @see #SherlockActionBar_backgroundSplit + @see #SherlockActionBar_backgroundStacked + @see #SherlockActionBar_customNavigationLayout + @see #SherlockActionBar_displayOptions + @see #SherlockActionBar_divider + @see #SherlockActionBar_height + @see #SherlockActionBar_homeLayout + @see #SherlockActionBar_icon + @see #SherlockActionBar_indeterminateProgressStyle + @see #SherlockActionBar_itemPadding + @see #SherlockActionBar_logo + @see #SherlockActionBar_navigationMode + @see #SherlockActionBar_progressBarPadding + @see #SherlockActionBar_progressBarStyle + @see #SherlockActionBar_subtitle + @see #SherlockActionBar_subtitleTextStyle + @see #SherlockActionBar_title + @see #SherlockActionBar_titleTextStyle + */ + public static final int[] SherlockActionBar = { + 0x7f010000, 0x7f010001, 0x7f010002, 0x7f010003, + 0x7f010004, 0x7f010005, 0x7f01003a, 0x7f01003b, + 0x7f01003c, 0x7f01003d, 0x7f01003e, 0x7f01003f, + 0x7f010040, 0x7f010041, 0x7f010042, 0x7f010043, + 0x7f010044, 0x7f010045, 0x7f010046 + }; + /** +

+ @attr description + Specifies a background drawable for the action bar. + + +

May be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

May be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". +

This is a private symbol. + @attr name android:background + */ + public static final int SherlockActionBar_background = 2; + /** +

+ @attr description + Specifies a background drawable for the bottom component of a split action bar. + + +

May be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

May be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". +

This is a private symbol. + @attr name android:backgroundSplit + */ + public static final int SherlockActionBar_backgroundSplit = 3; + /** +

+ @attr description + Specifies a background drawable for a second stacked row of the action bar. + + +

May be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

May be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". +

This is a private symbol. + @attr name android:backgroundStacked + */ + public static final int SherlockActionBar_backgroundStacked = 12; + /** +

+ @attr description + Specifies a layout for custom navigation. Overrides navigationMode. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:customNavigationLayout + */ + public static final int SherlockActionBar_customNavigationLayout = 13; + /** +

+ @attr description + Options affecting how the action bar is displayed. + + +

Must be one or more (separated by '|') of the following constant values.

+ ++++ + + + + + + +
ConstantValueDescription
useLogo0x1
showHome0x2
homeAsUp0x4
showTitle0x8
showCustom0x10
disableHome0x20
+

This is a private symbol. + @attr name android:displayOptions + */ + public static final int SherlockActionBar_displayOptions = 7; + /** +

+ @attr description + Specifies the drawable used for item dividers. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:divider + */ + public static final int SherlockActionBar_divider = 5; + /** +

+ @attr description + Specifies a fixed height. + + +

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. +

This is a private symbol. + @attr name android:height + */ + public static final int SherlockActionBar_height = 4; + /** +

+ @attr description + Specifies a layout to use for the "home" section of the action bar. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:homeLayout + */ + public static final int SherlockActionBar_homeLayout = 14; + /** +

+ @attr description + Specifies the drawable used for the application icon. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:icon + */ + public static final int SherlockActionBar_icon = 10; + /** +

+ @attr description + Specifies a style resource to use for an indeterminate progress spinner. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:indeterminateProgressStyle + */ + public static final int SherlockActionBar_indeterminateProgressStyle = 16; + /** +

+ @attr description + Specifies padding that should be applied to the left and right sides of + system-provided items in the bar. + + +

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. +

This is a private symbol. + @attr name android:itemPadding + */ + public static final int SherlockActionBar_itemPadding = 18; + /** +

+ @attr description + Specifies the drawable used for the application logo. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:logo + */ + public static final int SherlockActionBar_logo = 11; + /** +

+ @attr description + The type of navigation to use. + + +

Must be one of the following constant values.

+ ++++ + + + +
ConstantValueDescription
normal0 Normal static title text
listMode1 The action bar will use a selection list for navigation.
tabMode2 The action bar will use a series of horizontal tabs for navigation.
+

This is a private symbol. + @attr name android:navigationMode + */ + public static final int SherlockActionBar_navigationMode = 6; + /** +

+ @attr description + Specifies the horizontal padding on either end for an embedded progress bar. + + +

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. +

This is a private symbol. + @attr name android:progressBarPadding + */ + public static final int SherlockActionBar_progressBarPadding = 17; + /** +

+ @attr description + Specifies a style resource to use for an embedded progress bar. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:progressBarStyle + */ + public static final int SherlockActionBar_progressBarStyle = 15; + /** +

+ @attr description + Specifies subtitle text used for navigationMode="normal" + + +

Must be a string value, using '\\;' to escape characters such as '\\n' or '\\uxxxx' for a unicode character. +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. +

This is a private symbol. + @attr name android:subtitle + */ + public static final int SherlockActionBar_subtitle = 9; + /** +

+ @attr description + Specifies a style to use for subtitle text. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:subtitleTextStyle + */ + public static final int SherlockActionBar_subtitleTextStyle = 1; + /** +

+ @attr description + Specifies title text used for navigationMode="normal" + + +

Must be a string value, using '\\;' to escape characters such as '\\n' or '\\uxxxx' for a unicode character. +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. +

This is a private symbol. + @attr name android:title + */ + public static final int SherlockActionBar_title = 8; + /** +

+ @attr description + Specifies a style to use for title text. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:titleTextStyle + */ + public static final int SherlockActionBar_titleTextStyle = 0; + /** Attributes that can be used with a SherlockActionMenuItemView. +

Includes the following attributes:

+ + + + + +
AttributeDescription
{@link #SherlockActionMenuItemView_android_minWidth com.actionbarsherlock:android_minWidth}
+ @see #SherlockActionMenuItemView_android_minWidth + */ + public static final int[] SherlockActionMenuItemView = { + 0x0101013f + }; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#android_minWidth} + attribute's value can be found in the {@link #SherlockActionMenuItemView} array. + @attr name android:android_minWidth + */ + public static final int SherlockActionMenuItemView_android_minWidth = 0; + /** Attributes that can be used with a SherlockActionMode. +

Includes the following attributes:

+ + + + + + + + + +
AttributeDescription
{@link #SherlockActionMode_background com.actionbarsherlock:background} Specifies a background for the action mode bar.
{@link #SherlockActionMode_backgroundSplit com.actionbarsherlock:backgroundSplit} Specifies a background for the split action mode bar.
{@link #SherlockActionMode_height com.actionbarsherlock:height} Specifies a fixed height for the action mode bar.
{@link #SherlockActionMode_subtitleTextStyle com.actionbarsherlock:subtitleTextStyle} Specifies a style to use for subtitle text.
{@link #SherlockActionMode_titleTextStyle com.actionbarsherlock:titleTextStyle} Specifies a style to use for title text.
+ @see #SherlockActionMode_background + @see #SherlockActionMode_backgroundSplit + @see #SherlockActionMode_height + @see #SherlockActionMode_subtitleTextStyle + @see #SherlockActionMode_titleTextStyle + */ + public static final int[] SherlockActionMode = { + 0x7f010000, 0x7f010001, 0x7f010002, 0x7f010003, + 0x7f010004 + }; + /** +

+ @attr description + Specifies a background for the action mode bar. + + +

May be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

May be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". +

This is a private symbol. + @attr name android:background + */ + public static final int SherlockActionMode_background = 2; + /** +

+ @attr description + Specifies a background for the split action mode bar. + + +

May be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

May be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". +

This is a private symbol. + @attr name android:backgroundSplit + */ + public static final int SherlockActionMode_backgroundSplit = 3; + /** +

+ @attr description + Specifies a fixed height for the action mode bar. + + +

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. +

This is a private symbol. + @attr name android:height + */ + public static final int SherlockActionMode_height = 4; + /** +

+ @attr description + Specifies a style to use for subtitle text. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:subtitleTextStyle + */ + public static final int SherlockActionMode_subtitleTextStyle = 1; + /** +

+ @attr description + Specifies a style to use for title text. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:titleTextStyle + */ + public static final int SherlockActionMode_titleTextStyle = 0; + /** Attributes that can be used with a SherlockActivityChooserView. +

Includes the following attributes:

+ + + + + + + +
AttributeDescription
{@link #SherlockActivityChooserView_android_background com.actionbarsherlock:android_background}
{@link #SherlockActivityChooserView_expandActivityOverflowButtonDrawable com.actionbarsherlock:expandActivityOverflowButtonDrawable} The drawable to show in the button for expanding the activities overflow popup.
{@link #SherlockActivityChooserView_initialActivityCount com.actionbarsherlock:initialActivityCount} The maximal number of items initially shown in the activity list.
+ @see #SherlockActivityChooserView_android_background + @see #SherlockActivityChooserView_expandActivityOverflowButtonDrawable + @see #SherlockActivityChooserView_initialActivityCount + */ + public static final int[] SherlockActivityChooserView = { + 0x010100d4, 0x7f01004f, 0x7f010050 + }; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#android_background} + attribute's value can be found in the {@link #SherlockActivityChooserView} array. + @attr name android:android_background + */ + public static final int SherlockActivityChooserView_android_background = 0; + /** +

+ @attr description + The drawable to show in the button for expanding the activities overflow popup. + Note: Clients would like to set this drawable + as a clue about the action the chosen activity will perform. For + example, if share activity is to be chosen the drawable should + give a clue that sharing is to be performed. + + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:expandActivityOverflowButtonDrawable + */ + public static final int SherlockActivityChooserView_expandActivityOverflowButtonDrawable = 2; + /** +

+ @attr description + The maximal number of items initially shown in the activity list. + + +

Must be a string value, using '\\;' to escape characters such as '\\n' or '\\uxxxx' for a unicode character. +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. +

This is a private symbol. + @attr name android:initialActivityCount + */ + public static final int SherlockActivityChooserView_initialActivityCount = 1; + /** Base attributes that are available to all groups. +

Includes the following attributes:

+ + + + + + + + + + +
AttributeDescription
{@link #SherlockMenuGroup_android_checkableBehavior com.actionbarsherlock:android_checkableBehavior} Whether the items are capable of displaying a check mark.
{@link #SherlockMenuGroup_android_enabled com.actionbarsherlock:android_enabled} Whether the items are enabled.
{@link #SherlockMenuGroup_android_id com.actionbarsherlock:android_id} The ID of the group.
{@link #SherlockMenuGroup_android_menuCategory com.actionbarsherlock:android_menuCategory} The category applied to all items within this group.
{@link #SherlockMenuGroup_android_orderInCategory com.actionbarsherlock:android_orderInCategory} The order within the category applied to all items within this group.
{@link #SherlockMenuGroup_android_visible com.actionbarsherlock:android_visible} Whether the items are shown/visible.
+ @see #SherlockMenuGroup_android_checkableBehavior + @see #SherlockMenuGroup_android_enabled + @see #SherlockMenuGroup_android_id + @see #SherlockMenuGroup_android_menuCategory + @see #SherlockMenuGroup_android_orderInCategory + @see #SherlockMenuGroup_android_visible + */ + public static final int[] SherlockMenuGroup = { + 0x0101000e, 0x010100d0, 0x01010194, 0x010101de, + 0x010101df, 0x010101e0 + }; + /** +

+ @attr description + Whether the items are capable of displaying a check mark. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_checkableBehavior}. + @attr name android:android_checkableBehavior + */ + public static final int SherlockMenuGroup_android_checkableBehavior = 5; + /** +

+ @attr description + Whether the items are enabled. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_enabled}. + @attr name android:android_enabled + */ + public static final int SherlockMenuGroup_android_enabled = 0; + /** +

+ @attr description + The ID of the group. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_id}. + @attr name android:android_id + */ + public static final int SherlockMenuGroup_android_id = 1; + /** +

+ @attr description + The category applied to all items within this group. + (This will be or'ed with the orderInCategory attribute.) +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_menuCategory}. + @attr name android:android_menuCategory + */ + public static final int SherlockMenuGroup_android_menuCategory = 3; + /** +

+ @attr description + The order within the category applied to all items within this group. + (This will be or'ed with the category attribute.) +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_orderInCategory}. + @attr name android:android_orderInCategory + */ + public static final int SherlockMenuGroup_android_orderInCategory = 4; + /** +

+ @attr description + Whether the items are shown/visible. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_visible}. + @attr name android:android_visible + */ + public static final int SherlockMenuGroup_android_visible = 2; + /** Base attributes that are available to all Item objects. +

Includes the following attributes:

+ + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
{@link #SherlockMenuItem_android_actionLayout com.actionbarsherlock:android_actionLayout} An optional layout to be used as an action view.
{@link #SherlockMenuItem_android_actionProviderClass com.actionbarsherlock:android_actionProviderClass} The name of an optional ActionProvider class to instantiate an action view + and perform operations such as default action for that menu item.
{@link #SherlockMenuItem_android_actionViewClass com.actionbarsherlock:android_actionViewClass} The name of an optional View class to instantiate and use as an + action view.
{@link #SherlockMenuItem_android_alphabeticShortcut com.actionbarsherlock:android_alphabeticShortcut} The alphabetic shortcut key.
{@link #SherlockMenuItem_android_checkable com.actionbarsherlock:android_checkable} Whether the item is capable of displaying a check mark.
{@link #SherlockMenuItem_android_checked com.actionbarsherlock:android_checked} Whether the item is checked.
{@link #SherlockMenuItem_android_enabled com.actionbarsherlock:android_enabled} Whether the item is enabled.
{@link #SherlockMenuItem_android_icon com.actionbarsherlock:android_icon} The icon associated with this item.
{@link #SherlockMenuItem_android_id com.actionbarsherlock:android_id} The ID of the item.
{@link #SherlockMenuItem_android_menuCategory com.actionbarsherlock:android_menuCategory} The category applied to the item.
{@link #SherlockMenuItem_android_numericShortcut com.actionbarsherlock:android_numericShortcut} The numeric shortcut key.
{@link #SherlockMenuItem_android_onClick com.actionbarsherlock:android_onClick} Name of a method on the Context used to inflate the menu that will be + called when the item is clicked.
{@link #SherlockMenuItem_android_orderInCategory com.actionbarsherlock:android_orderInCategory} The order within the category applied to the item.
{@link #SherlockMenuItem_android_showAsAction com.actionbarsherlock:android_showAsAction} How this item should display in the Action Bar, if present.
{@link #SherlockMenuItem_android_title com.actionbarsherlock:android_title} The title associated with the item.
{@link #SherlockMenuItem_android_titleCondensed com.actionbarsherlock:android_titleCondensed} The condensed title associated with the item.
{@link #SherlockMenuItem_android_visible com.actionbarsherlock:android_visible} Whether the item is shown/visible.
+ @see #SherlockMenuItem_android_actionLayout + @see #SherlockMenuItem_android_actionProviderClass + @see #SherlockMenuItem_android_actionViewClass + @see #SherlockMenuItem_android_alphabeticShortcut + @see #SherlockMenuItem_android_checkable + @see #SherlockMenuItem_android_checked + @see #SherlockMenuItem_android_enabled + @see #SherlockMenuItem_android_icon + @see #SherlockMenuItem_android_id + @see #SherlockMenuItem_android_menuCategory + @see #SherlockMenuItem_android_numericShortcut + @see #SherlockMenuItem_android_onClick + @see #SherlockMenuItem_android_orderInCategory + @see #SherlockMenuItem_android_showAsAction + @see #SherlockMenuItem_android_title + @see #SherlockMenuItem_android_titleCondensed + @see #SherlockMenuItem_android_visible + */ + public static final int[] SherlockMenuItem = { + 0x01010002, 0x0101000e, 0x010100d0, 0x01010106, + 0x01010194, 0x010101de, 0x010101df, 0x010101e1, + 0x010101e2, 0x010101e3, 0x010101e4, 0x010101e5, + 0x0101026f, 0x010102d9, 0x010102fb, 0x010102fc, + 0x01010389 + }; + /** +

+ @attr description + An optional layout to be used as an action view. + See {@link android.view.MenuItem#setActionView(android.view.View)} + for more info. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_actionLayout}. + @attr name android:android_actionLayout + */ + public static final int SherlockMenuItem_android_actionLayout = 14; + /** +

+ @attr description + The name of an optional ActionProvider class to instantiate an action view + and perform operations such as default action for that menu item. + See {@link android.view.MenuItem#setActionProvider(android.view.ActionProvider)} + for more info. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_actionProviderClass}. + @attr name android:android_actionProviderClass + */ + public static final int SherlockMenuItem_android_actionProviderClass = 16; + /** +

+ @attr description + The name of an optional View class to instantiate and use as an + action view. See {@link android.view.MenuItem#setActionView(android.view.View)} + for more info. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_actionViewClass}. + @attr name android:android_actionViewClass + */ + public static final int SherlockMenuItem_android_actionViewClass = 15; + /** +

+ @attr description + The alphabetic shortcut key. This is the shortcut when using a keyboard + with alphabetic keys. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_alphabeticShortcut}. + @attr name android:android_alphabeticShortcut + */ + public static final int SherlockMenuItem_android_alphabeticShortcut = 9; + /** +

+ @attr description + Whether the item is capable of displaying a check mark. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_checkable}. + @attr name android:android_checkable + */ + public static final int SherlockMenuItem_android_checkable = 11; + /** +

+ @attr description + Whether the item is checked. Note that you must first have enabled checking with + the checkable attribute or else the check mark will not appear. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_checked}. + @attr name android:android_checked + */ + public static final int SherlockMenuItem_android_checked = 3; + /** +

+ @attr description + Whether the item is enabled. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_enabled}. + @attr name android:android_enabled + */ + public static final int SherlockMenuItem_android_enabled = 1; + /** +

+ @attr description + The icon associated with this item. This icon will not always be shown, so + the title should be sufficient in describing this item. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_icon}. + @attr name android:android_icon + */ + public static final int SherlockMenuItem_android_icon = 0; + /** +

+ @attr description + The ID of the item. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_id}. + @attr name android:android_id + */ + public static final int SherlockMenuItem_android_id = 2; + /** +

+ @attr description + The category applied to the item. + (This will be or'ed with the orderInCategory attribute.) +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_menuCategory}. + @attr name android:android_menuCategory + */ + public static final int SherlockMenuItem_android_menuCategory = 5; + /** +

+ @attr description + The numeric shortcut key. This is the shortcut when using a numeric (e.g., 12-key) + keyboard. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_numericShortcut}. + @attr name android:android_numericShortcut + */ + public static final int SherlockMenuItem_android_numericShortcut = 10; + /** +

+ @attr description + Name of a method on the Context used to inflate the menu that will be + called when the item is clicked. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_onClick}. + @attr name android:android_onClick + */ + public static final int SherlockMenuItem_android_onClick = 12; + /** +

+ @attr description + The order within the category applied to the item. + (This will be or'ed with the category attribute.) +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_orderInCategory}. + @attr name android:android_orderInCategory + */ + public static final int SherlockMenuItem_android_orderInCategory = 6; + /** +

+ @attr description + How this item should display in the Action Bar, if present. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_showAsAction}. + @attr name android:android_showAsAction + */ + public static final int SherlockMenuItem_android_showAsAction = 13; + /** +

+ @attr description + The title associated with the item. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_title}. + @attr name android:android_title + */ + public static final int SherlockMenuItem_android_title = 7; + /** +

+ @attr description + The condensed title associated with the item. This is used in situations where the + normal title may be too long to be displayed. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_titleCondensed}. + @attr name android:android_titleCondensed + */ + public static final int SherlockMenuItem_android_titleCondensed = 8; + /** +

+ @attr description + Whether the item is shown/visible. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_visible}. + @attr name android:android_visible + */ + public static final int SherlockMenuItem_android_visible = 4; + /** Attributes that can be used with a SherlockMenuView. +

Includes the following attributes:

+ + + + + + + + + + + + +
AttributeDescription
{@link #SherlockMenuView_headerBackground com.actionbarsherlock:headerBackground} Default background for the menu header.
{@link #SherlockMenuView_horizontalDivider com.actionbarsherlock:horizontalDivider} Default horizontal divider between rows of menu items.
{@link #SherlockMenuView_itemBackground com.actionbarsherlock:itemBackground} Default background for each menu item.
{@link #SherlockMenuView_itemIconDisabledAlpha com.actionbarsherlock:itemIconDisabledAlpha} Default disabled icon alpha for each menu item that shows an icon.
{@link #SherlockMenuView_itemTextAppearance com.actionbarsherlock:itemTextAppearance} Default appearance of menu item text.
{@link #SherlockMenuView_preserveIconSpacing com.actionbarsherlock:preserveIconSpacing} Whether space should be reserved in layout when an icon is missing.
{@link #SherlockMenuView_verticalDivider com.actionbarsherlock:verticalDivider} Default vertical divider between menu items.
{@link #SherlockMenuView_windowAnimationStyle com.actionbarsherlock:windowAnimationStyle} Default animations for the menu.
+ @see #SherlockMenuView_headerBackground + @see #SherlockMenuView_horizontalDivider + @see #SherlockMenuView_itemBackground + @see #SherlockMenuView_itemIconDisabledAlpha + @see #SherlockMenuView_itemTextAppearance + @see #SherlockMenuView_preserveIconSpacing + @see #SherlockMenuView_verticalDivider + @see #SherlockMenuView_windowAnimationStyle + */ + public static final int[] SherlockMenuView = { + 0x7f010047, 0x7f010048, 0x7f010049, 0x7f01004a, + 0x7f01004b, 0x7f01004c, 0x7f01004d, 0x7f01004e + }; + /** +

+ @attr description + Default background for the menu header. + + +

May be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

May be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". +

This is a private symbol. + @attr name android:headerBackground + */ + public static final int SherlockMenuView_headerBackground = 3; + /** +

+ @attr description + Default horizontal divider between rows of menu items. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:horizontalDivider + */ + public static final int SherlockMenuView_horizontalDivider = 1; + /** +

+ @attr description + Default background for each menu item. + + +

May be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

May be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". +

This is a private symbol. + @attr name android:itemBackground + */ + public static final int SherlockMenuView_itemBackground = 4; + /** +

+ @attr description + Default disabled icon alpha for each menu item that shows an icon. + + +

Must be a floating point value, such as "1.2". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. +

This is a private symbol. + @attr name android:itemIconDisabledAlpha + */ + public static final int SherlockMenuView_itemIconDisabledAlpha = 6; + /** +

+ @attr description + Default appearance of menu item text. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:itemTextAppearance + */ + public static final int SherlockMenuView_itemTextAppearance = 0; + /** +

+ @attr description + Whether space should be reserved in layout when an icon is missing. + + +

Must be a boolean value, either "true" or "false". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. +

This is a private symbol. + @attr name android:preserveIconSpacing + */ + public static final int SherlockMenuView_preserveIconSpacing = 7; + /** +

+ @attr description + Default vertical divider between menu items. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:verticalDivider + */ + public static final int SherlockMenuView_verticalDivider = 2; + /** +

+ @attr description + Default animations for the menu. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:windowAnimationStyle + */ + public static final int SherlockMenuView_windowAnimationStyle = 5; + /** Attributes that can be used with a SherlockSpinner. +

Includes the following attributes:

+ + + + + + + + + + + + +
AttributeDescription
{@link #SherlockSpinner_android_dropDownHorizontalOffset com.actionbarsherlock:android_dropDownHorizontalOffset} Horizontal offset from the spinner widget for positioning the dropdown + in spinnerMode="dropdown".
{@link #SherlockSpinner_android_dropDownSelector com.actionbarsherlock:android_dropDownSelector} List selector to use for spinnerMode="dropdown" display.
{@link #SherlockSpinner_android_dropDownVerticalOffset com.actionbarsherlock:android_dropDownVerticalOffset} Vertical offset from the spinner widget for positioning the dropdown in + spinnerMode="dropdown".
{@link #SherlockSpinner_android_dropDownWidth com.actionbarsherlock:android_dropDownWidth} Width of the dropdown in spinnerMode="dropdown".
{@link #SherlockSpinner_android_gravity com.actionbarsherlock:android_gravity} Gravity setting for positioning the currently selected item.
{@link #SherlockSpinner_android_popupBackground com.actionbarsherlock:android_popupBackground} Background drawable to use for the dropdown in spinnerMode="dropdown".
{@link #SherlockSpinner_android_popupPromptView com.actionbarsherlock:android_popupPromptView} Reference to a layout to use for displaying a prompt in the dropdown for + spinnerMode="dropdown".
{@link #SherlockSpinner_android_prompt com.actionbarsherlock:android_prompt} The prompt to display when the spinner's dialog is shown.
+ @see #SherlockSpinner_android_dropDownHorizontalOffset + @see #SherlockSpinner_android_dropDownSelector + @see #SherlockSpinner_android_dropDownVerticalOffset + @see #SherlockSpinner_android_dropDownWidth + @see #SherlockSpinner_android_gravity + @see #SherlockSpinner_android_popupBackground + @see #SherlockSpinner_android_popupPromptView + @see #SherlockSpinner_android_prompt + */ + public static final int[] SherlockSpinner = { + 0x010100af, 0x01010175, 0x01010176, 0x0101017b, + 0x01010262, 0x010102ac, 0x010102ad, 0x010103ef + }; + /** +

+ @attr description + Horizontal offset from the spinner widget for positioning the dropdown + in spinnerMode="dropdown". +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_dropDownHorizontalOffset}. + @attr name android:android_dropDownHorizontalOffset + */ + public static final int SherlockSpinner_android_dropDownHorizontalOffset = 5; + /** +

+ @attr description + List selector to use for spinnerMode="dropdown" display. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_dropDownSelector}. + @attr name android:android_dropDownSelector + */ + public static final int SherlockSpinner_android_dropDownSelector = 1; + /** +

+ @attr description + Vertical offset from the spinner widget for positioning the dropdown in + spinnerMode="dropdown". +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_dropDownVerticalOffset}. + @attr name android:android_dropDownVerticalOffset + */ + public static final int SherlockSpinner_android_dropDownVerticalOffset = 6; + /** +

+ @attr description + Width of the dropdown in spinnerMode="dropdown". +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_dropDownWidth}. + @attr name android:android_dropDownWidth + */ + public static final int SherlockSpinner_android_dropDownWidth = 4; + /** +

+ @attr description + Gravity setting for positioning the currently selected item. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_gravity}. + @attr name android:android_gravity + */ + public static final int SherlockSpinner_android_gravity = 0; + /** +

+ @attr description + Background drawable to use for the dropdown in spinnerMode="dropdown". +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_popupBackground}. + @attr name android:android_popupBackground + */ + public static final int SherlockSpinner_android_popupBackground = 2; + /** +

+ @attr description + Reference to a layout to use for displaying a prompt in the dropdown for + spinnerMode="dropdown". This layout must contain a TextView with the id + @android:id/text1 to be populated with the prompt text. +

This is a private symbol. + @attr name android:android_popupPromptView + */ + public static final int SherlockSpinner_android_popupPromptView = 7; + /** +

+ @attr description + The prompt to display when the spinner's dialog is shown. +

This corresponds to the global attribute resource symbol {@link com.actionbarsherlock.R.attr#android_prompt}. + @attr name android:android_prompt + */ + public static final int SherlockSpinner_android_prompt = 3; + /** Attributes that can be used with a SherlockTheme. +

Includes the following attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
{@link #SherlockTheme_absForceOverflow com.actionbarsherlock:absForceOverflow} Specified if we are forcing an action item overflow menu.
{@link #SherlockTheme_actionBarDivider com.actionbarsherlock:actionBarDivider} Custom divider drawable to use for elements in the action bar.
{@link #SherlockTheme_actionBarItemBackground com.actionbarsherlock:actionBarItemBackground} Custom item state list drawable background for action bar items.
{@link #SherlockTheme_actionBarSize com.actionbarsherlock:actionBarSize} Size of the Action Bar, including the contextual + bar used to present Action Modes.
{@link #SherlockTheme_actionBarSplitStyle com.actionbarsherlock:actionBarSplitStyle} Reference to a style for the split Action Bar.
{@link #SherlockTheme_actionBarStyle com.actionbarsherlock:actionBarStyle} Reference to a style for the Action Bar
{@link #SherlockTheme_actionBarTabBarStyle com.actionbarsherlock:actionBarTabBarStyle}
{@link #SherlockTheme_actionBarTabStyle com.actionbarsherlock:actionBarTabStyle} Default style for tabs within an action bar
{@link #SherlockTheme_actionBarTabTextStyle com.actionbarsherlock:actionBarTabTextStyle}
{@link #SherlockTheme_actionBarWidgetTheme com.actionbarsherlock:actionBarWidgetTheme} Reference to a theme that should be used to inflate widgets + and layouts destined for the action bar.
{@link #SherlockTheme_actionButtonStyle com.actionbarsherlock:actionButtonStyle}
{@link #SherlockTheme_actionDropDownStyle com.actionbarsherlock:actionDropDownStyle}
{@link #SherlockTheme_actionMenuTextAppearance com.actionbarsherlock:actionMenuTextAppearance} TextAppearance style that will be applied to text that + appears within action menu items.
{@link #SherlockTheme_actionMenuTextColor com.actionbarsherlock:actionMenuTextColor} Color for text that appears within action menu items.
{@link #SherlockTheme_actionModeBackground com.actionbarsherlock:actionModeBackground} Background drawable to use for action mode UI
{@link #SherlockTheme_actionModeCloseButtonStyle com.actionbarsherlock:actionModeCloseButtonStyle}
{@link #SherlockTheme_actionModeCloseDrawable com.actionbarsherlock:actionModeCloseDrawable} Drawable to use for the close action mode button
{@link #SherlockTheme_actionModePopupWindowStyle com.actionbarsherlock:actionModePopupWindowStyle} PopupWindow style to use for action modes when showing as a window overlay.
{@link #SherlockTheme_actionModeShareDrawable com.actionbarsherlock:actionModeShareDrawable} Drawable to use for the Share action button in WebView selection action modes
{@link #SherlockTheme_actionModeSplitBackground com.actionbarsherlock:actionModeSplitBackground} Background drawable to use for action mode UI in the lower split bar
{@link #SherlockTheme_actionModeStyle com.actionbarsherlock:actionModeStyle}
{@link #SherlockTheme_actionOverflowButtonStyle com.actionbarsherlock:actionOverflowButtonStyle}
{@link #SherlockTheme_actionSpinnerItemStyle com.actionbarsherlock:actionSpinnerItemStyle}
{@link #SherlockTheme_activatedBackgroundIndicator com.actionbarsherlock:activatedBackgroundIndicator} Drawable used as a background for activated items.
{@link #SherlockTheme_activityChooserViewStyle com.actionbarsherlock:activityChooserViewStyle} Default ActivityChooserView style.
{@link #SherlockTheme_android_windowIsFloating com.actionbarsherlock:android_windowIsFloating}
{@link #SherlockTheme_buttonStyleSmall com.actionbarsherlock:buttonStyleSmall} Small Button style.
{@link #SherlockTheme_dividerVertical com.actionbarsherlock:dividerVertical} Drawable to use for generic vertical dividers.
{@link #SherlockTheme_dropDownListViewStyle com.actionbarsherlock:dropDownListViewStyle}
{@link #SherlockTheme_dropdownListPreferredItemHeight com.actionbarsherlock:dropdownListPreferredItemHeight}
{@link #SherlockTheme_homeAsUpIndicator com.actionbarsherlock:homeAsUpIndicator}
{@link #SherlockTheme_listPopupWindowStyle com.actionbarsherlock:listPopupWindowStyle}
{@link #SherlockTheme_listPreferredItemHeightSmall com.actionbarsherlock:listPreferredItemHeightSmall} A smaller, sleeker list item height.
{@link #SherlockTheme_listPreferredItemPaddingLeft com.actionbarsherlock:listPreferredItemPaddingLeft} The preferred padding along the left edge of list items.
{@link #SherlockTheme_listPreferredItemPaddingRight com.actionbarsherlock:listPreferredItemPaddingRight} The preferred padding along the right edge of list items.
{@link #SherlockTheme_popupMenuStyle com.actionbarsherlock:popupMenuStyle}
{@link #SherlockTheme_spinnerDropDownItemStyle com.actionbarsherlock:spinnerDropDownItemStyle}
{@link #SherlockTheme_spinnerItemStyle com.actionbarsherlock:spinnerItemStyle}
{@link #SherlockTheme_textAppearanceLargePopupMenu com.actionbarsherlock:textAppearanceLargePopupMenu} Text color, typeface, size, and style for the text inside of a popup menu.
{@link #SherlockTheme_textAppearanceListItemSmall com.actionbarsherlock:textAppearanceListItemSmall} The preferred TextAppearance for the primary text of small list items.
{@link #SherlockTheme_textAppearanceSmall com.actionbarsherlock:textAppearanceSmall} Text color, typeface, size, and style for "small" text.
{@link #SherlockTheme_textAppearanceSmallPopupMenu com.actionbarsherlock:textAppearanceSmallPopupMenu} Text color, typeface, size, and style for small text inside of a popup menu.
{@link #SherlockTheme_textColorPrimary com.actionbarsherlock:textColorPrimary}
{@link #SherlockTheme_textColorPrimaryDisableOnly com.actionbarsherlock:textColorPrimaryDisableOnly}
{@link #SherlockTheme_textColorPrimaryInverse com.actionbarsherlock:textColorPrimaryInverse}
{@link #SherlockTheme_windowActionBar com.actionbarsherlock:windowActionBar}
{@link #SherlockTheme_windowActionBarOverlay com.actionbarsherlock:windowActionBarOverlay}
{@link #SherlockTheme_windowActionModeOverlay com.actionbarsherlock:windowActionModeOverlay}
{@link #SherlockTheme_windowContentOverlay com.actionbarsherlock:windowContentOverlay} This Drawable is overlaid over the foreground of the Window's content area, usually + to place a shadow below the title.
{@link #SherlockTheme_windowMinWidthMajor com.actionbarsherlock:windowMinWidthMajor}
{@link #SherlockTheme_windowMinWidthMinor com.actionbarsherlock:windowMinWidthMinor}
{@link #SherlockTheme_windowNoTitle com.actionbarsherlock:windowNoTitle}
{@link #SherlockTheme_windowSplitActionBar com.actionbarsherlock:windowSplitActionBar}
+ @see #SherlockTheme_absForceOverflow + @see #SherlockTheme_actionBarDivider + @see #SherlockTheme_actionBarItemBackground + @see #SherlockTheme_actionBarSize + @see #SherlockTheme_actionBarSplitStyle + @see #SherlockTheme_actionBarStyle + @see #SherlockTheme_actionBarTabBarStyle + @see #SherlockTheme_actionBarTabStyle + @see #SherlockTheme_actionBarTabTextStyle + @see #SherlockTheme_actionBarWidgetTheme + @see #SherlockTheme_actionButtonStyle + @see #SherlockTheme_actionDropDownStyle + @see #SherlockTheme_actionMenuTextAppearance + @see #SherlockTheme_actionMenuTextColor + @see #SherlockTheme_actionModeBackground + @see #SherlockTheme_actionModeCloseButtonStyle + @see #SherlockTheme_actionModeCloseDrawable + @see #SherlockTheme_actionModePopupWindowStyle + @see #SherlockTheme_actionModeShareDrawable + @see #SherlockTheme_actionModeSplitBackground + @see #SherlockTheme_actionModeStyle + @see #SherlockTheme_actionOverflowButtonStyle + @see #SherlockTheme_actionSpinnerItemStyle + @see #SherlockTheme_activatedBackgroundIndicator + @see #SherlockTheme_activityChooserViewStyle + @see #SherlockTheme_android_windowIsFloating + @see #SherlockTheme_buttonStyleSmall + @see #SherlockTheme_dividerVertical + @see #SherlockTheme_dropDownListViewStyle + @see #SherlockTheme_dropdownListPreferredItemHeight + @see #SherlockTheme_homeAsUpIndicator + @see #SherlockTheme_listPopupWindowStyle + @see #SherlockTheme_listPreferredItemHeightSmall + @see #SherlockTheme_listPreferredItemPaddingLeft + @see #SherlockTheme_listPreferredItemPaddingRight + @see #SherlockTheme_popupMenuStyle + @see #SherlockTheme_spinnerDropDownItemStyle + @see #SherlockTheme_spinnerItemStyle + @see #SherlockTheme_textAppearanceLargePopupMenu + @see #SherlockTheme_textAppearanceListItemSmall + @see #SherlockTheme_textAppearanceSmall + @see #SherlockTheme_textAppearanceSmallPopupMenu + @see #SherlockTheme_textColorPrimary + @see #SherlockTheme_textColorPrimaryDisableOnly + @see #SherlockTheme_textColorPrimaryInverse + @see #SherlockTheme_windowActionBar + @see #SherlockTheme_windowActionBarOverlay + @see #SherlockTheme_windowActionModeOverlay + @see #SherlockTheme_windowContentOverlay + @see #SherlockTheme_windowMinWidthMajor + @see #SherlockTheme_windowMinWidthMinor + @see #SherlockTheme_windowNoTitle + @see #SherlockTheme_windowSplitActionBar + */ + public static final int[] SherlockTheme = { + 0x01010057, 0x7f010006, 0x7f010007, 0x7f010008, + 0x7f010009, 0x7f01000a, 0x7f01000b, 0x7f01000c, + 0x7f01000d, 0x7f01000e, 0x7f01000f, 0x7f010010, + 0x7f010011, 0x7f010012, 0x7f010013, 0x7f010014, + 0x7f010015, 0x7f010016, 0x7f010017, 0x7f010018, + 0x7f010019, 0x7f01001a, 0x7f01001b, 0x7f01001c, + 0x7f01001d, 0x7f01001e, 0x7f01001f, 0x7f010020, + 0x7f010021, 0x7f010022, 0x7f010023, 0x7f010024, + 0x7f010025, 0x7f010026, 0x7f010027, 0x7f010028, + 0x7f010029, 0x7f01002a, 0x7f01002b, 0x7f01002c, + 0x7f01002d, 0x7f01002e, 0x7f01002f, 0x7f010030, + 0x7f010031, 0x7f010032, 0x7f010033, 0x7f010034, + 0x7f010035, 0x7f010036, 0x7f010037, 0x7f010038, + 0x7f010039 + }; + /** +

+ @attr description + Specified if we are forcing an action item overflow menu. + + +

Must be a boolean value, either "true" or "false". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. +

This is a private symbol. + @attr name android:absForceOverflow + */ + public static final int SherlockTheme_absForceOverflow = 52; + /** +

+ @attr description + Custom divider drawable to use for elements in the action bar. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:actionBarDivider + */ + public static final int SherlockTheme_actionBarDivider = 9; + /** +

+ @attr description + Custom item state list drawable background for action bar items. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:actionBarItemBackground + */ + public static final int SherlockTheme_actionBarItemBackground = 10; + /** +

+ @attr description + Size of the Action Bar, including the contextual + bar used to present Action Modes. + + +

May be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. +

May be one of the following constant values.

+ ++++ + +
ConstantValueDescription
wrap_content0
+

This is a private symbol. + @attr name android:actionBarSize + */ + public static final int SherlockTheme_actionBarSize = 8; + /** +

+ @attr description + Reference to a style for the split Action Bar. This style + controls the split component that holds the menu/action + buttons. actionBarStyle is still used for the primary + bar. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:actionBarSplitStyle + */ + public static final int SherlockTheme_actionBarSplitStyle = 6; + /** +

+ @attr description + Reference to a style for the Action Bar + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:actionBarStyle + */ + public static final int SherlockTheme_actionBarStyle = 5; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#actionBarTabBarStyle} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + @attr name android:actionBarTabBarStyle + */ + public static final int SherlockTheme_actionBarTabBarStyle = 2; + /** +

+ @attr description + Default style for tabs within an action bar + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:actionBarTabStyle + */ + public static final int SherlockTheme_actionBarTabStyle = 1; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#actionBarTabTextStyle} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + @attr name android:actionBarTabTextStyle + */ + public static final int SherlockTheme_actionBarTabTextStyle = 3; + /** +

+ @attr description + Reference to a theme that should be used to inflate widgets + and layouts destined for the action bar. Most of the time + this will be a reference to the current theme, but when + the action bar has a significantly different contrast + profile than the rest of the activity the difference + can become important. If this is set to @null the current + theme will be used. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:actionBarWidgetTheme + */ + public static final int SherlockTheme_actionBarWidgetTheme = 7; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#actionButtonStyle} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + @attr name android:actionButtonStyle + */ + public static final int SherlockTheme_actionButtonStyle = 38; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#actionDropDownStyle} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + @attr name android:actionDropDownStyle + */ + public static final int SherlockTheme_actionDropDownStyle = 37; + /** +

+ @attr description + TextAppearance style that will be applied to text that + appears within action menu items. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:actionMenuTextAppearance + */ + public static final int SherlockTheme_actionMenuTextAppearance = 11; + /** +

+ @attr description + Color for text that appears within action menu items. + + +

May be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

May be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". +

This is a private symbol. + @attr name android:actionMenuTextColor + */ + public static final int SherlockTheme_actionMenuTextColor = 12; + /** +

+ @attr description + Background drawable to use for action mode UI + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:actionModeBackground + */ + public static final int SherlockTheme_actionModeBackground = 15; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#actionModeCloseButtonStyle} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + @attr name android:actionModeCloseButtonStyle + */ + public static final int SherlockTheme_actionModeCloseButtonStyle = 14; + /** +

+ @attr description + Drawable to use for the close action mode button + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:actionModeCloseDrawable + */ + public static final int SherlockTheme_actionModeCloseDrawable = 17; + /** +

+ @attr description + PopupWindow style to use for action modes when showing as a window overlay. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:actionModePopupWindowStyle + */ + public static final int SherlockTheme_actionModePopupWindowStyle = 19; + /** +

+ @attr description + Drawable to use for the Share action button in WebView selection action modes + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:actionModeShareDrawable + */ + public static final int SherlockTheme_actionModeShareDrawable = 18; + /** +

+ @attr description + Background drawable to use for action mode UI in the lower split bar + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:actionModeSplitBackground + */ + public static final int SherlockTheme_actionModeSplitBackground = 16; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#actionModeStyle} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + @attr name android:actionModeStyle + */ + public static final int SherlockTheme_actionModeStyle = 13; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#actionOverflowButtonStyle} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + @attr name android:actionOverflowButtonStyle + */ + public static final int SherlockTheme_actionOverflowButtonStyle = 4; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#actionSpinnerItemStyle} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + @attr name android:actionSpinnerItemStyle + */ + public static final int SherlockTheme_actionSpinnerItemStyle = 43; + /** +

+ @attr description + Drawable used as a background for activated items. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:activatedBackgroundIndicator + */ + public static final int SherlockTheme_activatedBackgroundIndicator = 51; + /** +

+ @attr description + Default ActivityChooserView style. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:activityChooserViewStyle + */ + public static final int SherlockTheme_activityChooserViewStyle = 50; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#android_windowIsFloating} + attribute's value can be found in the {@link #SherlockTheme} array. + @attr name android:android_windowIsFloating + */ + public static final int SherlockTheme_android_windowIsFloating = 0; + /** +

+ @attr description + Small Button style. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:buttonStyleSmall + */ + public static final int SherlockTheme_buttonStyleSmall = 20; + /** +

+ @attr description + Drawable to use for generic vertical dividers. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:dividerVertical + */ + public static final int SherlockTheme_dividerVertical = 36; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#dropDownListViewStyle} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + @attr name android:dropDownListViewStyle + */ + public static final int SherlockTheme_dropDownListViewStyle = 40; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#dropdownListPreferredItemHeight} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + @attr name android:dropdownListPreferredItemHeight + */ + public static final int SherlockTheme_dropdownListPreferredItemHeight = 42; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#homeAsUpIndicator} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + @attr name android:homeAsUpIndicator + */ + public static final int SherlockTheme_homeAsUpIndicator = 39; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#listPopupWindowStyle} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + @attr name android:listPopupWindowStyle + */ + public static final int SherlockTheme_listPopupWindowStyle = 49; + /** +

+ @attr description + A smaller, sleeker list item height. + + +

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. +

This is a private symbol. + @attr name android:listPreferredItemHeightSmall + */ + public static final int SherlockTheme_listPreferredItemHeightSmall = 30; + /** +

+ @attr description + The preferred padding along the left edge of list items. + + +

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. +

This is a private symbol. + @attr name android:listPreferredItemPaddingLeft + */ + public static final int SherlockTheme_listPreferredItemPaddingLeft = 31; + /** +

+ @attr description + The preferred padding along the right edge of list items. + + +

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. +

This is a private symbol. + @attr name android:listPreferredItemPaddingRight + */ + public static final int SherlockTheme_listPreferredItemPaddingRight = 32; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#popupMenuStyle} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + @attr name android:popupMenuStyle + */ + public static final int SherlockTheme_popupMenuStyle = 41; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#spinnerDropDownItemStyle} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + @attr name android:spinnerDropDownItemStyle + */ + public static final int SherlockTheme_spinnerDropDownItemStyle = 29; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#spinnerItemStyle} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + @attr name android:spinnerItemStyle + */ + public static final int SherlockTheme_spinnerItemStyle = 28; + /** +

+ @attr description + Text color, typeface, size, and style for the text inside of a popup menu. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:textAppearanceLargePopupMenu + */ + public static final int SherlockTheme_textAppearanceLargePopupMenu = 22; + /** +

+ @attr description + The preferred TextAppearance for the primary text of small list items. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:textAppearanceListItemSmall + */ + public static final int SherlockTheme_textAppearanceListItemSmall = 33; + /** +

+ @attr description + Text color, typeface, size, and style for "small" text. Defaults to secondary text color. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:textAppearanceSmall + */ + public static final int SherlockTheme_textAppearanceSmall = 24; + /** +

+ @attr description + Text color, typeface, size, and style for small text inside of a popup menu. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:textAppearanceSmallPopupMenu + */ + public static final int SherlockTheme_textAppearanceSmallPopupMenu = 23; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#textColorPrimary} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + @attr name android:textColorPrimary + */ + public static final int SherlockTheme_textColorPrimary = 25; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#textColorPrimaryDisableOnly} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + @attr name android:textColorPrimaryDisableOnly + */ + public static final int SherlockTheme_textColorPrimaryDisableOnly = 26; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#textColorPrimaryInverse} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a color value, in the form of "#rgb", "#argb", +"#rrggbb", or "#aarrggbb". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + @attr name android:textColorPrimaryInverse + */ + public static final int SherlockTheme_textColorPrimaryInverse = 27; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#windowActionBar} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a boolean value, either "true" or "false". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + @attr name android:windowActionBar + */ + public static final int SherlockTheme_windowActionBar = 45; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#windowActionBarOverlay} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a boolean value, either "true" or "false". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + @attr name android:windowActionBarOverlay + */ + public static final int SherlockTheme_windowActionBarOverlay = 46; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#windowActionModeOverlay} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a boolean value, either "true" or "false". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + @attr name android:windowActionModeOverlay + */ + public static final int SherlockTheme_windowActionModeOverlay = 47; + /** +

+ @attr description + This Drawable is overlaid over the foreground of the Window's content area, usually + to place a shadow below the title. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". +

This is a private symbol. + @attr name android:windowContentOverlay + */ + public static final int SherlockTheme_windowContentOverlay = 21; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#windowMinWidthMajor} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + @attr name android:windowMinWidthMajor + */ + public static final int SherlockTheme_windowMinWidthMajor = 34; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#windowMinWidthMinor} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + @attr name android:windowMinWidthMinor + */ + public static final int SherlockTheme_windowMinWidthMinor = 35; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#windowNoTitle} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a boolean value, either "true" or "false". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + @attr name android:windowNoTitle + */ + public static final int SherlockTheme_windowNoTitle = 44; + /** +

This symbol is the offset where the {@link com.actionbarsherlock.R.attr#windowSplitActionBar} + attribute's value can be found in the {@link #SherlockTheme} array. + + +

Must be a boolean value, either "true" or "false". +

This may also be a reference to a resource (in the form +"@[package:]type:name") or +theme attribute (in the form +"?[package:][type:]name") +containing a value of this type. + @attr name android:windowSplitActionBar + */ + public static final int SherlockTheme_windowSplitActionBar = 48; + }; +} diff --git a/android-libraries/ActionBarSherlock/libs/android-support-v4.jar b/android-libraries/ActionBarSherlock/libs/android-support-v4.jar new file mode 100644 index 0000000000000000000000000000000000000000..1fbeba0932023ad6f4b851f533261eee0cb66798 GIT binary patch literal 271788 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

2{d8Do1ByJQa(4NyF4LRmP+Y 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

O0gkx4}gZP6o&Ac5xTsN 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 AhyVZp literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/proguard-project.txt b/android-libraries/ActionBarSherlock/proguard-project.txt new file mode 100644 index 00000000..f2fe1559 --- /dev/null +++ b/android-libraries/ActionBarSherlock/proguard-project.txt @@ -0,0 +1,20 @@ +# To enable ProGuard in your project, edit project.properties +# to define the proguard.config property as described in that file. +# +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in ${sdk.dir}/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the ProGuard +# include property in project.properties. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/android-libraries/ActionBarSherlock/project.properties b/android-libraries/ActionBarSherlock/project.properties new file mode 100644 index 00000000..fec2d616 --- /dev/null +++ b/android-libraries/ActionBarSherlock/project.properties @@ -0,0 +1,15 @@ +# 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 edit +# "ant.properties", and override values to adapt the script to your +# project structure. +# +# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): +#proguard.config=${sdk.dir}\tools\proguard\proguard-android.txt:proguard-project.txt + +# Project target. +target=android-15 +android.library=true diff --git a/android-libraries/ActionBarSherlock/res/color/abs__primary_text_disable_only_holo_dark.xml b/android-libraries/ActionBarSherlock/res/color/abs__primary_text_disable_only_holo_dark.xml new file mode 100644 index 00000000..ea7459aa --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/color/abs__primary_text_disable_only_holo_dark.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/color/abs__primary_text_disable_only_holo_light.xml b/android-libraries/ActionBarSherlock/res/color/abs__primary_text_disable_only_holo_light.xml new file mode 100644 index 00000000..0edb33b4 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/color/abs__primary_text_disable_only_holo_light.xml @@ -0,0 +1,21 @@ + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/color/abs__primary_text_holo_dark.xml b/android-libraries/ActionBarSherlock/res/color/abs__primary_text_holo_dark.xml new file mode 100644 index 00000000..2bcfd0b6 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/color/abs__primary_text_holo_dark.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/color/abs__primary_text_holo_light.xml b/android-libraries/ActionBarSherlock/res/color/abs__primary_text_holo_light.xml new file mode 100644 index 00000000..198384fe --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/color/abs__primary_text_holo_light.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_bottom_solid_dark_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_bottom_solid_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..769463b369a5185ba2d2fdf26abf058086ebcd08 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^Y9P$P1|(P5zFY^S!aZFaLn02py|Iz^fCC51!MDwC ze!c%VXGhEQ)_dJsezHtpNMD|7Dac@a*_ZJyulFV2w{5C|YCbaz5)ZX-3ak0tIJ#lm tp_aeGY*)k&iW*FhzahTiJD1r}=BlLiI{(TJ=>e@^@O1TaS?83{1OUpzopr0A6)2vH$=8 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_bottom_solid_light_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_bottom_solid_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..73050476e77aa798919b829a5566973e231f9d49 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^Y9P$P1|(P5zFY^S!aZFaLn02py|Iz^fCC51!MFRR zxpqaJ>-4UOe6iPKwm$=BLD{Wo!i)yScSSDT-Jo*!N?wFe;-MB!VKtu_20%tEPqwzt q4f{lgTEQ5`;-9UxjMeKCf^DQ_uhd?;-Btm#g2B_(&t;ucLK6V6dokDm literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_bottom_transparent_dark_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_bottom_transparent_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..712a551ece87b2544433ac982382a087e7f1731d GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^Y9P$P1|(P5zFY^S{5)M8Ln02py}Xf^L4oIp!}}xu zHrx6hVG;aws8xB@i!KMDZA_cCWy>wsRQS4KRST!En$HY_#6vK~{lt8cLjun}a%VT6 c)z9eScC>M27UGHi05qAw)78&qol`;+0QSr+Bme*a literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_bottom_transparent_light_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_bottom_transparent_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..bf3b9438b16543294498ba27e51d4e878c8ead5a GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^Y9P$P1|(P5zFY^Sd_7$pLn02py}Xh4fCCS+;oB*H z(}QQZt5vXQMa=PTZk@YrXXvE3+ofW5$)(cU#3WF_jrSY!c@8l>`*HAE!gKCvr?`99 W=bm|#aNiDSFoUP7pUXO@geCw#94y)Z literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_share_pack_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_share_pack_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6c1415772d03a71c0677f6e2461521bfae829ce9 GIT binary patch literal 2866 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 Q%K!iX07*qoM6N<$g0$>VYybcN literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_share_pack_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_share_pack_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f4ff16be7323486b7fcd49b3e9bb07816a75b53c GIT binary patch literal 2862 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_stacked_transparent_dark_holo.9.png b/android-libraries/ActionBarSherlock/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/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_stacked_transparent_light_holo.9.png b/android-libraries/ActionBarSherlock/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/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_transparent_dark_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_transparent_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..0eff695d82911a73874d871f3a7b23b71dd8ab44 GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^Y9P$P1|(P5zFY^Sl001;Ln02py?l}LfC5j;!{`N< zEvnsL$t-6rWU%$psDGg1|4DLDj`q~RzPqNgR|nl=*Rt6dx_ol~p-I||JQ4;82O1ce y*`SQyBHQ|!3>bf({j~je;Zla%ZD->HG+$+yO5M3zoXrBXjlt8^&t;ucLK6T4R5w)s literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_transparent_light_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ab_transparent_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..219b170fa67aa2ef8e0b11ebff90c1629ba7e97a GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^Y9P$P1|(P5zFY^SB0OCjLn02py?l|AL4l*?;q8?- zrB_<6lUu~-<@8GYocm9fskyGHQx2!G9uAwU_k&&MlS%_4GaHYDLBatTBRp}nY76HL mkjg^D5fnx&0glSHJj>3%>1Jqp^q#PeS;bnL@oAJ;NJ=s*Cb_P#ZKbLh* G2~7YBfgFPX literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__btn_cab_done_pressed_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__btn_cab_done_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..66adffed632f0f6267afe6dc2f518adb6a83ca4a GIT binary patch literal 110 zcmeAS@N?(olHy`uVBq!ia0vp^EI_Qo!3HFq_#{<Lb literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__cab_background_bottom_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__cab_background_bottom_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..1d836f65a1fffea301e9cf36770b21b48b3b8132 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^Y9P$P1|(P5zFY^SVmw_OLn02py|R(B!9jra;>r_8 z?%b*io|Yn;UGT9};ZTu}!9}%xc^%IgtXD4oJ@0X-F7B%4f|j+c$=0hv54CU#tNF|@ sNQ5wMgi8eI0r?xYZ}@0_Yf6jsMX$B_pXOhT0oudh>FVdQ&MBb@0DzD;x&QzG literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__cab_background_bottom_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__cab_background_bottom_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..5818666d4e64b93da73bc3d6dc2764bcb500359c GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^Y9P$P1|(P5zFY^SB0OCjLn02py|R(>fCCT9!M7)Q zv literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__cab_background_top_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__cab_background_top_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..564fb34b4308750b6922f320e9e114b080ecd538 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^Y9P$P1|(P5zFY^SqC8z3Ln02py}XdO!9jra;!2L@ z<=I|~`ucZlc5hPnsi>TGwM)Is^N?0TPy5{UQpwgqqAoKG5)ZX-3ak0R7;B{1mWZ}( p*lxaUe)ue*Z}vC-G%ee~_}P|!&DqTD7lF1gc)I$ztaD0e0st(KG%NrB literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__cab_background_top_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__cab_background_top_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..ae21b760fb1ebecac3389164251b0fa14f580f5a GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^Y9P$P1|(P5zFY^SqC8z3Ln02py>gKAfB^?4dC zy{Qwe+I<(;Zrk3}qFy7o$Hqotreyxi(D>i`gF-*@tj&^T;Xws!Omj@dZ?l#4Y_?*} ivA^-x{8q}NM@;fbHo20HF^oW47(8A5T-G@yGywny6)bE3 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__dialog_full_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__dialog_full_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..79e56f522b2837bd9f579b28f037ad5eafaaee8e GIT binary patch literal 1414 zcmV;11$p|3P)cSnqT^=WQ7*OFqW%ysfqGq3fLYCng$eebY1E zq0h)!qMt>^T{!1KLrdv5=!(bMwnfb7mMF4BgVA@!3k##^X|etG%o8VLfn)&kp1$5* zAHx|3EF9@?)w)=}!OothSF(h}LSVs2n}u~V8rR2gA&m?6GFm9LT5i!5ovh2$`aOLf zDMwpCv(UIN+s(qhT71rU;E=VYR%2(wIy9)U9BqNMU?EvKj~0!zxmxOREjkZzh+iq_n}2*GaEP(@ILD!5 zWBguqUH^M`clY;tz5a@wsI&tR0g7j89WEv$&WS`s3jmAj>+65+@9$R+4-crSDsl+t zoXD~ai^by4tE;Qe>-G9CHN@f2j4rXz#$jzQA^^+B$H$Mix3`1-5a+ZsO@p#5Q53}= z0G4QnFC7vyL_!;@%<@Jv>_k)mSUx>Hz18n=PE3d}%kYsC@*I)N0NNv^lI%s;wg9j! z%knLLgEIoQ+bysY63^&#(^_eOc(NT6QxTdoZI(#S<~ro`ne!tS(gH7T&zUX-UZRk7 zy|5!F77`FowzZg?X(M)KAw}<4SRP51e8qZ>m)V;$Z3?tS#CiaZ^hhEi?U_=yRh(%c zcGk9kwMUBGYjYt@pHyCSltyExNUHHFevMy@-l#r~QEjQ;(4?Q~r4samHh{FF{bU7StYxgeBAZQ`6E7N`VLYGS_ z;oj>aHT`D+d1$*FJhVBd!G+`uf(ywR1Q(Js2reXN5G)~C&xiARXWFDHmGF81Z6U>K z;#g%)oXa8RP+ENtZO$MZBP0)Pm&4Jv?h_KbHF>VdnKo?a-t;CVB(9^gh389`0#_~3 z>r7%ovdX{d8amFjk%uF>Vp~*9sp-GKg_vAO(?{&AZLdjA|Mdo3?oA8H>)1>mc|==# zB~EQxV&cD40$n%8&w#s-rjOWJ+ddiIQXYxR!^y#)tE&3)24CJ80l~J_MCXPu>Ml3AI+9BHcJ4%0r(Kw z@2dYHj4#nGKH!fqjRVUuh**Aw_CvMrs{b>Lm!YwzO4di>6N@*}Phg5Tw&B1fy2S@v zNaMh=r`Sx3>1SxA8q+hl==5I;NtblfC(XkF^KkH7ZKuDGcq0~@mC!ryi=K7WXgde? zOwz>rq{P&!A!(hIr~D!&pe-W#G7`?LQYh|`P7hzs(O!weT#2|xih3m$l64(P7wFd8 z$(YnkvI-Blh{l8EAha{kf+|%%mTX6hk;YCcRo{6`6g>|oKBz>Tb24JLyVyI4p!izS z!8wv9b%$RIiIZ@y?B&nGjRPyvaF~-xlb-U|=!P~^8?n&FNw@wIvQA!p;xDy1AK0dR zu~CaAl^btMM>A?9->NQ&|AnVmzdt!!WF>xutSl`;$84s2a_=ari#ecl- zo|KSyJXTD=1$2JI1Ql!6el7Y8-dCZ-i%gs^mMBu<;eLzP8a;YIXA&Hxi>7JtAFa#2 UvCQ(L;{X5v07*qoM6N<$g1g$KMgRZ+ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__dialog_full_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__dialog_full_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..e029f210b9a81ed4765d31e90b6e49dc8aa37bed GIT binary patch literal 1537 zcmV+c2LAbpP)P*hY@RCILOyI+)4*Y%ioMH6eaT8-v42qXrI z0|4iGEk=d4Xm52^#H?WUz%bBygG}I|;L!cJM*+u%I9T*&&%x@0sx#0Qk0mTmeRX1h$MIxNMY&% zsz{Hz01C^N@8p~dFgXbIRub%{CUOKKzAQ3rfl0r3M&j^DZL~BnC0R+zNTfH*0>l>% z6xe!^4oO*vg0sbY%(i4Znw@-;nUbs&1zN~PIe02zy)Qcz&8uA?+OU=`?e2Zs5}uJN0M*6C#a{)YX?>^k&iO8v%U{pV&i+9YXUL@sAe1fQs10%V6ikBo z^7Qod_s{$xhgN}Tci-i5`3pX{;N4;1Au(Bm7x@)z#1I9LmdL~RrF4uC5rsHs>tE+w zbjvJ)LKv+{MYbuBrU=TBLj=6Xm=@t7;baF+QjNr0K02$09MPPz_Q^dZ5CLh8#Oov4 z0!TsP8|Jz<^->fRi@r;w5OrSCkw6L?N(J|#V;?nA78HxV{Q97DD=gWeOHxKs4U)p3 zSoD>;waz;geHn?ahed6Tq%7rduPgn zV$nDE$&ajtWS5-`4=n>hvFJNE&bxxNGnt2!k)T-g9UO0!_0BFb6cm%bLuC>qYeBK* zyN@VHxuTkNE#cFa@PaJz!! z*)p0eo;YjAyoc}Lcn`@)ql2XA#Le!l%y)3C`#|D`qk*LC#Leoh&{v9irz@IDt(4j|E-ey3YJCdAoj z17Q35`nvale)TKB+I=4%AAxk%w!OMGAf++t+Mb@Cemp-vW4j&J%V|A%#TR&cd&9%S z1Mctdf1tZ-6W>Id5JKwGXhvG!+}wOSKR^Gos;Zyq!S}5X*>+05G4|7V9G{hQ?!VjH z+iw8YkTX)YMrymYx~{`?w$U_yh$q-O1#m*zu<(hQDx}lJ70s)V5Io{ZN7v2rMwVC7 zhTm_2@1*&pTK&uP8_~o&lye*5+om^+1{h zqafFH?O0X{OUO1M^YAPb=F`bd6<0LB=s!LE=ilN39Gach?DYt$CL6UhXTc;$2zpT2dqqQrIZWT*_yH->_|IcgE|Y&S_AJ4lX{3 zlIkT6RWeyS^JtZ1q^3@yK=Cm?J&*-y*C;dpYgTSF&bztX%>V7a(kL+ra#JUT-|=or zs-McUNbE?uO3e#!@v#wf-Fu%ryG^`~69lNs`%MmnTRbrM$471B$+eE{K4hK$mCQ9h-Z$E`tJc<=E)8`p?U8s&`700000NkvXXu0mjfb2aWW literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_ab_back_holo_dark.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_ab_back_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..897a1c11a06923f0ee630a3ec44b40118c1fa4d3 GIT binary patch literal 602 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1rX+877l!}s{b%+Ad7K3vkswhI zFm^kcZ3hx8D{xE)(qO#|6+TOsF)%PDdAc};Se)*?;+-wxD8l++z18QgepiI9o*=R4AA9|r|3}>uTm;M6YILUxmVi!uBjgaN)~;(wEWpmNk!cW z(d%Z<{E>P~YK!lT=8FgRsYuTJwQ$0$u+I~@?rdLb^6_f+5jpHV#tRQqPS1ijb30F2_W#pYUFO#_XV=?h zOHP?#2^DqDa literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_ab_back_holo_light.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_ab_back_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..0c89f71407e8d51f92ff6a10b1ae40ec902aa04e GIT binary patch literal 546 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1rX+877l!}s{b%+Ad7K3vkswhI zFm^kcZ3hx8D{xE)(qO#|6+TOsF)%P{dAc};Se%}E<)W9gqsXz3_j5LNPFu1pO1DK} z+N#=yeg8w_ofMzAMJao1SUGXl-8U7Joy@GYEX@zknfd?wSxaLcYqyHhr&soQ-EO{p zw!~UfNcQJK)l+|B(yvWaZRmKvsC8=g<+E=!6%t;!XnxPxBUZuOVKlwt*0FipR-Y02 zmCh$xWIQ?dubRMH%k4r1TjlOEFztJ(`Lu4f+1J+&0<|T}CPeP?x_?Pcpm5>hNwa5M zzkQR1sjpY$)<2WmGuJ)*zvffcmaNUK`~10Vr~dw8eVc_z%*|+OqxE^sCGQ0OTrOO6 z<>J@Zf0Ym33CMeTp!xW+<7NU=B(%1ExnpuV-^$?oQTEn-hjMN&=46?A$U{|X$JUzr zjr;q)=$3Bvc`c`@@Ze;4?7{TSRWGgUnXHd<-`o)9JVUa&78r!8C9V-ADTyViR>?)F zK#IZ0z|c_Fz+BhBFvQT<%Fw{d$P~!6GB7Z{-*6d4LvDUbW?Cg~4NgrK`9KYlARB`7 r(@M${i&7aJQ}UBi6+Ckj(^G>|6H_V+Po~-c6)||a`njxgN@xNAF&x-_ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_cab_done_holo_dark.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_cab_done_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..d8662e3f0fdae62cdee68c184a30fa9e421dc338 GIT binary patch literal 713 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}trX+877l!}s{b%+Ad7K3vk;OpT z1B~5HX4`=T%L*LRfizez!?|}o;S3Cn7d>4ZLn02pop#z!+EApeUwz>goe2TrwSq2J zirU3kvaXhOUTIG}?do{Paly7dd_m%&JI?q_-onB2%KO8{j^-Q>wzNlYp6R5&dH;Rm z|KbvtPbZZ7*R_9QUBqkhp({MdL+G`PeiKVkcC&4Y!{nAd6Z!S-oqj3U!mzMkIqyf? zf)_G(nEp@p{`aZ-I!9g5h7aq1927O&FPT&GvG@NuQA5$TGve!iOqW^IxiY{>!{pzO z!{3V<)Sk6$zkBfg;!caFvF0E2Z#WAV9{aHQL)vPusEmizHw=GVH2J}B^#kKc_ZNxM zzDF#RGe0;TaIo&I-m~b0*sP8To$2@Yde+QKc8kg_`XHU5q@;HFk@ug+O{X5aZ~nk~ zjknIKwfM~0Z^b864VUMM@zwGAdYt)v<(Nz4IlImB@8#qJ%zn(A@Z29bd}4MpKn$sTM506307QmPCTFYr(@#O zpZ-(V%YE!?30QE(DXivDMdI0PFM+AKOT1>hnX-6tX;O6(d#2d)iSBZ_kN7m7WzTRr zzEA`h)2bz|5hW>!C8<`)MX5lF!N|bSP}jgh*T6i)(9Fuf$jaCl$hI;t2>JhQGm3`X z{FKbJN)!#IR;K1a1kqq?mJtlpAPKS|I6tkVJh3R1!7(L2DOJHUH!(dmC^a#qvhZZ8 Q4Nwt-r>mdKI;Vst0K3d3fB*mh literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_cab_done_holo_light.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_cab_done_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..ed03f620f8ef9e969d0471ab76329038e25c9f0d GIT binary patch literal 737 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}trX+877l!}s{b%+Ad7K3vk;OpT z1B~5HX4`=T%L*LRfizez!?|}o;S3CnFFjoxLn02py%z6(IY8q0$M=`{k_{&Q=;t<2 zt8!*r>&D`|W2$+>pS=eAb}M##+^cbdA4dCLPr0$oL~Mm8Bn#4$+9@L$(#*Pp%fW0&@t4F~+Q4$6OeIrG`|nG22@uVa-C zJ=H0n)NABBE9V2ZrDh$}Ob?>#U7^{{%b z^;_|*S@)*|RLscvyw85$_Y2}8p?L-UY)vO;|NFUQJ(sNEA?BESpVrme#d7mboB7l} z-Tl+e|M{(6F|!lpnSU$jtXi?CXvKcs<;$n_y<4FKOaZDTt`Q|Ei6yC4$wjF^iowXh z&`{UFLf61N#L&#jz{twj7|6CVFbMhoZ8M67-29Zxv`Q2WrdForKm^fXYnBlV)F276 tAviy+q&%@GmBBG3KPgqgGdD3kH7GSPrLyp3str&PgQu&X%Q~loCIB{EJ2wCT literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_menu_moreoverflow_normal_holo_dark.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_menu_moreoverflow_normal_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..2abc45809c62513224e9d695542cb8dd8e8087b9 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezt=sPZ!6KjC*gdALL|E;9+*q=6m<7 zlueVX_4IZHnJ0qE#_rG0T(kiyWMEjjhCTn?qu5pu`=4q}27?c$C=-xvpo(CHaDZeV Zn6Yoz!5==w*?y}vd$@?2>|OKBsl;8 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_menu_moreoverflow_normal_holo_light.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_menu_moreoverflow_normal_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..bb6aef1d069a14a7fc1cea9780c919c61679e4fa GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtXipc%kc@k8uWjUIP~c#3xZ62X z=G4p^oaPsfxfS0Jish)R3f(&WG9yqa14Evg(y_dGGlfCy2iXqR3?>_SEs{VyhV?DH iJ0OaDc|iOR772{!kNsXaOPT8&i0|p@=d#Wzp$Py$I4IEo literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_menu_share_holo_dark.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_menu_share_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..6f747c8f065940a8844587c682fb3c9443ad1ca2 GIT binary patch literal 467 zcmV;^0WAKBP)SO)@i{}u0qYYqHziBfu2L*;{L?D;GxhmUqDjP ziMkTn=nm+BxmDP>FsP2fGnnz3AAnfGAiD%ptMDlguG*u-2|uL;kN%Xenfoz6Wm9neQuJ_f08buH`WL4SA>8mzG9{4uwy+$BT^9a|eO3@D0j4;gS>^u3i8D002ov JPDHLkV1mHE(I@}_ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_menu_share_holo_light.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_menu_share_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..682b2fdec4cdcffe042a0eaba5574fcb553c6fab GIT binary patch literal 505 zcmVavhwv6%LZS|`6cHU3BI+s;(j}rxR}U>ALI;t;n}mlvh$!J-yZtua#I%j$ zOwQ&T8Q}wUMSkBn``+6%%Cao-nJ5SZfglhBcnTy*QWjP42;RUuXn|w-Gn@r3!4%9C z+;SJ#1s`+53r;u-JS+&G)8Q=eVjwW)EYS5?U=Q?t+(O%+X%L*ae6USp(Wf44I z{VTBf*DdH$;99e18zd%PPify*mOc4h3DgW)zaXzPJFd#ED}jzd@IKXer+vefz{o(L zSH{%(p8{RZ0^V<-*kS}|(%8UCAfi$^)3kopWmIldEo%J}dR~)`A1WGIol7IL;ao9F zT=*mq(WtgX@b^ z8v#5LPB(Y&Y|7|Y_!S62?p zbb>IW`N`93fr2)kE{-7*QBRJJkl{&7FVVepxUS$Rt1LT2VAvn7lLLt0oo!v4%( tpjG6n=4tr&fORvYRP%q%M>EqU82;Q9of*be(FHVz!PC{xWt~$(699PnDoy|Z literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_divider_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_divider_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..986ab0b9746301f2dd9401829da09e00995621b3 GIT binary patch literal 78 zcmeAS@N?(olHy`uVBq!ia0vp^%plCc1|-8Yw(bW~qMj~}Asp9}6B-)+^BAxRtXRm= az`@Yw&#rLZUbzUUfWgz%&t;ucLK6T(%Mo}0 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_divider_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_divider_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..0279e17a123f8cbb3c7e3a9ce5c5af8e693b6977 GIT binary patch literal 76 zcmeAS@N?(olHy`uVBq!ia0vp^%plCc1|-8Yw(bW~!k#XUAsp9}6B-)+^LX%RmN2q0 Ycy4A9FVZ~13zTN?boFyt=akR{01+Y(GXMYp literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_focused_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..516f5c7399c853d112a31d1e17c8c7f17180f9bd GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhEX7WqAsj$Z!;#Vf2?p zbb>IW`N`93fr5^nE{-7*QpO1)z4*}Q$iB}R!lH3 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_longpressed_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_longpressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea7afa00e2bfe057472ed5a196080fc80ad7383 GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhEX7WqAsj$Z!;#Vf2?p zbb>IW`N`93fr2)kE{-7*QBRJJkl{&7FVVepxUS$Rt1LT2VAvn7lLLt0oo!v4%( tpjG6n=4tr&fORvYRP%q%M>EqU82;Q9of*be(FHVz!PC{xWt~$(699PnDoy|Z literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_pressed_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..5654cd69429fd0a3502a05b5f827bffab89cc7e0 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhEX7WqAsj$Z!;#Vf2?p zbb>IW`N`93fr5^nE{-7*QD_LZ%D`aoRl?HIGCc%n7=x#)pUXO@geCyJM=ZAh literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_pressed_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..5654cd69429fd0a3502a05b5f827bffab89cc7e0 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhEX7WqAsj$Z!;#Vf2?p zbb>IW`N`93fr5^nE{-7*QD_LZ%D`aoRl?HIGCc%n7=x#)pUXO@geCyJM=ZAh literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_selector_disabled_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__list_selector_disabled_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f6fd30dcdc9c39c836e509486854f9da03486892 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^;y~=k!3HF){@Qy1DVAa<&kznEsNqQI0P;BtJR*x3 z7`Qt@n9=;?>9s(?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/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__menu_dropdown_panel_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__menu_dropdown_panel_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..4d3d208578c61662986fdc16bd15c69759b48d6a GIT binary patch literal 922 zcmV;L17-Y)P)!ytdud6iMT7O&4bD*mP3eKws)UN7D2k#e z%DbYt@4NEYnkjlINEK7=*RV3zwml#Px9r!q%}Y$QM*NqHEZ-wscn^ zf4p9=Kg#ZZAKY%YZvc!aCbL}F6eGxtBSzy=smEUmc6C{?q1YCQrid~5o$!73+BeU$Ee{DI^Yo4#-o87 zao*xiE9Z<+s}ttlWw19HGlEA1nW09+*~|#}a;CkeJh%bU1g9CP5h0^O2}4Hs%y=Lc z5q!OY8j*^uk~rBBK?ljmh#jL84Ev;rDo>_H#K|6e%Mo=CgLzw$rI$Y4Z-kUy6U47Z zMI2w^tmuV~pH%tJq!^(yWY-hbFl2;G2g)+VPqud2Sicc+jL>MvBTKK;HbN#jlrS<8 zl+;FqdPULzJ~Kh_!?j8>!xs^*nQAm$#290~ue;BBnY1w&wMw4#m(pwEDZd_oY1{Ux z>$>N)H(eWD*FCpw`-IsDKF28-6~1bz!JGs-W6Z&R1n>#KR{&q8us99Q}8ID#(NJr3oa@N-D4Rc$qhA--bT2} z_Wpf@Z`4749}#V+fwWJz^oyZKO1~J&exY-1*Kg?D$hu!fixvAiNfpmG;mo&f5BSEA wlE;@gYed_N;JFm#Y)Zw{1W}kQU9GkF3xsHEK4Myn7XSbN07*qoM6N<$g18=|djJ3c literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__menu_dropdown_panel_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__menu_dropdown_panel_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..924a99d173082ba58ca7527822359f228bb14dec GIT binary patch literal 1061 zcmV+=1ls$FP)#d)-&;4-At916hopygyW1WQa|lkCWZ4-q&QLYwjy>%Jd>?UvK6*fy zdt!`Ep~K-gOUxeEG;B7TCA&L&Y`5FR`f3tF5S^VH!lJsKJqkfK0&PN7nPcRS?`4Ev z7V~vPKouy~L@5%v*=&-(hy0cgM*ETwjWz&8F3NVhH7#V4$3+kVgi2lPw-adOTXm|2 z;f`P0rx+seIw-H@dwPaOx@-q(hY$i2BS4u1XM~+%LI5%mN(D;0XOsl63U@~43e6EU z5mrW96C~;L2O}H%p$jmGc5)7LM&^oyAacV=14{s_wp`K^YIpyDFEM02mXk3OSEw-p zdORS~SGTvf|Cjl{`o#71_3u-2KzcK(ZU7La5JAil5&>9olp#5yVJhG_L?OnQ2x7(v zIfg2+Q2z$cZ7gkJK~)>%8)`3CJSNBlBGKwWz;6QnLDPCN+(q9 zAJ*09wM4d_hZLYxWa z2;mvCbu@F-B1H21)loz{?U-+?@nqk8kw`Vm31QkJFg_V%{OMfZr8mlq(-<|uJGVoHpVClAlh&-bsduQ(hI zi(GsU`1tt1hf_X{d`3<68b|S{tXYwd2YXzXl8Izg4y^21 zp<@H92ON{kB3P1HizBE$;EP~xzks74y{^`3Ur7(FmPO0@t2+WXW`VN|Gc9|AJ43ds z=_5ZJGT6$YN8bIa6HYZ^jFIn`&>W#9La9l$?6@3`ET&WsUkjFK0@?|yO)(6`*1l_s~_L1z$~& z@jZM)qqe)$B+Pe}79nG2sji9uR0#8Z){~%#a(p4yPG;@1CipK8G=YCTO^$u*mj`Me f=rGa5Ym5<}3Pv>t$oVA_00000NkvXXu0mjf+qu}} literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__progress_bg_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__progress_bg_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..310c368e7a68479307866c479d1e4eefcf5db311 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^96&6^!3HF|1ZAax6icy_X9x!n)NrJ90QsB+9+AZi z4BVX{%xHe{^je@`h^LEVh{nXLlN`Ak3Qu?vqkba5WyT9CKZ;N%wBhP~?hKK2LK3q{Q@b8ror6q0>Kp=4vJYD@<);T3K0RYm>I5PkM literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__progress_bg_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__progress_bg_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..70cb7fc7e0bcfb850d4b365f1bccb5b743913e21 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^96&6^!3HF|1ZAax6icy_X9x!n)NrJ90QsB+9+AZi z4BVX{%xHe{^je@`fTxRNh{nXLlN`Ak40u@7AASF0zb~yy)74d)-}Q|XM+&=H%L1l~ z70X`DZ5Q8J;=>T6aJiv_zhUdQx9rw$B!4Wi^!v;8!uD-LM?h!CZ3$B@rZO?tz^Iy& QK(iSCDOJO>Ym5d24oA2hD9A9kkZ#C-ocYxQulY$%dG^s1`jD zWrBMf{hI5z?Ps6d&cAMwxpu9tAQSLC;sV+l?CI!atlqGv_K~X}S&7D6#irA$G%zcr zGa^}SvXODrvrsWB#ZkB-c}-Y}>Q0!#L#9IQCX$ZI#7DnF9fJ8(R=8iR{NJvIR3GfdBS0fGXvSYugM@B@Fy~s_l`Jy)|ccqHxmVzApHz{x4N{y z#Xj0V$LH=@zsWY)$4Z)6--edG^VYGh&b$}$F3XeLt5=Uu0`p37@FaypB&t$KuAm9R zq*|yt7WOdr(m%g{dU1bs0-qy(nh~3JDc<<|K^(;cR4G!8UrKd|p;N zi5zZftW#Kk#vM}fdS+hLQ#;Dq?H?_`8P1nhqmR=j>Au${MMR)hh&5HCA z?cjx6pHV1ZFFx`ra1m|YMALE$u3RAxZp(6Eus@DJwzn!G7Cw2Mm%K&AN5Ia`DuuPd r`dvHM#yxB2nYDo;0!e2cs)*3P7gB8$K+RT%00000NkvXXu0mjfr&_ZI literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__progress_primary_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__progress_primary_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..1c269205e874bc6addc308efe5be4fb7c5da0edc GIT binary patch literal 917 zcmV;G18V$CDOJO>Ym5d24oA2hD9A9kkZ#C-ocYxQulY$%dG^s1`jD zWrBMf{hI5z?Ps6d&cAMwxpu9tAQSLC;sV+l?CI!atlqGv_K~X}S&7D6#irA$G%zcr zGa^}SvXODrvrsWB#ZkB-c}-Y}>Q0!#L#9IQCX$ZI#7DnF9fJ8(R=8iR{NJvIR3GfdBS0fGXvSYugM@B@Fy~s_l`Jy)|ccqHxmVzApHz{x4N{y z#Xj0V$LH=@zsWY)$4Z)6--edG^VYGh&b$}$F3XeLt5=Uu0`p37@FaypB&t$KuAm9R zq*|yt7WOdr(m%g{dU1bs0-qy(nh~3JDc<<|K^(;cR4G!8UrKd|p;N zi5zZftW#Kk#vM}fdS+hLQ#;Dq?H?_`8P1nhqmR=j>Au${MMR)hh&5HCA z?cjx6pHV1ZFFx`ra1m|YMALE$u3RAxZp(6Eus@DJwzn!G7Cw2Mm%K&AN5Ia`DuuPd r`dvHM#yxB2nYDo;0!e2cs)*3P7gB8$K+RT%00000NkvXXu0mjfr&_ZI literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__progress_secondary_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__progress_secondary_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..40d0d1645cbf05e30bf092ace45403281da7f318 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^96&6^!3HF|1ZAax6icy_X9x!n)NrJ90QsB+9+AZi z4BVX{%xHe{^je@`oTrOph{nXLlMZq=7znVWA2oV&$ZSjW?F|h7ziq5jS#e}ezd(V) z{M(JTeF@SBrcbxn{QE=WZYK^04VRD=846z*9&b9ovtVvpnl(eT%D#{N!SzC3^S3#* f<|u1MCr7h0-;i__`(soEw28sf)z4*}Q$iB}%FaDT literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__progress_secondary_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__progress_secondary_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..40d0d1645cbf05e30bf092ace45403281da7f318 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^96&6^!3HF|1ZAax6icy_X9x!n)NrJ90QsB+9+AZi z4BVX{%xHe{^je@`oTrOph{nXLlMZq=7znVWA2oV&$ZSjW?F|h7ziq5jS#e}ezd(V) z{M(JTeF@SBrcbxn{QE=WZYK^04VRD=846z*9&b9ovtVvpnl(eT%D#{N!SzC3^S3#* f<|u1MCr7h0-;i__`(soEw28sf)z4*}Q$iB}%FaDT literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_48_inner_holo.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_48_inner_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..c8358e9cefce502030416e05dc8faff139b886b2 GIT binary patch literal 2081 zcmV++2;TRJP)YIdx5%v}IY-E={))x>B}kD^;1aO=v<01PBB|;(|LQ1lm?k zLWq;Nn-CY=ae0(~!^>I`t6s zs-B%JpquWw-vVT&b%#DKYKZiAR|9AYVtSC>+D1~E4^t2*_YE}4C7t2scS_b&i9ji7 zBYSvMwdlT0Go+O!I1;=rq$n|BisnJx=53v0;@hqm(7l)*=4rJMo!clNrP~Z@m{E-} z^JZ{ZNHx@{flX?mQSo``X|C|5u79fpM_&?X60Kt|A5rbxJ7+XZpRQ<_6xsZ!_#wo! zj#h1_U5!M-Io2>ob>UEYg+LRijsxnVI$Sub8=TigMynU~iXTIjns`*ZXjCM8l?je< z^3e1OfW}cB&*(9#LY#4(p+|S(CFYo)RH;RK=~N=zD5YZ@e|b@)#etF>)Z-yez@UzD zxn@bF&zGN~8oIPk4dfy-rEX5Ww8$EZ0F70%U;9F1W%-Z($&Ga-Maup1vncKQ7_DKl zn9!@7d$FjFqs1PKM)U|Dr6$Db)oTnV%fNxx{Okxr+DM%Qs^$R=K0p5VBBLXP|Go*uWAqrP!s#9EjG3Y5H)_%&0w$xIP8)2<gS?toB)4w_5VP~5v52jeNf?a@l%z&Ft# z7nB8|dUgD~fFBhAa+9}!Fnz66uJJUZMq$&Z-=x+YQJfJpw%hO;S zbE}u#&MHNeP>Upl#AP)>l0hdeKfNO4(#tQm-Akeu&02@RbFR7XY>6_k1%f(YAT(#fsAW zCKBlg4QBOIpq?mn>zJh1X=9x9hp4F}kQ(@481j?!sz3o)0BA?xOCB;{@vwLHR_qA* zZA`n>5_V~?==zrnj46C`9p$WNjB&zGc+-W7;QUT(*KSn_p>ds2!NyfVppL*7{NFHR zx3J%}=U0sLd(^D`)P?PxcXaJb1;-WXet3d^dmIcA@AOk%p(p(THF8j!=km|#V)bYd zpicX$PljfTc@O)})|@FD=Z~mC2i2imPj;N6y7k2(V~h2N*p=p#-z6}HxcB*hYkSJV z`IFSdb9yY-P}dA6b@>ZL?=z9&3we?^d^OD4aqs1Mx13&f#Qiy{cDn?wohTPSPjL-WpW1m}O&Ju5YPHyotYlm=9`GcY zrwYvY8;-f&ZSM33oCpsge2-Ip%afm3V!sl6q6gM{kN3J3%|Xrhwg)`uVUIiGY!FzE zIO3Qa-0aQX;)a}NjB&uQ|K;9KmvHqg(MeCoc*sw<&DEj$2|GyBp7MmJgBi=!jyvfZ z$6Ymtf^mwAKHp@Hd-~&L-Nsi~>l_hPjymE9wjDU*%(E+7 za!uA`P2O+vKSpg~;?JJlUH||9C3HntbYx+4WjbSWWnpw>05UK!F)c7SEiyAyF*Z6g zGdeOeEigAaFfi_TCsF_a03~!qSaf7zbY(hiZ)9m^c>ppnF)=MLI4v?WR53O>Gc!6e zGc7PTIxsMwC7)_* literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_48_outer_holo.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_48_outer_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..f62f74bb38e8818fd970b7ec1f7862e543cc9d07 GIT binary patch literal 1811 zcmV+u2kiKXP)Q(x@RlU0R z*6*F+o^#JDHf2*b#j2Gf_PMBSbuGRn) zDJUkGcinCw!4`)d@_D~EMJnC5dvGXBz z^GjW6Gg4BPB{MBwxqQWN<0fP#?6J=Sj@WNJ!AH@8Kl`>9L$xnJF(@mqT0WPnt1qF1 z=Fx+;deGw@bGK5OQ+L*P{Upq+6DX1yGQbK>T~%EkI?XGa@}$o>ppa%>^8?Sie*2l7 zfHK3%D>%7|N++0Avr7*8vd@}G^Jo0fcfyUHfnsLZ&jU?a6Rn7I58e-AIzUHA66jy!AvGyBgcAIA_8&ya%2-o5w@+x^Frq z7x5uqjDu?ciVPZ-34&-=b^T>U$i3owu8N|PCmm@W9a)>Z@0e@OLVt>;Q1iTBsK`Y- zJ#Dm0pva)1q@Sv}wFUZZ<(6Yki*muoJ=kjDtmVDYq#tH=k$<|@5vTpkf+%-~CzQJb zDj5=FGBxvks&SW*YJTnCqA2*7ySf013>jGQpITpe;Jn|eigLRhZQhTXHIx~a$pm$C z{nZbIsz13R7nL1tHd-@KF*$Um(og?cC1;!x<)VYeI|B_UB@HdgHw5UWlj@?}cDp+O zMal|-j9w2i9i`?Cb8^v;J)JZZ3@FG_LfsGv{MVdZZorO4w{8Y134%<%0TH$=m)%OW z_@u(SziK>nET6ihG`KOcU?%zJh~m2+ycN)r5;qQq+h%%Xy;f)Ejn0a3UnsuS^+vZqWP#0th z#x}@k!|oI0qU+rNRV>J4GUFR$v|a9z%jMoM-5IE6CMAy{ll?bZ%p5f-7cDwzt|L%b z^86*Y-fp1pM3X+OAj(~JqWJ*PYCpbZCY5MgZSAj)V(>vz$zUg(ZywPKsOqx1Or~s4 ztCPVxWShrQgx&N<^IZW2u9-7hOofKj5BzxpoW= zdO}GqH|+&2+j}j6LUh@cv}2FCzaLvtWZ?^TwHb8;v&L-C`+P^-e$fT!yBz5Da{oL7hj@h;h3%R$P7X_J;dmT2? z8&V8*_<~22M7c%3b3D}BjlNwczv7fZds1ebGU8;svesTmESU0X4=BlHYF_eOt8iaY zL0I~yq8N;M$m4dU73%)xM=srNe&@#dxWo1;CZw8+{^f0pouFbc zV#*`lZz%0)HGlQf<_c&{Ktx7;z}?CzodgvZopY&OUp7)Q;eaFVO?})iuy4L9j zyLs2K^qSz1EvYP7>Ws{|~_-QddT;IiL%she&}m+lY?b~t3u zik_CPT+O0+6?K`iA!CLOr{nnY$OW(ay)*42s|TRe$lC9I+YPJ$b-IG8H~q!myML>= zroa>ruDyrb zV`&jHgSNQCgmI$=lu=hRYuXKOo3_xM&-4jsmA;l<3@^Ph&(-?zXM#=Hludb0$^QZH zs3&Vcm*{c;001R)MObuXVRU6WV{&C-bY%cCFflPLFgPtTGgL7)Ix{mmGBYhOH##sd z?sz9s0000bbVXQnWMOn=I&E)cX=Zr$HaasiIx;gYFgH3dFrOu# z?f?J)8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?002ovPDHLkV1l}_ BPJaLZ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_default_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_default_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..eb28ff9a5516c15667fa8fafbc22d608d1f77a06 GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^%0O(y!3HF+1t+BgDVAa<&kznEsNqQI0P;BtJR*x3 z7`Qt@n9=;?>9s(?o1QL?ArY-_Z*Jr|WFXM+FkX}IYI~tj_}8!bFJ^a4j((ibs-&WN zGIsXEx)Wtn`lnsEAmpSFI79ccn9RKAsn<`<tk;t}o>yjV{qp%WbL{dki&M)*dw`x~@O1TaS?83{1OTcY Bcf0@q literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_default_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_default_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d281adb553af892f758407b846bf31810b9d776b GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^%0O(y!3HF+1t+BgDVAa<&kznEsNqQI0P;BtJR*x3 z7`Qt@n9=;?>9s(?Tb?eCArY-_Z*Jr|WFXM+FkX}IYP%rckLbO*zpbz{y7bYSIrPClD)2Hc3qcaC*%7oYhKR%+5DyWbJ~oU4#{OKNlluqE0VJm zR?Ud&kaA;Q)O4{aB-unUR3g{I@EB82%f_aZWF5r`AFqi`v@HN~5*v&Qo>cRA$gv99 zHaapFv&*%1#4~?bwda`9)~}vNKHF@K`t|cGZ}Xb{RR4x!PC{xWt~$(69DLj BcXj{( literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_disabled_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_disabled_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..b2985860907ac324b509b76731e8ef9e01bcef39 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^%0O(y!3HF+1t+BgDVAa<&kznEsNqQI0P;BtJR*x3 z7`Qt@n9=;?>9s(?E1oWnArY-_Z#r@{8;G<#%>2r*^uo7)-)HXL@_O1Ny%Iq#{YfeF z(mvLmIJH1t&`=}DOJmBWhqv04yB582t6X;JXNKdwfEg3JZl{PztUeIIdQ8h8YDr!LqoiBzejNy&kDcJs%rP689)vmGI{X_;^jtl6gm^<0^v)GdFRa+YOJx z7F>vKtz@b&Rr+MtRJ_Cdn)*bIu9V&{pI@`*?C`z(Yf|Vzp#K;=UHx3vIVCg!08ssU A5dZ)H literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_disabled_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_disabled_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..4215396dd4e51fea9239323d313b72fde0ba86d6 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^%0O(y!3HF+1t+BgDVAa<&kznEsNqQI0P;BtJR*x3 z7`Qt@n9=;?>9s(?E1oWnArY-_Z#r@{8;G<#%>2r*^ujlV;{V25Ur(E)S0c!zKPhEi z+Q+&RrxwTy8fpZ2X-wJl@K&30*P>T$mCG*u%y7IHFk@oZ?G!PI)dwP2k7*f%?N0KT z=P~Pe`QZt37-AUDv?qm~sFi(Y>bsQr3FCw4S+92))lbOG-Y30G>`_~0 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_focused_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_focused_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..a280eabf59b5eb69fa2a84280402b63d5e1bb8f0 GIT binary patch literal 524 zcmeAS@N?(olHy`uVBq!ia0vp^%0O(y!3HF+1t+BgDVAa<&kznEsNqQI0P;BtJR*x3 z7`Qt@n9=;?>9q_DjO#pI977^n-`=$MKI|ZI{A2#4tV=npb9cQAXy4X!_bwM}{Q4K( z1sl8bnxc=22fURRmTQmkS`l-5N%{4LzmAq3{WkJ?oSyR(lyW*m>cW(jDj1r7drC_% z+Ahf4U7%?EfVHA#U$%eE)HUhV{* zGqMRv58QeS1t+_UJh{!Nwtjop`q`x&KXzE!mvvsrOU)9V|3+xFYu0w7ttSN+pN66C zV4oMA@AG&3wK%+`$wcPZ<#Ux2T-c9-*heq_yZUm|{V%D1UlxhJm0zYfUETgVr;hpA zt-Fj|Jsx=O$lYh^6WL+vBibSA6WURD#!g`Ij9SHG25Jg!2FnzxlYN}N9h%V=a_mM! z$e|leQ;yweap>IrEpmd};fhV2Zrn5uN|m^)*v*dyQIi{G2ej@g`j zy#1roz10ezmNeBYwbLI^0W9{MT&2dcxOa)`zb@?O?Gu2 z*S413TzCHUdV}>`f)DaiKP_4HkL&Y-WAl>F%y}d1AGY65et#XKh5dqWo7Y|}14bu< Mr>mdKI;Vst0N8Ej(f|Me literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_focused_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f8d619b4d47ab5b104d6b1042c27fb16a3beca47 GIT binary patch literal 523 zcmV+m0`&cfP)C3<00004b3#c}2nYxW zdK`GU$CA-E+tg1FUj3CV1Ez}l7r{NB_YWZ zgb+-Kh;2qAgunr)owSNT9jE|#(}iQ{0=K~F)j_f4%AIwfW*LI4SCjSena$3zhl@?`-N)f>fC&00iU>|7tSL}YGdG832Z z7Ry93w=$W@5~IozqskJa$`YfBUCf~8@-tLEe(Yg7ZJ&$d5^vAJVlkbz&)H#>=1rCU z=lI*@D9QucAy4<)W_$YF0~q6}sI5vC!>ie*fX@E1>5KTAKqegRE>ywO`Fw(I}^ N002ovPDHLkV1grX;W+>R literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_pressed_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__spinner_ab_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..955a2f34061ae8ac853050da355f89409fa0a784 GIT binary patch literal 464 zcmV;>0WbcEP)C3<00004b3#c}2nYxW zd0`Pl=$b2!s#>@tS z$Y#JV#)+K6SU+tW#+_RkXYzpRi_e9eTN!5>F{(z4su81V#Hi{OLkTB`etUYuM1<4( zFh4)_STHCiBAh-(+2ze7j|0M$*V@)G5^^0JhFHh^fzV_7Tf?-4Si|T*tYCB@#xY$W zMloF>#xN!zMlhxzoiQdMoiL^$+87%UEsQNlYm7|@05m?}iO1-}bYl(D3Ue3c7gw}A zD?zp;CtICi-;5NDtN#ybjCs$)&yQmArGt<$4!&l7(HXO5p7J23`oDJvMC3<00004b3#c}2nYxW zdPRE!~6H3V|7LaeL+kwzxO}{DvWjdA^uWhB*Ox4MVbeVt$Spwgkx< z!VkuXjKgSuY)h6Hw=%|LL;AyKLdLC(F?ASO9Y$7%k=0>jHH%rr7Kwb5&>UvDaCo}j z=j+357qeVAJX{{~a_138(!I8ROa__X7ee%7enXtUzOE0mAw(ah0z?m{B1Ao=21G5U zCPW=Z0YnW(5u`pwA*3EgF{C<11Ed;86J&FYMhHOp8-||_vny?o%`ne52fWVraQiWC zKdv-wupMF9(yd;3%<<_PN8|TOh%C!a80|#$F{54SO;q)d{~Z)(nS?QFWpYf|szS`q zFpt2hCCEz5&mZk`@i_(t4MLWruXxh=CcXUn1{k8P{&E{)e*gdg07*qoM6N<$f@(ay AcmMzZ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__tab_selected_focused_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__tab_selected_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..673e3bf10d60cc54b6dfef2fcda24575073adf61 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1i!3HFsuehcLq*#ibJVQ8upoSx*1IXtr@Q5sC zVBqcqVMgJWBc+iXw=G=Ra=)z4*}Q$iB}l;b6k literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__tab_selected_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__tab_selected_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d57df98b501944b4ba63623766c396b5bccc29ee GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1i!3HFsuehcLq*#ibJVQ8upoSx*1IXtr@Q5sC zVBqcqVMg}h~fd(*my85}Sb4q9e0H>EG$N&HU literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__tab_unselected_pressed_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-hdpi/abs__tab_unselected_pressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..aadc6f87b21d7d5139f3bfe860f4c289f75d241f GIT binary patch literal 145 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_bottom_solid_dark_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_bottom_solid_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..b2293670b7fd0f1d20efadcb85df764eaf8f996c GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%zMd|QAs)xyUNz)8;K0FpacBG8 z{r_dveK(bI?AYL#c;KCB(}&!U`A=evwJLPDoBk{4*AEnmdKI;Vst0H2gA*Z=?k literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_bottom_solid_light_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_bottom_solid_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..0706c8af658bde9602634950dfe3d5fa5886163f GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%zMd|QAs)xyUfsxfz<`JK;_Z5A z-Y@ApO*&r-OgQM+#9X>wkYiu(tId138dhyGKCm}H$eLN@qysZ=3D*)nlM7YC@0xyy hn}nCMmBhQI$CPR`ipOiMnG7_T!PC{xWt~$(698&aE5rZ* literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_bottom_transparent_dark_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_bottom_transparent_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d814d02d31183b8f00f475a05c124004983d9eff GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%PM$7~As)w*fBgS%&%9EC|%_%783w8jlt8^&t;ucLK6TeKPwmj literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_bottom_transparent_light_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_bottom_transparent_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..b139c8e49168e4404df0a46b30a4b30e90c1ccff GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%PM$7~As)w*fBgS%&%9ECY>s_{MVWOZ(=mjBT1_sGr W&p6(H%v1uJ#^CAd=d#Wzp$P!PC@9VV literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_share_pack_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_share_pack_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4ba34ecd9f8ab8c557924fafeae6a89307bd7c GIT binary patch literal 2851 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 BM!Nt2 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_share_pack_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_share_pack_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..8f10bd5222239e82e49c5120888fc9a07a324b42 GIT binary patch literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|M^6{W5R22vKmPx>XSQNv;&5z| z@wwFK#IyY<~E UNZ9H+7ibuRr>mdKI;Vst0LZr`*8l(j literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_solid_dark_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_solid_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..743d00b6cd7e446c7badca9dd11d1579404569cc GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%KAtX)As)xyUQ!e~V8Fq8aW6aH z`M>?!MSK0VJ5DH+1)MRKpSquM-S5BdOIN+&sn~jE%jQNlsf-1UY_}X6mMgq#dKVMx ha^q%Y#@a>3az|3`-r6;1y%^A322WQ%mvv4FO#tkfF|q&v literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_solid_light_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_solid_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..17c1fb921f9b7b46aaeefe7afb8302874fb0abd1 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%KAtX)As)xyURua|z<`JK;_Z5y z;?s*`91mY+Vs~LvSAIRQ|I~ek>wo_(4hk(}+Y^;`>!t%UugL`m=C=w5f(6PQ%h%~C hy?JA^CG4Uk|5eN5b2qlEYyz6g;OXk;vd$@?2>`YpFM0p~ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_solid_shadow_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_solid_shadow_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..ddfc8e3d5c4131f2460254f183938477fc5a0679 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rhed`}n05R21qr&#kfCPg`@kT=WR_nY-)l@u)2m z9YjR(TNrC5J8zlf@MOx-MX#^q?zd~tP;1Ok`WbQLQ#YGy{=Yfu7pEGW;JmVaai5Cr S@!LSF89ZJ6T-G@yGywoUXh2*5 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_stacked_solid_dark_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_stacked_solid_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..007a4b239244212339b817f8de9474a4dc34fde0 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%zMd|QAs)xyURua|z<`JK;_L&H z*gyPBj&nSGnTg$nOT)YjBQU;+O3-o%)BNS9GKrK90(RDcPwA0 ir}XBH&6co>lKfV`a~Jh`>I4G~X7F_Nb6Mw<&;$VSc`p(G literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_stacked_solid_light_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_stacked_solid_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..ad6e1a4d9f3c81e20676f979a53cea2084ce903d GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%KAtX)As)xyUQ!e~V8Fq8aqs`F z7bNtyi1zwxcbrft3piseKXpIjy5E1@m#%ulQ?d2Tmd%Z9QW*;x*={*DELV8f^e!gW h<;Km*jJ1o5{)rFFF7K literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_stacked_transparent_dark_holo.9.png b/android-libraries/ActionBarSherlock/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/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_stacked_transparent_light_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ab_stacked_transparent_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..19b50abcb536602cf2cd36d5a19805464988bd20 GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%PM$7~As)w*fBgS%&%9ECmdKI;Vst03^XH%m4rY literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__btn_cab_done_default_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__btn_cab_done_default_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..5461b9c00fd3fc513aa4465682e70e87cca36a6d GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^EI_Ql!3HEv&)kdyQaYY4jv*T7lQS|h5*V8PD@dJb zGfWV2j%0YY@&Et-(u-Ft=sZxsVYp-gbGr;f^5z}?TUWk$0o2Ff>FVdQ&MBb@07WJt A3jhEB literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__btn_cab_done_default_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__btn_cab_done_default_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..5dc6f804aea8ca344275ac6eb497b6bfe0f117f3 GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^EI_Ql!3HEv&)kdyQd*uajv*T7lQS|h5*V8PD@dJb xGfWV2j%0Xds4&4P&{4SYp+J&{BRiiZ!)425)ejdW>;mdy@O1TaS?83{1ORBM8sz{0 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__btn_cab_done_focused_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__btn_cab_done_focused_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..a70b53c59af769e3c98973ad9718670ce27259ff GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^EI_Ql!3HEv&)kdyQYM}*jv*T7lYjjGZ_h07hy7xL zS%<;BUsuG{45zRSgeB^>bP0l+XkK D`1l&; literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__btn_cab_done_pressed_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__btn_cab_done_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..85d7aadd4dfb619883f68f1cc63e629698b5dab5 GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^EI_Ql!3HEv&)kdyQbwLGjv*T7lQS|h5*V8PD@dJT z6Fe3@|6GeFPb#ATqtK84|Mweqan0i3X%}$jvMQLwz#trO`SaWQ^{znO44$rjF6*2U FngE5o9^U`} literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__btn_cab_done_pressed_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__btn_cab_done_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b01e012f895bfe2c4241e1d48771fc372b35cb GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^EI_Ql!3HEv&)kdyQU;zbjv*T7lQS|h5*V8PD@dJT z6Fe3@|6GeFPb#ATqY%TTAPubyB?B2J9?cgAJee4pt{u!zH{AaisF%Uh)z4*}Q$iB} D0X-aq literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__cab_background_bottom_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__cab_background_bottom_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d8f1c8bd54f4f091e79389603095c99cf825cb6c GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%Zk{fVAs)w*Gcqy~4zxBtu(zuW zGMHg-@7EW5UBeRx4_{GYv)%pQnG{Mujhr&UNqv-pZ`Il{xB Xs2c0@Tz2whppguou6{1-oD!Md5lfPH{+~ zs&ZK!$GJ#`+OXn)bEl7O^s7vMLr%~_eO6@BP#xDsWzJIxbKZ~=QHwoEqiCN;6|k~9&?6VGu8wVeg}kjlqBUkXd|o%rApJ7Xx?SmelE6^*`N?mP%?P7H@yM z@176Te{31>^aeVqCP$2D`iM8b&G*loT1#z02OAN3)TGUD#xbYXQgqexFre>@9yw_< zoN>t9>xRrEIA?_IE1YrUo=P<2hNadJXB=4rbb%a&IXb5^sO2P4AoU2`8OJ_N3+RuU z?3bPMlGWJT{|mv5xDeck3qc!^Tkv+yM^@uWqQKxnw{tZ6G_7EN(=@mR#5tHjEptZL zT?o!N^e&F18P*7EfGlP>S;He0o_$19Sz!q7up>N&hdzT z+KgUQr1}UkLQL4KR;yolWSqh_YPX?lMz7!1&pz~~fd%z~_Z{#V_yT+aKE`}mgO%s( z*Zy2en({y`_&;C`{0061zkwyNiuqzpAev$qeWYoU3d{J#NzC8IACaX$H=;%xu?3!~ z#a`2j|4di>P9KpnLiZ0Fl^vDJdHW{hJgNDYHbk!VsHwq51hhtobGl;RmY>GHkg{)E zesWUhFRGl6)Eh$fMU__)%@X*lTj%8LuWk+fh;ux9b*`$4|A#h$uKO0E`Tzg`07*qo IM6N<$f=1Pyg8%>k literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__dialog_full_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__dialog_full_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f18050ea589eaa31233bc08e4f8a4e361747bc94 GIT binary patch literal 1003 zcmV%vbFc60S)hq5aquQtN zO>~Q-PMt}eDy?tfo9G5^U3x~HVu{=o-l^#5`3AXbFq#7CZ= zx~R)Z%-PngELWXE=jG+4wH{HY%RHtL$z+_dj#xsD@Y&isDVlJd1j7%A; z{S3ob2!NCVl}{yrl8B^V**9f-6IC==^T()w$-W%VAY54pg(^F>UjitZxrB-eCn8Lf zB*stQ-rl}17K`6RG#lbS(&{_eIc1V`#=6_}di{5~T>e4x!ZPZXM|a{QRmt`XV*pbC z)5T)(D?{j2cRHWXf1>hHw<=z1GC@s9Ro2lk0Wc$?r`}K3Qx5<^GzKt(+iwt@SwZ#Y z1K3Z>bSEt!roEr8rydA`NJoVD>nPSV+2(05UE>4T005_GAOuI89vS#iG4B18N9tN{ z^Z@tNBTj+gCOB47*w+ z+2Hb~>!f2H1$Hq!D=_Sb+i%D|qnZ-1^bbIwX<}v&QHjdz0&e>kOOQ$(hHgzP5DjJz z0f>y6M3En>w55Wi4nf3bKUf4p>o0~xvY>6}4YBjHqH^B)8ba{Lja`ks{5OurR;$m< ZjQ=n8%sUGgc=rGR002ovPDHLkV1nUn!$<%C literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_ab_back_holo_dark.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_ab_back_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..df2d3d158e201f4b5bc8f478bfe194c819c762d1 GIT binary patch literal 466 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6n3BBRT^Rni_n+Ah2>S z4={E+nQaFWEGuwK2hw1@3^B*n9tLu5dAc};Xq+#-xYx_sQH13|{`71Pj-*6Uoi`#n zE(U8IKgsQz<^Rb4R70ym$22iPZttV^?_#_6n&0#=x|;ZH&dfx!jETDzs(0U>)g_uQmUhGGNWo+VotE}_5b3Zj`hnf_E}Q2 zkoV^c&!VIWreR+T-g@7!2<2C~cxLXYh02~hOPyXw&7V2OC7#SEE>Kd5q8W@Hc8e16}SQ(iDxmE@S#`ha8qiD#@ zPsvQH#I3=p$s!-9K@wy`aDG}zd16s2gJVj5QmTSyZen_BP-2>S z4={E+nQaFWEGuwK2hw1@3^B*n9tLvudAc};Xq?Zzc+iX4P{i%w`)y*!lC}nMxxP5m z`ipDd|3l#c1q-`17wzs7jap-@cWTC&8}(D4%&X3GaM#!SkY4?Tswdc+PM~^5?gXjDEJr|A(9^w&s1cyzt=Kg=58+)D;SHpB%sRSHFHUToUy>RV`*x3 zp=*`d7Z@F1xvAFw#q#fW_g_%cHx(CZDFFIJwZt`|BqgyV)hf9t6-Y4{85kPs8kp-E z7={=cTNxTy8JPmPRt5&f_Zu#wXvob^$xN%nt--0uA|I$h5@bVgep*R+Vo@rCV@iHf fs)A>3VtQ&&YGO)d;mK4RpdtoOS3j3^P6 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_cab_done_holo_dark.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_cab_done_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a17b6a78920848c37a67246a76749b4cc1425a15 GIT binary patch literal 566 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8!2v z2N=7Z%(epwmK8Xr18D^?ZvQoBE&~Ijou`Xqh{y4_R~-EgIfxwlm><>K$vu5h!wc4! z9iP>XtrZVs65@3e-rKIN%Hh(x{ewWxt1j(s|L*kJ zSoUnickXv5=i7?TNH`^EJfpg4#&4;Y0qR0+drTg2JXGfUq3}Rr;{P9f_n*&gD7KkW z&D4IqLivGGRq&kmAH6(eA0`F~7S8rex88HAVS=03cY~80?cpzkFa4S5A6;t}xJ7Q# z9-saRVPfVT##U33AAO3A+Ypl|_94?@cK)tT4*8AF;-^j1iVm!a-M-<=iX&Itr@TnW zJpXO;4EOj9!Ar}#BHVL6_dHGGELXBQqN>Q8)gj~`k@s=>rw|ur?|x;upO5s^{asBY zKb@S=&SWDRsQzHyR;N3i0@8Cfnf~0l`P3PA4VeH(Ut{H!I{}l<<aB zB5gMTgH*M|HKHUXu_VC#5QQ<|d}62BjvZR2H60 RwE-$(@O1TaS?83{1OW6u*u?+< literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_cab_done_holo_light.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_cab_done_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..b28b3b54f4c81d482f797f31936cbd4013c093b5 GIT binary patch literal 552 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8!2v z2N=7Z%(epwmK8Xr18D^?ZvQoBE&~Ijfv1aOh{y4_S9ba-JBqkHTrZXEaifjpNYW7o zp-Ubd&IgJo2<&v8$G35^;Tskk#t2~^NlC?&yDV(Ca&uB1b9CBkO)cqrw|D8TKToRF zI(8j)Hm_*m)V}Gu(AmZ?>+lr!|Ew$fc6F-Mb^2PC^>5kCb?-yw@xD*CTf6%^rv51n zu|M&RMY8TuK!x`HjjgjxbG!Ig&nSGQ(EnVUqiU&qoaH15q1mNr`vuRlFlL+adKX`+ zs(G(GZ+*gGNpURMpV)N-wqLW)~-JKU!1N^uTZarp(au zRVr*pp2gnEY&GXI)J=?c?L+7E14!w(i?Kf2&j6te3n$Zi&Cq1Pnyg64!{5l*E!$ ztK_0oAjM#0U}&goV4-VZ9%5)_Wng4wYz$;u85o58|F#)LLvDUbW?ChR22(3jb0C6f zurx;QVw%w1wevX{81fiqT9$oZHH(4a215zM2{s3I28IOo7eJ#J d>KPlRN5&o6d@ywr|9haR44$rjF6*2UngC}HDAND{ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_menu_share_holo_dark.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_menu_share_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..6bf21e307ed392bf00fe80b162a6ce9115e62c84 GIT binary patch literal 332 zcmV-S0ki&zP)h$s=>Sb2o({EW84x$2Sq@4Qvb1mj$j~;VIQBr2GX>%-APxay9!he7 z8W7h*gD?q**@0LXh%12j6cFzN;xHg)rA0Yl3bh0|IM)O5QD`2|BGz~0I$#-|1SL$5 zlJGbV2jtPKD8?58g7k0zp)`;V#9XwljI@z*K`Om-0V(CcdbDyt4~XM{*o)XuqGd@4 zDx{8=fp<=lEG6&%R0000-rS^s>8d@5ni2hppU0iV;YH8gwNa0%) z{Cz&}Jx|SbT`f+uL?986Pnf0|l@f5k0jz*^zeXXD13Pe$Xi*7R9^s5FmB7$P;6x!% z=kMH0V6IZ20v0@I38qpwTN6bU0_>(U;T<=GYX-1E8)QG}f-;!!681nE=wJ-aU=KPV z^-i_I3K%>@EawIsd5_!T)2R?x1}rE&N|%HcIQa;SqE5+gRv=Fy@M;YVKt`niqbhVk zpSlae%z=$G2Wp@TnqrmWnuKgf72^IDIDhdq{E7X5-;T%%62M`q*b}mOv3|8DyoG;R z;O#l^2#-VHDcnmy=|6xRPAT9SP9@+QP9YE&4z7Z?SGPkvc&h*a002ovPDHLkV1j;z BjTis` literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_activated_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_activated_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf8e03623c94b68d31963ffe7e59c72c3dcc059 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqEX7WqAsj$Z!;#Vf4nJ zaCd?*qxs3xYk`86o-U3d5>t~CW>mH@a{g&g;s7!l1y4Byva-KaJLVIiI)OpBYodjS ofJx&-C1HsL_x|*Yp0_#7zz}{&aC*>dO_0?Lp00i_>zopr00f~Zw*UYD literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_divider_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_divider_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..986ab0b9746301f2dd9401829da09e00995621b3 GIT binary patch literal 78 zcmeAS@N?(olHy`uVBq!ia0vp^%plCc1|-8Yw(bW~qMj~}Asp9}6B-)+^BAxRtXRm= az`@Yw&#rLZUbzUUfWgz%&t;ucLK6T(%Mo}0 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_divider_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_divider_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..0279e17a123f8cbb3c7e3a9ce5c5af8e693b6977 GIT binary patch literal 76 zcmeAS@N?(olHy`uVBq!ia0vp^%plCc1|-8Yw(bW~!k#XUAsp9}6B-)+^LX%RmN2q0 Ycy4A9FVZ~13zTN?boFyt=akR{01+Y(GXMYp literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_focused_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..7c0599e3a6fcce1d9b22e47bfdb63afb1d3d9c02 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqEX7WqAsj$Z!;#Vf4nJ zaCd?*qxs3xYk`6eo-U3d5>t~6?){p=$oZ!|i46oEul1LdSjZF4rt@IU_AhE`IYK8I wIB$ByaB<8!;4zVtCm{dd@wVRWcBu>u-xEd5&snyt0Gh?%>FVdQ&MBb@09FhvcK`qY literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_longpressed_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_longpressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf8e03623c94b68d31963ffe7e59c72c3dcc059 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqEX7WqAsj$Z!;#Vf4nJ zaCd?*qxs3xYk`86o-U3d5>t~CW>mH@a{g&g;s7!l1y4Byva-KaJLVIiI)OpBYodjS ofJx&-C1HsL_x|*Yp0_#7zz}{&aC*>dO_0?Lp00i_>zopr00f~Zw*UYD literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_pressed_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6e77525d2dbbc1673145d60d775602c85264330d GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqEX7WqAsj$Z!;#Vf4nJ zaCd?*qxs3xYk`6eo-U3d5>t~6?){p=$oZ!|i46oEul1LdSlBa@C*nY4{!0_J9HA2p woHspUxHx7V@R-QS6OjM!cw6swyHo~-e~lvMp^1B@1I=RaboFyt=akR{0Ay(_r~m)} literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_pressed_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6e77525d2dbbc1673145d60d775602c85264330d GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqEX7WqAsj$Z!;#Vf4nJ zaCd?*qxs3xYk`6eo-U3d5>t~6?){p=$oZ!|i46oEul1LdSlBa@C*nY4{!0_J9HA2p woHspUxHx7V@R-QS6OjM!cw6swyHo~-e~lvMp^1B@1I=RaboFyt=akR{0Ay(_r~m)} literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_selector_disabled_holo_dark.9.png b/android-libraries/ActionBarSherlock/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/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__list_selector_disabled_holo_light.9.png b/android-libraries/ActionBarSherlock/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/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__menu_dropdown_panel_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__menu_dropdown_panel_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..460ec46eb0786706610e21ac9097de489cedfc33 GIT binary patch literal 651 zcmV;60(AX}P)!1&^00004b3#c}2nYxW zdZ_-Wf*5)VugS&t+23J}V*z%DOHb#W|`Z#l>;cJ*L_P;jGoKD8nX4Z`xH*Q>s zTvTl`b;%gqS1znaOc|u@tz3t7=|UK<9Hr>BJ|D1%4AOYzE>c>YASL1(e+Y^`_iG?7 z1UL~EK(|`0e*W#*UXt~C{TfUweyI5sSBLVgO?u)p&e9+4(C=i^T1GuQJ|j^LdEE0 zfZFjzm@Nd117_`XxKDqSoJXh_wG-}tW_yHE!!B|TSvyio<6k9eTgoG9O0aTdZJ81x zmbul8Z%fpkT#Wc{ND1L@No&VX#iPVF7hx`c0JdkE;3e2%ZBQYi%Oe#dj=&z+_I>|? zOJi$dCv)FoZJG3n&>Qp|;vSo*JOkf=A5uR{`;uV-QwsX>Ho!a31HXV*se5TxFFA=4 zo=3!%#5;D2+DO|6R;c8b^-B2j{s4XhZw!t1m&l3O!HmBwHn=!)kb6yF?kI1MVX*Vu z<6hz)DH{^YBPWDzO$|0isCW3@P>L98oO;C$E5=4jGEPjLS?XZ=13IvJLaC?O;nLn? z=e?6_T^b`&$N3sK+o1N3^-DyB&=+_N>geY)_rHdJwBJ%s{^4(_WBZ5MLQM53U4RfX laXn(LVYMe-Njr@(d;;;gyUim^Wn%yU002ovPDHLkV1m`SB-{W1 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__menu_dropdown_panel_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__menu_dropdown_panel_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..e84adf2d41604323cdad8b15e7034b6137e02425 GIT binary patch literal 720 zcmV;>0x$iEP)!1&^00004b3#c}2nYxW zd09!jyup9SJyH%;E_KZI5Ed^B*iNJmRSj zBG=jNc2B+cMg+dzb=~X>SwfDye{PH^oqQ4$1^~*55|NVv2=ckIR8XoEqC|oOgc2g; zEPA&fNb-^8#Mr1#v(VQn5UdVR@QAWs>EP1 zTHM9Zaim5tPqqk+y4R~ii**RWgPIHWkr2Q-rv~$oD_;OFg!*vQOJ?oR%RhjSvm}}N zU}~@)A@q_TOphE%y@J$^Y;2GXG*T-_?U?-%UNYKi5n>WcgjmBq)+~pV5UB*Fc4!_E zr<_OV^tE=(@|l_%K9#lBPBbeU!!Q72CYl{ozqWE(s>}kg*Xy-fB`%jskbX;(+jyxw zA`k(lb8|^3?6_RfL_?Is~gyeh`O%xX?U(f4nJ zaCd?*qxs3xYk`99o-U3d5>wYsbmTgqz{8?`Dg4L(`abqnuZs;wTVv8ZBg|GX^f4xE z5ck=nld$UVv7H|oR+P30etdkz&;0SSW2^3}yn7y4rozh{Dy3k((DE(NNCr<=KbLh* G2~7afj5MhL literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__progress_bg_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__progress_bg_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..4bb22f0e10e621ef31f16100b3f682a09565c65d GIT binary patch literal 159 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 RY6Dcn;OXk;vd$@?2>^cl_{IPL literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__spinner_ab_default_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__spinner_ab_default_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..29aff4d43f71a025f464587ead52aff2ecae6a58 GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^59s(?1)eUBAs(G?r*GssWFX)$e`(35Y8e@;SI4XCdOETn3puLX+U@Np z`{}{9$F@!!Tb4}GnD8m&^|D{1rP|_tuSV&+Z=MCoD&l+{? zpGeMToA<;$LF?@fW~rUl3#RU765DB+Fm*PQ+)k?pQ&%&Ye!A+gR)$OeeXHaR#_cxq xcQACD7BHRDw&oXmu9s(?g`O^sAs(G?r*GssWFX)$e`(35d_EZ~i&w|H<&_`ZD(+MedV5zj zu-#_I+lqbxCf!wDY`(!qq|2YPZ`s2sD|KqW({JG~4*WL+Cpx;A`7$XPF&b}JE9dda zdDh0P2cC5-%kKDDBus2)4y)97FmX3?+)izQiL;plcWMSG#q&-%rTF<%+zn>y2h*Mj yizj?!^E*(P`ureMOz-ZiFXWg1cX%y7!FpSm=AYI1UI{?QGI+ZBxvX9s(?*`6+rAs(G?r#o^TG7xZ`zf?Wo$i4qI|8=SuS_>z)W_YPj?%Q>u zIp@ANM{x}Zqe@#*i-Jc_;!9;KcT)!P=e8Z65pgErb%iKSkCNb@A?yTt$n@r z2c`IHF%KKu<@hR|E_CSLV|hUMOZy3b87rAYm)KaVUb9s(?*`6+rAs(G?r#o^TG7xZ`zf?Wo$i2t+|9e$2v=&Zo&G1s6+_&pQ zbIyHljz-QjH&*S{-J;(gu&3N>@$LMyenNedpai4+B)&;SOq0|eu$bkReVyxuhm-Z9>GFCF_99MaBsxVXw=u8GrS3j3^P6KmrqN>Fc^oQq;b>Mt0(a$ z!tgX@A7RK4{kGy^A3#w21maN-UfpV|U0)B)Mu)Zk(%$xiP)OBD#retJ&sicWsshEL!WHUI0Z}S=i2Rqw=-{<_oUlU4$I1(Vt^KG}@Sd2k4!kUV zp9d;G14UN$xn@Z2Tv!X1WCiPlZi?T5Wo`s>dMMw4?2=HB&MqLoAdzh3Gg0e200000 LNkvXXu0mjf#CNP@ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__spinner_ab_focused_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__spinner_ab_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6536ee63329bb47bec2bf2384aa494923cc2773a GIT binary patch literal 424 zcmV;Z0ayNsP)Km%mHHKmbPH_0G1~QE(|Z z3L*$mIy*=P@!u2&!BHHFf;fuc0uio1*2@YRBct9{0AyU2}iGVkcWw7UUPW(q{Hz&m;6;CQrhm;h30w)z2(`W_Vv zws(S3@Pah`KM=_o2%_3&n+}O86bq(Ag>`_N^4m7drC>+{^&N;72|01L0Qm!AONf3s S@;8qF0000Km%VDkFce0=d)+vOWKIG} zhpvGvb*AhYN}o4m@H1o!d4o*tRBGZMkUCTWmkL{wB~SUlAntIEgw4Gc(!&*+NcHqe zdbonr;tjwaz@#r!B?pk5-j_#K1)p#z)*b-3QShBfQxGf+4==MNa*z{HXhG0C1P_4~ zh;-k(7eP#tUz1`!Wij$Dh)MD;xve&Fv5GXEp_kweUysY@i1cm8S?~wm($ky-rf?^L z4cuB_3%3%uz>Nj2a3et6#z@uGqTe`wK1>2-pyo{<@B~f=x)vOqS_S8F z{BbGcPm`Srko*>0TM51dS0?bbgq{a9*ucpHu=A!M^DM~~^Y@aViMI>L4{MrZFUa%^ Q4*&oF07*qoM6N<$f+pdR_W%F@ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__spinner_ab_pressed_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__spinner_ab_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6de0ba8841d25f20f12e14002ecc4c9ec6a7b2f8 GIT binary patch literal 370 zcmV-&0ge8NP)Kmp@CxKpa3{epU;uAYD{w zoy1-2XXsG+d5c4J(@pInLg`pK=_I6J(k2d`5V?BE{Yj@j2pl)OcgK;0qd#7akgCKEJ@PeExDlrpx^Tf8?8gJ#K-Da<_nm z+&*9_w+lGPs|OtA)dC)JfQDKAb-?t#>nbk~ygr<>n4NOeOiNA8R)UE3F)|0PZr-`P z{wS3Lh~%_Rw1t=h$DO2-+|>0Ilo0LghZEP}j*Edw;7F{TKbM3p1iOHI0}cLp61dt? QIsgCw07*qoM6N<$f;wQ9<^TWy literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__tab_selected_focused_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__tab_selected_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..c9972e74bb4fc7416960e238afd47b1ac363e316 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b~!3HEJ|NhSh5-4`^4B-HR8jh3>AfL0qBeIx* zfx8og8O=|gUJDd7^K@|x;h4Gh+(zC520Y9MizoD2>~^~(JZa^V pUoEkkaeSh9w)TUlKa6vZ+qJ0**((%Vy8umK@O1TaS?83{1OR&wE2RJc literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__tab_selected_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__tab_selected_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..587337caf74f9ba3d32ba1c7cc8fb8b0b5ba245b GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b~!3HEJ|NhSh5-4`^4B-HR8jh3>AfL0qBeIx* zfx8og8O=|gUJDeo^mK6y;h4Gh+(zC53JlB#xw8$}k`45e4cLk;e3y7!_%!uv(Z^d6 t0#9x~Qa^f(Id{#0H&;LIP<)f9-+fKc+F|3Yl|VxnJYD@<);T3K0RZ_tFJ}M% literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__tab_selected_pressed_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/abs__tab_selected_pressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..155c4fc753ed43185b31df3bea2af1ea5b3e7482 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b~!3HEJ|NhSh5-4`^4B-HR8jh3>AfL0qBeIx* zfx8og8O=|gUJDeo@N{tu;h33haPQZY#>U2n_RP$O>mRT6my}r88lS< uMnfl1c4A|rBX^f%!~&s(1*$LFm>5oL2|PB@cz*+E5QC?ypUXO@geCw>u`ROz literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-mdpi/ic_launcher.png b/android-libraries/ActionBarSherlock/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..359047dfa4ed206e41e2354f9c6b307e713efe32 GIT binary patch literal 5237 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-v11/abs__progress_medium_holo.xml b/android-libraries/ActionBarSherlock/res/drawable-v11/abs__progress_medium_holo.xml new file mode 100644 index 00000000..6bcbdb83 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/drawable-v11/abs__progress_medium_holo.xml @@ -0,0 +1,34 @@ + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_bottom_solid_dark_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_bottom_solid_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..575334699663b221b5a2b3251572a7c7a23ddb4a GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nET98VX=kc@k8Z|>$jV8FrZ@U7ta z-*T0WQ@><>I%v71J%hiqt0P@2{q!E)%~9Ermd_VC*s;IdoBnhS>rHk6>|lcSgpVF9 tjEp}SQ%vGx1w)$%c)I$ztaD0e0sua~Gttc^?peW`&R>iA3bc>G)78&qol`;+04`QPF8}}l literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_bottom_solid_light_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_bottom_solid_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..8155fe840532e1d0fc25450729892ea73c4e007a GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nETTu&Frkc@k8Z|>$jV8FrZ@J;?q zbcL8uwC8*^`8m#29p5Ib=%`p$wC&7oqt#odO)b{rdQv>$UUk^Hs0pFVdQ&MBb@0G6aYR{#J2 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_bottom_transparent_light_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_bottom_transparent_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..fa4d76af93de31de153c6a7d41c05496bb14d2c0 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nETcuyC{kc@k8Z*AmdP~c#3C@cDZ z^MXtGfey<_%m2nWx~HUtq@RtOD!V+x#J|ag^QD{sZZM%<(R`m!o+Hzd-iC%RO>bP0l+XkKAqp+G literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_share_pack_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_share_pack_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..55099d49db309d03035101e55e64396b62af3054 GIT binary patch literal 2875 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 Z0|2By^PX-KG@Sqd002ovPDHLkV1g_UPeK3y literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_share_pack_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_share_pack_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..3c4701fc21a7b70310c0fb65f82c96406bf676c9 GIT binary patch literal 2869 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 Tx*zQx00000NkvXXu0mjfH|R+l literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_solid_dark_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_solid_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6622cbad34409b2e09f69e305455482ee107baa6 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nETEKe85kc@k8FK-lVFc4sN{QB_B z&fog}EEk$2&*T)$|Ch61%h`96?xa8O-xitu^~t0=vn)PNZ(|U lO#br3!H&B!tiEU`L+e4N?emv^?*rP(;OXk;vd$@?2>`X4Gjad` literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_solid_light_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_solid_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..c4272978338a232aa445ed5190abab61afcedb16 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nETEKe85kc@k8FK^^+Fc4rl_yt@$W?82D^ReIqPjo#d{bLmpkiN+x lnf&F6gB^EeSbfn>hW*nwPPt#_849$O!PC{xWt~$(697sdG9dr} literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_solid_shadow_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_solid_shadow_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d0df29d8b3fef9f71cda9b7a0975c68dcfb05685 GIT binary patch literal 290 zcmV+-0p0$IP)(^RAa&-b-qmfdL= zKY^DZ_=R_1v^+>Y{!mW=MF!v|2#Q>Q>z_&4i6T94j-Y4q`P>I~g?cE`S~^QhBCU5$ z-8a`dJ38hrt)qwm8XJx0+%VAuW=z7Jg@`1pBAUrf#Ef=wZl|UqH7RO)u1OwK(@xK~ zuV&5*5lN0GQV~igR!o15*n1TfDTP6ilQ72>QBJOyK^2jQYHlAzlrUMuFCtAA$s$=K oi)4{qME3aCu~lSF#Q4a(0o}otDK%H_Q2+n{07*qoM6N<$f*T@rc>n+a literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_stacked_solid_dark_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_stacked_solid_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..a0d9c1b957ea4a6ce62abd120668610d0cb2bd96 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nETEKe85kc@k8FK^^+Fc4rlxca~( z?t=fRa*SINS}wBuewp3mefy2x$=b4i8MC*B`RkorJG1!P69>HDUX#kpcm>9d6MZKb ky7}`x**qcrtNL{AY0h>p*ZiBQ0JN3C)78&qol`;+0O3wK)&Kwi literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_stacked_solid_light_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_stacked_solid_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d36f99fecf223779432fb843b823c04d739f05cb GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nETEKe85kc@k8FK-lVFc4sN{Ca;{ zvU;8e%Y`P%GdTtG|K%*$a`xS%JL%8+w?$@ueKP6JEX#C%J{El7iLS?_f2=|R(l=Qo klfOK1u;Z=_t1sHgP`H~Vw5GX>6KE@gr>mdKI;Vst03NU~l>h($ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_stacked_transparent_dark_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_stacked_transparent_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..5ad475dc3f478734be31bc5763ff494e5f120914 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nETR8JSjkc@k8Z!P3yFyvu&IDfHo z*MFzV3!h#&I<8{wJG6*7%`^0A*`zgvpO3}4Jy+2bzzZhGPxw0F1DlG16;n~mnRAu= eo1*Vq{$#i=98+;OAz%&ALIzJ)KbLh*2~7aXVK40f literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_stacked_transparent_light_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_stacked_transparent_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6ade5eeb37d8388813cee512f8adaad0f6c15397 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nETcuyC{kc@k8FE8XhU?9M9Fk3-& z>Hkf73eN%?4n{M7dy#!$d2ZSCCv)eTUt5@6!ODmi{A7$QW>Hb7V|gN6#Q)yLqkTHN Y-hRf#&+ODnfL1Yhy85}Sb4q9e0PNo==Kufz literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_transparent_dark_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_transparent_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..719b9234df6fefc32c628a212141681df3414d85 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nETB2O2`kc@k8Z(Za)puoZEAojv! z?q20mzFS+?F-&~oGw)ovvN+_p>pJvXn6S<7W@Fox#)9&t;ucLK6T;ku_WZ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_transparent_light_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ab_transparent_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6da264db26b5debc433e570e454f7ad596d3609c GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nETbWaz@kc@k8Z*Aml2;gwNxP9_w z>q*543$-17oYd6QwPclDxvFIP6Y06uZ3-`2R5T~}Ha6e^YubHkRDB$o9=Xj@xc>Lb i$;LIUf5PjFDj6>?G+3v-_OK(+N(N6?KbLh*2~7a3Fg*4E literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__btn_cab_done_default_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__btn_cab_done_default_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..7ef2db75e273c3a4fa34a867d43714d47b67dfd9 GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^tUzqR!3HEvyN#v+DHBf@#}JFt$r%|L2@FmD6{OlE zCs-P=E^ay;FECBu-~a#X*$!!Fy;QT1l2!H>nDyu1;UEQuS2t(=%(&d{0o2dn>FVdQ I&MBb@0Ph$gIRF3v literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__btn_cab_done_default_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__btn_cab_done_default_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..2283b4c01f31c24c241101989a028a28e662ff2d GIT binary patch literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^tUzqR!3HEvyN#v+DPvC;#}JFt$r%|L2@FmD6{OlE zCs-P=E^ay;FECA@!GWvmzw+t@{SPuqdTbmsKKbP0l+XkKVJ9JJ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__btn_cab_done_focused_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__btn_cab_done_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..3c909b51306d684dc9fc4deb674ab1e1feb7004e GIT binary patch literal 113 zcmeAS@N?(olHy`uVBq!ia0vp^tUzqR!3HEvyN#xSIG!$!Ar_~TGcqy~7@GboNVOeo z`FL&lz5>PtO@Rj=>T@VLG&w|ZbqQ*{RI`whRrVK{_2=K=E+vL!&S{*=@1z8QW-xfV L`njxgN@xNAaNr>U literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__btn_cab_done_pressed_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__btn_cab_done_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..131d1030c9d5b447ef62fc8e336d9d3950ff7519 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^tUzqR!3HEvyN#v+DJxGG#}JFt$r%|L2@FmD6{Ok@ zwtT#{-1s4r1MA|Z!|?(x4J`lv|6k8`NJHzTnuV0CvcJHrKmQJQDKT8Re5&^Sxg#LM O7(8A5T-G@yGywoD=q9NE literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__btn_cab_done_pressed_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__btn_cab_done_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..3e7dcdfdbaf66d51a90633e6f601bfe71b0c5069 GIT binary patch literal 113 zcmeAS@N?(olHy`uVBq!ia0vp^tUzqR!3HEvyN#xSIG!$!Ar_~TGcqy~7@GboNVOeo z`FL%)@k1sD*2PVS;{{wASQ@v8h$x3#@+~m2a+{}M^7C)Is4GMKie-X3Pa7xz&0z3! L^>bP0l+XkKapWP} literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__cab_background_bottom_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__cab_background_bottom_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..0bd09806f5c85ad3a33ec80c2a526e9dba34d1f3 GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nETTu&Frkc@k8uN>rTFyLXm;P>R{ z?#-o|?nQl9Ua&YVWQl+9{Kh9CkJo#*NAA>4+xPwD`<&mEu1}vZI664|W68WNxRjX* q7uY2C$wZnF2qKv(-xu6mlE@I5@4DcHNa}B(#SEUVelF{r5}E+w(lnv~ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__cab_background_bottom_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__cab_background_bottom_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..43ed26d4784aa508b93551bdb0359b959bd2c91b GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nET3{Mxwkc@k8uUzCjV8Fq8;LR1* z*j37dP53cYgnN@8iE~W|ez(m3TTj;06C0 vR9@;$usQD^o~Q2-Eg&#Ke!|DE+S9qyz8u@<_Da1C=l}*!S3j3^P6YLYC-!V(AVEFG+v!>way|q9)89ZJ6T-G@yGywpFG&bP? literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__dialog_full_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__dialog_full_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f4970ad1c3278235157ac72f71fc98f159fdc439 GIT binary patch literal 2159 zcmV-#2$1)QP)7pj*K04R=GS>IExgb+dqA%qY@2qDDdSi?}MdX75WMJ|ri_~yampZf~b zyDwJPzURp0aERFLx!K0Z6`{S(+b^7Rq0fZm(kDLm@P!|`&m~8kF)y`OQ+*6SLgj(n*c6WFZ`T<6tC6A%w8 z+L+Kg_>sWYRhaz=AtQLA^@LuUvKr4zS(=h&ATdHMd1uOv+V9M9YYe+zz%fKlM3B!~ zyq*EP{ZyC9dltDoQc<8ZrM^eE_Hte#g^dKR2>{;+o?xX#_XJ<6fcSW3 z(2+n3e1qrFpfvl1x~?#Fy4|E$M6lRgKuT?d8dD>b&VB465lv_ms575+OWy%#u@k+N zI%?Q+K~hGrT_7#|a=gF%@ZrOc@87@w`1bAFU(2$bW3Gd+|4`xmgT=9~$+>Rd`_AEe z?tAPdzh~^4zVA1WkB@)c-QE59<;$19v5OvFA}vv41E1cCHa5&@4N;9-`R?7jpWeKA z^Yg>QL%m+FvDt*4cRX_bt0?zBkB(K>DX%%#=N+5R(_-8y- zVb>j!?$Wbc5y%%}IfCs9*+@_USOKV3tJQDczI|KW-rgqvI6{s^UDwxjUH<~$ckEhw z$wzfwA%@V6dv=Zxn=8;sa(#b)ziOIh-@k{Dz1VCvD9chBW?(0HZ$3-*gQG?|lNRhy zsce!AuP~V46@dEg?(QVrAwo2L-=l3?V9=qSyONQk&Kv_~&Lf1nMm8E$0BV|mEX9~d zNP}Lf5}1xu21h4T$+9&-HQuut%PRmY8i6duXoOerBY}OxLGlJ5BU$zc%^yh8OvsW{ z7(^}+!OmYLNsSuWi7|-^5)oDyq5>gHA{u-eOKk`#f#=$OmM4_(@m{kC%_W5DAmmhR z=d>`52C;YCwuB;r{%j}Ebe_P7K+b^`h8A8*tydWpwYtuV2y(IKDEl%UBLZ0(i3V1m zfUn~Tp;05RlF3Ax+6Y;a8pF(Tjoo`iqE#Ca+!sAl5kbmO&cKL3&H*nkK%{gluy`-t zg(lV{G7z#PI)C*NX293=me{C~cPz9KvLxQ9W=NZ^Ugspsp|?>vp+=TQM}wGdXLXG{ zVi`Ci0$G}v=(F^hV}w+)Oe2t`iJ2g)`#yKX$5zN3ft&-L4rl3d-=WWF22RL{IarUJ z10V#?jlh->hk8-+(B={{f_KC0$_Y6UbF}H| z)iXk95=}<}9Szz&zBnPrq{TEU=*R&0y55rN8c7*TmhI~1gq#|$ON79_OO5CMyD7gV z9}@irgLxzpwBV#1S)NvH5*4HjnIZdKqfiE}-PZx=`o6zC@DCwmFGlT6G>P~~(uABG zK}Q3f7d(yIx@nqEUDtg*;O`-1HeJ_!ZJOp2fHih{)cJyq3PN^{5b9^?iHmLcxw*Od zt7)3gecv~S{b_{c(f57RG|lImo14Ed?FxBAs6Zqt*x!B;W5{pK*JF7#9(y&G-;L+K zAIl#wtZ4Xp+<&dElXaOZRbPeOuW5VVgIpFOP7$z(T3Yv~vHW)|AI5VJTZ64^6BEBSg#y zGM}I)%~}j17KiFDEnOcuUt#E@>0HCEcF3*~0j6Ce`xZm1O5Ih`IeuTN+ty1RWW4eh`~TOU@&BM)3MkQgMM@bdYm8B8c#1 z#@ViWE78D40!D<(#Tx`hXJ-KSDrqoae31hLi8 z$z>DjeP}^jBk1AK*j$2rhW(rzJ{2JYJMmiAitr^tE-^SXloO=ZTOgN*_a2ZHvyBd7 z1l@JghOv{s(P7lwc?A9CfSo}^z#H{B))n$biD&`>gkS9e;$0Z5~J8tXRDNuF002ovPDHLkV1mNB_TK;i literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__dialog_full_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__dialog_full_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..172fc3b5e3caf3357e706be2a1f0d91f357c8e5f GIT binary patch literal 2302 zcmV2ok^m97efLZMJ76bgmHN3TVPgynL1iZF^o zv0AMLkI|bD5@Z+S7;_RWD$X2Q#-Gi>; z=tN2`078B~PH0>efZ`B@1i||(&~g>qMGRTwTrQXXbnj39hPAQB*)bIg_=HbA_WGzO zR;yL=j9HSDjSEl*;KYv!A@o|O_=;IUA}l9+ObGitX|Dzg#M7mV*iktr2nZlVbl%^^ zH53Ym36TIhGR!|u7{3PC~!L=Y2z z32ZT8B;zY)i(nCqF!62X25hwu6@!!-aVKznAwf{$S4ay%(<6lhDJ|l}=KVE%xD;tO zjxokGV%Vil6ww-?fi&aiwtz1TI;KLw!36;9iSC?$w}w5ZTIo^H5hBZ^Apum+pFjWp*|TRqUSD7TX^iIhX;RaeQQ zE(9uq^MWzvYwRam(2Co38gn;jAmP?U& z&MGvUhjxmcRMYbSg3kR zZt4g}LPgLEq&hYm(J$si0u;4;IwvxY6?fp6l#|X8fH;pmq-q5ISi1H|(Ge;Lg>w@fkyi)P5d7;2~0$MDQ@!DE$`cg61AQt41xJiqTo9Dlsio7bTA}sD9BZvH#!%wZ zmJ%ND@1^DnZ%X(Ld?$$A6k0J~NE59ixD&!XX{j@~=b>7mwKZvxCyp*B)cAo?C*Y0% z?1kZeY?X^e-9W)XxdpU^5OahW`IAUpYa}@W?W5#&t4q8l2swcYLBS!VH7P;dBP@_? zQAk2?GdMjs_n0oBI`TV#(4X2ifxe2hDg*@upKxQ&K(mtAk|`HJPz)_1HaAZ&&GHf7 zsz6IO?f{EsSe^=LZJ-DtRGZRNi3)(P24xANDG)6Gj(#dNGOP_9D0K*+?F8HR`Nj#&1(CYoj<+oYNw{1t4Y0L^ri-RBp`1VD6hPVuR0IkNiMUb`EeV02O|F6c zauGd$;Lv5&C{!~b&}Udb7lOKhLPE$D=wt2>b>Q`^nt&r(EH@_=La)06a5Fwnfw+Sp z&{C)%=8X_pC077s0o1}imRwSiS1dcYq8ac~BtElCsZ+`Ul=zAmLOFfPAwvBY@Kn$$ zk{zOiq+$R>LAX{rQ>;#)$VHAb@IJ99w*HlMq6mNtA~I*7`@~Y7+@e^8prDZQ`Pk}@ zSYXq1DD{)3Sw!SFBRAo~AvKngUU3Lg#cu0$<^+@bU0;P_H1st~XDv}F6a(QX9$Rbi YKbh+rFQXz7g8%>k07*qoM6N<$g2q=E^8f$< literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_ab_back_holo_dark.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_ab_back_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..8ded62fb7b6a27a86f7b532c9a2b5a4ae999d34c GIT binary patch literal 741 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8!2v z2N=7Z%(epwmK8Xr18D^?ZvQoBE&~JOTTd6q5Rc^#N8xy%NgI}`eR{7o3SVw~oLF?DlhO#(rS&-V`^Q!s%)gPgzJD$(6 zlPX(2b^RHIj&o60rR$>g!|G>TRxtl*e|^4a{T&6ax|r;1#_KA};b_owfAXfrk8RFR$o&QDy{Vn>#x#sulW#~7Jq)- z)TH!~FS$Xsf0AE4joN$h`JQ|K8Rwjx@86b-rgDVb@NxHUL6S>yvXNP=t#&QB{TPb^Ah ka7@WhN>%X8O-xS>N=;0uEIgTN160J|>FVdQ&MBb@0GkggF#rGn literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_ab_back_holo_light.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_ab_back_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..517e9f72d0c8d28a22360ad5d73476c25fd4db33 GIT binary patch literal 661 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8!2v z2N=7Z%(epwmK8Xr18D^?ZvQoBE&~JOTu&Fr5Rcj%_$5Ae=jmr`i z3DvOQxBn=~BCIDR#iS^(^w0Zu6&JUPm!vIx7~`u}yzledo5s8M7#uS86ZssvI8sdD z&xg3?2M7HpA7}46mr}+fqP5gidGgVwQ1_}WN$aob&9(OVStj}6Xj_!ShugM~J~IZM zU$@KD($sJ1b4JGMs?Xp43SH*aH+p$-+40a@k*+<>G~DD-|-{tS&vG^x*%GGq=j0Y+3zJN#Vil?OA~@ zukBM`R53;FYi;h*X6Nv`Uq9z3iuI~5j`7&H`BAcUqjcZh^7x-d8^2$_pe40Fq;EPa z%hqE7x*0h;3a++#0KFc4?e_Zv*^k$mEo1DpzWsL9`(v*67M^+IpR-MVa>nHwC6*2c zw&pTkoOQ_aoMO7bofkh1@}JI}ZKA~9;BBq7`S!))DS4@K0yY}FSDK>kZ?)HK*JGG& z7n!~MQ}4z!!HZux9M^8s)pB{g?A$cwGrvCg`RlIwI(LVEXW4OK`|IMz?e(5Emfz@% z$^^!kYKdz^NlIc#s#S7PDv)9@GB7mMH89sTFbpv?wlXxZGBO2ntqcr|?>AgV(U6;; zl9^VCTZ2=RMLtl2B*=!~{Irtt#G+IN$CUh}R0Yr6#Prml)Wnp^!jq{sKt&9mu6{1- HoD!MOjfK$EgnR$;T z=N`Kp(hSrM@CU%evd=bf=-4w^bQmnuhmUH-jd<6WZ; zHl4_>Rk2U@t}L_t|AiwlQ891B3C|YS1B^O3M@oxo5*z)LB91b?+QOQX_r0yH)YX2= zvK_aW4}ZVF|MIp0)1X?{@CS{e_APBtKk;H~nV$PVB{N8HV+L1tOj6 z``KDz%d4l`HAyHPxAByb%b6xG^S8m<-YfXS7v>b+zlZNGcwheZcvv-P0dQ7=MviH9v^t)=yc559VF`j43j z_pMt2oAX|`goy_Fm~UMa9d%t_^^2qU)cXl;U0e%IRZSM> z>7Ksk_VioOmKv*1mN|c~ELg&~mMikt+LpAdYoES)QG3#uo404uV`0ytJ&!XS^rKz< zU6j9{ob*(;{k73gyQmwdmG2d+82l2_J(5-Z=Epp_^THpe+eb5HIvzUo?fW(va5{7P zd0GD0trC|9zjsRjleub%YeY#(Vo9o1a#1RfVlXl=G}JY)&^0g*F*LI>FtRc>2C}UT z3_|{Y+l-q7HAsSN2+mI{DNig)WpGT%PfAtr%uP&B Z4N6T+sVqF1Y6Dcn;OXk;vd$@?2>?&0tquSH literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_cab_done_holo_light.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_cab_done_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..bb19810bc2062509e4e4968099a359ad73818728 GIT binary patch literal 915 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;OpT z1B~5HX4`=T%L*LRfwTh{zxw0jNgl<&3j(^ zeD(x}!be9sh1LD$__>xwFX-mty1-MRJ?GVgBPRYo&#phmts!D?ltV3&FI%+a$=z1Z zV;YHl1iMSDgJ+|>#46F---v^ z=n46F|IdfFb=)S0I4Coo@!g}n4Nex)S*)#RZPN@k9D49tzo1o|L;8h-cSg(aGrNAg7qQ^lmAJNnY2BwD zmg$yB$_Kc(9`bFT@$ln4rdg7D8~IZ-f3I60`0mq%qw5167@Xn!BqR{_Lfuy~aYE2x zQ4_Q6{SU<2c z;lT8&TH+c}l9E`GYL#4+3Zxi}3=9o*4J>pG%tH*#tPG5-jE#Y8D+7a&|KB#FXvob^ z$xN$6(O_z2Y7RsY4Yp<(!9Wd?ARB`7(@M${i&7aJQ}UBi6+Ckj(^G>|6H_V+Po~-c P6)||a`njxgN@xNAiwS~- literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_menu_moreoverflow_normal_holo_dark.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_menu_moreoverflow_normal_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a92fb1d4af622cfad770d7c494121719a7896e61 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=d7dtgAr-gYUQ-leFyLX@@b&p` z%gbN)&SLHDYV<0q^J4_6fq?|&@*V6j4#NRakTDF}Z~@#RP$drMna{J{ZM0wU(H|t@ M>FVdQ&MBb@0L8N*<^TWy literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_menu_moreoverflow_normal_holo_light.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_menu_moreoverflow_normal_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..930ca8d95e8bee5a1240fba645d9dab919abd734 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=^`0({Ar-gYUf;;epuoZ6aJO@& z%&D0-IKvGL&8p&qV;O7KuliPO1yl(K>(rHwor_8Hg9|Y9Gj8!^hz0Vk4~QZ}ABcvv nF)(akj$uTI?LshtEWgbR4Rf6*RPme*0Ev6L`njxgN@xNAEX^ml literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_menu_share_holo_dark.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_menu_share_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..45a0f1da0d01b7c0ba53830285c67d629bd0774a GIT binary patch literal 699 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU~2MoaSW-r^>)^McjrWjeSoS8SCOEBs|%|?VJ7D=T9Yz_dLJ8 zJ9zK=&-=vhubx}{vF6<8-!m`2Et8%6G=f2_fi-~)r;kY>>MAgRkm@i7CT&PKJ^T(I*&Av>d6O5U0r~;hkX|;LrY6t%e!5sze0;lgN zzhmA1v9d1mdTWRDgJXqP4j5dhQr@DSSRpJN-*(9Bjp4$N@%tt%vt{r<#9TCmVT&q5 zPY_dpf5x8W&TrHi1EzgwuzL61gP~v}`*h7_ev9YX^%66WzmeOz)Rwd1sPzfWyZX+; ziqW^(w(Z~haJj|{8OsISSA~|G@%CQ8Y_d#7=yl$KAFm&t%#H|W$kcQ2;yBguIO76W zkG?He)AQ@KipLqRU6Nb%FPk$;xS@jW=|$x{C80dl?QT)`*~FQi^@N=fie6YGbN2D| z=`W4NG-chmgqp9bsxquQQuyVroI59@gwb7QnV5NMi~&p85J-Uv+l!N+#T%5W;<7yr4}f9Ow$JGA?da_{7}kE@t}@ET5LG{B2CIDTQC8`Twj U_qmZcFi|piy85}Sb4q9e0Mf@O?f?J) literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_menu_share_holo_light.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_menu_share_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..528e554abe239137182dd9069d1fa4ba02a109a1 GIT binary patch literal 935 zcmV;Y16cftP)=+L@6RIMT%_@p^A^X5UDRjLANf13Pq%);A`Pd+=!;23pXx; zAif`nPef)@LW&ftmV!!=U?`shr5Kn0)zPywg_Q~)Xf6@UsrA5Be7{a=6EByPs``206cpncnr4<@!q@mA~gUzaA3%HTX+%kDFHYT5Qf!vm`Me|1djAs_x*GR z&!z%kGhWI$<|3X<1;9qUl5@-=4yFR&S{y_@$C%@oE<1op+>aXzjC~!)$_ii$_F+%K z@y9V;#ya3q+!Mu4ce-D|$M^yJarJ;X=I|E&DieT9a7UE58@rw_;mfG%mg3n4+>X7G zDINV8W$>{wd4UPs8tHyn<_K%Vx4t-F{HB0#CbHyT8aIH=*w&T4zhI%?@Yvw4$UHw9 zfiH|AwZ;Wt3m(R<9MXfe~y?7+&yyx)=z7N}~%m5B!YmPaWaH#7@Q+5E; zIqP##(=Vn1;7AlEd2}e2K@tF-TcIq?su`V~Rw@AYX?JP!=ya5wR`qE`V>4fQR+^F$GWKC7sT4IxUFgD9>&BxJs0#D$E0dq8B&$(De03B_O{zBGgT!>|}k{a55 z!O~xj?u?9>EHL(EoJ!?lWDg$AX}pf&%~Sx?@v3~6qvvqAx*Saezy`dwo-+WR!8JMF zpTip|0k{c|kLwhu)oQ!f;y+34?@=W6(zkfKXdO_i)poDN4CtH&58$o=8{em4rdmY+ zbb?>20J>f0o#8w;#fEn(4AdV*y+C*HYaPJI-C#EObp@bT@IwJeLH&YX7XStYpFDt- zf=?R2Fu^AaVA$Z31du2AoO(cqH+@Lz(5e*i5O+3-*HCUO7(002ov JPDHLkV1h8vxv&5L literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__list_activated_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__list_activated_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..eda10e6123e1e1383c4617228ec0c96680d60dc7 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xamSQK*5Dp-y;YjHK@;M7UB8wRq zxI00Z(fs7;wLn1!PZ!4!jfu$#Gb-B{xqtMx1s*(O%+nLV7IxRdaaX6Iu&3070|zpW ye6d-ZyJWwc+pgOl@x443T>9p%`1p8cx&%YrImy|zOvgZGF?hQAxvX30u5yFboFyt=akR{ E00Z(eO#lD@ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__list_longpressed_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__list_longpressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..eda10e6123e1e1383c4617228ec0c96680d60dc7 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xamSQK*5Dp-y;YjHK@;M7UB8wRq zxI00Z(fs7;wLn1!PZ!4!jfu$#Gb-B{xqtMx1s*(O%+nLV7IxRdaaX6Iu&3070|zpW ye6d-ZyJWwc+pgOl@x443T>9p%`1p8cx&%YrImy|zOvgZGF?hQAxvX literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__list_pressed_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__list_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..e4b33935a3aa4f1af3fa9e9e199b5c47d43f4b74 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xamSQK*5Dp-y;YjHK@;M7UB8wRq zxI00Z(fs7;wLn2vPZ!4!jfu$y_kK-b literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__list_selector_disabled_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__list_selector_disabled_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..88726b69160589c8545759440e8d4e69dc984c67 GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^azGr$!3HF6SgS1tQk(@Ik;M!Q+?^oIXnykaTA*No zr;B4qM&sKXhJ1$tcw7#es=J@sd2yMiyW@jyg@u(=2qh%>1r1WJE1Ls*cJ{|veUO|(2?8OR-p?Vt(<)KXNk*dJ1<_`!jRpab6RMK;Rk47fDU#NEX#7yk4(~&Fr}L7DZp)K} zK)DDZgb+dqA%qY@2q7)3S*px^wsY!a9l?~jW2$HoDfOAoDc4?$q=mJH$Q@HesW|pH zEqI5t5pt#=^`ykNb$bDA+g_!6r>E#0Ebxb)V~E)@66{HSu%o+0#^7QK=<56_<*0g z4?VWXMFRkJB8s~XX6q}?LEeWW=Ef--P!X+fp` zQ#hbt=1@CWv@?Vrj0n$wG-wfB>s2&!$QdDJ0ulZgw-cuRiR{Y>^Hj3K6cvDZyr8vA z8lxp5*y$r9!v6G_XAF7`2PhmT)XW;J_(x39;8bKfgMu`e! zU+jWXwIOOF0-q>8C*JQsY~7_bBCuA z|Ap1-2&vJi9g(t&*dI@qVtrbEm_q)8uxlUymW^N&DQrSTF2REQdw9B(B*Fk-L?96w zfdFVX0=tCgq*<4>5rKwy4p!?>V+1b~mqyqhPm^M8N}pNlWK7Aa(;L|rtB1{dT%;u; z=)dm(?jeLfE6zhUB!2hW01y9MdY)1v=ujhBx3b+Xm&>Pd9KV)clx)K|j$bdA%O^}( zPFj=H`w_B~E-2}`eIdjBd_I2}hT(GvVW{|jkQIawhG7^!pU>wnc#H_%SRreOrJP6k z#f!~#`~_1^!^gPqw^)9R`+vop3DslHn(o!PiI0dTt@|45Za=)m1`%IwEW{fV$LVaF zE9RVsAMaWMjZlg;f(R_4iy{7r`=s=`3SdP<&^M)TPHqgUw5?z25;3$902*NlyMU*S zpa+j$RH$BIEX`7~H`b|A%pl=Pj|o!QHv-L&MvImjnCmfv9y@5Gq|A_|G$L4MNvqdg zg%(@J38}FG4N!(%uhEggMhM*%9HY#I^l zO-Wr$p$z~$ref=30GgqO)XJdORd}!BEq>NeB8p9{v^kJo2|NxCQwf^HCpGf6X;Wp4 zg!hgmb$FtdtQ>ASMriqL^@|$FBEhNWjw@zMktp~+Gzo9nO1w>OhBUKE#}ER(1L)vD UI+1b(O8@`>07*qoM6N<$f~tseq5uE@ literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__menu_dropdown_panel_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__menu_dropdown_panel_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..93066c8403ddaac9b19571152ef499620bcc0e02 GIT binary patch literal 1551 zcmV+q2JrcbP)ZMyJc+a5x+ehm5NR9U3;9%`Hyz-(tJnPJWK72_ZxFO$7HJ!wl=MA(TM` z5z;&LLlB#EA&f^$3`&>pe6X)LdJ&`vfROKm-xd+jMbSqLMZ|438|}{L$EEgM9M^%w zHa{i`W4qmEM~t#0eOdu-0W1NOh@<%YUknyuBI#0I?3#!O*zRI&T@|+kOaOda%IhNv zM;99T5trXGZJ+ZJPec%b)$c$hhFbzf1btKUoQ@WxJHBtqt%Djjh@==IkkXLZmr_R= zETUs(|D2YHL30h7B}jQ1@s(0WN*y++$>%9Px0_7;Q^61da}ymGVa5oGC6I`(Se|An zXj@SBzbdSFK)Um(Fw#d8Mr2~>phE(63xW_TA*G~C`G7107k~`S4FDISDe;mJcscGO zI_^QW2+SjBmZ1U=9v>gytZ(L+77q^(-%!w_2qCD0PZix`L1IaO$h(b>d0@F@G3Eaa zi55W^GL}q#AgNiNjxa=>FZdR(r+ zxE>NCSff^sd0^fBMHn)m#E-cU=7+{dF-K!9f{S1|kOWYSoDj6e26s~&lfViRc^MJj z^>Y9iF9eSfmVwbcxJ7UPa3MH8F;)otZ%)TN7|p{_AvpQV#UO5SLMWM?>!O$+C0vaD z8(N!X1GsBg3ar^sKmkXku0dO*!9}nfXnYiL)Hg=pYKs73(^zvc9aG}t;{#B5>C;Y2 z2$?l`wfXukgc)%>9s%7AsDyH^rRNDOAHyeHMgYzG`@1jfJOi4h!RzZQK)65|cOA0& z28%R3H(uBEzOL&YU%_z=>~=fscDp^gsmfTk*1@j+TejVzGC zpG{n`bp4r^(iKT*Io^&x%OHc_WZd_EkhCG`k)*sFZ|A&V23>!#)HToxrIRJ-1q1Q~ z3qHxB_z~+bgihSWK3otqlC9O%9BoMC(eAot5j0oOB3|pwbjUE4*ONZd@_Kxq z*B8(0XhE_FfV`ZZwcn~gXn8&5;sQ&h03_lPHzc@QD2L`A0DB!p$qE$r97Hn6cmgfM z$;^GEI@&qEx+o;VEJ0ZAK#dKOL6F|xU|IwgE6|`&x_D{{k^myy5)6fQcS{yR>LIlD zb0eL(UISu`k;Dp-=L_3_9uII4xG36?ZZ5uUxd1Up2yq&z=dNHjN&oIh<{D_CLJUbUG4w?002ovPDHLkV1n`$ Bwt@fv literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__progress_bg_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__progress_bg_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..345f5d3067c1b5a2b13f7234238468e8083e75e8 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^Ahr?*8<0#p>+uXou@pObhHwBu4M$1`kk47*5n0T@ zz}*SLjOHg#uLTMQc)B=-SoFS~;>gutz{8S$H2ll||1$b2>+ab^8r zChoU9-sVBr1cr+EHAcpdxgPN?*fw!WN@w!F_di=AUe22-xp-2_jNr43yl#?i1$i|o QK(iS+uXou@pObhHwBu4M$1`kk47*5n0T@ zz}*SLjOHg#uLTPFdAc};SoFS~;>gutz{8S$^!?BO&wHlFT~V_1=)TZ8!I{mdT_A)Z zztl5%UbEjFE&+!7%~#Kq{9)d)y{;#I@4EEH*bSem)2!T7Pp)1*OL*gdvC7^*b6)~Y OX7F_Nb6Mw<&;$Uil{z^9 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__progress_primary_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__progress_primary_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..c6c3f1ec248835c16ee8a8f9d253769ea4196468 GIT binary patch literal 1309 zcmV+&1>*XNP)>2T29Hys?P&Vm zZA9*OOSNlf`Pu!y*8AUEO|D+e=9Pi3BR)agfw#}SukU>S5_JQH{fFX7qt#y26-7>F z^lg#%AL~){ay($Vl%dNK|ns=8F95J5u4IuT)_iO}FO5AO!x2YA-ev{((MiCMb95Z27y1N{d~<$0ZOiAzT-4$^Y~d8=D&GctVLiOE-HZCX=>916 zaB}eD93BUF6!cN|FY@&i`W7!}IIL?H*U-;b(9ZeC>T4fo-D~%;%Al$SM;o1{CK^c@ zLsL?U%;F5uW`mKV6p@jG8Wm~81rvcAg~E0r38^#=q@={j6{7*N{-mRal zZyi757l1u@+(UUVUpKQfbx4*^AEZ`NBGTk&djR!;W=;+8vR!2ZvkZUiF_Uw;@^@UHY_tFNo|bZ|HqK}~Z_0kB z>1@!nFOf~^{KOi&lvG5Os4i`3m5LaZ>S{(}C2cS_3u25qx+GSC0x^F*mC<6C%zjX} z`(@Gi@=yT|C0D;bu>bAn+W30Hh5ZfH4VVpRc=$wP71`a_ciV~TTQkNXRQHQat7toU zZx*3Z?Q~QYQO|ZUR_Tl#qXtzIiPWWo(#}&aV(i6KuEST$lYVRUVscgaEz?@VCh+@z zYdAdahv=OS&fP(?9$16?`l0%F3gfnP`B71?hw4@2e4pjZouU=>X|R*`N-YD-DJj}uU$#5 zV>X}RzD~bXHhFf?KK=4JTCWrMiS*`U`G2n9l*Y@cp7B$uQwuKJNIF$*XNP)>2T29Hys?P&Vm zZA9*OOSNlf`Pu!y*8AUEO|D+e=9Pi3BR)agfw#}SukU>S5_JQH{fFX7qt#y26-7>F z^lg#%AL~){ay($Vl%dNK|ns=8F95J5u4IuT)_iO}FO5AO!x2YA-ev{((MiCMb95Z27y1N{d~<$0ZOiAzT-4$^Y~d8=D&GctVLiOE-HZCX=>916 zaB}eD93BUF6!cN|FY@&i`W7!}IIL?H*U-;b(9ZeC>T4fo-D~%;%Al$SM;o1{CK^c@ zLsL?U%;F5uW`mKV6p@jG8Wm~81rvcAg~E0r38^#=q@={j6{7*N{-mRal zZyi757l1u@+(UUVUpKQfbx4*^AEZ`NBGTk&djR!;W=;+8vR!2ZvkZUiF_Uw;@^@UHY_tFNo|bZ|HqK}~Z_0kB z>1@!nFOf~^{KOi&lvG5Os4i`3m5LaZ>S{(}C2cS_3u25qx+GSC0x^F*mC<6C%zjX} z`(@Gi@=yT|C0D;bu>bAn+W30Hh5ZfH4VVpRc=$wP71`a_ciV~TTQkNXRQHQat7toU zZx*3Z?Q~QYQO|ZUR_Tl#qXtzIiPWWo(#}&aV(i6KuEST$lYVRUVscgaEz?@VCh+@z zYdAdahv=OS&fP(?9$16?`l0%F3gfnP`B71?hw4@2e4pjZouU=>X|R*`N-YD-DJj}uU$#5 zV>X}RzD~bXHhFf?KK=4JTCWrMiS*`U`G2n9l*Y@cp7B$uQwuKJNIF$+uXou@pObhHwBu4M$1`kk47*5n0T@ zz}*SLjOHg#uLTN5dAc};So9|U`2XLYnVI=;y-5$#f-D2o4GsT&Tr`prfMCHsr=)`p zy9zZlQWAk&gL|Kjh|gcN+0MxMkn!S`=@A+#%ic(Om>d23|9^ht#EF9It^fc3f1ZP3 Y!dJ=4-o~HPfwnMsy85}Sb4q9e06h#o+yDRo literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__progress_secondary_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__progress_secondary_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..205b66e2cdef686c5ed6369b14e64b38d0182984 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^Ahr?*8<0#p>+uXou@pObhHwBu4M$1`kk47*5n0T@ zz}*SLjOHg#uLTN5dAc};So9|U`2XLYnVI=;y-5$#f-D2o4GsT&Tr`prfMCHsr=)`p zy9zZlQWAk&gL|Kjh|gcN+0MxMkn!S`=@A+#%ic(Om>d23|9^ht#EF9It^fc3f1ZP3 Y!dJ=4-o~HPfwnMsy85}Sb4q9e06h#o+yDRo literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_48_inner_holo.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_48_inner_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..19517c4b0aee1010c7041a76089fdfdbfa495e80 GIT binary patch literal 2769 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_default_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_default_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d8929fcd1864e92c78f24d34bb07ac0304bf5ebe GIT binary patch literal 395 zcmV;60d)R}P)%)khMb;v@5Yo)-?A$vWI3J{&4Tqm)VM&;#i3-!rXQ;}}A|kSK_xLoQ9!D=| zrQuRX_jo!D&!*woG(4MzXVdU(8lG)+!_Dl;%pOYTRyEwrUVwMtwRCnh!_9059DxJy zTsprAUsT~zdJlX8e>K+(FMd_}2<&RF8#?@^bn(8vHtbfpl-_eLJ!>=!D!!z&OE12( zv`a1CqqIva-mA1rDc-ZR3oqWgvUXO(tc zif5K~i;HKMc8iLSDD9eyk1Fk&iksP%L8V=5@ekmQ^NVfO%k2z5z^Qbob@&(X-FR)u p3HS~A?&0(Ut%!)oJooy?_kZokYAURbJh}h?002ovPDHLkV1n7-uz&yn literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_default_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_default_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..9174c4e4bc984a89e1ed643bc66b1569466ef52b GIT binary patch literal 394 zcmV;50d@X~P)pS_@$ zhD#gW|+S$zvH?tjZ06u}I z+WCj@MGelS_rM46*K*DD;uob4z^?VWsl%^ISMTdf({7b>={={?i$=qw;%iE~^x|tv zyVT+%O1re;qe{D!;v-AD@ZzIOyU^khrCnI@sM0Q^cw}ieym)kJH?(+0X*aBRR%th+ zcxGw0x_EYJx2pJz(yqJstkSNlxS72&skG}Y{tg(Y7u%+n+Xa4rW9?Ay@Gs!I^V*st o@Ei2q)9D9V5fPDPZuO7v|4Ms3SH1lZVgLXD07*qoM6N<$f(F>P&Hw-a literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_disabled_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_disabled_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..3015d307088f12d52a9e99ff4575fd2153127e5b GIT binary patch literal 381 zcmV-@0fPRCP)hG*08Y#N?T!?S64w!;lKvy+*1?>p3RGdlx#190x$dzj&7b^-9QUftoB@I?dG z(l;!l|3;oEFaA*ajtwD8hd-6>9*;+5M`bO2!%}+FXrQS0p3;u)|QJUO}XO$+G;+dssck%4fw5xbU zX__uxRhp)XSC*#P;_m>iSbo@k`^^CW{9xcU{p|2h0AG{O_A~&$L7!btFK9(XM7DX= bKfeD1Etg?&Fp}qT00000NkvXXu0mjfW#pxI literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_disabled_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_disabled_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..126637d1194f1d6609787774fb140818eaa4ba1f GIT binary patch literal 381 zcmV-@0fPRCP)hG*08Y#N?T!?S64w!;lKvy+*1?>p3RGdlx#190x$dzj&7b^-9QUftoB@I?dG z(l;!l|3;oEFaA*ajtwD8hd-6>9*;+5M`bO2!%}+FXrQS0p3;u)|QJUO}XO$+G;+dssck%4fw5xbU zX__uxRhp)XSC*#P;_m>iSbo@k`^^CW{9xcU{p|2h0AG{O_A~&$L7!btFK9(XM7DX= bKfeD1iaRu(IeFS@00000NkvXXu0mjfR7Ip< literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_focused_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_focused_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d45c7a864d9b36fc5d06ef7650bd22c228e3533e GIT binary patch literal 680 zcmV;Z0$2TsP)JMg@Fn128fNR{httc z2n-9ae~A~-WYQOAyjJ3`v+tFS>H?h>cjZI44!YCDJ4vU-UH-NFC!H?dNqTY9^x~%J z#ZA+To2C~xO)qX5=ft;__PrJUYC9#q>!rbyQFMFHPb=3hoe|&n)9~p|baWUbMthlMtLL6k^E5&wx9H zfkWKo4DxGy27JSv%4KLW#~I|sPnXY+fCHfNj(}ks%-+uyBgtHbMG(R)| O00009q_DOpcx|jv*P1Z)f>u3p>g<+)ulGcHZsoOUd0`v$ideb3Xs*rv6J! zg}R0?Ejbavstni13%M+(h~#=Y?=G{+sY|c-R?LyC;M~J_EGz53I-4BR z+cU4@A4T%4{LQ{7{nooe_R?;9Ufq56+wp;!Z_W|LdHU^V zuiix!E)rt*mg%eid+||lw)K3kxzR2XQeoHKTo0e>Tz_Z7KF;I+KDl^G6{a%9AKj}v z@Aq1v55LRoZXbD)<16^lF!*Li$^7}+)mu{zFEMCaSs}k;w&aatvA+!FKCV6>P_Fen z(L?roLe!sxPkWei7+T9&rtD<0W7^%ZdcE}hdZyQpKhHVIBAEwFVGN$GelF{r5}E)^ Cjyh@p literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_pressed_holo_dark.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..2cb34d7f60401a563454c03e266cc5181d9de996 GIT binary patch literal 609 zcmV-n0-pVeP)%5ec8;(Nh#y0Zthco9&fD+Scz(J_kqCSd>@N)Jrb#iJx@ z@geV)|0U|;Q8J4AW)%0$DDIn4+&81RZ$@$73{E^#CTa6Odr;zqGLyGk)zfLB)26Y5 z5#LU9dOW?JALQjc$4r{WH?GVFg))<)qMW_Ts@W~*Hgkd(m(u%LwVNxGwVfAK{BG$~ zHD4Zg33jP$CptYU%GrKa?RJ%hK*cvHEqE`!X=%Z0aT}!tZ^dnu7Q7Uk{&1!u)wl@^>7cUfAnUfgwQ!D?|Ir3GuneU%oh6!%$L*todw(!xf?LzEVJ7Y|ih z=v92GOd6`R(5v{nqI~u|T|T)5eQi`_Q>fI*QllCl)AthpQf>YCTIE0c%xyxW%x|6C zG>z*e{-?!>T@(EFL|;a6&!||%qb(l4cp2298zt1@mjOk(atXEgIq-{NzY%9xIi5qk vb6%{!-vcjz*7vDBaRYn@J|M2KzWDwRiVUw(_ikNA00000NkvXXu0mjfOP&sp literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_pressed_holo_light.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__spinner_ab_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..82f752fdc28390f1dae188e66886f9fee783b4f7 GIT binary patch literal 602 zcmV-g0;TXoV&|>P?2N3a|H=XkIpb%g2C{mUcD8z%K5!WW71`A3B@}P?c zNzmeTUM-&`=;A@rh-=e`Ytx8p(}-)+h-=e`Yg0e*Nfwct-zMuNo?gfN+FNCOm6(Rs zNBrh8;rK_F^Mfu~8k>e2?@WdCI_7lHVR+IZj_>A~;=j0*zBpPVOJB@8&9C^w(v!^i zcs#`4qjGbZa60I4akN%e8hjOBptPW0e8JL!ZgC5x1-;^yN((y0EtVGC7q?tma9i9# zX~A7_N2LWf#T}Lw>=$=jTCiJOp|oJHxKe4sPI1N3!s5l1OACt?_fT4>Uffe@p<40r zRpP6(P_6jSy?2bx-x9}n#O>6o(Q^BiC^BxWR1^RB?JvEr|0>Nj5k)!eSD9&8HSzXK z2sbij-vth4?P;pL%~0mos(Tg<|DAn;kcS obzts&Y9%t@53qx{hWg?AJqc6disFjI`v3p{07*qoM6N<$f`4nJ zaCd?*qxs3xYk`8Mo-U3d5>t~6?){q5*x2~c-pCBZ5@_=ERFyG literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__tab_selected_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__tab_selected_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..e4229f26b2771d884934b80d0056b8dd66d10edd GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Ol;0U|59*B=E^EX7WqAsj$Z!;#Vf4nJ zaCd?*qxs3xYk`8+o-U3d5>t~6?){q5*x2~c-l(n1@K5>ymj5$1a2Oc?!34d7Ck`Aq skg(^gW|wXH-lZoEvTk@AJm}J3sQWAGentL}KF}BjPgg&ebxsLQ0KFYBT>t<8 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__tab_selected_pressed_holo.9.png b/android-libraries/ActionBarSherlock/res/drawable-xhdpi/abs__tab_selected_pressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..e862cb12154541c150fb2d9bb98872bcff506317 GIT binary patch literal 147 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 literal 0 HcmV?d00001 diff --git a/android-libraries/ActionBarSherlock/res/drawable/abs__activated_background_holo_dark.xml b/android-libraries/ActionBarSherlock/res/drawable/abs__activated_background_holo_dark.xml new file mode 100644 index 00000000..85c2c021 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/drawable/abs__activated_background_holo_dark.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/drawable/abs__activated_background_holo_light.xml b/android-libraries/ActionBarSherlock/res/drawable/abs__activated_background_holo_light.xml new file mode 100644 index 00000000..85c2c021 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/drawable/abs__activated_background_holo_light.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/drawable/abs__btn_cab_done_holo_dark.xml b/android-libraries/ActionBarSherlock/res/drawable/abs__btn_cab_done_holo_dark.xml new file mode 100644 index 00000000..cab89628 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/drawable/abs__btn_cab_done_holo_dark.xml @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/drawable/abs__btn_cab_done_holo_light.xml b/android-libraries/ActionBarSherlock/res/drawable/abs__btn_cab_done_holo_light.xml new file mode 100644 index 00000000..42ba8a0d --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/drawable/abs__btn_cab_done_holo_light.xml @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/drawable/abs__ic_menu_moreoverflow_holo_dark.xml b/android-libraries/ActionBarSherlock/res/drawable/abs__ic_menu_moreoverflow_holo_dark.xml new file mode 100644 index 00000000..2588a492 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/drawable/abs__ic_menu_moreoverflow_holo_dark.xml @@ -0,0 +1,18 @@ + + + + + diff --git a/android-libraries/ActionBarSherlock/res/drawable/abs__ic_menu_moreoverflow_holo_light.xml b/android-libraries/ActionBarSherlock/res/drawable/abs__ic_menu_moreoverflow_holo_light.xml new file mode 100644 index 00000000..e2078c96 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/drawable/abs__ic_menu_moreoverflow_holo_light.xml @@ -0,0 +1,18 @@ + + + + + diff --git a/android-libraries/ActionBarSherlock/res/drawable/abs__item_background_holo_dark.xml b/android-libraries/ActionBarSherlock/res/drawable/abs__item_background_holo_dark.xml new file mode 100644 index 00000000..d99b7a42 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/drawable/abs__item_background_holo_dark.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/drawable/abs__item_background_holo_light.xml b/android-libraries/ActionBarSherlock/res/drawable/abs__item_background_holo_light.xml new file mode 100644 index 00000000..da5fb2e8 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/drawable/abs__item_background_holo_light.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/drawable/abs__list_selector_background_transition_holo_dark.xml b/android-libraries/ActionBarSherlock/res/drawable/abs__list_selector_background_transition_holo_dark.xml new file mode 100644 index 00000000..b2ce4f0f --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/drawable/abs__list_selector_background_transition_holo_dark.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/drawable/abs__list_selector_background_transition_holo_light.xml b/android-libraries/ActionBarSherlock/res/drawable/abs__list_selector_background_transition_holo_light.xml new file mode 100644 index 00000000..d7e31b1d --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/drawable/abs__list_selector_background_transition_holo_light.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/drawable/abs__list_selector_holo_dark.xml b/android-libraries/ActionBarSherlock/res/drawable/abs__list_selector_holo_dark.xml new file mode 100644 index 00000000..08b8b12f --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/drawable/abs__list_selector_holo_dark.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/drawable/abs__list_selector_holo_light.xml b/android-libraries/ActionBarSherlock/res/drawable/abs__list_selector_holo_light.xml new file mode 100644 index 00000000..ada490bf --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/drawable/abs__list_selector_holo_light.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/drawable/abs__progress_horizontal_holo_dark.xml b/android-libraries/ActionBarSherlock/res/drawable/abs__progress_horizontal_holo_dark.xml new file mode 100644 index 00000000..bd19140a --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/drawable/abs__progress_horizontal_holo_dark.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/drawable/abs__progress_horizontal_holo_light.xml b/android-libraries/ActionBarSherlock/res/drawable/abs__progress_horizontal_holo_light.xml new file mode 100644 index 00000000..321f07c8 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/drawable/abs__progress_horizontal_holo_light.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/drawable/abs__progress_medium_holo.xml b/android-libraries/ActionBarSherlock/res/drawable/abs__progress_medium_holo.xml new file mode 100644 index 00000000..6d4814f8 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/drawable/abs__progress_medium_holo.xml @@ -0,0 +1,34 @@ + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/drawable/abs__spinner_ab_holo_dark.xml b/android-libraries/ActionBarSherlock/res/drawable/abs__spinner_ab_holo_dark.xml new file mode 100644 index 00000000..4af5e22a --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/drawable/abs__spinner_ab_holo_dark.xml @@ -0,0 +1,25 @@ + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/drawable/abs__spinner_ab_holo_light.xml b/android-libraries/ActionBarSherlock/res/drawable/abs__spinner_ab_holo_light.xml new file mode 100644 index 00000000..b7850847 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/drawable/abs__spinner_ab_holo_light.xml @@ -0,0 +1,25 @@ + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/drawable/abs__tab_indicator_ab_holo.xml b/android-libraries/ActionBarSherlock/res/drawable/abs__tab_indicator_ab_holo.xml new file mode 100644 index 00000000..d34e2081 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/drawable/abs__tab_indicator_ab_holo.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout-large/abs__action_mode_close_item.xml b/android-libraries/ActionBarSherlock/res/layout-large/abs__action_mode_close_item.xml new file mode 100644 index 00000000..8811dad8 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout-large/abs__action_mode_close_item.xml @@ -0,0 +1,40 @@ + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout-v14/sherlock_spinner_dropdown_item.xml b/android-libraries/ActionBarSherlock/res/layout-v14/sherlock_spinner_dropdown_item.xml new file mode 100644 index 00000000..6c183c05 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout-v14/sherlock_spinner_dropdown_item.xml @@ -0,0 +1,26 @@ + + + diff --git a/android-libraries/ActionBarSherlock/res/layout-v14/sherlock_spinner_item.xml b/android-libraries/ActionBarSherlock/res/layout-v14/sherlock_spinner_item.xml new file mode 100644 index 00000000..61dc0252 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout-v14/sherlock_spinner_item.xml @@ -0,0 +1,26 @@ + + + diff --git a/android-libraries/ActionBarSherlock/res/layout-xlarge/abs__screen_action_bar.xml b/android-libraries/ActionBarSherlock/res/layout-xlarge/abs__screen_action_bar.xml new file mode 100644 index 00000000..040df44a --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout-xlarge/abs__screen_action_bar.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout-xlarge/abs__screen_action_bar_overlay.xml b/android-libraries/ActionBarSherlock/res/layout-xlarge/abs__screen_action_bar_overlay.xml new file mode 100644 index 00000000..c64ef141 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout-xlarge/abs__screen_action_bar_overlay.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__action_bar_home.xml b/android-libraries/ActionBarSherlock/res/layout/abs__action_bar_home.xml new file mode 100644 index 00000000..5c1e9ec4 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__action_bar_home.xml @@ -0,0 +1,38 @@ + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__action_bar_tab.xml b/android-libraries/ActionBarSherlock/res/layout/abs__action_bar_tab.xml new file mode 100644 index 00000000..f46f7a04 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__action_bar_tab.xml @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__action_bar_tab_bar_view.xml b/android-libraries/ActionBarSherlock/res/layout/abs__action_bar_tab_bar_view.xml new file mode 100644 index 00000000..0d51220c --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__action_bar_tab_bar_view.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__action_bar_title_item.xml b/android-libraries/ActionBarSherlock/res/layout/abs__action_bar_title_item.xml new file mode 100644 index 00000000..dd69acad --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__action_bar_title_item.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__action_menu_item_layout.xml b/android-libraries/ActionBarSherlock/res/layout/abs__action_menu_item_layout.xml new file mode 100644 index 00000000..13149fd6 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__action_menu_item_layout.xml @@ -0,0 +1,56 @@ + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__action_menu_layout.xml b/android-libraries/ActionBarSherlock/res/layout/abs__action_menu_layout.xml new file mode 100644 index 00000000..a6f8e53f --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__action_menu_layout.xml @@ -0,0 +1,23 @@ + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__action_mode_bar.xml b/android-libraries/ActionBarSherlock/res/layout/abs__action_mode_bar.xml new file mode 100644 index 00000000..7168dc77 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__action_mode_bar.xml @@ -0,0 +1,24 @@ + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__action_mode_close_item.xml b/android-libraries/ActionBarSherlock/res/layout/abs__action_mode_close_item.xml new file mode 100644 index 00000000..875ec3e1 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__action_mode_close_item.xml @@ -0,0 +1,31 @@ + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__activity_chooser_view.xml b/android-libraries/ActionBarSherlock/res/layout/abs__activity_chooser_view.xml new file mode 100644 index 00000000..019d14ef --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__activity_chooser_view.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__activity_chooser_view_list_item.xml b/android-libraries/ActionBarSherlock/res/layout/abs__activity_chooser_view_list_item.xml new file mode 100644 index 00000000..b430032a --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__activity_chooser_view_list_item.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__dialog_title_holo.xml b/android-libraries/ActionBarSherlock/res/layout/abs__dialog_title_holo.xml new file mode 100644 index 00000000..6402f28b --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__dialog_title_holo.xml @@ -0,0 +1,46 @@ + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__list_menu_item_checkbox.xml b/android-libraries/ActionBarSherlock/res/layout/abs__list_menu_item_checkbox.xml new file mode 100644 index 00000000..39aca3a8 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__list_menu_item_checkbox.xml @@ -0,0 +1,26 @@ + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__list_menu_item_icon.xml b/android-libraries/ActionBarSherlock/res/layout/abs__list_menu_item_icon.xml new file mode 100644 index 00000000..55ab28a2 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__list_menu_item_icon.xml @@ -0,0 +1,28 @@ + + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__list_menu_item_layout.xml b/android-libraries/ActionBarSherlock/res/layout/abs__list_menu_item_layout.xml new file mode 100644 index 00000000..147f36fe --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__list_menu_item_layout.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__list_menu_item_radio.xml b/android-libraries/ActionBarSherlock/res/layout/abs__list_menu_item_radio.xml new file mode 100644 index 00000000..ff54bbec --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__list_menu_item_radio.xml @@ -0,0 +1,24 @@ + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__popup_menu_item_layout.xml b/android-libraries/ActionBarSherlock/res/layout/abs__popup_menu_item_layout.xml new file mode 100644 index 00000000..d42425ad --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__popup_menu_item_layout.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__screen_action_bar.xml b/android-libraries/ActionBarSherlock/res/layout/abs__screen_action_bar.xml new file mode 100644 index 00000000..1fb82fe9 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__screen_action_bar.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__screen_action_bar_overlay.xml b/android-libraries/ActionBarSherlock/res/layout/abs__screen_action_bar_overlay.xml new file mode 100644 index 00000000..0961ef56 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__screen_action_bar_overlay.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__screen_simple.xml b/android-libraries/ActionBarSherlock/res/layout/abs__screen_simple.xml new file mode 100644 index 00000000..33e2dea0 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__screen_simple.xml @@ -0,0 +1,38 @@ + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/abs__screen_simple_overlay_action_mode.xml b/android-libraries/ActionBarSherlock/res/layout/abs__screen_simple_overlay_action_mode.xml new file mode 100644 index 00000000..f8b9fb18 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/abs__screen_simple_overlay_action_mode.xml @@ -0,0 +1,38 @@ + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/main.xml b/android-libraries/ActionBarSherlock/res/layout/main.xml new file mode 100644 index 00000000..ac9c0aba --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/main.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/android-libraries/ActionBarSherlock/res/layout/sherlock_spinner_dropdown_item.xml b/android-libraries/ActionBarSherlock/res/layout/sherlock_spinner_dropdown_item.xml new file mode 100644 index 00000000..a6c6252d --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/sherlock_spinner_dropdown_item.xml @@ -0,0 +1,26 @@ + + + diff --git a/android-libraries/ActionBarSherlock/res/layout/sherlock_spinner_item.xml b/android-libraries/ActionBarSherlock/res/layout/sherlock_spinner_item.xml new file mode 100644 index 00000000..bea74017 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/layout/sherlock_spinner_item.xml @@ -0,0 +1,26 @@ + + + diff --git a/android-libraries/ActionBarSherlock/res/values-land/abs__dimens.xml b/android-libraries/ActionBarSherlock/res/values-land/abs__dimens.xml new file mode 100644 index 00000000..502cc16a --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values-land/abs__dimens.xml @@ -0,0 +1,33 @@ + + + + + 40dip + + 4dip + + 16dp + + 12dp + + -2dp + + 4dip + diff --git a/android-libraries/ActionBarSherlock/res/values-large-hdpi-1024x600/abs__dimens.xml b/android-libraries/ActionBarSherlock/res/values-large-hdpi-1024x600/abs__dimens.xml new file mode 100644 index 00000000..3312cfa7 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values-large-hdpi-1024x600/abs__dimens.xml @@ -0,0 +1,33 @@ + + + + + 48dip + + 8dip + + 18dp + + 14dp + + -3dp + + 5dip + diff --git a/android-libraries/ActionBarSherlock/res/values-large-land-hdpi-1024x600/abs__dimens.xml b/android-libraries/ActionBarSherlock/res/values-large-land-hdpi-1024x600/abs__dimens.xml new file mode 100644 index 00000000..502cc16a --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values-large-land-hdpi-1024x600/abs__dimens.xml @@ -0,0 +1,33 @@ + + + + + 40dip + + 4dip + + 16dp + + 12dp + + -2dp + + 4dip + diff --git a/android-libraries/ActionBarSherlock/res/values-large-land-mdpi-1024x600/abs__dimens.xml b/android-libraries/ActionBarSherlock/res/values-large-land-mdpi-1024x600/abs__dimens.xml new file mode 100644 index 00000000..3312cfa7 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values-large-land-mdpi-1024x600/abs__dimens.xml @@ -0,0 +1,33 @@ + + + + + 48dip + + 8dip + + 18dp + + 14dp + + -3dp + + 5dip + diff --git a/android-libraries/ActionBarSherlock/res/values-large-mdpi-1024x600/abs__dimens.xml b/android-libraries/ActionBarSherlock/res/values-large-mdpi-1024x600/abs__dimens.xml new file mode 100644 index 00000000..35910333 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values-large-mdpi-1024x600/abs__dimens.xml @@ -0,0 +1,36 @@ + + + + + 56dip + + 4dip + + 18dp + + 14dp + + -3dp + + 9dip + + + 64dip + diff --git a/android-libraries/ActionBarSherlock/res/values-large/abs__dimens.xml b/android-libraries/ActionBarSherlock/res/values-large/abs__dimens.xml new file mode 100644 index 00000000..63b12f7f --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values-large/abs__dimens.xml @@ -0,0 +1,29 @@ + + + + + 55% + + 80% + diff --git a/android-libraries/ActionBarSherlock/res/values-sw600dp/abs__bools.xml b/android-libraries/ActionBarSherlock/res/values-sw600dp/abs__bools.xml new file mode 100644 index 00000000..7a48e154 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values-sw600dp/abs__bools.xml @@ -0,0 +1,19 @@ + + + + + false + diff --git a/android-libraries/ActionBarSherlock/res/values-sw600dp/abs__dimens.xml b/android-libraries/ActionBarSherlock/res/values-sw600dp/abs__dimens.xml new file mode 100644 index 00000000..f6785381 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values-sw600dp/abs__dimens.xml @@ -0,0 +1,38 @@ + + + + + 56dip + + 4dip + + 18dp + + 14dp + + -3dp + + 9dip + + 5 + + + 64dip + diff --git a/android-libraries/ActionBarSherlock/res/values-v11/abs__themes.xml b/android-libraries/ActionBarSherlock/res/values-v11/abs__themes.xml new file mode 100644 index 00000000..03473572 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values-v11/abs__themes.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/values-v14/abs__styles.xml b/android-libraries/ActionBarSherlock/res/values-v14/abs__styles.xml new file mode 100644 index 00000000..f2aa64d2 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values-v14/abs__styles.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/values-v14/abs__themes.xml b/android-libraries/ActionBarSherlock/res/values-v14/abs__themes.xml new file mode 100644 index 00000000..ceb96073 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values-v14/abs__themes.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/values-w360dp/abs__dimens.xml b/android-libraries/ActionBarSherlock/res/values-w360dp/abs__dimens.xml new file mode 100644 index 00000000..6f49d7e4 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values-w360dp/abs__dimens.xml @@ -0,0 +1,22 @@ + + + + 3 + diff --git a/android-libraries/ActionBarSherlock/res/values-w480dp/abs__bools.xml b/android-libraries/ActionBarSherlock/res/values-w480dp/abs__bools.xml new file mode 100644 index 00000000..3eaf4aee --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values-w480dp/abs__bools.xml @@ -0,0 +1,22 @@ + + + + true + false + diff --git a/android-libraries/ActionBarSherlock/res/values-w480dp/abs__config.xml b/android-libraries/ActionBarSherlock/res/values-w480dp/abs__config.xml new file mode 100644 index 00000000..88357b0a --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values-w480dp/abs__config.xml @@ -0,0 +1,29 @@ + + + + + + + + true + + diff --git a/android-libraries/ActionBarSherlock/res/values-w500dp/abs__dimens.xml b/android-libraries/ActionBarSherlock/res/values-w500dp/abs__dimens.xml new file mode 100644 index 00000000..2fd4deea --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values-w500dp/abs__dimens.xml @@ -0,0 +1,22 @@ + + + + 4 + diff --git a/android-libraries/ActionBarSherlock/res/values-w600dp/abs__dimens.xml b/android-libraries/ActionBarSherlock/res/values-w600dp/abs__dimens.xml new file mode 100644 index 00000000..b085952d --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values-w600dp/abs__dimens.xml @@ -0,0 +1,22 @@ + + + + 5 + diff --git a/android-libraries/ActionBarSherlock/res/values-xlarge/abs__dimens.xml b/android-libraries/ActionBarSherlock/res/values-xlarge/abs__dimens.xml new file mode 100644 index 00000000..bfc535de --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values-xlarge/abs__dimens.xml @@ -0,0 +1,45 @@ + + + + + 56dip + + 4dip + + 18dp + + 14dp + + -3dp + + 9dip + + + 64dip + + + 45% + + 72% + diff --git a/android-libraries/ActionBarSherlock/res/values/abs__attrs.xml b/android-libraries/ActionBarSherlock/res/values/abs__attrs.xml new file mode 100644 index 00000000..81c34710 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values/abs__attrs.xml @@ -0,0 +1,380 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/values/abs__bools.xml b/android-libraries/ActionBarSherlock/res/values/abs__bools.xml new file mode 100644 index 00000000..0b432448 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values/abs__bools.xml @@ -0,0 +1,22 @@ + + + + + false + true + true + + diff --git a/android-libraries/ActionBarSherlock/res/values/abs__colors.xml b/android-libraries/ActionBarSherlock/res/values/abs__colors.xml new file mode 100644 index 00000000..625c632f --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values/abs__colors.xml @@ -0,0 +1,27 @@ + + + + + #ff000000 + #fff3f3f3 + @color/abs__background_holo_light + @color/abs__background_holo_dark + #ff4c4c4c + #ffb2b2b2 + @color/abs__bright_foreground_holo_light + @color/abs__bright_foreground_holo_dark + #ff33b5e5 + diff --git a/android-libraries/ActionBarSherlock/res/values/abs__config.xml b/android-libraries/ActionBarSherlock/res/values/abs__config.xml new file mode 100644 index 00000000..4c7b5d45 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values/abs__config.xml @@ -0,0 +1,43 @@ + + + + + + + + 320dp + + + false + + + true + + + false + + diff --git a/android-libraries/ActionBarSherlock/res/values/abs__dimens.xml b/android-libraries/ActionBarSherlock/res/values/abs__dimens.xml new file mode 100644 index 00000000..0a409756 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values/abs__dimens.xml @@ -0,0 +1,50 @@ + + + + + 48dip + + 8dip + + 18dp + + 14dp + + -3dp + + 5dip + + 2 + + + 56dip + + + 64dip + + + 65% + + 95% + diff --git a/android-libraries/ActionBarSherlock/res/values/abs__ids.xml b/android-libraries/ActionBarSherlock/res/values/abs__ids.xml new file mode 100644 index 00000000..f9f56045 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values/abs__ids.xml @@ -0,0 +1,26 @@ + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/values/abs__strings.xml b/android-libraries/ActionBarSherlock/res/values/abs__strings.xml new file mode 100644 index 00000000..1e1c7022 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values/abs__strings.xml @@ -0,0 +1,42 @@ + + + + + Navigate home + + Navigate up + + More options + + + Done + + + See all... + + Select activity + + Share with... + + Choose an application + + Share with + + Share with %s + diff --git a/android-libraries/ActionBarSherlock/res/values/abs__styles.xml b/android-libraries/ActionBarSherlock/res/values/abs__styles.xml new file mode 100644 index 00000000..8cbd3648 --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values/abs__styles.xml @@ -0,0 +1,384 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/values/abs__themes.xml b/android-libraries/ActionBarSherlock/res/values/abs__themes.xml new file mode 100644 index 00000000..5300dedd --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values/abs__themes.xml @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android-libraries/ActionBarSherlock/res/values/strings.xml b/android-libraries/ActionBarSherlock/res/values/strings.xml new file mode 100644 index 00000000..43d1652c --- /dev/null +++ b/android-libraries/ActionBarSherlock/res/values/strings.xml @@ -0,0 +1,7 @@ + + + + Hello World! + ActionBarSherlock + + \ No newline at end of file diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/ActionBarSherlock.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/ActionBarSherlock.java new file mode 100644 index 00000000..a7cc25d3 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/ActionBarSherlock.java @@ -0,0 +1,777 @@ +package com.actionbarsherlock; + +import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.HashMap; +import java.util.Iterator; +import android.app.Activity; +import android.content.Context; +import android.content.res.Configuration; +import android.os.Build; +import android.os.Bundle; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import com.actionbarsherlock.app.ActionBar; +import com.actionbarsherlock.internal.ActionBarSherlockCompat; +import com.actionbarsherlock.internal.ActionBarSherlockNative; +import com.actionbarsherlock.view.ActionMode; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuInflater; +import com.actionbarsherlock.view.MenuItem; + +/** + *

Helper for implementing the action bar design pattern across all versions + * of Android.

+ * + *

This class will manage interaction with a custom action bar based on the + * Android 4.0 source code. The exposed API mirrors that of its native + * counterpart and you should refer to its documentation for instruction.

+ * + * @author Jake Wharton + */ +public abstract class ActionBarSherlock { + protected static final String TAG = "ActionBarSherlock"; + protected static final boolean DEBUG = false; + + private static final Class[] CONSTRUCTOR_ARGS = new Class[] { Activity.class, int.class }; + private static final HashMap> IMPLEMENTATIONS = + new HashMap>(); + + static { + //Register our two built-in implementations + registerImplementation(ActionBarSherlockCompat.class); + registerImplementation(ActionBarSherlockNative.class); + } + + + /** + *

Denotes an implementation of ActionBarSherlock which provides an + * action bar-enhanced experience.

+ */ + @Target(ElementType.TYPE) + @Retention(RetentionPolicy.RUNTIME) + public @interface Implementation { + static final int DEFAULT_API = -1; + static final int DEFAULT_DPI = -1; + + int api() default DEFAULT_API; + int dpi() default DEFAULT_DPI; + } + + + /** Activity interface for menu creation callback. */ + public interface OnCreatePanelMenuListener { + public boolean onCreatePanelMenu(int featureId, Menu menu); + } + /** Activity interface for menu creation callback. */ + public interface OnCreateOptionsMenuListener { + public boolean onCreateOptionsMenu(Menu menu); + } + /** Activity interface for menu item selection callback. */ + public interface OnMenuItemSelectedListener { + public boolean onMenuItemSelected(int featureId, MenuItem item); + } + /** Activity interface for menu item selection callback. */ + public interface OnOptionsItemSelectedListener { + public boolean onOptionsItemSelected(MenuItem item); + } + /** Activity interface for menu preparation callback. */ + public interface OnPreparePanelListener { + public boolean onPreparePanel(int featureId, View view, Menu menu); + } + /** Activity interface for menu preparation callback. */ + public interface OnPrepareOptionsMenuListener { + public boolean onPrepareOptionsMenu(Menu menu); + } + /** Activity interface for action mode finished callback. */ + public interface OnActionModeFinishedListener { + public void onActionModeFinished(ActionMode mode); + } + /** Activity interface for action mode started callback. */ + public interface OnActionModeStartedListener { + public void onActionModeStarted(ActionMode mode); + } + + + /** + * If set, the logic in these classes will assume that an {@link Activity} + * is dispatching all of the required events to the class. This flag should + * only be used internally or if you are creating your own base activity + * modeled after one of the included types (e.g., {@code SherlockActivity}). + */ + public static final int FLAG_DELEGATE = 1; + + + /** + * Register an ActionBarSherlock implementation. + * + * @param implementationClass Target implementation class which extends + * {@link ActionBarSherlock}. This class must also be annotated with + * {@link Implementation}. + */ + public static void registerImplementation(Class implementationClass) { + if (!implementationClass.isAnnotationPresent(Implementation.class)) { + throw new IllegalArgumentException("Class " + implementationClass.getSimpleName() + " is not annotated with @Implementation"); + } else if (IMPLEMENTATIONS.containsValue(implementationClass)) { + if (DEBUG) Log.w(TAG, "Class " + implementationClass.getSimpleName() + " already registered"); + return; + } + + Implementation impl = implementationClass.getAnnotation(Implementation.class); + if (DEBUG) Log.i(TAG, "Registering " + implementationClass.getSimpleName() + " with qualifier " + impl); + IMPLEMENTATIONS.put(impl, implementationClass); + } + + /** + * Unregister an ActionBarSherlock implementation. This should be + * considered very volatile and you should only use it if you know what + * you are doing. You have been warned. + * + * @param implementationClass Target implementation class. + * @return Boolean indicating whether the class was removed. + */ + public static boolean unregisterImplementation(Class implementationClass) { + return IMPLEMENTATIONS.values().remove(implementationClass); + } + + /** + * Wrap an activity with an action bar abstraction which will enable the + * use of a custom implementation on platforms where a native version does + * not exist. + * + * @param activity Activity to wrap. + * @return Instance to interact with the action bar. + */ + public static ActionBarSherlock wrap(Activity activity) { + return wrap(activity, 0); + } + + /** + * Wrap an activity with an action bar abstraction which will enable the + * use of a custom implementation on platforms where a native version does + * not exist. + * + * @param activity Owning activity. + * @param flags Option flags to control behavior. + * @return Instance to interact with the action bar. + */ + public static ActionBarSherlock wrap(Activity activity, int flags) { + //Create a local implementation map we can modify + HashMap> impls = + new HashMap>(IMPLEMENTATIONS); + boolean hasQualfier; + + /* DPI FILTERING */ + hasQualfier = false; + for (Implementation key : impls.keySet()) { + //Only honor TVDPI as a specific qualifier + if (key.dpi() == DisplayMetrics.DENSITY_TV) { + hasQualfier = true; + break; + } + } + if (hasQualfier) { + final boolean isTvDpi = activity.getResources().getDisplayMetrics().densityDpi == DisplayMetrics.DENSITY_TV; + for (Iterator keys = impls.keySet().iterator(); keys.hasNext(); ) { + int keyDpi = keys.next().dpi(); + if ((isTvDpi && keyDpi != DisplayMetrics.DENSITY_TV) + || (!isTvDpi && keyDpi == DisplayMetrics.DENSITY_TV)) { + keys.remove(); + } + } + } + + /* API FILTERING */ + hasQualfier = false; + for (Implementation key : impls.keySet()) { + if (key.api() != Implementation.DEFAULT_API) { + hasQualfier = true; + break; + } + } + if (hasQualfier) { + final int runtimeApi = Build.VERSION.SDK_INT; + int bestApi = 0; + for (Iterator keys = impls.keySet().iterator(); keys.hasNext(); ) { + int keyApi = keys.next().api(); + if (keyApi > runtimeApi) { + keys.remove(); + } else if (keyApi > bestApi) { + bestApi = keyApi; + } + } + for (Iterator keys = impls.keySet().iterator(); keys.hasNext(); ) { + if (keys.next().api() != bestApi) { + keys.remove(); + } + } + } + + if (impls.size() > 1) { + throw new IllegalStateException("More than one implementation matches configuration."); + } + if (impls.isEmpty()) { + throw new IllegalStateException("No implementations match configuration."); + } + Class impl = impls.values().iterator().next(); + if (DEBUG) Log.i(TAG, "Using implementation: " + impl.getSimpleName()); + + try { + Constructor ctor = impl.getConstructor(CONSTRUCTOR_ARGS); + return ctor.newInstance(activity, flags); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } catch (IllegalArgumentException e) { + throw new RuntimeException(e); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + } + + + /** Activity which is displaying the action bar. Also used for context. */ + protected final Activity mActivity; + /** Whether delegating actions for the activity or managing ourselves. */ + protected final boolean mIsDelegate; + + /** Reference to our custom menu inflater which supports action items. */ + protected MenuInflater mMenuInflater; + + + + protected ActionBarSherlock(Activity activity, int flags) { + if (DEBUG) Log.d(TAG, "[] activity: " + activity + ", flags: " + flags); + + mActivity = activity; + mIsDelegate = (flags & FLAG_DELEGATE) != 0; + } + + + /** + * Get the current action bar instance. + * + * @return Action bar instance. + */ + public abstract ActionBar getActionBar(); + + + /////////////////////////////////////////////////////////////////////////// + // Lifecycle and interaction callbacks when delegating + /////////////////////////////////////////////////////////////////////////// + + /** + * Notify action bar of a configuration change event. Should be dispatched + * after the call to the superclass implementation. + * + *
+     * @Override
+     * public void onConfigurationChanged(Configuration newConfig) {
+     *     super.onConfigurationChanged(newConfig);
+     *     mSherlock.dispatchConfigurationChanged(newConfig);
+     * }
+     * 
+ * + * @param newConfig The new device configuration. + */ + public void dispatchConfigurationChanged(Configuration newConfig) {} + + /** + * Notify the action bar that the activity has finished its resuming. This + * should be dispatched after the call to the superclass implementation. + * + *
+     * @Override
+     * protected void onPostResume() {
+     *     super.onPostResume();
+     *     mSherlock.dispatchPostResume();
+     * }
+     * 
+ */ + public void dispatchPostResume() {} + + /** + * Notify the action bar that the activity is pausing. This should be + * dispatched before the call to the superclass implementation. + * + *
+     * @Override
+     * protected void onPause() {
+     *     mSherlock.dispatchPause();
+     *     super.onPause();
+     * }
+     * 
+ */ + public void dispatchPause() {} + + /** + * Notify the action bar that the activity is stopping. This should be + * called before the superclass implementation. + * + *

+ * @Override + * protected void onStop() { + * mSherlock.dispatchStop(); + * super.onStop(); + * } + *

+ */ + public void dispatchStop() {} + + /** + * Indicate that the menu should be recreated by calling + * {@link OnCreateOptionsMenuListener#onCreateOptionsMenu(com.actionbarsherlock.view.Menu)}. + */ + public abstract void dispatchInvalidateOptionsMenu(); + + /** + * Notify the action bar that it should display its overflow menu if it is + * appropriate for the device. The implementation should conditionally + * call the superclass method only if this method returns {@code false}. + * + *

+ * @Override + * public void openOptionsMenu() { + * if (!mSherlock.dispatchOpenOptionsMenu()) { + * super.openOptionsMenu(); + * } + * } + *

+ * + * @return {@code true} if the opening of the menu was handled internally. + */ + public boolean dispatchOpenOptionsMenu() { + return false; + } + + /** + * Notify the action bar that it should close its overflow menu if it is + * appropriate for the device. This implementation should conditionally + * call the superclass method only if this method returns {@code false}. + * + *
+     * @Override
+     * public void closeOptionsMenu() {
+     *     if (!mSherlock.dispatchCloseOptionsMenu()) {
+     *         super.closeOptionsMenu();
+     *     }
+     * }
+     * 
+ * + * @return {@code true} if the closing of the menu was handled internally. + */ + public boolean dispatchCloseOptionsMenu() { + return false; + } + + /** + * Notify the class that the activity has finished its creation. This + * should be called after the superclass implementation. + * + *
+     * @Override
+     * protected void onPostCreate(Bundle savedInstanceState) {
+     *     mSherlock.dispatchPostCreate(savedInstanceState);
+     *     super.onPostCreate(savedInstanceState);
+     * }
+     * 
+ * + * @param savedInstanceState If the activity is being re-initialized after + * previously being shut down then this Bundle + * contains the data it most recently supplied in + * {@link Activity#}onSaveInstanceState(Bundle)}. + * Note: Otherwise it is null. + */ + public void dispatchPostCreate(Bundle savedInstanceState) {} + + /** + * Notify the action bar that the title has changed and the action bar + * should be updated to reflect the change. This should be called before + * the superclass implementation. + * + *
+     *  @Override
+     *  protected void onTitleChanged(CharSequence title, int color) {
+     *      mSherlock.dispatchTitleChanged(title, color);
+     *      super.onTitleChanged(title, color);
+     *  }
+     * 
+ * + * @param title New activity title. + * @param color New activity color. + */ + public void dispatchTitleChanged(CharSequence title, int color) {} + + /** + * Notify the action bar the user has created a key event. This is used to + * toggle the display of the overflow action item with the menu key and to + * close the action mode or expanded action item with the back key. + * + *
+     * @Override
+     * public boolean dispatchKeyEvent(KeyEvent event) {
+     *     if (mSherlock.dispatchKeyEvent(event)) {
+     *         return true;
+     *     }
+     *     return super.dispatchKeyEvent(event);
+     * }
+     * 
+ * + * @param event Description of the key event. + * @return {@code true} if the event was handled. + */ + public boolean dispatchKeyEvent(KeyEvent event) { + return false; + } + + /** + * Notify the action bar that the Activity has triggered a menu creation + * which should happen on the conclusion of {@link Activity#onCreate}. This + * will be used to gain a reference to the native menu for native and + * overflow binding as well as to indicate when compatibility create should + * occur for the first time. + * + * @param menu Activity native menu. + * @return {@code true} since we always want to say that we have a native + */ + public abstract boolean dispatchCreateOptionsMenu(android.view.Menu menu); + + /** + * Notify the action bar that the Activity has triggered a menu preparation + * which usually means that the user has requested the overflow menu via a + * hardware menu key. You should return the result of this method call and + * not call the superclass implementation. + * + *

+ * @Override + * public final boolean onPrepareOptionsMenu(android.view.Menu menu) { + * return mSherlock.dispatchPrepareOptionsMenu(menu); + * } + *

+ * + * @param menu Activity native menu. + * @return {@code true} if menu display should proceed. + */ + public abstract boolean dispatchPrepareOptionsMenu(android.view.Menu menu); + + /** + * Notify the action bar that a native options menu item has been selected. + * The implementation should return the result of this method call. + * + *

+ * @Override + * public final boolean onOptionsItemSelected(android.view.MenuItem item) { + * return mSherlock.dispatchOptionsItemSelected(item); + * } + *

+ * + * @param item Options menu item. + * @return @{code true} if the selection was handled. + */ + public abstract boolean dispatchOptionsItemSelected(android.view.MenuItem item); + + /** + * Notify the action bar that the overflow menu has been opened. The + * implementation should conditionally return {@code true} if this method + * returns {@code true}, otherwise return the result of the superclass + * method. + * + *

+ * @Override + * public final boolean onMenuOpened(int featureId, android.view.Menu menu) { + * if (mSherlock.dispatchMenuOpened(featureId, menu)) { + * return true; + * } + * return super.onMenuOpened(featureId, menu); + * } + *

+ * + * @param featureId Window feature which triggered the event. + * @param menu Activity native menu. + * @return {@code true} if the event was handled by this method. + */ + public boolean dispatchMenuOpened(int featureId, android.view.Menu menu) { + return false; + } + + /** + * Notify the action bar that the overflow menu has been closed. This + * method should be called before the superclass implementation. + * + *

+ * @Override + * public void onPanelClosed(int featureId, android.view.Menu menu) { + * mSherlock.dispatchPanelClosed(featureId, menu); + * super.onPanelClosed(featureId, menu); + * } + *

+ * + * @param featureId + * @param menu + */ + public void dispatchPanelClosed(int featureId, android.view.Menu menu) {} + + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + + /** + * Internal method to trigger the menu creation process. + * + * @return {@code true} if menu creation should proceed. + */ + protected final boolean callbackCreateOptionsMenu(Menu menu) { + if (DEBUG) Log.d(TAG, "[callbackCreateOptionsMenu] menu: " + menu); + + boolean result = true; + if (mActivity instanceof OnCreatePanelMenuListener) { + OnCreatePanelMenuListener listener = (OnCreatePanelMenuListener)mActivity; + result = listener.onCreatePanelMenu(Window.FEATURE_OPTIONS_PANEL, menu); + } else if (mActivity instanceof OnCreateOptionsMenuListener) { + OnCreateOptionsMenuListener listener = (OnCreateOptionsMenuListener)mActivity; + result = listener.onCreateOptionsMenu(menu); + } + + if (DEBUG) Log.d(TAG, "[callbackCreateOptionsMenu] returning " + result); + return result; + } + + /** + * Internal method to trigger the menu preparation process. + * + * @return {@code true} if menu preparation should proceed. + */ + protected final boolean callbackPrepareOptionsMenu(Menu menu) { + if (DEBUG) Log.d(TAG, "[callbackPrepareOptionsMenu] menu: " + menu); + + boolean result = true; + if (mActivity instanceof OnPreparePanelListener) { + OnPreparePanelListener listener = (OnPreparePanelListener)mActivity; + result = listener.onPreparePanel(Window.FEATURE_OPTIONS_PANEL, null, menu); + } else if (mActivity instanceof OnPrepareOptionsMenuListener) { + OnPrepareOptionsMenuListener listener = (OnPrepareOptionsMenuListener)mActivity; + result = listener.onPrepareOptionsMenu(menu); + } + + if (DEBUG) Log.d(TAG, "[callbackPrepareOptionsMenu] returning " + result); + return result; + } + + /** + * Internal method for dispatching options menu selection to the owning + * activity callback. + * + * @param item Selected options menu item. + * @return {@code true} if the item selection was handled in the callback. + */ + protected final boolean callbackOptionsItemSelected(MenuItem item) { + if (DEBUG) Log.d(TAG, "[callbackOptionsItemSelected] item: " + item.getTitleCondensed()); + + boolean result = false; + if (mActivity instanceof OnMenuItemSelectedListener) { + OnMenuItemSelectedListener listener = (OnMenuItemSelectedListener)mActivity; + result = listener.onMenuItemSelected(Window.FEATURE_OPTIONS_PANEL, item); + } else if (mActivity instanceof OnOptionsItemSelectedListener) { + OnOptionsItemSelectedListener listener = (OnOptionsItemSelectedListener)mActivity; + result = listener.onOptionsItemSelected(item); + } + + if (DEBUG) Log.d(TAG, "[callbackOptionsItemSelected] returning " + result); + return result; + } + + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + + /** + * Query for the availability of a certain feature. + * + * @param featureId The feature ID to check. + * @return {@code true} if feature is enabled, {@code false} otherwise. + */ + public abstract boolean hasFeature(int featureId); + + /** + * Enable extended screen features. This must be called before + * {@code setContentView()}. May be called as many times as desired as long + * as it is before {@code setContentView()}. If not called, no extended + * features will be available. You can not turn off a feature once it is + * requested. + * + * @param featureId The desired features, defined as constants by Window. + * @return Returns true if the requested feature is supported and now + * enabled. + */ + public abstract boolean requestFeature(int featureId); + + /** + * Set extra options that will influence the UI for this window. + * + * @param uiOptions Flags specifying extra options for this window. + */ + public abstract void setUiOptions(int uiOptions); + + /** + * Set extra options that will influence the UI for this window. Only the + * bits filtered by mask will be modified. + * + * @param uiOptions Flags specifying extra options for this window. + * @param mask Flags specifying which options should be modified. Others + * will remain unchanged. + */ + public abstract void setUiOptions(int uiOptions, int mask); + + /** + * Set the content of the activity inside the action bar. + * + * @param layoutResId Layout resource ID. + */ + public abstract void setContentView(int layoutResId); + + /** + * Set the content of the activity inside the action bar. + * + * @param view The desired content to display. + */ + public void setContentView(View view) { + if (DEBUG) Log.d(TAG, "[setContentView] view: " + view); + + setContentView(view, new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)); + } + + /** + * Set the content of the activity inside the action bar. + * + * @param view The desired content to display. + * @param params Layout parameters to apply to the view. + */ + public abstract void setContentView(View view, ViewGroup.LayoutParams params); + + /** + * Variation on {@link #setContentView(android.view.View, android.view.ViewGroup.LayoutParams)} + * to add an additional content view to the screen. Added after any + * existing ones on the screen -- existing views are NOT removed. + * + * @param view The desired content to display. + * @param params Layout parameters for the view. + */ + public abstract void addContentView(View view, ViewGroup.LayoutParams params); + + /** + * Change the title associated with this activity. + */ + public abstract void setTitle(CharSequence title); + + /** + * Change the title associated with this activity. + */ + public void setTitle(int resId) { + if (DEBUG) Log.d(TAG, "[setTitle] resId: " + resId); + + setTitle(mActivity.getString(resId)); + } + + /** + * Sets the visibility of the progress bar in the title. + *

+ * In order for the progress bar to be shown, the feature must be requested + * via {@link #requestWindowFeature(int)}. + * + * @param visible Whether to show the progress bars in the title. + */ + public abstract void setProgressBarVisibility(boolean visible); + + /** + * 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(int)}. + * + * @param visible Whether to show the progress bars in the title. + */ + public abstract void setProgressBarIndeterminateVisibility(boolean visible); + + /** + * Sets whether the horizontal progress bar in the title should be indeterminate (the circular + * is always indeterminate). + *

+ * In order for the progress bar to be shown, the feature must be requested + * via {@link #requestWindowFeature(int)}. + * + * @param indeterminate Whether the horizontal progress bar should be indeterminate. + */ + public abstract void setProgressBarIndeterminate(boolean indeterminate); + + /** + * Sets the progress for the progress bars in the title. + *

+ * In order for the progress bar to be shown, the feature must be requested + * via {@link #requestWindowFeature(int)}. + * + * @param progress The progress for the progress bar. Valid ranges are from + * 0 to 10000 (both inclusive). If 10000 is given, the progress + * bar will be completely filled and will fade out. + */ + public abstract void setProgress(int progress); + + /** + * Sets the secondary progress for the progress bar in the title. This + * progress is drawn between the primary progress (set via + * {@link #setProgress(int)} and the background. It can be ideal for media + * scenarios such as showing the buffering progress while the default + * progress shows the play progress. + *

+ * In order for the progress bar to be shown, the feature must be requested + * via {@link #requestWindowFeature(int)}. + * + * @param secondaryProgress The secondary progress for the progress bar. Valid ranges are from + * 0 to 10000 (both inclusive). + */ + public abstract void setSecondaryProgress(int secondaryProgress); + + /** + * Get a menu inflater instance which supports the newer menu attributes. + * + * @return Menu inflater instance. + */ + public MenuInflater getMenuInflater() { + if (DEBUG) Log.d(TAG, "[getMenuInflater]"); + + // Make sure that action views can get an appropriate theme. + if (mMenuInflater == null) { + if (getActionBar() != null) { + mMenuInflater = new MenuInflater(getThemedContext()); + } else { + mMenuInflater = new MenuInflater(mActivity); + } + } + return mMenuInflater; + } + + protected abstract Context getThemedContext(); + + /** + * 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 canceled. + * @see ActionMode + */ + public abstract ActionMode startActionMode(ActionMode.Callback callback); +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/ActionBar.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/ActionBar.java new file mode 100644 index 00000000..2497d24f --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/ActionBar.java @@ -0,0 +1,947 @@ +/* + * 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.app; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.support.v4.app.FragmentTransaction; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.View; +import android.view.ViewDebug; +import android.view.ViewGroup; +import android.view.ViewGroup.MarginLayoutParams; +import android.widget.SpinnerAdapter; + +/** + * A window feature at the top of the activity that may display the activity title, navigation + * modes, and other interactive items. + *

Beginning with Android 3.0 (API level 11), the action bar appears at the top of an + * activity's window when the activity uses the system's {@link + * android.R.style#Theme_Holo Holo} theme (or one of its descendant themes), which is the default. + * You may otherwise add the action bar by calling {@link + * android.view.Window#requestFeature requestFeature(FEATURE_ACTION_BAR)} or by declaring it in a + * custom theme with the {@link android.R.styleable#Theme_windowActionBar windowActionBar} property. + *

By default, the action bar shows the application icon on + * the left, followed by the activity title. If your activity has an options menu, you can make + * select items accessible directly from the action bar as "action items". You can also + * modify various characteristics of the action bar or remove it completely.

+ *

From your activity, you can retrieve an instance of {@link ActionBar} by calling {@link + * android.app.Activity#getActionBar getActionBar()}.

+ *

In some cases, the action bar may be overlayed by another bar that enables contextual actions, + * using an {@link android.view.ActionMode}. For example, when the user selects one or more items in + * your activity, you can enable an action mode that offers actions specific to the selected + * items, with a UI that temporarily replaces the action bar. Although the UI may occupy the + * same space, the {@link android.view.ActionMode} APIs are distinct and independent from those for + * {@link ActionBar}. + *

+ */ +public abstract class ActionBar { + /** + * 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; + + /** + * 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; + + /** + * 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; + + /** + * 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; + + /** + * 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; + + /** + * 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. + * + *

Setting this option will implicitly enable interaction with the home/up + * button. See {@link #setHomeButtonEnabled(boolean)}. + * + * @see #setDisplayOptions(int) + * @see #setDisplayOptions(int, int) + */ + public static final int DISPLAY_HOME_AS_UP = android.app.ActionBar.DISPLAY_HOME_AS_UP; + + /** + * 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; + + /** + * Show the custom view if one has been set. + * @see #setCustomView(View) + * @see #setDisplayOptions(int) + * @see #setDisplayOptions(int, int) + */ + public static final int DISPLAY_SHOW_CUSTOM = android.app.ActionBar.DISPLAY_SHOW_CUSTOM; + + /** + * 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, LayoutParams layoutParams); + + /** + * 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 icon to display in the 'home' section of the action bar. + * The action bar will use an icon specified by its style or the + * activity icon by default. + * + * Whether the home section shows an icon or logo is controlled + * by the display option {@link #DISPLAY_USE_LOGO}. + * + * @param resId Resource ID of a drawable to show as an icon. + * + * @see #setDisplayUseLogoEnabled(boolean) + * @see #setDisplayShowHomeEnabled(boolean) + */ + public abstract void setIcon(int resId); + + /** + * Set the icon to display in the 'home' section of the action bar. + * The action bar will use an icon specified by its style or the + * activity icon by default. + * + * Whether the home section shows an icon or logo is controlled + * by the display option {@link #DISPLAY_USE_LOGO}. + * + * @param icon Drawable to show as an icon. + * + * @see #setDisplayUseLogoEnabled(boolean) + * @see #setDisplayShowHomeEnabled(boolean) + */ + public abstract void setIcon(Drawable icon); + + /** + * Set the logo to display in the 'home' section of the action bar. + * The action bar will use a logo specified by its style or the + * activity logo by default. + * + * Whether the home section shows an icon or logo is controlled + * by the display option {@link #DISPLAY_USE_LOGO}. + * + * @param resId Resource ID of a drawable to show as a logo. + * + * @see #setDisplayUseLogoEnabled(boolean) + * @see #setDisplayShowHomeEnabled(boolean) + */ + public abstract void setLogo(int resId); + + /** + * Set the logo to display in the 'home' section of the action bar. + * The action bar will use a logo specified by its style or the + * activity logo by default. + * + * Whether the home section shows an icon or logo is controlled + * by the display option {@link #DISPLAY_USE_LOGO}. + * + * @param logo Drawable to show as a logo. + * + * @see #setDisplayUseLogoEnabled(boolean) + * @see #setDisplayShowHomeEnabled(boolean) + */ + public abstract void setLogo(Drawable logo); + + /** + * 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, + OnNavigationListener callback); + + /** + * 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); + + /** + * Get the position of the selected navigation item in list or tabbed navigation modes. + * + * @return Position of the selected item. + */ + public abstract int getSelectedNavigationIndex(); + + /** + * Get the number of navigation items present in the current navigation mode. + * + * @return Number of navigation items. + */ + public abstract int getNavigationItemCount(); + + /** + * 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); + + /** + * 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 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 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 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: setDisplayOptions(0, DISPLAY_SHOW_HOME) will disable the + * {@link #DISPLAY_SHOW_HOME} option. + * 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 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 true to use the activity logo, false to use the activity icon. + * + * @see #setDisplayOptions(int) + * @see #setDisplayOptions(int, int) + */ + public abstract void setDisplayUseLogoEnabled(boolean useLogo); + + /** + * 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 true to show home, false otherwise. + * + * @see #setDisplayOptions(int) + * @see #setDisplayOptions(int, int) + */ + public abstract void setDisplayShowHomeEnabled(boolean showHome); + + /** + * 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 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 whether an activity title/subtitle should be displayed. + * + *

To set several display options at once, see the setDisplayOptions methods. + * + * @param showTitle true to display a title/subtitle if present. + * + * @see #setDisplayOptions(int) + * @see #setDisplayOptions(int, int) + */ + public abstract void setDisplayShowTitleEnabled(boolean showTitle); + + /** + * Set whether a custom view should be displayed, if set. + * + *

To set several display options at once, see the setDisplayOptions methods. + * + * @param showCustom true if the currently set custom view should be displayed, false otherwise. + * + * @see #setDisplayOptions(int) + * @see #setDisplayOptions(int, int) + */ + public abstract void setDisplayShowCustomEnabled(boolean showCustom); + + /** + * Set the ActionBar's background. This will be used for the primary + * action bar. + * + * @param d Background drawable + * @see #setStackedBackgroundDrawable(Drawable) + * @see #setSplitBackgroundDrawable(Drawable) + */ + public abstract void setBackgroundDrawable(Drawable d); + + /** + * Set the ActionBar's stacked background. This will appear + * in the second row/stacked bar on some devices and configurations. + * + * @param d Background drawable for the stacked row + */ + public void setStackedBackgroundDrawable(Drawable d) { } + + /** + * Set the ActionBar's split background. This will appear in + * the split action bar containing menu-provided action buttons + * on some devices and configurations. + *

You can enable split action bar with {@link android.R.attr#uiOptions} + * + * @param d Background drawable for the split bar + */ + public void setSplitBackgroundDrawable(Drawable d) { } + + /** + * @return The current custom view. + */ + public abstract View getCustomView(); + + /** + * 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(); + + /** + * 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 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. + */ + public abstract int getNavigationMode(); + + /** + * 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); + + /** + * @return The current set of display options. + */ + public abstract int getDisplayOptions(); + + /** + * Create and return a new {@link Tab}. + * This tab will not be included in the action bar until it is added. + * + *

Very often tabs will be used to switch between {@link Fragment} + * objects. Here is a typical implementation of such tabs:

+ * + * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentTabs.java + * complete} + * + * @return A new Tab + * + * @see #addTab(Tab) + */ + public abstract Tab newTab(); + + /** + * 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(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(Tab tab, boolean setSelected); + + /** + * Add a tab for use in tabbed navigation mode. The tab will be inserted at + * 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(Tab tab, int position); + + /** + * Add a tab for use in tabbed navigation mode. The tab will be insterted at + * 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(Tab tab, int position, boolean setSelected); + + /** + * 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(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); + + /** + * Remove all tabs from the action bar and deselect the current tab. + */ + public abstract void removeAllTabs(); + + /** + * 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(Tab tab); + + /** + * 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 Tab getSelectedTab(); + + /** + * Returns the tab at the specified index. + * + * @param index Index value in the range 0-get + * @return + */ + public abstract Tab getTabAt(int index); + + /** + * Returns the number of tabs currently registered with the action bar. + * @return Tab count + */ + public abstract int getTabCount(); + + /** + * Retrieve the current height of the ActionBar. + * + * @return The ActionBar's height + */ + public abstract int getHeight(); + + /** + * Show the ActionBar if it is not currently showing. + * If the window hosting the ActionBar does not have the feature + * {@link Window#FEATURE_ACTION_BAR_OVERLAY} it will resize application + * content to fit the new space available. + */ + public abstract void show(); + + /** + * Hide the ActionBar if it is currently showing. + * If the window hosting the ActionBar does not have the feature + * {@link Window#FEATURE_ACTION_BAR_OVERLAY} it will resize application + * content to fit the new space available. + */ + public abstract void hide(); + + /** + * @return true if the ActionBar is showing, false otherwise. + */ + public abstract boolean isShowing(); + + /** + * Add a listener that will respond to menu visibility change events. + * + * @param listener The new listener to add + */ + public abstract void addOnMenuVisibilityListener(OnMenuVisibilityListener listener); + + /** + * 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(OnMenuVisibilityListener listener); + + /** + * Enable or disable the "home" button in the corner of the action bar. (Note that this + * is the application home/up affordance on the action bar, not the systemwide home + * button.) + * + *

This defaults to true for packages targeting < API 14. For packages targeting + * API 14 or greater, the application should call this method to enable interaction + * with the home/up affordance. + * + *

Setting the {@link #DISPLAY_HOME_AS_UP} display option will automatically enable + * the home button. + * + * @param enabled true to enable the home button, false to disable the home button. + */ + public void setHomeButtonEnabled(boolean enabled) { } + + /** + * Returns a {@link Context} with an appropriate theme for creating views that + * will appear in the action bar. If you are inflating or instantiating custom views + * that will appear in an action bar, you should use the Context returned by this method. + * (This includes adapters used for list navigation mode.) + * This will ensure that views contrast properly against the action bar. + * + * @return A themed Context for creating views + */ + public Context getThemedContext() { return null; } + + /** + * 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. + */ + public boolean onNavigationItemSelected(int itemPosition, long itemId); + } + + /** + * 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. + */ + public void onMenuVisibilityChanged(boolean isVisible); + } + + /** + * A tab in the action bar. + * + *

Tabs manage the hiding and showing of {@link Fragment}s. + */ + public static abstract class Tab { + /** + * An invalid position for a tab. + * + * @see #getPosition() + */ + public static final int INVALID_POSITION = -1; + + /** + * 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 icon associated with this tab. + * + * @return The tab's icon + */ + public abstract Drawable getIcon(); + + /** + * Return the text of this tab. + * + * @return The tab's text + */ + public abstract CharSequence getText(); + + /** + * 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 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 Tab setIcon(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 Tab setText(CharSequence text); + + /** + * 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 Tab setText(int resId); + + /** + * 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 Tab setCustomView(View view); + + /** + * 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 Tab setCustomView(int layoutResId); + + /** + * Retrieve a previously set custom view for this tab. + * + * @return The custom view set by {@link #setCustomView(View)}. + */ + public abstract View getCustomView(); + + /** + * 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 Tab setTag(Object obj); + + /** + * @return This Tab's tag object. + */ + public abstract Object getTag(); + + /** + * Set the {@link 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 Tab setTabListener(TabListener listener); + + /** + * Select this tab. Only valid if the tab has been added to the action bar. + */ + public abstract void select(); + + /** + * Set a description of this tab's content for use in accessibility support. + * If no content description is provided the title will be used. + * + * @param resId A resource ID referring to the description text + * @return The current instance for call chaining + * @see #setContentDescription(CharSequence) + * @see #getContentDescription() + */ + public abstract Tab setContentDescription(int resId); + + /** + * Set a description of this tab's content for use in accessibility support. + * If no content description is provided the title will be used. + * + * @param contentDesc Description of this tab's content + * @return The current instance for call chaining + * @see #setContentDescription(int) + * @see #getContentDescription() + */ + public abstract Tab setContentDescription(CharSequence contentDesc); + + /** + * Gets a brief description of this tab's content for use in accessibility support. + * + * @return Description of this tab's content + * @see #setContentDescription(CharSequence) + * @see #setContentDescription(int) + */ + public abstract CharSequence getContentDescription(); + } + + /** + * Callback interface invoked when a tab is focused, unfocused, added, or removed. + */ + public interface TabListener { + /** + * Called when a tab enters the selected state. + * + * @param tab The tab that was selected + * @param ft A {@link FragmentTransaction} for queuing fragment operations to execute + * during a tab switch. The previous tab's unselect and this tab's select will be + * executed in a single transaction. This FragmentTransaction does not support + * being added to the back stack. + */ + public void onTabSelected(Tab tab, FragmentTransaction ft); + + /** + * Called when a tab exits the selected state. + * + * @param tab The tab that was unselected + * @param ft A {@link FragmentTransaction} for queuing fragment operations to execute + * during a tab switch. This tab's unselect and the newly selected tab's select + * will be executed in a single transaction. This FragmentTransaction does not + * support being added to the back stack. + */ + public void onTabUnselected(Tab tab, FragmentTransaction ft); + + /** + * 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 A {@link FragmentTransaction} for queuing fragment operations to execute + * once this method returns. This FragmentTransaction does not support + * being added to the back stack. + */ + public void onTabReselected(Tab tab, FragmentTransaction ft); + } + + /** + * Per-child layout information associated with action bar custom views. + * + * @attr ref android.R.styleable#ActionBar_LayoutParams_layout_gravity + */ + public static class LayoutParams extends MarginLayoutParams { + /** + * Gravity for the view associated with these LayoutParams. + * + * @see android.view.Gravity + */ + @ViewDebug.ExportedProperty(mapping = { + @ViewDebug.IntToString(from = -1, to = "NONE"), + @ViewDebug.IntToString(from = Gravity.NO_GRAVITY, to = "NONE"), + @ViewDebug.IntToString(from = Gravity.TOP, to = "TOP"), + @ViewDebug.IntToString(from = Gravity.BOTTOM, to = "BOTTOM"), + @ViewDebug.IntToString(from = Gravity.LEFT, to = "LEFT"), + @ViewDebug.IntToString(from = Gravity.RIGHT, to = "RIGHT"), + @ViewDebug.IntToString(from = Gravity.CENTER_VERTICAL, to = "CENTER_VERTICAL"), + @ViewDebug.IntToString(from = Gravity.FILL_VERTICAL, to = "FILL_VERTICAL"), + @ViewDebug.IntToString(from = Gravity.CENTER_HORIZONTAL, to = "CENTER_HORIZONTAL"), + @ViewDebug.IntToString(from = Gravity.FILL_HORIZONTAL, to = "FILL_HORIZONTAL"), + @ViewDebug.IntToString(from = Gravity.CENTER, to = "CENTER"), + @ViewDebug.IntToString(from = Gravity.FILL, to = "FILL") + }) + public int gravity = -1; + + public LayoutParams(Context c, AttributeSet attrs) { + super(c, attrs); + } + + public LayoutParams(int width, int height) { + super(width, height); + this.gravity = Gravity.CENTER_VERTICAL | Gravity.LEFT; + } + + public LayoutParams(int width, int height, int gravity) { + super(width, height); + this.gravity = gravity; + } + + public LayoutParams(int gravity) { + this(WRAP_CONTENT, FILL_PARENT, gravity); + } + + public LayoutParams(LayoutParams source) { + super(source); + + this.gravity = source.gravity; + } + + public LayoutParams(ViewGroup.LayoutParams source) { + super(source); + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockActivity.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockActivity.java new file mode 100644 index 00000000..d0a6d812 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockActivity.java @@ -0,0 +1,253 @@ +package com.actionbarsherlock.app; + +import android.app.Activity; +import android.content.res.Configuration; +import android.os.Bundle; +import android.view.KeyEvent; +import android.view.View; +import android.view.Window; +import android.view.ViewGroup.LayoutParams; +import com.actionbarsherlock.ActionBarSherlock; +import com.actionbarsherlock.ActionBarSherlock.OnActionModeFinishedListener; +import com.actionbarsherlock.ActionBarSherlock.OnActionModeStartedListener; +import com.actionbarsherlock.ActionBarSherlock.OnCreatePanelMenuListener; +import com.actionbarsherlock.ActionBarSherlock.OnMenuItemSelectedListener; +import com.actionbarsherlock.ActionBarSherlock.OnPreparePanelListener; +import com.actionbarsherlock.view.ActionMode; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuInflater; +import com.actionbarsherlock.view.MenuItem; + +public abstract class SherlockActivity extends Activity implements OnCreatePanelMenuListener, OnPreparePanelListener, OnMenuItemSelectedListener, OnActionModeStartedListener, OnActionModeFinishedListener { + private ActionBarSherlock mSherlock; + + protected final ActionBarSherlock getSherlock() { + if (mSherlock == null) { + mSherlock = ActionBarSherlock.wrap(this, ActionBarSherlock.FLAG_DELEGATE); + } + return mSherlock; + } + + + /////////////////////////////////////////////////////////////////////////// + // Action bar and mode + /////////////////////////////////////////////////////////////////////////// + + public ActionBar getSupportActionBar() { + return getSherlock().getActionBar(); + } + + public ActionMode startActionMode(ActionMode.Callback callback) { + return getSherlock().startActionMode(callback); + } + + @Override + public void onActionModeStarted(ActionMode mode) {} + + @Override + public void onActionModeFinished(ActionMode mode) {} + + + /////////////////////////////////////////////////////////////////////////// + // General lifecycle/callback dispatching + /////////////////////////////////////////////////////////////////////////// + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + getSherlock().dispatchConfigurationChanged(newConfig); + } + + @Override + protected void onPostResume() { + super.onPostResume(); + getSherlock().dispatchPostResume(); + } + + @Override + protected void onPause() { + getSherlock().dispatchPause(); + super.onPause(); + } + + @Override + protected void onStop() { + getSherlock().dispatchStop(); + super.onStop(); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + getSherlock().dispatchPostCreate(savedInstanceState); + super.onPostCreate(savedInstanceState); + } + + @Override + protected void onTitleChanged(CharSequence title, int color) { + getSherlock().dispatchTitleChanged(title, color); + super.onTitleChanged(title, color); + } + + @Override + public final boolean onMenuOpened(int featureId, android.view.Menu menu) { + if (getSherlock().dispatchMenuOpened(featureId, menu)) { + return true; + } + return super.onMenuOpened(featureId, menu); + } + + @Override + public void onPanelClosed(int featureId, android.view.Menu menu) { + getSherlock().dispatchPanelClosed(featureId, menu); + super.onPanelClosed(featureId, menu); + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + if (getSherlock().dispatchKeyEvent(event)) { + return true; + } + return super.dispatchKeyEvent(event); + } + + + /////////////////////////////////////////////////////////////////////////// + // Native menu handling + /////////////////////////////////////////////////////////////////////////// + + public MenuInflater getSupportMenuInflater() { + return getSherlock().getMenuInflater(); + } + + public void invalidateOptionsMenu() { + getSherlock().dispatchInvalidateOptionsMenu(); + } + + public void supportInvalidateOptionsMenu() { + invalidateOptionsMenu(); + } + + @Override + public final boolean onCreateOptionsMenu(android.view.Menu menu) { + return getSherlock().dispatchCreateOptionsMenu(menu); + } + + @Override + public final boolean onPrepareOptionsMenu(android.view.Menu menu) { + return getSherlock().dispatchPrepareOptionsMenu(menu); + } + + @Override + public final boolean onOptionsItemSelected(android.view.MenuItem item) { + return getSherlock().dispatchOptionsItemSelected(item); + } + + @Override + public void openOptionsMenu() { + if (!getSherlock().dispatchOpenOptionsMenu()) { + super.openOptionsMenu(); + } + } + + @Override + public void closeOptionsMenu() { + if (!getSherlock().dispatchCloseOptionsMenu()) { + super.closeOptionsMenu(); + } + } + + + /////////////////////////////////////////////////////////////////////////// + // Sherlock menu handling + /////////////////////////////////////////////////////////////////////////// + + @Override + public boolean onCreatePanelMenu(int featureId, Menu menu) { + if (featureId == Window.FEATURE_OPTIONS_PANEL) { + return onCreateOptionsMenu(menu); + } + return false; + } + + public boolean onCreateOptionsMenu(Menu menu) { + return true; + } + + @Override + public boolean onPreparePanel(int featureId, View view, Menu menu) { + if (featureId == Window.FEATURE_OPTIONS_PANEL) { + return onPrepareOptionsMenu(menu); + } + return false; + } + + public boolean onPrepareOptionsMenu(Menu menu) { + return true; + } + + @Override + public boolean onMenuItemSelected(int featureId, MenuItem item) { + if (featureId == Window.FEATURE_OPTIONS_PANEL) { + return onOptionsItemSelected(item); + } + return false; + } + + public boolean onOptionsItemSelected(MenuItem item) { + return false; + } + + + /////////////////////////////////////////////////////////////////////////// + // Content + /////////////////////////////////////////////////////////////////////////// + + @Override + public void addContentView(View view, LayoutParams params) { + getSherlock().addContentView(view, params); + } + + @Override + public void setContentView(int layoutResId) { + getSherlock().setContentView(layoutResId); + } + + @Override + public void setContentView(View view, LayoutParams params) { + getSherlock().setContentView(view, params); + } + + @Override + public void setContentView(View view) { + getSherlock().setContentView(view); + } + + public void requestWindowFeature(long featureId) { + getSherlock().requestFeature((int)featureId); + } + + + /////////////////////////////////////////////////////////////////////////// + // Progress Indication + /////////////////////////////////////////////////////////////////////////// + + public void setSupportProgress(int progress) { + getSherlock().setProgress(progress); + } + + public void setSupportProgressBarIndeterminate(boolean indeterminate) { + getSherlock().setProgressBarIndeterminate(indeterminate); + } + + public void setSupportProgressBarIndeterminateVisibility(boolean visible) { + getSherlock().setProgressBarIndeterminateVisibility(visible); + } + + public void setSupportProgressBarVisibility(boolean visible) { + getSherlock().setProgressBarVisibility(visible); + } + + public void setSupportSecondaryProgress(int secondaryProgress) { + getSherlock().setSecondaryProgress(secondaryProgress); + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockDialogFragment.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockDialogFragment.java new file mode 100644 index 00000000..4172888c --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockDialogFragment.java @@ -0,0 +1,76 @@ +package com.actionbarsherlock.app; + +import static com.actionbarsherlock.app.SherlockFragmentActivity.DEBUG; +import android.app.Activity; +import android.support.v4.app.DialogFragment; +import android.util.Log; +import com.actionbarsherlock.internal.view.menu.MenuItemMule; +import com.actionbarsherlock.internal.view.menu.MenuMule; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuInflater; +import com.actionbarsherlock.view.MenuItem; + +public class SherlockDialogFragment extends DialogFragment { + private static final String TAG = "SherlockDialogFragment"; + + private SherlockFragmentActivity mActivity; + + public SherlockFragmentActivity getSherlockActivity() { + return mActivity; + } + + @Override + public void onAttach(Activity activity) { + if (!(activity instanceof SherlockFragmentActivity)) { + throw new IllegalStateException(TAG + " must be attached to a SherlockFragmentActivity."); + } + mActivity = (SherlockFragmentActivity)activity; + + super.onAttach(activity); + } + + @Override + public final void onCreateOptionsMenu(android.view.Menu menu, android.view.MenuInflater inflater) { + if (DEBUG) Log.d(TAG, "[onCreateOptionsMenu] menu: " + menu + ", inflater: " + inflater); + + if (menu instanceof MenuMule) { + MenuMule mule = (MenuMule)menu; + mule.mDispatchShow = true; + onCreateOptionsMenu(mule.unwrap(), mActivity.getSupportMenuInflater()); + } + } + + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + //Nothing to see here. + } + + @Override + public final void onPrepareOptionsMenu(android.view.Menu menu) { + if (DEBUG) Log.d(TAG, "[onPrepareOptionsMenu] menu: " + menu); + + if (menu instanceof MenuMule) { + MenuMule mule = (MenuMule)menu; + mule.mDispatchShow = true; + onPrepareOptionsMenu(mule.unwrap()); + } + } + + public void onPrepareOptionsMenu(Menu menu) { + //Nothing to see here. + } + + @Override + public final boolean onOptionsItemSelected(android.view.MenuItem item) { + if (DEBUG) Log.d(TAG, "[onOptionsItemSelected] item: " + item); + + if (item instanceof MenuItemMule) { + return onOptionsItemSelected(((MenuItemMule)item).unwrap()); + } + return false; + } + + public boolean onOptionsItemSelected(MenuItem item) { + //Nothing to see here. + return false; + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockExpandableListActivity.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockExpandableListActivity.java new file mode 100644 index 00000000..3247c987 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockExpandableListActivity.java @@ -0,0 +1,253 @@ +package com.actionbarsherlock.app; + +import android.app.ExpandableListActivity; +import android.content.res.Configuration; +import android.os.Bundle; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup.LayoutParams; +import android.view.Window; +import com.actionbarsherlock.ActionBarSherlock; +import com.actionbarsherlock.ActionBarSherlock.OnActionModeFinishedListener; +import com.actionbarsherlock.ActionBarSherlock.OnActionModeStartedListener; +import com.actionbarsherlock.ActionBarSherlock.OnCreatePanelMenuListener; +import com.actionbarsherlock.ActionBarSherlock.OnMenuItemSelectedListener; +import com.actionbarsherlock.ActionBarSherlock.OnPreparePanelListener; +import com.actionbarsherlock.view.ActionMode; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuInflater; +import com.actionbarsherlock.view.MenuItem; + +public abstract class SherlockExpandableListActivity extends ExpandableListActivity implements OnCreatePanelMenuListener, OnPreparePanelListener, OnMenuItemSelectedListener, OnActionModeStartedListener, OnActionModeFinishedListener { + private ActionBarSherlock mSherlock; + + protected final ActionBarSherlock getSherlock() { + if (mSherlock == null) { + mSherlock = ActionBarSherlock.wrap(this, ActionBarSherlock.FLAG_DELEGATE); + } + return mSherlock; + } + + + /////////////////////////////////////////////////////////////////////////// + // Action bar and mode + /////////////////////////////////////////////////////////////////////////// + + public ActionBar getSupportActionBar() { + return getSherlock().getActionBar(); + } + + public ActionMode startActionMode(ActionMode.Callback callback) { + return getSherlock().startActionMode(callback); + } + + @Override + public void onActionModeStarted(ActionMode mode) {} + + @Override + public void onActionModeFinished(ActionMode mode) {} + + + /////////////////////////////////////////////////////////////////////////// + // General lifecycle/callback dispatching + /////////////////////////////////////////////////////////////////////////// + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + getSherlock().dispatchConfigurationChanged(newConfig); + } + + @Override + protected void onPostResume() { + super.onPostResume(); + getSherlock().dispatchPostResume(); + } + + @Override + protected void onPause() { + getSherlock().dispatchPause(); + super.onPause(); + } + + @Override + protected void onStop() { + getSherlock().dispatchStop(); + super.onStop(); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + getSherlock().dispatchPostCreate(savedInstanceState); + super.onPostCreate(savedInstanceState); + } + + @Override + protected void onTitleChanged(CharSequence title, int color) { + getSherlock().dispatchTitleChanged(title, color); + super.onTitleChanged(title, color); + } + + @Override + public final boolean onMenuOpened(int featureId, android.view.Menu menu) { + if (getSherlock().dispatchMenuOpened(featureId, menu)) { + return true; + } + return super.onMenuOpened(featureId, menu); + } + + @Override + public void onPanelClosed(int featureId, android.view.Menu menu) { + getSherlock().dispatchPanelClosed(featureId, menu); + super.onPanelClosed(featureId, menu); + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + if (getSherlock().dispatchKeyEvent(event)) { + return true; + } + return super.dispatchKeyEvent(event); + } + + + /////////////////////////////////////////////////////////////////////////// + // Native menu handling + /////////////////////////////////////////////////////////////////////////// + + public MenuInflater getSupportMenuInflater() { + return getSherlock().getMenuInflater(); + } + + public void invalidateOptionsMenu() { + getSherlock().dispatchInvalidateOptionsMenu(); + } + + public void supportInvalidateOptionsMenu() { + invalidateOptionsMenu(); + } + + @Override + public final boolean onCreateOptionsMenu(android.view.Menu menu) { + return getSherlock().dispatchCreateOptionsMenu(menu); + } + + @Override + public final boolean onPrepareOptionsMenu(android.view.Menu menu) { + return getSherlock().dispatchPrepareOptionsMenu(menu); + } + + @Override + public final boolean onOptionsItemSelected(android.view.MenuItem item) { + return getSherlock().dispatchOptionsItemSelected(item); + } + + @Override + public void openOptionsMenu() { + if (!getSherlock().dispatchOpenOptionsMenu()) { + super.openOptionsMenu(); + } + } + + @Override + public void closeOptionsMenu() { + if (!getSherlock().dispatchCloseOptionsMenu()) { + super.closeOptionsMenu(); + } + } + + + /////////////////////////////////////////////////////////////////////////// + // Sherlock menu handling + /////////////////////////////////////////////////////////////////////////// + + @Override + public boolean onCreatePanelMenu(int featureId, Menu menu) { + if (featureId == Window.FEATURE_OPTIONS_PANEL) { + return onCreateOptionsMenu(menu); + } + return false; + } + + public boolean onCreateOptionsMenu(Menu menu) { + return true; + } + + @Override + public boolean onPreparePanel(int featureId, View view, Menu menu) { + if (featureId == Window.FEATURE_OPTIONS_PANEL) { + return onPrepareOptionsMenu(menu); + } + return false; + } + + public boolean onPrepareOptionsMenu(Menu menu) { + return true; + } + + @Override + public boolean onMenuItemSelected(int featureId, MenuItem item) { + if (featureId == Window.FEATURE_OPTIONS_PANEL) { + return onOptionsItemSelected(item); + } + return false; + } + + public boolean onOptionsItemSelected(MenuItem item) { + return false; + } + + + /////////////////////////////////////////////////////////////////////////// + // Content + /////////////////////////////////////////////////////////////////////////// + + @Override + public void addContentView(View view, LayoutParams params) { + getSherlock().addContentView(view, params); + } + + @Override + public void setContentView(int layoutResId) { + getSherlock().setContentView(layoutResId); + } + + @Override + public void setContentView(View view, LayoutParams params) { + getSherlock().setContentView(view, params); + } + + @Override + public void setContentView(View view) { + getSherlock().setContentView(view); + } + + public void requestWindowFeature(long featureId) { + getSherlock().requestFeature((int)featureId); + } + + + /////////////////////////////////////////////////////////////////////////// + // Progress Indication + /////////////////////////////////////////////////////////////////////////// + + public void setSupportProgress(int progress) { + getSherlock().setProgress(progress); + } + + public void setSupportProgressBarIndeterminate(boolean indeterminate) { + getSherlock().setProgressBarIndeterminate(indeterminate); + } + + public void setSupportProgressBarIndeterminateVisibility(boolean visible) { + getSherlock().setProgressBarIndeterminateVisibility(visible); + } + + public void setSupportProgressBarVisibility(boolean visible) { + getSherlock().setProgressBarVisibility(visible); + } + + public void setSupportSecondaryProgress(int secondaryProgress) { + getSherlock().setSecondaryProgress(secondaryProgress); + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockFragment.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockFragment.java new file mode 100644 index 00000000..10d673f9 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockFragment.java @@ -0,0 +1,76 @@ +package com.actionbarsherlock.app; + +import static com.actionbarsherlock.app.SherlockFragmentActivity.DEBUG; +import android.app.Activity; +import android.support.v4.app.Fragment; +import android.util.Log; +import com.actionbarsherlock.internal.view.menu.MenuItemMule; +import com.actionbarsherlock.internal.view.menu.MenuMule; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuInflater; +import com.actionbarsherlock.view.MenuItem; + +public class SherlockFragment extends Fragment { + private static final String TAG = "SherlockFragment"; + + private SherlockFragmentActivity mActivity; + + public SherlockFragmentActivity getSherlockActivity() { + return mActivity; + } + + @Override + public void onAttach(Activity activity) { + if (!(activity instanceof SherlockFragmentActivity)) { + throw new IllegalStateException(TAG + " must be attached to a SherlockFragmentActivity."); + } + mActivity = (SherlockFragmentActivity)activity; + + super.onAttach(activity); + } + + @Override + public final void onCreateOptionsMenu(android.view.Menu menu, android.view.MenuInflater inflater) { + if (DEBUG) Log.d(TAG, "[onCreateOptionsMenu] menu: " + menu + ", inflater: " + inflater); + + if (menu instanceof MenuMule) { + MenuMule mule = (MenuMule)menu; + mule.mDispatchShow = true; + onCreateOptionsMenu(mule.unwrap(), mActivity.getSupportMenuInflater()); + } + } + + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + //Nothing to see here. + } + + @Override + public final void onPrepareOptionsMenu(android.view.Menu menu) { + if (DEBUG) Log.d(TAG, "[onPrepareOptionsMenu] menu: " + menu); + + if (menu instanceof MenuMule) { + MenuMule mule = (MenuMule)menu; + mule.mDispatchShow = true; + onPrepareOptionsMenu(mule.unwrap()); + } + } + + public void onPrepareOptionsMenu(Menu menu) { + //Nothing to see here. + } + + @Override + public final boolean onOptionsItemSelected(android.view.MenuItem item) { + if (DEBUG) Log.d(TAG, "[onOptionsItemSelected] item: " + item); + + if (item instanceof MenuItemMule) { + return onOptionsItemSelected(((MenuItemMule)item).unwrap()); + } + return false; + } + + public boolean onOptionsItemSelected(MenuItem item) { + //Nothing to see here. + return false; + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockFragmentActivity.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockFragmentActivity.java new file mode 100644 index 00000000..49a5c6ca --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockFragmentActivity.java @@ -0,0 +1,350 @@ +package com.actionbarsherlock.app; + +import android.content.res.Configuration; +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup.LayoutParams; +import android.view.Window; +import com.actionbarsherlock.ActionBarSherlock; +import com.actionbarsherlock.ActionBarSherlock.OnActionModeFinishedListener; +import com.actionbarsherlock.ActionBarSherlock.OnActionModeStartedListener; +import com.actionbarsherlock.ActionBarSherlock.OnCreatePanelMenuListener; +import com.actionbarsherlock.ActionBarSherlock.OnMenuItemSelectedListener; +import com.actionbarsherlock.ActionBarSherlock.OnPreparePanelListener; +import com.actionbarsherlock.internal.view.menu.MenuItemMule; +import com.actionbarsherlock.internal.view.menu.MenuMule; +import com.actionbarsherlock.view.ActionMode; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuInflater; +import com.actionbarsherlock.view.MenuItem; + +public abstract class SherlockFragmentActivity extends FragmentActivity implements OnCreatePanelMenuListener, OnPreparePanelListener, OnMenuItemSelectedListener, OnActionModeStartedListener, OnActionModeFinishedListener { + static final boolean DEBUG = false; + private static final String TAG = "SherlockFragmentActivity"; + + private ActionBarSherlock mSherlock; + private boolean mIgnoreNativeCreate = false; + private boolean mIgnoreNativePrepare = false; + private boolean mIgnoreNativeSelected = false; + + protected final ActionBarSherlock getSherlock() { + if (mSherlock == null) { + mSherlock = ActionBarSherlock.wrap(this, ActionBarSherlock.FLAG_DELEGATE); + } + return mSherlock; + } + + + /////////////////////////////////////////////////////////////////////////// + // Action bar and mode + /////////////////////////////////////////////////////////////////////////// + + public ActionBar getSupportActionBar() { + return getSherlock().getActionBar(); + } + + public ActionMode startActionMode(ActionMode.Callback callback) { + return getSherlock().startActionMode(callback); + } + + @Override + public void onActionModeStarted(ActionMode mode) {} + + @Override + public void onActionModeFinished(ActionMode mode) {} + + + /////////////////////////////////////////////////////////////////////////// + // General lifecycle/callback dispatching + /////////////////////////////////////////////////////////////////////////// + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + getSherlock().dispatchConfigurationChanged(newConfig); + } + + @Override + protected void onPostResume() { + super.onPostResume(); + getSherlock().dispatchPostResume(); + } + + @Override + protected void onPause() { + getSherlock().dispatchPause(); + super.onPause(); + } + + @Override + protected void onStop() { + getSherlock().dispatchStop(); + super.onStop(); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + getSherlock().dispatchPostCreate(savedInstanceState); + super.onPostCreate(savedInstanceState); + } + + @Override + protected void onTitleChanged(CharSequence title, int color) { + getSherlock().dispatchTitleChanged(title, color); + super.onTitleChanged(title, color); + } + + @Override + public final boolean onMenuOpened(int featureId, android.view.Menu menu) { + if (getSherlock().dispatchMenuOpened(featureId, menu)) { + return true; + } + return super.onMenuOpened(featureId, menu); + } + + @Override + public void onPanelClosed(int featureId, android.view.Menu menu) { + getSherlock().dispatchPanelClosed(featureId, menu); + super.onPanelClosed(featureId, menu); + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + if (getSherlock().dispatchKeyEvent(event)) { + return true; + } + return super.dispatchKeyEvent(event); + } + + + /////////////////////////////////////////////////////////////////////////// + // Native menu handling + /////////////////////////////////////////////////////////////////////////// + + public MenuInflater getSupportMenuInflater() { + if (DEBUG) Log.d(TAG, "[getSupportMenuInflater]"); + + return getSherlock().getMenuInflater(); + } + + public void invalidateOptionsMenu() { + if (DEBUG) Log.d(TAG, "[invalidateOptionsMenu]"); + + getSherlock().dispatchInvalidateOptionsMenu(); + } + + public void supportInvalidateOptionsMenu() { + if (DEBUG) Log.d(TAG, "[supportInvalidateOptionsMenu]"); + + invalidateOptionsMenu(); + } + + @Override + public final boolean onCreatePanelMenu(int featureId, android.view.Menu menu) { + if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] featureId: " + featureId + ", menu: " + menu); + + if (featureId == Window.FEATURE_OPTIONS_PANEL && !mIgnoreNativeCreate) { + mIgnoreNativeCreate = true; + boolean result = getSherlock().dispatchCreateOptionsMenu(menu); + mIgnoreNativeCreate = false; + + if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] returning " + result); + return result; + } + return super.onCreatePanelMenu(featureId, menu); + } + + @Override + public final boolean onCreateOptionsMenu(android.view.Menu menu) { + return true; + } + + @Override + public final boolean onPreparePanel(int featureId, View view, android.view.Menu menu) { + if (DEBUG) Log.d(TAG, "[onPreparePanel] featureId: " + featureId + ", view: " + view + ", menu: " + menu); + + if (featureId == Window.FEATURE_OPTIONS_PANEL && !mIgnoreNativePrepare) { + mIgnoreNativePrepare = true; + boolean result = getSherlock().dispatchPrepareOptionsMenu(menu); + mIgnoreNativePrepare = false; + + if (DEBUG) Log.d(TAG, "[onPreparePanel] returning " + result); + return result; + } + return super.onPreparePanel(featureId, view, menu); + } + + @Override + public final boolean onPrepareOptionsMenu(android.view.Menu menu) { + return true; + } + + @Override + public final boolean onMenuItemSelected(int featureId, android.view.MenuItem item) { + if (DEBUG) Log.d(TAG, "[onMenuItemSelected] featureId: " + featureId + ", item: " + item); + + if (featureId == Window.FEATURE_OPTIONS_PANEL && !mIgnoreNativeSelected) { + mIgnoreNativeSelected = true; + boolean result = getSherlock().dispatchOptionsItemSelected(item); + mIgnoreNativeSelected = false; + + if (DEBUG) Log.d(TAG, "[onMenuItemSelected] returning " + result); + return result; + } + return super.onMenuItemSelected(featureId, item); + } + + @Override + public final boolean onOptionsItemSelected(android.view.MenuItem item) { + return false; + } + + @Override + public void openOptionsMenu() { + if (!getSherlock().dispatchOpenOptionsMenu()) { + super.openOptionsMenu(); + } + } + + @Override + public void closeOptionsMenu() { + if (!getSherlock().dispatchCloseOptionsMenu()) { + super.closeOptionsMenu(); + } + } + + + /////////////////////////////////////////////////////////////////////////// + // Sherlock menu handling + /////////////////////////////////////////////////////////////////////////// + + @Override + public boolean onCreatePanelMenu(int featureId, Menu menu) { + if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] featureId: " + featureId + ", menu: " + menu); + + if (featureId == Window.FEATURE_OPTIONS_PANEL) { + boolean result = onCreateOptionsMenu(menu); + if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] activity create result: " + result); + + //Dispatch to parent panel creation for fragment dispatching + if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] dispatching to native with mule"); + MenuMule mule = new MenuMule(menu); + super.onCreatePanelMenu(featureId, mule); + + if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] fragments create result: " + mule.mDispatchShow); + result |= mule.mDispatchShow; + + if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] returning " + result); + return result; + } + return false; + } + + public boolean onCreateOptionsMenu(Menu menu) { + return true; + } + + @Override + public boolean onPreparePanel(int featureId, View view, Menu menu) { + if (DEBUG) Log.d(TAG, "[onPreparePanel] featureId: " + featureId + ", view: " + view + " menu: " + menu); + + if (featureId == Window.FEATURE_OPTIONS_PANEL) { + boolean result = onPrepareOptionsMenu(menu); + if (DEBUG) Log.d(TAG, "[onPreparePanel] activity prepare result: " + result); + + //Dispatch to parent panel preparation for fragment dispatching + if (DEBUG) Log.d(TAG, "[onPreparePanel] dispatching to native with mule"); + MenuMule mule = new MenuMule(menu); + super.onPreparePanel(featureId, view, mule); + + if (DEBUG) Log.d(TAG, "[onPreparePanel] fragments prepare result: " + mule.mDispatchShow); + result |= mule.mDispatchShow; + + result &= menu.hasVisibleItems(); + if (DEBUG) Log.d(TAG, "[onPreparePanel] returning " + result); + return result; + } + return false; + } + + public boolean onPrepareOptionsMenu(Menu menu) { + return true; + } + + @Override + public boolean onMenuItemSelected(int featureId, MenuItem item) { + if (DEBUG) Log.d(TAG, "[onMenuItemSelected] featureId: " + featureId + ", item: " + item); + + if (featureId == Window.FEATURE_OPTIONS_PANEL) { + if (onOptionsItemSelected(item)) { + return true; + } + + //Dispatch to parent panel selection for fragment dispatching + if (DEBUG) Log.d(TAG, "[onMenuItemSelected] dispatching to native with mule"); + return super.onMenuItemSelected(featureId, new MenuItemMule(item)); + } + return false; + } + + public boolean onOptionsItemSelected(MenuItem item) { + return false; + } + + + /////////////////////////////////////////////////////////////////////////// + // Content + /////////////////////////////////////////////////////////////////////////// + + @Override + public void addContentView(View view, LayoutParams params) { + getSherlock().addContentView(view, params); + } + + @Override + public void setContentView(int layoutResId) { + getSherlock().setContentView(layoutResId); + } + + @Override + public void setContentView(View view, LayoutParams params) { + getSherlock().setContentView(view, params); + } + + @Override + public void setContentView(View view) { + getSherlock().setContentView(view); + } + + public void requestWindowFeature(long featureId) { + getSherlock().requestFeature((int)featureId); + } + + + /////////////////////////////////////////////////////////////////////////// + // Progress Indication + /////////////////////////////////////////////////////////////////////////// + + public void setSupportProgress(int progress) { + getSherlock().setProgress(progress); + } + + public void setSupportProgressBarIndeterminate(boolean indeterminate) { + getSherlock().setProgressBarIndeterminate(indeterminate); + } + + public void setSupportProgressBarIndeterminateVisibility(boolean visible) { + getSherlock().setProgressBarIndeterminateVisibility(visible); + } + + public void setSupportProgressBarVisibility(boolean visible) { + getSherlock().setProgressBarVisibility(visible); + } + + public void setSupportSecondaryProgress(int secondaryProgress) { + getSherlock().setSecondaryProgress(secondaryProgress); + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockListActivity.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockListActivity.java new file mode 100644 index 00000000..83114c3a --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockListActivity.java @@ -0,0 +1,253 @@ +package com.actionbarsherlock.app; + +import android.app.ListActivity; +import android.content.res.Configuration; +import android.os.Bundle; +import android.view.KeyEvent; +import android.view.View; +import android.view.Window; +import android.view.ViewGroup.LayoutParams; +import com.actionbarsherlock.ActionBarSherlock; +import com.actionbarsherlock.ActionBarSherlock.OnActionModeFinishedListener; +import com.actionbarsherlock.ActionBarSherlock.OnActionModeStartedListener; +import com.actionbarsherlock.ActionBarSherlock.OnCreatePanelMenuListener; +import com.actionbarsherlock.ActionBarSherlock.OnMenuItemSelectedListener; +import com.actionbarsherlock.ActionBarSherlock.OnPreparePanelListener; +import com.actionbarsherlock.view.ActionMode; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuInflater; +import com.actionbarsherlock.view.MenuItem; + +public abstract class SherlockListActivity extends ListActivity implements OnCreatePanelMenuListener, OnPreparePanelListener, OnMenuItemSelectedListener, OnActionModeStartedListener, OnActionModeFinishedListener { + private ActionBarSherlock mSherlock; + + protected final ActionBarSherlock getSherlock() { + if (mSherlock == null) { + mSherlock = ActionBarSherlock.wrap(this, ActionBarSherlock.FLAG_DELEGATE); + } + return mSherlock; + } + + + /////////////////////////////////////////////////////////////////////////// + // Action bar and mode + /////////////////////////////////////////////////////////////////////////// + + public ActionBar getSupportActionBar() { + return getSherlock().getActionBar(); + } + + public ActionMode startActionMode(ActionMode.Callback callback) { + return getSherlock().startActionMode(callback); + } + + @Override + public void onActionModeStarted(ActionMode mode) {} + + @Override + public void onActionModeFinished(ActionMode mode) {} + + + /////////////////////////////////////////////////////////////////////////// + // General lifecycle/callback dispatching + /////////////////////////////////////////////////////////////////////////// + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + getSherlock().dispatchConfigurationChanged(newConfig); + } + + @Override + protected void onPostResume() { + super.onPostResume(); + getSherlock().dispatchPostResume(); + } + + @Override + protected void onPause() { + getSherlock().dispatchPause(); + super.onPause(); + } + + @Override + protected void onStop() { + getSherlock().dispatchStop(); + super.onStop(); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + getSherlock().dispatchPostCreate(savedInstanceState); + super.onPostCreate(savedInstanceState); + } + + @Override + protected void onTitleChanged(CharSequence title, int color) { + getSherlock().dispatchTitleChanged(title, color); + super.onTitleChanged(title, color); + } + + @Override + public final boolean onMenuOpened(int featureId, android.view.Menu menu) { + if (getSherlock().dispatchMenuOpened(featureId, menu)) { + return true; + } + return super.onMenuOpened(featureId, menu); + } + + @Override + public void onPanelClosed(int featureId, android.view.Menu menu) { + getSherlock().dispatchPanelClosed(featureId, menu); + super.onPanelClosed(featureId, menu); + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + if (getSherlock().dispatchKeyEvent(event)) { + return true; + } + return super.dispatchKeyEvent(event); + } + + + /////////////////////////////////////////////////////////////////////////// + // Native menu handling + /////////////////////////////////////////////////////////////////////////// + + public MenuInflater getSupportMenuInflater() { + return getSherlock().getMenuInflater(); + } + + public void invalidateOptionsMenu() { + getSherlock().dispatchInvalidateOptionsMenu(); + } + + public void supportInvalidateOptionsMenu() { + invalidateOptionsMenu(); + } + + @Override + public final boolean onCreateOptionsMenu(android.view.Menu menu) { + return getSherlock().dispatchCreateOptionsMenu(menu); + } + + @Override + public final boolean onPrepareOptionsMenu(android.view.Menu menu) { + return getSherlock().dispatchPrepareOptionsMenu(menu); + } + + @Override + public final boolean onOptionsItemSelected(android.view.MenuItem item) { + return getSherlock().dispatchOptionsItemSelected(item); + } + + @Override + public void openOptionsMenu() { + if (!getSherlock().dispatchOpenOptionsMenu()) { + super.openOptionsMenu(); + } + } + + @Override + public void closeOptionsMenu() { + if (!getSherlock().dispatchCloseOptionsMenu()) { + super.closeOptionsMenu(); + } + } + + + /////////////////////////////////////////////////////////////////////////// + // Sherlock menu handling + /////////////////////////////////////////////////////////////////////////// + + @Override + public boolean onCreatePanelMenu(int featureId, Menu menu) { + if (featureId == Window.FEATURE_OPTIONS_PANEL) { + return onCreateOptionsMenu(menu); + } + return false; + } + + public boolean onCreateOptionsMenu(Menu menu) { + return true; + } + + @Override + public boolean onPreparePanel(int featureId, View view, Menu menu) { + if (featureId == Window.FEATURE_OPTIONS_PANEL) { + return onPrepareOptionsMenu(menu); + } + return false; + } + + public boolean onPrepareOptionsMenu(Menu menu) { + return true; + } + + @Override + public boolean onMenuItemSelected(int featureId, MenuItem item) { + if (featureId == Window.FEATURE_OPTIONS_PANEL) { + return onOptionsItemSelected(item); + } + return false; + } + + public boolean onOptionsItemSelected(MenuItem item) { + return false; + } + + + /////////////////////////////////////////////////////////////////////////// + // Content + /////////////////////////////////////////////////////////////////////////// + + @Override + public void addContentView(View view, LayoutParams params) { + getSherlock().addContentView(view, params); + } + + @Override + public void setContentView(int layoutResId) { + getSherlock().setContentView(layoutResId); + } + + @Override + public void setContentView(View view, LayoutParams params) { + getSherlock().setContentView(view, params); + } + + @Override + public void setContentView(View view) { + getSherlock().setContentView(view); + } + + public void requestWindowFeature(long featureId) { + getSherlock().requestFeature((int)featureId); + } + + + /////////////////////////////////////////////////////////////////////////// + // Progress Indication + /////////////////////////////////////////////////////////////////////////// + + public void setSupportProgress(int progress) { + getSherlock().setProgress(progress); + } + + public void setSupportProgressBarIndeterminate(boolean indeterminate) { + getSherlock().setProgressBarIndeterminate(indeterminate); + } + + public void setSupportProgressBarIndeterminateVisibility(boolean visible) { + getSherlock().setProgressBarIndeterminateVisibility(visible); + } + + public void setSupportProgressBarVisibility(boolean visible) { + getSherlock().setProgressBarVisibility(visible); + } + + public void setSupportSecondaryProgress(int secondaryProgress) { + getSherlock().setSecondaryProgress(secondaryProgress); + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockListFragment.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockListFragment.java new file mode 100644 index 00000000..03a312b3 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockListFragment.java @@ -0,0 +1,76 @@ +package com.actionbarsherlock.app; + +import static com.actionbarsherlock.app.SherlockFragmentActivity.DEBUG; +import android.app.Activity; +import android.support.v4.app.ListFragment; +import android.util.Log; +import com.actionbarsherlock.internal.view.menu.MenuItemMule; +import com.actionbarsherlock.internal.view.menu.MenuMule; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuInflater; +import com.actionbarsherlock.view.MenuItem; + +public class SherlockListFragment extends ListFragment { + private static final String TAG = "SherlockListFragment"; + + private SherlockFragmentActivity mActivity; + + public SherlockFragmentActivity getSherlockActivity() { + return mActivity; + } + + @Override + public void onAttach(Activity activity) { + if (!(activity instanceof SherlockFragmentActivity)) { + throw new IllegalStateException(TAG + " must be attached to a SherlockFragmentActivity."); + } + mActivity = (SherlockFragmentActivity)activity; + + super.onAttach(activity); + } + + @Override + public final void onCreateOptionsMenu(android.view.Menu menu, android.view.MenuInflater inflater) { + if (DEBUG) Log.d(TAG, "[onCreateOptionsMenu] menu: " + menu + ", inflater: " + inflater); + + if (menu instanceof MenuMule) { + MenuMule mule = (MenuMule)menu; + mule.mDispatchShow = true; + onCreateOptionsMenu(mule.unwrap(), mActivity.getSupportMenuInflater()); + } + } + + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + //Nothing to see here. + } + + @Override + public final void onPrepareOptionsMenu(android.view.Menu menu) { + if (DEBUG) Log.d(TAG, "[onPrepareOptionsMenu] menu: " + menu); + + if (menu instanceof MenuMule) { + MenuMule mule = (MenuMule)menu; + mule.mDispatchShow = true; + onPrepareOptionsMenu(mule.unwrap()); + } + } + + public void onPrepareOptionsMenu(Menu menu) { + //Nothing to see here. + } + + @Override + public final boolean onOptionsItemSelected(android.view.MenuItem item) { + if (DEBUG) Log.d(TAG, "[onOptionsItemSelected] item: " + item); + + if (item instanceof MenuItemMule) { + return onOptionsItemSelected(((MenuItemMule)item).unwrap()); + } + return false; + } + + public boolean onOptionsItemSelected(MenuItem item) { + //Nothing to see here. + return false; + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockPreferenceActivity.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockPreferenceActivity.java new file mode 100644 index 00000000..71e40300 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockPreferenceActivity.java @@ -0,0 +1,253 @@ +package com.actionbarsherlock.app; + +import android.content.res.Configuration; +import android.os.Bundle; +import android.preference.PreferenceActivity; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup.LayoutParams; +import android.view.Window; +import com.actionbarsherlock.ActionBarSherlock; +import com.actionbarsherlock.ActionBarSherlock.OnActionModeFinishedListener; +import com.actionbarsherlock.ActionBarSherlock.OnActionModeStartedListener; +import com.actionbarsherlock.ActionBarSherlock.OnCreatePanelMenuListener; +import com.actionbarsherlock.ActionBarSherlock.OnMenuItemSelectedListener; +import com.actionbarsherlock.ActionBarSherlock.OnPreparePanelListener; +import com.actionbarsherlock.view.ActionMode; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuInflater; +import com.actionbarsherlock.view.MenuItem; + +public abstract class SherlockPreferenceActivity extends PreferenceActivity implements OnCreatePanelMenuListener, OnPreparePanelListener, OnMenuItemSelectedListener, OnActionModeStartedListener, OnActionModeFinishedListener { + private ActionBarSherlock mSherlock; + + protected final ActionBarSherlock getSherlock() { + if (mSherlock == null) { + mSherlock = ActionBarSherlock.wrap(this, ActionBarSherlock.FLAG_DELEGATE); + } + return mSherlock; + } + + + /////////////////////////////////////////////////////////////////////////// + // Action bar and mode + /////////////////////////////////////////////////////////////////////////// + + public ActionBar getSupportActionBar() { + return getSherlock().getActionBar(); + } + + public ActionMode startActionMode(ActionMode.Callback callback) { + return getSherlock().startActionMode(callback); + } + + @Override + public void onActionModeStarted(ActionMode mode) {} + + @Override + public void onActionModeFinished(ActionMode mode) {} + + + /////////////////////////////////////////////////////////////////////////// + // General lifecycle/callback dispatching + /////////////////////////////////////////////////////////////////////////// + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + getSherlock().dispatchConfigurationChanged(newConfig); + } + + @Override + protected void onPostResume() { + super.onPostResume(); + getSherlock().dispatchPostResume(); + } + + @Override + protected void onPause() { + getSherlock().dispatchPause(); + super.onPause(); + } + + @Override + protected void onStop() { + getSherlock().dispatchStop(); + super.onStop(); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + getSherlock().dispatchPostCreate(savedInstanceState); + super.onPostCreate(savedInstanceState); + } + + @Override + protected void onTitleChanged(CharSequence title, int color) { + getSherlock().dispatchTitleChanged(title, color); + super.onTitleChanged(title, color); + } + + @Override + public final boolean onMenuOpened(int featureId, android.view.Menu menu) { + if (getSherlock().dispatchMenuOpened(featureId, menu)) { + return true; + } + return super.onMenuOpened(featureId, menu); + } + + @Override + public void onPanelClosed(int featureId, android.view.Menu menu) { + getSherlock().dispatchPanelClosed(featureId, menu); + super.onPanelClosed(featureId, menu); + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + if (getSherlock().dispatchKeyEvent(event)) { + return true; + } + return super.dispatchKeyEvent(event); + } + + + /////////////////////////////////////////////////////////////////////////// + // Native menu handling + /////////////////////////////////////////////////////////////////////////// + + public MenuInflater getSupportMenuInflater() { + return getSherlock().getMenuInflater(); + } + + public void invalidateOptionsMenu() { + getSherlock().dispatchInvalidateOptionsMenu(); + } + + public void supportInvalidateOptionsMenu() { + invalidateOptionsMenu(); + } + + @Override + public final boolean onCreateOptionsMenu(android.view.Menu menu) { + return getSherlock().dispatchCreateOptionsMenu(menu); + } + + @Override + public final boolean onPrepareOptionsMenu(android.view.Menu menu) { + return getSherlock().dispatchPrepareOptionsMenu(menu); + } + + @Override + public final boolean onOptionsItemSelected(android.view.MenuItem item) { + return getSherlock().dispatchOptionsItemSelected(item); + } + + @Override + public void openOptionsMenu() { + if (!getSherlock().dispatchOpenOptionsMenu()) { + super.openOptionsMenu(); + } + } + + @Override + public void closeOptionsMenu() { + if (!getSherlock().dispatchCloseOptionsMenu()) { + super.closeOptionsMenu(); + } + } + + + /////////////////////////////////////////////////////////////////////////// + // Sherlock menu handling + /////////////////////////////////////////////////////////////////////////// + + @Override + public boolean onCreatePanelMenu(int featureId, Menu menu) { + if (featureId == Window.FEATURE_OPTIONS_PANEL) { + return onCreateOptionsMenu(menu); + } + return false; + } + + public boolean onCreateOptionsMenu(Menu menu) { + return true; + } + + @Override + public boolean onPreparePanel(int featureId, View view, Menu menu) { + if (featureId == Window.FEATURE_OPTIONS_PANEL) { + return onPrepareOptionsMenu(menu); + } + return false; + } + + public boolean onPrepareOptionsMenu(Menu menu) { + return true; + } + + @Override + public boolean onMenuItemSelected(int featureId, MenuItem item) { + if (featureId == Window.FEATURE_OPTIONS_PANEL) { + return onOptionsItemSelected(item); + } + return false; + } + + public boolean onOptionsItemSelected(MenuItem item) { + return false; + } + + + /////////////////////////////////////////////////////////////////////////// + // Content + /////////////////////////////////////////////////////////////////////////// + + @Override + public void addContentView(View view, LayoutParams params) { + getSherlock().addContentView(view, params); + } + + @Override + public void setContentView(int layoutResId) { + getSherlock().setContentView(layoutResId); + } + + @Override + public void setContentView(View view, LayoutParams params) { + getSherlock().setContentView(view, params); + } + + @Override + public void setContentView(View view) { + getSherlock().setContentView(view); + } + + public void requestWindowFeature(long featureId) { + getSherlock().requestFeature((int)featureId); + } + + + /////////////////////////////////////////////////////////////////////////// + // Progress Indication + /////////////////////////////////////////////////////////////////////////// + + public void setSupportProgress(int progress) { + getSherlock().setProgress(progress); + } + + public void setSupportProgressBarIndeterminate(boolean indeterminate) { + getSherlock().setProgressBarIndeterminate(indeterminate); + } + + public void setSupportProgressBarIndeterminateVisibility(boolean visible) { + getSherlock().setProgressBarIndeterminateVisibility(visible); + } + + public void setSupportProgressBarVisibility(boolean visible) { + getSherlock().setProgressBarVisibility(visible); + } + + public void setSupportSecondaryProgress(int secondaryProgress) { + getSherlock().setSecondaryProgress(secondaryProgress); + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ActionBarSherlockCompat.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ActionBarSherlockCompat.java new file mode 100644 index 00000000..f080bfe9 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ActionBarSherlockCompat.java @@ -0,0 +1,1200 @@ +package com.actionbarsherlock.internal; + +import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; +import static com.actionbarsherlock.internal.ResourcesCompat.getResources_getBoolean; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import org.xmlpull.v1.XmlPullParser; +import android.app.Activity; +import android.content.Context; +import android.content.pm.ActivityInfo; +import android.content.res.AssetManager; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.content.res.XmlResourceParser; +import android.os.Bundle; +import android.util.AndroidRuntimeException; +import android.util.Log; +import android.util.TypedValue; +import android.view.ContextThemeWrapper; +import android.view.KeyCharacterMap; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewStub; +import android.view.Window; +import android.view.accessibility.AccessibilityEvent; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.widget.FrameLayout; +import android.widget.TextView; +import com.actionbarsherlock.ActionBarSherlock; +import com.actionbarsherlock.R; +import com.actionbarsherlock.app.ActionBar; +import com.actionbarsherlock.internal.app.ActionBarImpl; +import com.actionbarsherlock.internal.view.StandaloneActionMode; +import com.actionbarsherlock.internal.view.menu.ActionMenuPresenter; +import com.actionbarsherlock.internal.view.menu.MenuBuilder; +import com.actionbarsherlock.internal.view.menu.MenuItemImpl; +import com.actionbarsherlock.internal.view.menu.MenuPresenter; +import com.actionbarsherlock.internal.widget.ActionBarContainer; +import com.actionbarsherlock.internal.widget.ActionBarContextView; +import com.actionbarsherlock.internal.widget.ActionBarView; +import com.actionbarsherlock.internal.widget.IcsProgressBar; +import com.actionbarsherlock.view.ActionMode; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuItem; + +@ActionBarSherlock.Implementation(api = 7) +public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBuilder.Callback, com.actionbarsherlock.view.Window.Callback, MenuPresenter.Callback, android.view.MenuItem.OnMenuItemClickListener { + /** Window features which are enabled by default. */ + protected static final int DEFAULT_FEATURES = 0; + + + public ActionBarSherlockCompat(Activity activity, int flags) { + super(activity, flags); + } + + + /////////////////////////////////////////////////////////////////////////// + // Properties + /////////////////////////////////////////////////////////////////////////// + + /** Whether or not the device has a dedicated menu key button. */ + private boolean mReserveOverflow; + /** Lazy-load indicator for {@link #mReserveOverflow}. */ + private boolean mReserveOverflowSet = false; + + /** Current menu instance for managing action items. */ + private MenuBuilder mMenu; + /** Map between native options items and sherlock items. */ + protected HashMap mNativeItemMap; + /** Indication of a long-press on the hardware menu key. */ + private boolean mMenuKeyIsLongPress = false; + + /** Parent view of the window decoration (action bar, mode, etc.). */ + private ViewGroup mDecor; + /** Parent view of the activity content. */ + private ViewGroup mContentParent; + + /** Whether or not the title is stable and can be displayed. */ + private boolean mIsTitleReady = false; + + /* Emulate PanelFeatureState */ + private boolean mClosingActionMenu; + private boolean mMenuIsPrepared; + private boolean mMenuRefreshContent; + private Bundle mMenuFrozenActionViewState; + + /** Implementation which backs the action bar interface API. */ + private ActionBarImpl aActionBar; + /** Main action bar view which displays the core content. */ + private ActionBarView wActionBar; + /** Relevant window and action bar features flags. */ + private int mFeatures = DEFAULT_FEATURES; + /** Relevant user interface option flags. */ + private int mUiOptions = 0; + + /** Decor indeterminate progress indicator. */ + private IcsProgressBar mCircularProgressBar; + /** Decor progress indicator. */ + private IcsProgressBar mHorizontalProgressBar; + + /** Current displayed context action bar, if any. */ + private ActionMode mActionMode; + /** Parent view in which the context action bar is displayed. */ + private ActionBarContextView mActionModeView; + + /** Title view used with dialogs. */ + private TextView mTitleView; + /** Current activity title. */ + private CharSequence mTitle = null; + /** Whether or not this "activity" is floating (i.e., a dialog) */ + private boolean mIsFloating; + + + + /////////////////////////////////////////////////////////////////////////// + // Instance methods + /////////////////////////////////////////////////////////////////////////// + + @Override + public ActionBar getActionBar() { + if (DEBUG) Log.d(TAG, "[getActionBar]"); + + initActionBar(); + return aActionBar; + } + + private void initActionBar() { + if (DEBUG) Log.d(TAG, "[initActionBar]"); + + // Initializing the window decor can change window feature flags. + // Make sure that we have the correct set before performing the test below. + if (mDecor == null) { + installDecor(); + } + + if ((aActionBar != null) || !hasFeature(Window.FEATURE_ACTION_BAR) || hasFeature(Window.FEATURE_NO_TITLE) || mActivity.isChild()) { + return; + } + + aActionBar = new ActionBarImpl(mActivity, mFeatures); + + if (!mIsDelegate) { + //We may never get another chance to set the title + wActionBar.setWindowTitle(mActivity.getTitle()); + } + } + + @Override + protected Context getThemedContext() { + return aActionBar.getThemedContext(); + } + + @Override + public void setTitle(CharSequence title) { + if (DEBUG) Log.d(TAG, "[setTitle] title: " + title); + + dispatchTitleChanged(title, 0); + } + + @Override + public ActionMode startActionMode(ActionMode.Callback callback) { + if (DEBUG) Log.d(TAG, "[startActionMode] callback: " + callback); + + if (mActionMode != null) { + mActionMode.finish(); + } + + final ActionMode.Callback wrappedCallback = new ActionModeCallbackWrapper(callback); + ActionMode mode = null; + + //Emulate Activity's onWindowStartingActionMode: + initActionBar(); + if (aActionBar != null) { + mode = aActionBar.startActionMode(wrappedCallback); + } + + if (mode != null) { + mActionMode = mode; + } else { + if (mActionModeView == null) { + ViewStub stub = (ViewStub)mDecor.findViewById(R.id.abs__action_mode_bar_stub); + if (stub != null) { + mActionModeView = (ActionBarContextView)stub.inflate(); + } + } + if (mActionModeView != null) { + mActionModeView.killMode(); + mode = new StandaloneActionMode(mActivity, mActionModeView, wrappedCallback, true); + if (callback.onCreateActionMode(mode, mode.getMenu())) { + mode.invalidate(); + mActionModeView.initForMode(mode); + mActionModeView.setVisibility(View.VISIBLE); + mActionMode = mode; + mActionModeView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); + } else { + mActionMode = null; + } + } + } + if (mActionMode != null && mActivity instanceof OnActionModeStartedListener) { + ((OnActionModeStartedListener)mActivity).onActionModeStarted(mActionMode); + } + return mActionMode; + } + + + /////////////////////////////////////////////////////////////////////////// + // Lifecycle and interaction callbacks for delegation + /////////////////////////////////////////////////////////////////////////// + + @Override + public void dispatchConfigurationChanged(Configuration newConfig) { + if (DEBUG) Log.d(TAG, "[dispatchConfigurationChanged] newConfig: " + newConfig); + + if (aActionBar != null) { + aActionBar.onConfigurationChanged(newConfig); + } + } + + @Override + public void dispatchPostResume() { + if (DEBUG) Log.d(TAG, "[dispatchPostResume]"); + + if (aActionBar != null) { + aActionBar.setShowHideAnimationEnabled(true); + } + } + + @Override + public void dispatchPause() { + if (DEBUG) Log.d(TAG, "[dispatchPause]"); + + if (wActionBar != null && wActionBar.isOverflowMenuShowing()) { + wActionBar.hideOverflowMenu(); + } + } + + @Override + public void dispatchStop() { + if (DEBUG) Log.d(TAG, "[dispatchStop]"); + + if (aActionBar != null) { + aActionBar.setShowHideAnimationEnabled(false); + } + } + + @Override + public void dispatchInvalidateOptionsMenu() { + if (DEBUG) Log.d(TAG, "[dispatchInvalidateOptionsMenu]"); + + Bundle savedActionViewStates = null; + if (mMenu != null) { + savedActionViewStates = new Bundle(); + mMenu.saveActionViewStates(savedActionViewStates); + if (savedActionViewStates.size() > 0) { + mMenuFrozenActionViewState = savedActionViewStates; + } + // This will be started again when the panel is prepared. + mMenu.stopDispatchingItemsChanged(); + mMenu.clear(); + } + mMenuRefreshContent = true; + + // Prepare the options panel if we have an action bar + if (wActionBar != null) { + mMenuIsPrepared = false; + preparePanel(); + } + } + + @Override + public boolean dispatchOpenOptionsMenu() { + if (DEBUG) Log.d(TAG, "[dispatchOpenOptionsMenu]"); + + if (!isReservingOverflow()) { + return false; + } + + return wActionBar.showOverflowMenu(); + } + + @Override + public boolean dispatchCloseOptionsMenu() { + if (DEBUG) Log.d(TAG, "[dispatchCloseOptionsMenu]"); + + if (!isReservingOverflow()) { + return false; + } + + return wActionBar.hideOverflowMenu(); + } + + @Override + public void dispatchPostCreate(Bundle savedInstanceState) { + if (DEBUG) Log.d(TAG, "[dispatchOnPostCreate]"); + + if (mIsDelegate) { + mIsTitleReady = true; + } + + if (mDecor == null) { + initActionBar(); + } + } + + @Override + public boolean dispatchCreateOptionsMenu(android.view.Menu menu) { + if (DEBUG) { + Log.d(TAG, "[dispatchCreateOptionsMenu] android.view.Menu: " + menu); + Log.d(TAG, "[dispatchCreateOptionsMenu] returning true"); + } + return true; + } + + @Override + public boolean dispatchPrepareOptionsMenu(android.view.Menu menu) { + if (DEBUG) Log.d(TAG, "[dispatchPrepareOptionsMenu] android.view.Menu: " + menu); + + if (mActionMode != null) { + return false; + } + + mMenuIsPrepared = false; + if (!preparePanel()) { + return false; + } + + if (isReservingOverflow()) { + return false; + } + + if (mNativeItemMap == null) { + mNativeItemMap = new HashMap(); + } else { + mNativeItemMap.clear(); + } + + if (mMenu == null) { + return false; + } + + boolean result = mMenu.bindNativeOverflow(menu, this, mNativeItemMap); + if (DEBUG) Log.d(TAG, "[dispatchPrepareOptionsMenu] returning " + result); + return result; + } + + @Override + public boolean dispatchOptionsItemSelected(android.view.MenuItem item) { + throw new IllegalStateException("Native callback invoked. Create a test case and report!"); + } + + @Override + public boolean dispatchMenuOpened(int featureId, android.view.Menu menu) { + if (DEBUG) Log.d(TAG, "[dispatchMenuOpened] featureId: " + featureId + ", menu: " + menu); + + if (featureId == Window.FEATURE_ACTION_BAR || featureId == Window.FEATURE_OPTIONS_PANEL) { + if (aActionBar != null) { + aActionBar.dispatchMenuVisibilityChanged(true); + } + return true; + } + + return false; + } + + @Override + public void dispatchPanelClosed(int featureId, android.view.Menu menu){ + if (DEBUG) Log.d(TAG, "[dispatchPanelClosed] featureId: " + featureId + ", menu: " + menu); + + if (featureId == Window.FEATURE_ACTION_BAR || featureId == Window.FEATURE_OPTIONS_PANEL) { + if (aActionBar != null) { + aActionBar.dispatchMenuVisibilityChanged(false); + } + } + } + + @Override + public void dispatchTitleChanged(CharSequence title, int color) { + if (DEBUG) Log.d(TAG, "[dispatchTitleChanged] title: " + title + ", color: " + color); + + if (!mIsDelegate || mIsTitleReady) { + if (mTitleView != null) { + mTitleView.setText(title); + } else if (wActionBar != null) { + wActionBar.setWindowTitle(title); + } + } + + mTitle = title; + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + if (DEBUG) Log.d(TAG, "[dispatchKeyEvent] event: " + event); + + final int keyCode = event.getKeyCode(); + + // Not handled by the view hierarchy, does the action bar want it + // to cancel out of something special? + if (keyCode == KeyEvent.KEYCODE_BACK) { + final int action = event.getAction(); + // Back cancels action modes first. + if (mActionMode != null) { + if (action == KeyEvent.ACTION_UP) { + mActionMode.finish(); + } + if (DEBUG) Log.d(TAG, "[dispatchKeyEvent] returning true"); + return true; + } + + // Next collapse any expanded action views. + if (aActionBar != null && wActionBar.hasExpandedActionView()) { + if (action == KeyEvent.ACTION_UP) { + wActionBar.collapseActionView(); + } + if (DEBUG) Log.d(TAG, "[dispatchKeyEvent] returning true"); + return true; + } + } + + boolean result = false; + if (keyCode == KeyEvent.KEYCODE_MENU && isReservingOverflow()) { + if (event.getAction() == KeyEvent.ACTION_DOWN && event.isLongPress()) { + mMenuKeyIsLongPress = true; + } else if (event.getAction() == KeyEvent.ACTION_UP) { + if (!mMenuKeyIsLongPress) { + if (mActionMode == null) { + if (wActionBar.isOverflowMenuShowing()) { + wActionBar.hideOverflowMenu(); + } else { + wActionBar.showOverflowMenu(); + } + } + result = true; + } + mMenuKeyIsLongPress = false; + } + } + + if (DEBUG) Log.d(TAG, "[dispatchKeyEvent] returning " + result); + return result; + } + + + /////////////////////////////////////////////////////////////////////////// + // Menu callback lifecycle and creation + /////////////////////////////////////////////////////////////////////////// + + private boolean preparePanel() { + // Already prepared (isPrepared will be reset to false later) + if (mMenuIsPrepared) { + return true; + } + + // Init the panel state's menu--return false if init failed + if (mMenu == null || mMenuRefreshContent) { + if (mMenu == null) { + if (!initializePanelMenu() || (mMenu == null)) { + return false; + } + } + + if (wActionBar != null) { + wActionBar.setMenu(mMenu, this); + } + + // Call callback, and return if it doesn't want to display menu. + + // Creating the panel menu will involve a lot of manipulation; + // don't dispatch change events to presenters until we're done. + mMenu.stopDispatchingItemsChanged(); + if (!callbackCreateOptionsMenu(mMenu)) { + // Ditch the menu created above + mMenu = null; + + if (wActionBar != null) { + // Don't show it in the action bar either + wActionBar.setMenu(null, this); + } + + return false; + } + + mMenuRefreshContent = false; + } + + // Callback and return if the callback does not want to show the menu + + // Preparing the panel menu can involve a lot of manipulation; + // don't dispatch change events to presenters until we're done. + mMenu.stopDispatchingItemsChanged(); + + // Restore action view state before we prepare. This gives apps + // an opportunity to override frozen/restored state in onPrepare. + if (mMenuFrozenActionViewState != null) { + mMenu.restoreActionViewStates(mMenuFrozenActionViewState); + mMenuFrozenActionViewState = null; + } + + if (!callbackPrepareOptionsMenu(mMenu)) { + if (wActionBar != null) { + // The app didn't want to show the menu for now but it still exists. + // Clear it out of the action bar. + wActionBar.setMenu(null, this); + } + mMenu.startDispatchingItemsChanged(); + return false; + } + + // Set the proper keymap + KeyCharacterMap kmap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD); + mMenu.setQwertyMode(kmap.getKeyboardType() != KeyCharacterMap.NUMERIC); + mMenu.startDispatchingItemsChanged(); + + // Set other state + mMenuIsPrepared = true; + + return true; + } + + public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) { + return callbackOptionsItemSelected(item); + } + + public void onMenuModeChange(MenuBuilder menu) { + reopenMenu(true); + } + + private void reopenMenu(boolean toggleMenuMode) { + if (wActionBar != null && wActionBar.isOverflowReserved()) { + if (!wActionBar.isOverflowMenuShowing() || !toggleMenuMode) { + if (wActionBar.getVisibility() == View.VISIBLE) { + if (callbackPrepareOptionsMenu(mMenu)) { + wActionBar.showOverflowMenu(); + } + } + } else { + wActionBar.hideOverflowMenu(); + } + return; + } + } + + private boolean initializePanelMenu() { + Context context = mActivity;//getContext(); + + // If we have an action bar, initialize the menu with a context themed for it. + if (wActionBar != null) { + TypedValue outValue = new TypedValue(); + Resources.Theme currentTheme = context.getTheme(); + currentTheme.resolveAttribute(R.attr.actionBarWidgetTheme, + outValue, true); + final int targetThemeRes = outValue.resourceId; + + if (targetThemeRes != 0 /*&& context.getThemeResId() != targetThemeRes*/) { + context = new ContextThemeWrapper(context, targetThemeRes); + } + } + + mMenu = new MenuBuilder(context); + mMenu.setCallback(this); + + return true; + } + + void checkCloseActionMenu(Menu menu) { + if (mClosingActionMenu) { + return; + } + + mClosingActionMenu = true; + wActionBar.dismissPopupMenus(); + //Callback cb = getCallback(); + //if (cb != null && !isDestroyed()) { + // cb.onPanelClosed(FEATURE_ACTION_BAR, menu); + //} + mClosingActionMenu = false; + } + + @Override + public boolean onOpenSubMenu(MenuBuilder subMenu) { + return true; + } + + @Override + public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) { + checkCloseActionMenu(menu); + } + + @Override + public boolean onMenuItemClick(android.view.MenuItem item) { + if (DEBUG) Log.d(TAG, "[mNativeItemListener.onMenuItemClick] item: " + item); + + final MenuItemImpl sherlockItem = mNativeItemMap.get(item); + if (sherlockItem != null) { + sherlockItem.invoke(); + } else { + Log.e(TAG, "Options item \"" + item + "\" not found in mapping"); + } + + return true; //Do not allow continuation of native handling + } + + @Override + public boolean onMenuItemSelected(int featureId, MenuItem item) { + return callbackOptionsItemSelected(item); + } + + + /////////////////////////////////////////////////////////////////////////// + // Progress bar interaction and internal handling + /////////////////////////////////////////////////////////////////////////// + + @Override + public void setProgressBarVisibility(boolean visible) { + if (DEBUG) Log.d(TAG, "[setProgressBarVisibility] visible: " + visible); + + setFeatureInt(Window.FEATURE_PROGRESS, visible ? Window.PROGRESS_VISIBILITY_ON : + Window.PROGRESS_VISIBILITY_OFF); + } + + @Override + public void setProgressBarIndeterminateVisibility(boolean visible) { + if (DEBUG) Log.d(TAG, "[setProgressBarIndeterminateVisibility] visible: " + visible); + + setFeatureInt(Window.FEATURE_INDETERMINATE_PROGRESS, + visible ? Window.PROGRESS_VISIBILITY_ON : Window.PROGRESS_VISIBILITY_OFF); + } + + @Override + public void setProgressBarIndeterminate(boolean indeterminate) { + if (DEBUG) Log.d(TAG, "[setProgressBarIndeterminate] indeterminate: " + indeterminate); + + setFeatureInt(Window.FEATURE_PROGRESS, + indeterminate ? Window.PROGRESS_INDETERMINATE_ON : Window.PROGRESS_INDETERMINATE_OFF); + } + + @Override + public void setProgress(int progress) { + if (DEBUG) Log.d(TAG, "[setProgress] progress: " + progress); + + setFeatureInt(Window.FEATURE_PROGRESS, progress + Window.PROGRESS_START); + } + + @Override + public void setSecondaryProgress(int secondaryProgress) { + if (DEBUG) Log.d(TAG, "[setSecondaryProgress] secondaryProgress: " + secondaryProgress); + + setFeatureInt(Window.FEATURE_PROGRESS, + secondaryProgress + Window.PROGRESS_SECONDARY_START); + } + + private void setFeatureInt(int featureId, int value) { + updateInt(featureId, value, false); + } + + private void updateInt(int featureId, int value, boolean fromResume) { + // Do nothing if the decor is not yet installed... an update will + // need to be forced when we eventually become active. + if (mContentParent == null) { + return; + } + + final int featureMask = 1 << featureId; + + if ((getFeatures() & featureMask) == 0 && !fromResume) { + return; + } + + onIntChanged(featureId, value); + } + + private void onIntChanged(int featureId, int value) { + if (featureId == Window.FEATURE_PROGRESS || featureId == Window.FEATURE_INDETERMINATE_PROGRESS) { + updateProgressBars(value); + } + } + + private void updateProgressBars(int value) { + IcsProgressBar circularProgressBar = getCircularProgressBar(true); + IcsProgressBar horizontalProgressBar = getHorizontalProgressBar(true); + + final int features = mFeatures;//getLocalFeatures(); + if (value == Window.PROGRESS_VISIBILITY_ON) { + if ((features & (1 << Window.FEATURE_PROGRESS)) != 0) { + int level = horizontalProgressBar.getProgress(); + int visibility = (horizontalProgressBar.isIndeterminate() || level < 10000) ? + View.VISIBLE : View.INVISIBLE; + horizontalProgressBar.setVisibility(visibility); + } + if ((features & (1 << Window.FEATURE_INDETERMINATE_PROGRESS)) != 0) { + circularProgressBar.setVisibility(View.VISIBLE); + } + } else if (value == Window.PROGRESS_VISIBILITY_OFF) { + if ((features & (1 << Window.FEATURE_PROGRESS)) != 0) { + horizontalProgressBar.setVisibility(View.GONE); + } + if ((features & (1 << Window.FEATURE_INDETERMINATE_PROGRESS)) != 0) { + circularProgressBar.setVisibility(View.GONE); + } + } else if (value == Window.PROGRESS_INDETERMINATE_ON) { + horizontalProgressBar.setIndeterminate(true); + } else if (value == Window.PROGRESS_INDETERMINATE_OFF) { + horizontalProgressBar.setIndeterminate(false); + } else if (Window.PROGRESS_START <= value && value <= Window.PROGRESS_END) { + // We want to set the progress value before testing for visibility + // so that when the progress bar becomes visible again, it has the + // correct level. + horizontalProgressBar.setProgress(value - Window.PROGRESS_START); + + if (value < Window.PROGRESS_END) { + showProgressBars(horizontalProgressBar, circularProgressBar); + } else { + hideProgressBars(horizontalProgressBar, circularProgressBar); + } + } else if (Window.PROGRESS_SECONDARY_START <= value && value <= Window.PROGRESS_SECONDARY_END) { + horizontalProgressBar.setSecondaryProgress(value - Window.PROGRESS_SECONDARY_START); + + showProgressBars(horizontalProgressBar, circularProgressBar); + } + } + + private void showProgressBars(IcsProgressBar horizontalProgressBar, IcsProgressBar spinnyProgressBar) { + final int features = mFeatures;//getLocalFeatures(); + if ((features & (1 << Window.FEATURE_INDETERMINATE_PROGRESS)) != 0 && + spinnyProgressBar.getVisibility() == View.INVISIBLE) { + spinnyProgressBar.setVisibility(View.VISIBLE); + } + // Only show the progress bars if the primary progress is not complete + if ((features & (1 << Window.FEATURE_PROGRESS)) != 0 && + horizontalProgressBar.getProgress() < 10000) { + horizontalProgressBar.setVisibility(View.VISIBLE); + } + } + + private void hideProgressBars(IcsProgressBar horizontalProgressBar, IcsProgressBar spinnyProgressBar) { + final int features = mFeatures;//getLocalFeatures(); + Animation anim = AnimationUtils.loadAnimation(mActivity, android.R.anim.fade_out); + anim.setDuration(1000); + if ((features & (1 << Window.FEATURE_INDETERMINATE_PROGRESS)) != 0 && + spinnyProgressBar.getVisibility() == View.VISIBLE) { + spinnyProgressBar.startAnimation(anim); + spinnyProgressBar.setVisibility(View.INVISIBLE); + } + if ((features & (1 << Window.FEATURE_PROGRESS)) != 0 && + horizontalProgressBar.getVisibility() == View.VISIBLE) { + horizontalProgressBar.startAnimation(anim); + horizontalProgressBar.setVisibility(View.INVISIBLE); + } + } + + private IcsProgressBar getCircularProgressBar(boolean shouldInstallDecor) { + if (mCircularProgressBar != null) { + return mCircularProgressBar; + } + if (mContentParent == null && shouldInstallDecor) { + installDecor(); + } + mCircularProgressBar = (IcsProgressBar)mDecor.findViewById(R.id.abs__progress_circular); + if (mCircularProgressBar != null) { + mCircularProgressBar.setVisibility(View.INVISIBLE); + } + return mCircularProgressBar; + } + + private IcsProgressBar getHorizontalProgressBar(boolean shouldInstallDecor) { + if (mHorizontalProgressBar != null) { + return mHorizontalProgressBar; + } + if (mContentParent == null && shouldInstallDecor) { + installDecor(); + } + mHorizontalProgressBar = (IcsProgressBar)mDecor.findViewById(R.id.abs__progress_horizontal); + if (mHorizontalProgressBar != null) { + mHorizontalProgressBar.setVisibility(View.INVISIBLE); + } + return mHorizontalProgressBar; + } + + + /////////////////////////////////////////////////////////////////////////// + // Feature management and content interaction and creation + /////////////////////////////////////////////////////////////////////////// + + private int getFeatures() { + if (DEBUG) Log.d(TAG, "[getFeatures] returning " + mFeatures); + + return mFeatures; + } + + @Override + public boolean hasFeature(int featureId) { + if (DEBUG) Log.d(TAG, "[hasFeature] featureId: " + featureId); + + boolean result = (mFeatures & (1 << featureId)) != 0; + if (DEBUG) Log.d(TAG, "[hasFeature] returning " + result); + return result; + } + + @Override + public boolean requestFeature(int featureId) { + if (DEBUG) Log.d(TAG, "[requestFeature] featureId: " + featureId); + + if (mContentParent != null) { + throw new AndroidRuntimeException("requestFeature() must be called before adding content"); + } + + switch (featureId) { + case Window.FEATURE_ACTION_BAR: + case Window.FEATURE_ACTION_BAR_OVERLAY: + case Window.FEATURE_ACTION_MODE_OVERLAY: + case Window.FEATURE_INDETERMINATE_PROGRESS: + case Window.FEATURE_NO_TITLE: + case Window.FEATURE_PROGRESS: + mFeatures |= (1 << featureId); + return true; + + default: + return false; + } + } + + @Override + public void setUiOptions(int uiOptions) { + if (DEBUG) Log.d(TAG, "[setUiOptions] uiOptions: " + uiOptions); + + mUiOptions = uiOptions; + } + + @Override + public void setUiOptions(int uiOptions, int mask) { + if (DEBUG) Log.d(TAG, "[setUiOptions] uiOptions: " + uiOptions + ", mask: " + mask); + + mUiOptions = (mUiOptions & ~mask) | (uiOptions & mask); + } + + @Override + public void setContentView(int layoutResId) { + if (DEBUG) Log.d(TAG, "[setContentView] layoutResId: " + layoutResId); + + if (mContentParent == null) { + installDecor(); + } else { + mContentParent.removeAllViews(); + } + mActivity.getLayoutInflater().inflate(layoutResId, mContentParent); + + android.view.Window.Callback callback = mActivity.getWindow().getCallback(); + if (callback != null) { + callback.onContentChanged(); + } + + initActionBar(); + } + + @Override + public void setContentView(View view, ViewGroup.LayoutParams params) { + if (DEBUG) Log.d(TAG, "[setContentView] view: " + view + ", params: " + params); + + if (mContentParent == null) { + installDecor(); + } else { + mContentParent.removeAllViews(); + } + mContentParent.addView(view, params); + + android.view.Window.Callback callback = mActivity.getWindow().getCallback(); + if (callback != null) { + callback.onContentChanged(); + } + + initActionBar(); + } + + @Override + public void addContentView(View view, ViewGroup.LayoutParams params) { + if (DEBUG) Log.d(TAG, "[addContentView] view: " + view + ", params: " + params); + + if (mContentParent == null) { + installDecor(); + } + mContentParent.addView(view, params); + + initActionBar(); + } + + private void installDecor() { + if (DEBUG) Log.d(TAG, "[installDecor]"); + + if (mDecor == null) { + mDecor = (ViewGroup)mActivity.getWindow().getDecorView().findViewById(android.R.id.content); + } + if (mContentParent == null) { + //Since we are not operating at the window level we need to take + //into account the fact that the true decor may have already been + //initialized and had content attached to it. If that is the case, + //copy over its children to our new content container. + List views = null; + if (mDecor.getChildCount() > 0) { + views = new ArrayList(1); //Usually there's only one child + for (int i = 0, children = mDecor.getChildCount(); i < children; i++) { + View child = mDecor.getChildAt(0); + mDecor.removeView(child); + views.add(child); + } + } + + mContentParent = generateLayout(); + + //Copy over the old children. See above for explanation. + if (views != null) { + for (View child : views) { + mContentParent.addView(child); + } + } + + mTitleView = (TextView)mDecor.findViewById(android.R.id.title); + if (mTitleView != null) { + if (hasFeature(Window.FEATURE_NO_TITLE)) { + mTitleView.setVisibility(View.GONE); + if (mContentParent instanceof FrameLayout) { + ((FrameLayout)mContentParent).setForeground(null); + } + } else { + mTitleView.setText(mTitle); + } + } else { + wActionBar = (ActionBarView)mDecor.findViewById(R.id.abs__action_bar); + if (wActionBar != null) { + wActionBar.setWindowCallback(this); + if (wActionBar.getTitle() == null) { + wActionBar.setWindowTitle(mActivity.getTitle()); + } + if (hasFeature(Window.FEATURE_PROGRESS)) { + wActionBar.initProgress(); + } + if (hasFeature(Window.FEATURE_INDETERMINATE_PROGRESS)) { + wActionBar.initIndeterminateProgress(); + } + + //Since we don't require onCreate dispatching, parse for uiOptions here + int uiOptions = loadUiOptionsFromManifest(mActivity); + if (uiOptions != 0) { + mUiOptions = uiOptions; + } + + boolean splitActionBar = false; + final boolean splitWhenNarrow = (mUiOptions & ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW) != 0; + if (splitWhenNarrow) { + splitActionBar = getResources_getBoolean(mActivity, R.bool.abs__split_action_bar_is_narrow); + } else { + splitActionBar = mActivity.getTheme() + .obtainStyledAttributes(R.styleable.SherlockTheme) + .getBoolean(R.styleable.SherlockTheme_windowSplitActionBar, false); + } + final ActionBarContainer splitView = (ActionBarContainer)mDecor.findViewById(R.id.abs__split_action_bar); + if (splitView != null) { + wActionBar.setSplitView(splitView); + wActionBar.setSplitActionBar(splitActionBar); + wActionBar.setSplitWhenNarrow(splitWhenNarrow); + + mActionModeView = (ActionBarContextView)mDecor.findViewById(R.id.abs__action_context_bar); + mActionModeView.setSplitView(splitView); + mActionModeView.setSplitActionBar(splitActionBar); + mActionModeView.setSplitWhenNarrow(splitWhenNarrow); + } else if (splitActionBar) { + Log.e(TAG, "Requested split action bar with incompatible window decor! Ignoring request."); + } + + // Post the panel invalidate for later; avoid application onCreateOptionsMenu + // being called in the middle of onCreate or similar. + mDecor.post(new Runnable() { + @Override + public void run() { + //Invalidate if the panel menu hasn't been created before this. + if (!mActivity.isFinishing() && mMenu == null) { + dispatchInvalidateOptionsMenu(); + } + } + }); + } + } + } + } + + private ViewGroup generateLayout() { + if (DEBUG) Log.d(TAG, "[generateLayout]"); + + // Apply data from current theme. + + TypedArray a = mActivity.getTheme().obtainStyledAttributes(R.styleable.SherlockTheme); + + mIsFloating = a.getBoolean(R.styleable.SherlockTheme_android_windowIsFloating, false); + + if (!a.hasValue(R.styleable.SherlockTheme_windowActionBar)) { + throw new IllegalStateException("You must use Theme.Sherlock, Theme.Sherlock.Light, Theme.Sherlock.Light.DarkActionBar, or a derivative."); + } + + if (a.getBoolean(R.styleable.SherlockTheme_windowNoTitle, false)) { + requestFeature(Window.FEATURE_NO_TITLE); + } else if (a.getBoolean(R.styleable.SherlockTheme_windowActionBar, false)) { + // Don't allow an action bar if there is no title. + requestFeature(Window.FEATURE_ACTION_BAR); + } + + if (a.getBoolean(R.styleable.SherlockTheme_windowActionBarOverlay, false)) { + requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); + } + + if (a.getBoolean(R.styleable.SherlockTheme_windowActionModeOverlay, false)) { + requestFeature(Window.FEATURE_ACTION_MODE_OVERLAY); + } + + a.recycle(); + + int layoutResource; + if (!hasFeature(Window.FEATURE_NO_TITLE)) { + if (mIsFloating) { + //Trash original dialog LinearLayout + mDecor = (ViewGroup)mDecor.getParent(); + mDecor.removeAllViews(); + + layoutResource = R.layout.abs__dialog_title_holo; + } else { + if (hasFeature(Window.FEATURE_ACTION_BAR_OVERLAY)) { + layoutResource = R.layout.abs__screen_action_bar_overlay; + } else { + layoutResource = R.layout.abs__screen_action_bar; + } + } + } else if (hasFeature(Window.FEATURE_ACTION_MODE_OVERLAY) && !hasFeature(Window.FEATURE_NO_TITLE)) { + layoutResource = R.layout.abs__screen_simple_overlay_action_mode; + } else { + layoutResource = R.layout.abs__screen_simple; + } + + if (DEBUG) Log.d(TAG, "[generateLayout] using screen XML " + mActivity.getResources().getString(layoutResource)); + View in = mActivity.getLayoutInflater().inflate(layoutResource, null); + mDecor.addView(in, new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)); + + ViewGroup contentParent = (ViewGroup)mDecor.findViewById(R.id.abs__content); + if (contentParent == null) { + throw new RuntimeException("Couldn't find content container view"); + } + + //Make our new child the true content view (for fragments). VERY VOLATILE! + mDecor.setId(View.NO_ID); + contentParent.setId(android.R.id.content); + + if (hasFeature(Window.FEATURE_INDETERMINATE_PROGRESS)) { + IcsProgressBar progress = getCircularProgressBar(false); + if (progress != null) { + progress.setIndeterminate(true); + } + } + + return contentParent; + } + + + /////////////////////////////////////////////////////////////////////////// + // Miscellaneous + /////////////////////////////////////////////////////////////////////////// + + /** + * Determine whether or not the device has a dedicated menu key. + * + * @return {@code true} if native menu key is present. + */ + private boolean isReservingOverflow() { + if (!mReserveOverflowSet) { + mReserveOverflow = ActionMenuPresenter.reserveOverflow(mActivity); + mReserveOverflowSet = true; + } + return mReserveOverflow; + } + + private static int loadUiOptionsFromManifest(Activity activity) { + int uiOptions = 0; + try { + final String thisPackage = activity.getClass().getName(); + if (DEBUG) Log.i(TAG, "Parsing AndroidManifest.xml for " + thisPackage); + + final String packageName = activity.getApplicationInfo().packageName; + final AssetManager am = activity.createPackageContext(packageName, 0).getAssets(); + final XmlResourceParser xml = am.openXmlResourceParser("AndroidManifest.xml"); + + int eventType = xml.getEventType(); + while (eventType != XmlPullParser.END_DOCUMENT) { + if (eventType == XmlPullParser.START_TAG) { + String name = xml.getName(); + + if ("application".equals(name)) { + //Check if the has the attribute + if (DEBUG) Log.d(TAG, "Got "); + + for (int i = xml.getAttributeCount() - 1; i >= 0; i--) { + if (DEBUG) Log.d(TAG, xml.getAttributeName(i) + ": " + xml.getAttributeValue(i)); + + if ("uiOptions".equals(xml.getAttributeName(i))) { + uiOptions = xml.getAttributeIntValue(i, 0); + break; //out of for loop + } + } + } else if ("activity".equals(name)) { + //Check if the is us and has the attribute + if (DEBUG) Log.d(TAG, "Got "); + Integer activityUiOptions = null; + String activityPackage = null; + boolean isOurActivity = false; + + for (int i = xml.getAttributeCount() - 1; i >= 0; i--) { + if (DEBUG) Log.d(TAG, xml.getAttributeName(i) + ": " + xml.getAttributeValue(i)); + + //We need both uiOptions and name attributes + String attrName = xml.getAttributeName(i); + if ("uiOptions".equals(attrName)) { + activityUiOptions = xml.getAttributeIntValue(i, 0); + } else if ("name".equals(attrName)) { + activityPackage = cleanActivityName(packageName, xml.getAttributeValue(i)); + if (!thisPackage.equals(activityPackage)) { + break; //out of for loop + } + isOurActivity = true; + } + + //Make sure we have both attributes before processing + if ((activityUiOptions != null) && (activityPackage != null)) { + //Our activity, uiOptions specified, override with our value + uiOptions = activityUiOptions.intValue(); + } + } + if (isOurActivity) { + //If we matched our activity but it had no logo don't + //do any more processing of the manifest + break; + } + } + } + eventType = xml.nextToken(); + } + } catch (Exception e) { + e.printStackTrace(); + } + if (DEBUG) Log.i(TAG, "Returning " + Integer.toHexString(uiOptions)); + return uiOptions; + } + + public static String cleanActivityName(String manifestPackage, String activityName) { + if (activityName.charAt(0) == '.') { + //Relative activity name (e.g., android:name=".ui.SomeClass") + return manifestPackage + activityName; + } + if (activityName.indexOf('.', 1) == -1) { + //Unqualified activity name (e.g., android:name="SomeClass") + return manifestPackage + "." + activityName; + } + //Fully-qualified activity name (e.g., "com.my.package.SomeClass") + return activityName; + } + + /** + * Clears out internal reference when the action mode is destroyed. + */ + private class ActionModeCallbackWrapper implements ActionMode.Callback { + private final ActionMode.Callback mWrapped; + + public ActionModeCallbackWrapper(ActionMode.Callback wrapped) { + mWrapped = wrapped; + } + + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + return mWrapped.onCreateActionMode(mode, menu); + } + + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + return mWrapped.onPrepareActionMode(mode, menu); + } + + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + return mWrapped.onActionItemClicked(mode, item); + } + + public void onDestroyActionMode(ActionMode mode) { + mWrapped.onDestroyActionMode(mode); + if (mActionModeView != null) { + mActionModeView.setVisibility(View.GONE); + mActionModeView.removeAllViews(); + } + if (mActivity instanceof OnActionModeFinishedListener) { + ((OnActionModeFinishedListener)mActivity).onActionModeFinished(mActionMode); + } + mActionMode = null; + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ActionBarSherlockNative.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ActionBarSherlockNative.java new file mode 100644 index 00000000..9afca185 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ActionBarSherlockNative.java @@ -0,0 +1,328 @@ +package com.actionbarsherlock.internal; + +import com.actionbarsherlock.ActionBarSherlock; +import com.actionbarsherlock.app.ActionBar; +import com.actionbarsherlock.internal.app.ActionBarWrapper; +import com.actionbarsherlock.internal.view.menu.MenuWrapper; +import com.actionbarsherlock.view.ActionMode; +import com.actionbarsherlock.view.MenuInflater; +import android.app.Activity; +import android.content.Context; +import android.util.Log; +import android.util.TypedValue; +import android.view.ContextThemeWrapper; +import android.view.View; +import android.view.Window; +import android.view.ViewGroup.LayoutParams; + +@ActionBarSherlock.Implementation(api = 14) +public class ActionBarSherlockNative extends ActionBarSherlock { + private ActionBarWrapper mActionBar; + private ActionModeWrapper mActionMode; + private MenuWrapper mMenu; + + public ActionBarSherlockNative(Activity activity, int flags) { + super(activity, flags); + } + + + @Override + public ActionBar getActionBar() { + if (DEBUG) Log.d(TAG, "[getActionBar]"); + + initActionBar(); + return mActionBar; + } + + private void initActionBar() { + if (mActionBar != null || mActivity.getActionBar() == null) { + return; + } + + mActionBar = new ActionBarWrapper(mActivity); + } + + @Override + public void dispatchInvalidateOptionsMenu() { + if (DEBUG) Log.d(TAG, "[dispatchInvalidateOptionsMenu]"); + + mActivity.getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL); + } + + @Override + public boolean dispatchCreateOptionsMenu(android.view.Menu menu) { + if (DEBUG) Log.d(TAG, "[dispatchCreateOptionsMenu] menu: " + menu); + + if (mMenu == null || menu != mMenu.unwrap()) { + mMenu = new MenuWrapper(menu); + } + + final boolean result = callbackCreateOptionsMenu(mMenu); + if (DEBUG) Log.d(TAG, "[dispatchCreateOptionsMenu] returning " + result); + return result; + } + + @Override + public boolean dispatchPrepareOptionsMenu(android.view.Menu menu) { + if (DEBUG) Log.d(TAG, "[dispatchPrepareOptionsMenu] menu: " + menu); + + final boolean result = callbackPrepareOptionsMenu(mMenu); + if (DEBUG) Log.d(TAG, "[dispatchPrepareOptionsMenu] returning " + result); + return result; + } + + @Override + public boolean dispatchOptionsItemSelected(android.view.MenuItem item) { + if (DEBUG) Log.d(TAG, "[dispatchOptionsItemSelected] item: " + item.getTitleCondensed()); + + final boolean result = callbackOptionsItemSelected(mMenu.findItem(item)); + if (DEBUG) Log.d(TAG, "[dispatchOptionsItemSelected] returning " + result); + return result; + } + + @Override + public boolean hasFeature(int feature) { + if (DEBUG) Log.d(TAG, "[hasFeature] feature: " + feature); + + final boolean result = mActivity.getWindow().hasFeature(feature); + if (DEBUG) Log.d(TAG, "[hasFeature] returning " + result); + return result; + } + + @Override + public boolean requestFeature(int featureId) { + if (DEBUG) Log.d(TAG, "[requestFeature] featureId: " + featureId); + + final boolean result = mActivity.getWindow().requestFeature(featureId); + if (DEBUG) Log.d(TAG, "[requestFeature] returning " + result); + return result; + } + + @Override + public void setUiOptions(int uiOptions) { + if (DEBUG) Log.d(TAG, "[setUiOptions] uiOptions: " + uiOptions); + + mActivity.getWindow().setUiOptions(uiOptions); + } + + @Override + public void setUiOptions(int uiOptions, int mask) { + if (DEBUG) Log.d(TAG, "[setUiOptions] uiOptions: " + uiOptions + ", mask: " + mask); + + mActivity.getWindow().setUiOptions(uiOptions, mask); + } + + @Override + public void setContentView(int layoutResId) { + if (DEBUG) Log.d(TAG, "[setContentView] layoutResId: " + layoutResId); + + mActivity.getWindow().setContentView(layoutResId); + initActionBar(); + } + + @Override + public void setContentView(View view, LayoutParams params) { + if (DEBUG) Log.d(TAG, "[setContentView] view: " + view + ", params: " + params); + + mActivity.getWindow().setContentView(view, params); + initActionBar(); + } + + @Override + public void addContentView(View view, LayoutParams params) { + if (DEBUG) Log.d(TAG, "[addContentView] view: " + view + ", params: " + params); + + mActivity.getWindow().addContentView(view, params); + initActionBar(); + } + + @Override + public void setTitle(CharSequence title) { + if (DEBUG) Log.d(TAG, "[setTitle] title: " + title); + + mActivity.getWindow().setTitle(title); + } + + @Override + public void setProgressBarVisibility(boolean visible) { + if (DEBUG) Log.d(TAG, "[setProgressBarVisibility] visible: " + visible); + + mActivity.setProgressBarVisibility(visible); + } + + @Override + public void setProgressBarIndeterminateVisibility(boolean visible) { + if (DEBUG) Log.d(TAG, "[setProgressBarIndeterminateVisibility] visible: " + visible); + + mActivity.setProgressBarIndeterminateVisibility(visible); + } + + @Override + public void setProgressBarIndeterminate(boolean indeterminate) { + if (DEBUG) Log.d(TAG, "[setProgressBarIndeterminate] indeterminate: " + indeterminate); + + mActivity.setProgressBarIndeterminate(indeterminate); + } + + @Override + public void setProgress(int progress) { + if (DEBUG) Log.d(TAG, "[setProgress] progress: " + progress); + + mActivity.setProgress(progress); + } + + @Override + public void setSecondaryProgress(int secondaryProgress) { + if (DEBUG) Log.d(TAG, "[setSecondaryProgress] secondaryProgress: " + secondaryProgress); + + mActivity.setSecondaryProgress(secondaryProgress); + } + + @Override + protected Context getThemedContext() { + Context context = mActivity; + TypedValue outValue = new TypedValue(); + mActivity.getTheme().resolveAttribute(android.R.attr.actionBarWidgetTheme, outValue, true); + if (outValue.resourceId != 0) { + //We are unable to test if this is the same as our current theme + //so we just wrap it and hope that if the attribute was specified + //then the user is intentionally specifying an alternate theme. + context = new ContextThemeWrapper(context, outValue.resourceId); + } + return context; + } + + @Override + public ActionMode startActionMode(com.actionbarsherlock.view.ActionMode.Callback callback) { + if (DEBUG) Log.d(TAG, "[startActionMode] callback: " + callback); + + if (mActionMode != null) { + mActionMode.finish(); + } + ActionModeCallbackWrapper wrapped = null; + if (callback != null) { + wrapped = new ActionModeCallbackWrapper(callback); + } + + //Calling this will trigger the callback wrapper's onCreate which + //is where we will set the new instance to mActionMode since we need + //to pass it through to the sherlock callbacks and the call below + //will not have returned yet to store its value. + mActivity.startActionMode(wrapped); + + return mActionMode; + } + + private class ActionModeCallbackWrapper implements android.view.ActionMode.Callback { + private final ActionMode.Callback mCallback; + + public ActionModeCallbackWrapper(ActionMode.Callback callback) { + mCallback = callback; + } + + @Override + public boolean onCreateActionMode(android.view.ActionMode mode, android.view.Menu menu) { + //See ActionBarSherlockNative#startActionMode + mActionMode = new ActionModeWrapper(mode); + + return mCallback.onCreateActionMode(mActionMode, mActionMode.getMenu()); + } + + @Override + public boolean onPrepareActionMode(android.view.ActionMode mode, android.view.Menu menu) { + return mCallback.onPrepareActionMode(mActionMode, mActionMode.getMenu()); + } + + @Override + public boolean onActionItemClicked(android.view.ActionMode mode, android.view.MenuItem item) { + return mCallback.onActionItemClicked(mActionMode, mActionMode.getMenu().findItem(item)); + } + + @Override + public void onDestroyActionMode(android.view.ActionMode mode) { + mCallback.onDestroyActionMode(mActionMode); + } + } + + private class ActionModeWrapper extends ActionMode { + private final android.view.ActionMode mActionMode; + private MenuWrapper mMenu = null; + + ActionModeWrapper(android.view.ActionMode actionMode) { + mActionMode = actionMode; + } + + @Override + public void setTitle(CharSequence title) { + mActionMode.setTitle(title); + } + + @Override + public void setTitle(int resId) { + mActionMode.setTitle(resId); + } + + @Override + public void setSubtitle(CharSequence subtitle) { + mActionMode.setSubtitle(subtitle); + } + + @Override + public void setSubtitle(int resId) { + mActionMode.setSubtitle(resId); + } + + @Override + public void setCustomView(View view) { + mActionMode.setCustomView(view); + } + + @Override + public void invalidate() { + mActionMode.invalidate(); + } + + @Override + public void finish() { + mActionMode.finish(); + } + + @Override + public MenuWrapper getMenu() { + if (mMenu == null) { + mMenu = new MenuWrapper(mActionMode.getMenu()); + } + return mMenu; + } + + @Override + public CharSequence getTitle() { + return mActionMode.getTitle(); + } + + @Override + public CharSequence getSubtitle() { + return mActionMode.getSubtitle(); + } + + @Override + public View getCustomView() { + return mActionMode.getCustomView(); + } + + @Override + public MenuInflater getMenuInflater() { + return ActionBarSherlockNative.this.getMenuInflater(); + } + + @Override + public void setTag(Object tag) { + mActionMode.setTag(tag); + } + + @Override + public Object getTag() { + return mActionMode.getTag(); + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ResourcesCompat.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ResourcesCompat.java new file mode 100644 index 00000000..8e1efe8c --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ResourcesCompat.java @@ -0,0 +1,95 @@ +package com.actionbarsherlock.internal; + +import android.content.Context; +import android.os.Build; +import android.util.DisplayMetrics; +import com.actionbarsherlock.R; + +public final class ResourcesCompat { + //No instances + private ResourcesCompat() {} + + + /** + * Support implementation of {@code getResources().getBoolean()} that we + * can use to simulate filtering based on width and smallest width + * qualifiers on pre-3.2. + * + * @param context Context to load booleans from on 3.2+ and to fetch the + * display metrics. + * @param id Id of boolean to load. + * @return Associated boolean value as reflected by the current display + * metrics. + */ + public static boolean getResources_getBoolean(Context context, int id) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { + return context.getResources().getBoolean(id); + } + + DisplayMetrics metrics = context.getResources().getDisplayMetrics(); + float widthDp = metrics.widthPixels / metrics.density; + float heightDp = metrics.heightPixels / metrics.density; + float smallestWidthDp = (widthDp < heightDp) ? widthDp : heightDp; + + if (id == R.bool.abs__action_bar_embed_tabs) { + if (widthDp >= 480) { + return true; //values-w480dp + } + return false; //values + } + if (id == R.bool.abs__split_action_bar_is_narrow) { + if (widthDp >= 480) { + return false; //values-w480dp + } + return true; //values + } + if (id == R.bool.abs__action_bar_expanded_action_views_exclusive) { + if (smallestWidthDp >= 600) { + return false; //values-sw600dp + } + return true; //values + } + if (id == R.bool.abs__config_allowActionMenuItemTextWithIcon) { + if (widthDp >= 480) { + return true; //values-w480dp + } + return false; //values + } + + throw new IllegalArgumentException("Unknown boolean resource ID " + id); + } + + /** + * Support implementation of {@code getResources().getInteger()} that we + * can use to simulate filtering based on width qualifiers on pre-3.2. + * + * @param context Context to load integers from on 3.2+ and to fetch the + * display metrics. + * @param id Id of integer to load. + * @return Associated integer value as reflected by the current display + * metrics. + */ + public static int getResources_getInteger(Context context, int id) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { + return context.getResources().getInteger(id); + } + + DisplayMetrics metrics = context.getResources().getDisplayMetrics(); + float widthDp = metrics.widthPixels / metrics.density; + + if (id == R.integer.abs__max_action_buttons) { + if (widthDp >= 600) { + return 5; //values-w600dp + } + if (widthDp >= 500) { + return 4; //values-w500dp + } + if (widthDp >= 360) { + return 3; //values-w360dp + } + return 2; //values + } + + throw new IllegalArgumentException("Unknown integer resource ID " + id); + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/app/ActionBarImpl.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/app/ActionBarImpl.java new file mode 100644 index 00000000..6ae0402c --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/app/ActionBarImpl.java @@ -0,0 +1,1026 @@ +/* + * 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.internal.app; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import android.app.Activity; +import android.app.Dialog; +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.os.Handler; +import android.support.v4.app.FragmentTransaction; +import android.util.TypedValue; +import android.view.ContextThemeWrapper; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.accessibility.AccessibilityEvent; +import android.widget.SpinnerAdapter; +import com.actionbarsherlock.R; +import com.actionbarsherlock.app.ActionBar; +import com.actionbarsherlock.app.SherlockFragmentActivity; +import com.actionbarsherlock.internal.nineoldandroids.animation.Animator; +import com.actionbarsherlock.internal.nineoldandroids.animation.AnimatorListenerAdapter; +import com.actionbarsherlock.internal.nineoldandroids.animation.AnimatorSet; +import com.actionbarsherlock.internal.nineoldandroids.animation.ObjectAnimator; +import com.actionbarsherlock.internal.nineoldandroids.animation.Animator.AnimatorListener; +import com.actionbarsherlock.internal.nineoldandroids.widget.NineFrameLayout; +import com.actionbarsherlock.internal.view.menu.MenuBuilder; +import com.actionbarsherlock.internal.view.menu.MenuPopupHelper; +import com.actionbarsherlock.internal.view.menu.SubMenuBuilder; +import com.actionbarsherlock.internal.widget.ActionBarContainer; +import com.actionbarsherlock.internal.widget.ActionBarContextView; +import com.actionbarsherlock.internal.widget.ActionBarView; +import com.actionbarsherlock.internal.widget.ScrollingTabContainerView; +import com.actionbarsherlock.view.ActionMode; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuInflater; +import com.actionbarsherlock.view.MenuItem; +import static com.actionbarsherlock.internal.ResourcesCompat.getResources_getBoolean; + +/** + * ActionBarImpl is the ActionBar implementation used + * by devices of all screen sizes. If it detects a compatible decor, + * it will split contextual modes across both the ActionBarView at + * the top of the screen and a horizontal LinearLayout at the bottom + * which is normally hidden. + */ +public class ActionBarImpl extends ActionBar { + //UNUSED private static final String TAG = "ActionBarImpl"; + + private Context mContext; + private Context mThemedContext; + private Activity mActivity; + //UNUSED private Dialog mDialog; + + private ActionBarContainer mContainerView; + private ActionBarView mActionView; + private ActionBarContextView mContextView; + private ActionBarContainer mSplitView; + private NineFrameLayout mContentView; + private ScrollingTabContainerView mTabScrollView; + + private ArrayList mTabs = new ArrayList(); + + private TabImpl mSelectedTab; + private int mSavedTabPosition = INVALID_POSITION; + + ActionModeImpl mActionMode; + ActionMode mDeferredDestroyActionMode; + ActionMode.Callback mDeferredModeDestroyCallback; + + private boolean mLastMenuVisibility; + private ArrayList mMenuVisibilityListeners = + new ArrayList(); + + private static final int CONTEXT_DISPLAY_NORMAL = 0; + private static final int CONTEXT_DISPLAY_SPLIT = 1; + + private static final int INVALID_POSITION = -1; + + private int mContextDisplayMode; + private boolean mHasEmbeddedTabs; + + final Handler mHandler = new Handler(); + Runnable mTabSelector; + + private Animator mCurrentShowAnim; + private Animator mCurrentModeAnim; + private boolean mShowHideAnimationEnabled; + boolean mWasHiddenBeforeMode; + + final AnimatorListener mHideListener = new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + if (mContentView != null) { + mContentView.setTranslationY(0); + mContainerView.setTranslationY(0); + } + if (mSplitView != null && mContextDisplayMode == CONTEXT_DISPLAY_SPLIT) { + mSplitView.setVisibility(View.GONE); + } + mContainerView.setVisibility(View.GONE); + mContainerView.setTransitioning(false); + mCurrentShowAnim = null; + completeDeferredDestroyActionMode(); + } + }; + + final AnimatorListener mShowListener = new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mCurrentShowAnim = null; + mContainerView.requestLayout(); + } + }; + + public ActionBarImpl(Activity activity, int features) { + mActivity = activity; + Window window = activity.getWindow(); + View decor = window.getDecorView(); + init(decor); + + //window.hasFeature() workaround for pre-3.0 + if ((features & (1 << Window.FEATURE_ACTION_BAR_OVERLAY)) == 0) { + mContentView = (NineFrameLayout)decor.findViewById(android.R.id.content); + } + } + + public ActionBarImpl(Dialog dialog) { + //UNUSED mDialog = dialog; + init(dialog.getWindow().getDecorView()); + } + + private void init(View decor) { + mContext = decor.getContext(); + mActionView = (ActionBarView) decor.findViewById(R.id.abs__action_bar); + mContextView = (ActionBarContextView) decor.findViewById( + R.id.abs__action_context_bar); + mContainerView = (ActionBarContainer) decor.findViewById( + R.id.abs__action_bar_container); + mSplitView = (ActionBarContainer) decor.findViewById( + R.id.abs__split_action_bar); + + if (mActionView == null || mContextView == null || mContainerView == null) { + throw new IllegalStateException(getClass().getSimpleName() + " can only be used " + + "with a compatible window decor layout"); + } + + mActionView.setContextView(mContextView); + mContextDisplayMode = mActionView.isSplitActionBar() ? + CONTEXT_DISPLAY_SPLIT : CONTEXT_DISPLAY_NORMAL; + + // Older apps get the home button interaction enabled by default. + // Newer apps need to enable it explicitly. + setHomeButtonEnabled(mContext.getApplicationInfo().targetSdkVersion < 14); + + setHasEmbeddedTabs(getResources_getBoolean(mContext, + R.bool.abs__action_bar_embed_tabs)); + } + + public void onConfigurationChanged(Configuration newConfig) { + setHasEmbeddedTabs(getResources_getBoolean(mContext, + R.bool.abs__action_bar_embed_tabs)); + + //Manually dispatch a configuration change to the action bar view on pre-2.2 + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.FROYO) { + mActionView.onConfigurationChanged(newConfig); + if (mContextView != null) { + mContextView.onConfigurationChanged(newConfig); + } + } + } + + private void setHasEmbeddedTabs(boolean hasEmbeddedTabs) { + mHasEmbeddedTabs = hasEmbeddedTabs; + // Switch tab layout configuration if needed + if (!mHasEmbeddedTabs) { + mActionView.setEmbeddedTabView(null); + mContainerView.setTabContainer(mTabScrollView); + } else { + mContainerView.setTabContainer(null); + mActionView.setEmbeddedTabView(mTabScrollView); + } + final boolean isInTabMode = getNavigationMode() == NAVIGATION_MODE_TABS; + if (mTabScrollView != null) { + mTabScrollView.setVisibility(isInTabMode ? View.VISIBLE : View.GONE); + } + mActionView.setCollapsable(!mHasEmbeddedTabs && isInTabMode); + } + + private void ensureTabsExist() { + if (mTabScrollView != null) { + return; + } + + ScrollingTabContainerView tabScroller = new ScrollingTabContainerView(mContext); + + if (mHasEmbeddedTabs) { + tabScroller.setVisibility(View.VISIBLE); + mActionView.setEmbeddedTabView(tabScroller); + } else { + tabScroller.setVisibility(getNavigationMode() == NAVIGATION_MODE_TABS ? + View.VISIBLE : View.GONE); + mContainerView.setTabContainer(tabScroller); + } + mTabScrollView = tabScroller; + } + + void completeDeferredDestroyActionMode() { + if (mDeferredModeDestroyCallback != null) { + mDeferredModeDestroyCallback.onDestroyActionMode(mDeferredDestroyActionMode); + mDeferredDestroyActionMode = null; + mDeferredModeDestroyCallback = null; + } + } + + /** + * Enables or disables animation between show/hide states. + * If animation is disabled using this method, animations in progress + * will be finished. + * + * @param enabled true to animate, false to not animate. + */ + public void setShowHideAnimationEnabled(boolean enabled) { + mShowHideAnimationEnabled = enabled; + if (!enabled && mCurrentShowAnim != null) { + mCurrentShowAnim.end(); + } + } + + public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) { + mMenuVisibilityListeners.add(listener); + } + + public void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener) { + mMenuVisibilityListeners.remove(listener); + } + + public void dispatchMenuVisibilityChanged(boolean isVisible) { + if (isVisible == mLastMenuVisibility) { + return; + } + mLastMenuVisibility = isVisible; + + final int count = mMenuVisibilityListeners.size(); + for (int i = 0; i < count; i++) { + mMenuVisibilityListeners.get(i).onMenuVisibilityChanged(isVisible); + } + } + + @Override + public void setCustomView(int resId) { + setCustomView(LayoutInflater.from(getThemedContext()).inflate(resId, mActionView, false)); + } + + @Override + public void setDisplayUseLogoEnabled(boolean useLogo) { + setDisplayOptions(useLogo ? DISPLAY_USE_LOGO : 0, DISPLAY_USE_LOGO); + } + + @Override + public void setDisplayShowHomeEnabled(boolean showHome) { + setDisplayOptions(showHome ? DISPLAY_SHOW_HOME : 0, DISPLAY_SHOW_HOME); + } + + @Override + public void setDisplayHomeAsUpEnabled(boolean showHomeAsUp) { + setDisplayOptions(showHomeAsUp ? DISPLAY_HOME_AS_UP : 0, DISPLAY_HOME_AS_UP); + } + + @Override + public void setDisplayShowTitleEnabled(boolean showTitle) { + setDisplayOptions(showTitle ? DISPLAY_SHOW_TITLE : 0, DISPLAY_SHOW_TITLE); + } + + @Override + public void setDisplayShowCustomEnabled(boolean showCustom) { + setDisplayOptions(showCustom ? DISPLAY_SHOW_CUSTOM : 0, DISPLAY_SHOW_CUSTOM); + } + + @Override + public void setHomeButtonEnabled(boolean enable) { + mActionView.setHomeButtonEnabled(enable); + } + + @Override + public void setTitle(int resId) { + setTitle(mContext.getString(resId)); + } + + @Override + public void setSubtitle(int resId) { + setSubtitle(mContext.getString(resId)); + } + + public void setSelectedNavigationItem(int position) { + switch (mActionView.getNavigationMode()) { + case NAVIGATION_MODE_TABS: + selectTab(mTabs.get(position)); + break; + case NAVIGATION_MODE_LIST: + mActionView.setDropdownSelectedPosition(position); + break; + default: + throw new IllegalStateException( + "setSelectedNavigationIndex not valid for current navigation mode"); + } + } + + public void removeAllTabs() { + cleanupTabs(); + } + + private void cleanupTabs() { + if (mSelectedTab != null) { + selectTab(null); + } + mTabs.clear(); + if (mTabScrollView != null) { + mTabScrollView.removeAllTabs(); + } + mSavedTabPosition = INVALID_POSITION; + } + + public void setTitle(CharSequence title) { + mActionView.setTitle(title); + } + + public void setSubtitle(CharSequence subtitle) { + mActionView.setSubtitle(subtitle); + } + + public void setDisplayOptions(int options) { + mActionView.setDisplayOptions(options); + } + + public void setDisplayOptions(int options, int mask) { + final int current = mActionView.getDisplayOptions(); + mActionView.setDisplayOptions((options & mask) | (current & ~mask)); + } + + public void setBackgroundDrawable(Drawable d) { + mContainerView.setPrimaryBackground(d); + } + + public void setStackedBackgroundDrawable(Drawable d) { + mContainerView.setStackedBackground(d); + } + + public void setSplitBackgroundDrawable(Drawable d) { + if (mSplitView != null) { + mSplitView.setSplitBackground(d); + } + } + + public View getCustomView() { + return mActionView.getCustomNavigationView(); + } + + public CharSequence getTitle() { + return mActionView.getTitle(); + } + + public CharSequence getSubtitle() { + return mActionView.getSubtitle(); + } + + public int getNavigationMode() { + return mActionView.getNavigationMode(); + } + + public int getDisplayOptions() { + return mActionView.getDisplayOptions(); + } + + public ActionMode startActionMode(ActionMode.Callback callback) { + boolean wasHidden = false; + if (mActionMode != null) { + wasHidden = mWasHiddenBeforeMode; + mActionMode.finish(); + } + + mContextView.killMode(); + ActionModeImpl mode = new ActionModeImpl(callback); + if (mode.dispatchOnCreate()) { + mWasHiddenBeforeMode = !isShowing() || wasHidden; + mode.invalidate(); + mContextView.initForMode(mode); + animateToMode(true); + if (mSplitView != null && mContextDisplayMode == CONTEXT_DISPLAY_SPLIT) { + // TODO animate this + mSplitView.setVisibility(View.VISIBLE); + } + mContextView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); + mActionMode = mode; + return mode; + } + return null; + } + + private void configureTab(Tab tab, int position) { + final TabImpl tabi = (TabImpl) tab; + final ActionBar.TabListener callback = tabi.getCallback(); + + if (callback == null) { + throw new IllegalStateException("Action Bar Tab must have a Callback"); + } + + tabi.setPosition(position); + mTabs.add(position, tabi); + + final int count = mTabs.size(); + for (int i = position + 1; i < count; i++) { + mTabs.get(i).setPosition(i); + } + } + + @Override + public void addTab(Tab tab) { + addTab(tab, mTabs.isEmpty()); + } + + @Override + public void addTab(Tab tab, int position) { + addTab(tab, position, mTabs.isEmpty()); + } + + @Override + public void addTab(Tab tab, boolean setSelected) { + ensureTabsExist(); + mTabScrollView.addTab(tab, setSelected); + configureTab(tab, mTabs.size()); + if (setSelected) { + selectTab(tab); + } + } + + @Override + public void addTab(Tab tab, int position, boolean setSelected) { + ensureTabsExist(); + mTabScrollView.addTab(tab, position, setSelected); + configureTab(tab, position); + if (setSelected) { + selectTab(tab); + } + } + + @Override + public Tab newTab() { + return new TabImpl(); + } + + @Override + public void removeTab(Tab tab) { + removeTabAt(tab.getPosition()); + } + + @Override + public void removeTabAt(int position) { + if (mTabScrollView == null) { + // No tabs around to remove + return; + } + + int selectedTabPosition = mSelectedTab != null + ? mSelectedTab.getPosition() : mSavedTabPosition; + mTabScrollView.removeTabAt(position); + TabImpl removedTab = mTabs.remove(position); + if (removedTab != null) { + removedTab.setPosition(-1); + } + + final int newTabCount = mTabs.size(); + for (int i = position; i < newTabCount; i++) { + mTabs.get(i).setPosition(i); + } + + if (selectedTabPosition == position) { + selectTab(mTabs.isEmpty() ? null : mTabs.get(Math.max(0, position - 1))); + } + } + + @Override + public void selectTab(Tab tab) { + if (getNavigationMode() != NAVIGATION_MODE_TABS) { + mSavedTabPosition = tab != null ? tab.getPosition() : INVALID_POSITION; + return; + } + + FragmentTransaction trans = null; + if (mActivity instanceof SherlockFragmentActivity) { + trans = ((SherlockFragmentActivity)mActivity).getSupportFragmentManager().beginTransaction() + .disallowAddToBackStack(); + } + + if (mSelectedTab == tab) { + if (mSelectedTab != null) { + mSelectedTab.getCallback().onTabReselected(mSelectedTab, trans); + mTabScrollView.animateToTab(tab.getPosition()); + } + } else { + mTabScrollView.setTabSelected(tab != null ? tab.getPosition() : Tab.INVALID_POSITION); + if (mSelectedTab != null) { + mSelectedTab.getCallback().onTabUnselected(mSelectedTab, trans); + } + mSelectedTab = (TabImpl) tab; + if (mSelectedTab != null) { + mSelectedTab.getCallback().onTabSelected(mSelectedTab, trans); + } + } + + if (trans != null && !trans.isEmpty()) { + trans.commit(); + } + } + + @Override + public Tab getSelectedTab() { + return mSelectedTab; + } + + @Override + public int getHeight() { + return mContainerView.getHeight(); + } + + @Override + public void show() { + show(true); + } + + void show(boolean markHiddenBeforeMode) { + if (mCurrentShowAnim != null) { + mCurrentShowAnim.end(); + } + if (mContainerView.getVisibility() == View.VISIBLE) { + if (markHiddenBeforeMode) mWasHiddenBeforeMode = false; + return; + } + mContainerView.setVisibility(View.VISIBLE); + + if (mShowHideAnimationEnabled) { + mContainerView.setAlpha(0); + AnimatorSet anim = new AnimatorSet(); + AnimatorSet.Builder b = anim.play(ObjectAnimator.ofFloat(mContainerView, "alpha", 1)); + if (mContentView != null) { + b.with(ObjectAnimator.ofFloat(mContentView, "translationY", + -mContainerView.getHeight(), 0)); + mContainerView.setTranslationY(-mContainerView.getHeight()); + b.with(ObjectAnimator.ofFloat(mContainerView, "translationY", 0)); + } + if (mSplitView != null && mContextDisplayMode == CONTEXT_DISPLAY_SPLIT) { + mSplitView.setAlpha(0); + mSplitView.setVisibility(View.VISIBLE); + b.with(ObjectAnimator.ofFloat(mSplitView, "alpha", 1)); + } + anim.addListener(mShowListener); + mCurrentShowAnim = anim; + anim.start(); + } else { + mContainerView.setAlpha(1); + mContainerView.setTranslationY(0); + mShowListener.onAnimationEnd(null); + } + } + + @Override + public void hide() { + if (mCurrentShowAnim != null) { + mCurrentShowAnim.end(); + } + if (mContainerView.getVisibility() == View.GONE) { + return; + } + + if (mShowHideAnimationEnabled) { + mContainerView.setAlpha(1); + mContainerView.setTransitioning(true); + AnimatorSet anim = new AnimatorSet(); + AnimatorSet.Builder b = anim.play(ObjectAnimator.ofFloat(mContainerView, "alpha", 0)); + if (mContentView != null) { + b.with(ObjectAnimator.ofFloat(mContentView, "translationY", + 0, -mContainerView.getHeight())); + b.with(ObjectAnimator.ofFloat(mContainerView, "translationY", + -mContainerView.getHeight())); + } + if (mSplitView != null && mSplitView.getVisibility() == View.VISIBLE) { + mSplitView.setAlpha(1); + b.with(ObjectAnimator.ofFloat(mSplitView, "alpha", 0)); + } + anim.addListener(mHideListener); + mCurrentShowAnim = anim; + anim.start(); + } else { + mHideListener.onAnimationEnd(null); + } + } + + public boolean isShowing() { + return mContainerView.getVisibility() == View.VISIBLE; + } + + void animateToMode(boolean toActionMode) { + if (toActionMode) { + show(false); + } + if (mCurrentModeAnim != null) { + mCurrentModeAnim.end(); + } + + mActionView.animateToVisibility(toActionMode ? View.GONE : View.VISIBLE); + mContextView.animateToVisibility(toActionMode ? View.VISIBLE : View.GONE); + if (mTabScrollView != null && !mActionView.hasEmbeddedTabs() && mActionView.isCollapsed()) { + mTabScrollView.animateToVisibility(toActionMode ? View.GONE : View.VISIBLE); + } + } + + public Context getThemedContext() { + if (mThemedContext == null) { + TypedValue outValue = new TypedValue(); + Resources.Theme currentTheme = mContext.getTheme(); + currentTheme.resolveAttribute(R.attr.actionBarWidgetTheme, + outValue, true); + final int targetThemeRes = outValue.resourceId; + + if (targetThemeRes != 0) { //XXX && mContext.getThemeResId() != targetThemeRes) { + mThemedContext = new ContextThemeWrapper(mContext, targetThemeRes); + } else { + mThemedContext = mContext; + } + } + return mThemedContext; + } + + /** + * @hide + */ + public class ActionModeImpl extends ActionMode implements MenuBuilder.Callback { + private ActionMode.Callback mCallback; + private MenuBuilder mMenu; + private WeakReference mCustomView; + + public ActionModeImpl(ActionMode.Callback callback) { + mCallback = callback; + mMenu = new MenuBuilder(getThemedContext()) + .setDefaultShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + mMenu.setCallback(this); + } + + @Override + public MenuInflater getMenuInflater() { + return new MenuInflater(getThemedContext()); + } + + @Override + public Menu getMenu() { + return mMenu; + } + + @Override + public void finish() { + if (mActionMode != this) { + // Not the active action mode - no-op + return; + } + + // If we were hidden before the mode was shown, defer the onDestroy + // callback until the animation is finished and associated relayout + // is about to happen. This lets apps better anticipate visibility + // and layout behavior. + if (mWasHiddenBeforeMode) { + mDeferredDestroyActionMode = this; + mDeferredModeDestroyCallback = mCallback; + } else { + mCallback.onDestroyActionMode(this); + } + mCallback = null; + animateToMode(false); + + // Clear out the context mode views after the animation finishes + mContextView.closeMode(); + mActionView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); + + mActionMode = null; + + if (mWasHiddenBeforeMode) { + hide(); + } + } + + @Override + public void invalidate() { + mMenu.stopDispatchingItemsChanged(); + try { + mCallback.onPrepareActionMode(this, mMenu); + } finally { + mMenu.startDispatchingItemsChanged(); + } + } + + public boolean dispatchOnCreate() { + mMenu.stopDispatchingItemsChanged(); + try { + return mCallback.onCreateActionMode(this, mMenu); + } finally { + mMenu.startDispatchingItemsChanged(); + } + } + + @Override + public void setCustomView(View view) { + mContextView.setCustomView(view); + mCustomView = new WeakReference(view); + } + + @Override + public void setSubtitle(CharSequence subtitle) { + mContextView.setSubtitle(subtitle); + } + + @Override + public void setTitle(CharSequence title) { + mContextView.setTitle(title); + } + + @Override + public void setTitle(int resId) { + setTitle(mContext.getResources().getString(resId)); + } + + @Override + public void setSubtitle(int resId) { + setSubtitle(mContext.getResources().getString(resId)); + } + + @Override + public CharSequence getTitle() { + return mContextView.getTitle(); + } + + @Override + public CharSequence getSubtitle() { + return mContextView.getSubtitle(); + } + + @Override + public View getCustomView() { + return mCustomView != null ? mCustomView.get() : null; + } + + public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) { + if (mCallback != null) { + return mCallback.onActionItemClicked(this, item); + } else { + return false; + } + } + + public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) { + } + + public boolean onSubMenuSelected(SubMenuBuilder subMenu) { + if (mCallback == null) { + return false; + } + + if (!subMenu.hasVisibleItems()) { + return true; + } + + new MenuPopupHelper(getThemedContext(), subMenu).show(); + return true; + } + + public void onCloseSubMenu(SubMenuBuilder menu) { + } + + public void onMenuModeChange(MenuBuilder menu) { + if (mCallback == null) { + return; + } + invalidate(); + mContextView.showOverflowMenu(); + } + } + + /** + * @hide + */ + public class TabImpl extends ActionBar.Tab { + private ActionBar.TabListener mCallback; + private Object mTag; + private Drawable mIcon; + private CharSequence mText; + private CharSequence mContentDesc; + private int mPosition = -1; + private View mCustomView; + + @Override + public Object getTag() { + return mTag; + } + + @Override + public Tab setTag(Object tag) { + mTag = tag; + return this; + } + + public ActionBar.TabListener getCallback() { + return mCallback; + } + + @Override + public Tab setTabListener(ActionBar.TabListener callback) { + mCallback = callback; + return this; + } + + @Override + public View getCustomView() { + return mCustomView; + } + + @Override + public Tab setCustomView(View view) { + mCustomView = view; + if (mPosition >= 0) { + mTabScrollView.updateTab(mPosition); + } + return this; + } + + @Override + public Tab setCustomView(int layoutResId) { + return setCustomView(LayoutInflater.from(getThemedContext()) + .inflate(layoutResId, null)); + } + + @Override + public Drawable getIcon() { + return mIcon; + } + + @Override + public int getPosition() { + return mPosition; + } + + public void setPosition(int position) { + mPosition = position; + } + + @Override + public CharSequence getText() { + return mText; + } + + @Override + public Tab setIcon(Drawable icon) { + mIcon = icon; + if (mPosition >= 0) { + mTabScrollView.updateTab(mPosition); + } + return this; + } + + @Override + public Tab setIcon(int resId) { + return setIcon(mContext.getResources().getDrawable(resId)); + } + + @Override + public Tab setText(CharSequence text) { + mText = text; + if (mPosition >= 0) { + mTabScrollView.updateTab(mPosition); + } + return this; + } + + @Override + public Tab setText(int resId) { + return setText(mContext.getResources().getText(resId)); + } + + @Override + public void select() { + selectTab(this); + } + + @Override + public Tab setContentDescription(int resId) { + return setContentDescription(mContext.getResources().getText(resId)); + } + + @Override + public Tab setContentDescription(CharSequence contentDesc) { + mContentDesc = contentDesc; + if (mPosition >= 0) { + mTabScrollView.updateTab(mPosition); + } + return this; + } + + @Override + public CharSequence getContentDescription() { + return mContentDesc; + } + } + + @Override + public void setCustomView(View view) { + mActionView.setCustomNavigationView(view); + } + + @Override + public void setCustomView(View view, LayoutParams layoutParams) { + view.setLayoutParams(layoutParams); + mActionView.setCustomNavigationView(view); + } + + @Override + public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) { + mActionView.setDropdownAdapter(adapter); + mActionView.setCallback(callback); + } + + @Override + public int getSelectedNavigationIndex() { + switch (mActionView.getNavigationMode()) { + case NAVIGATION_MODE_TABS: + return mSelectedTab != null ? mSelectedTab.getPosition() : -1; + case NAVIGATION_MODE_LIST: + return mActionView.getDropdownSelectedPosition(); + default: + return -1; + } + } + + @Override + public int getNavigationItemCount() { + switch (mActionView.getNavigationMode()) { + case NAVIGATION_MODE_TABS: + return mTabs.size(); + case NAVIGATION_MODE_LIST: + SpinnerAdapter adapter = mActionView.getDropdownAdapter(); + return adapter != null ? adapter.getCount() : 0; + default: + return 0; + } + } + + @Override + public int getTabCount() { + return mTabs.size(); + } + + @Override + public void setNavigationMode(int mode) { + final int oldMode = mActionView.getNavigationMode(); + switch (oldMode) { + case NAVIGATION_MODE_TABS: + mSavedTabPosition = getSelectedNavigationIndex(); + selectTab(null); + mTabScrollView.setVisibility(View.GONE); + break; + } + mActionView.setNavigationMode(mode); + switch (mode) { + case NAVIGATION_MODE_TABS: + ensureTabsExist(); + mTabScrollView.setVisibility(View.VISIBLE); + if (mSavedTabPosition != INVALID_POSITION) { + setSelectedNavigationItem(mSavedTabPosition); + mSavedTabPosition = INVALID_POSITION; + } + break; + } + mActionView.setCollapsable(mode == NAVIGATION_MODE_TABS && !mHasEmbeddedTabs); + } + + @Override + public Tab getTabAt(int index) { + return mTabs.get(index); + } + + + @Override + public void setIcon(int resId) { + mActionView.setIcon(resId); + } + + @Override + public void setIcon(Drawable icon) { + mActionView.setIcon(icon); + } + + @Override + public void setLogo(int resId) { + mActionView.setLogo(resId); + } + + @Override + public void setLogo(Drawable logo) { + mActionView.setLogo(logo); + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/app/ActionBarWrapper.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/app/ActionBarWrapper.java new file mode 100644 index 00000000..1bd0eacc --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/app/ActionBarWrapper.java @@ -0,0 +1,468 @@ +package com.actionbarsherlock.internal.app; + +import java.util.HashSet; +import java.util.Set; + +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.support.v4.app.FragmentTransaction; +import android.view.View; +import android.widget.SpinnerAdapter; + +import com.actionbarsherlock.app.ActionBar; +import com.actionbarsherlock.app.SherlockFragmentActivity; + +public class ActionBarWrapper extends ActionBar implements android.app.ActionBar.OnNavigationListener, android.app.ActionBar.OnMenuVisibilityListener { + private final Activity mActivity; + private final android.app.ActionBar mActionBar; + private ActionBar.OnNavigationListener mNavigationListener; + private Set mMenuVisibilityListeners = new HashSet(1); + private FragmentTransaction mFragmentTransaction; + + + public ActionBarWrapper(Activity activity) { + mActivity = activity; + mActionBar = activity.getActionBar(); + if (mActionBar != null) { + mActionBar.addOnMenuVisibilityListener(this); + } + } + + + @Override + public void setHomeButtonEnabled(boolean enabled) { + mActionBar.setHomeButtonEnabled(enabled); + } + + @Override + public Context getThemedContext() { + return mActionBar.getThemedContext(); + } + + @Override + public void setCustomView(View view) { + mActionBar.setCustomView(view); + } + + @Override + public void setCustomView(View view, LayoutParams layoutParams) { + android.app.ActionBar.LayoutParams lp = new android.app.ActionBar.LayoutParams(layoutParams); + lp.gravity = layoutParams.gravity; + lp.bottomMargin = layoutParams.bottomMargin; + lp.topMargin = layoutParams.topMargin; + lp.leftMargin = layoutParams.leftMargin; + lp.rightMargin = layoutParams.rightMargin; + mActionBar.setCustomView(view, lp); + } + + @Override + public void setCustomView(int resId) { + mActionBar.setCustomView(resId); + } + + @Override + public void setIcon(int resId) { + mActionBar.setIcon(resId); + } + + @Override + public void setIcon(Drawable icon) { + mActionBar.setIcon(icon); + } + + @Override + public void setLogo(int resId) { + mActionBar.setLogo(resId); + } + + @Override + public void setLogo(Drawable logo) { + mActionBar.setLogo(logo); + } + + @Override + public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) { + mNavigationListener = callback; + mActionBar.setListNavigationCallbacks(adapter, (callback != null) ? this : null); + } + + @Override + public boolean onNavigationItemSelected(int itemPosition, long itemId) { + //This should never be a NullPointerException since we only set + //ourselves as the listener when the callback is not null. + return mNavigationListener.onNavigationItemSelected(itemPosition, itemId); + } + + @Override + public void setSelectedNavigationItem(int position) { + mActionBar.setSelectedNavigationItem(position); + } + + @Override + public int getSelectedNavigationIndex() { + return mActionBar.getSelectedNavigationIndex(); + } + + @Override + public int getNavigationItemCount() { + return mActionBar.getNavigationItemCount(); + } + + @Override + public void setTitle(CharSequence title) { + mActionBar.setTitle(title); + } + + @Override + public void setTitle(int resId) { + mActionBar.setTitle(resId); + } + + @Override + public void setSubtitle(CharSequence subtitle) { + mActionBar.setSubtitle(subtitle); + } + + @Override + public void setSubtitle(int resId) { + mActionBar.setSubtitle(resId); + } + + @Override + public void setDisplayOptions(int options) { + mActionBar.setDisplayOptions(options); + } + + @Override + public void setDisplayOptions(int options, int mask) { + mActionBar.setDisplayOptions(options, mask); + } + + @Override + public void setDisplayUseLogoEnabled(boolean useLogo) { + mActionBar.setDisplayUseLogoEnabled(useLogo); + } + + @Override + public void setDisplayShowHomeEnabled(boolean showHome) { + mActionBar.setDisplayShowHomeEnabled(showHome); + } + + @Override + public void setDisplayHomeAsUpEnabled(boolean showHomeAsUp) { + mActionBar.setDisplayHomeAsUpEnabled(showHomeAsUp); + } + + @Override + public void setDisplayShowTitleEnabled(boolean showTitle) { + mActionBar.setDisplayShowTitleEnabled(showTitle); + } + + @Override + public void setDisplayShowCustomEnabled(boolean showCustom) { + mActionBar.setDisplayShowCustomEnabled(showCustom); + } + + @Override + public void setBackgroundDrawable(Drawable d) { + mActionBar.setBackgroundDrawable(d); + } + + @Override + public void setStackedBackgroundDrawable(Drawable d) { + mActionBar.setStackedBackgroundDrawable(d); + } + + @Override + public void setSplitBackgroundDrawable(Drawable d) { + mActionBar.setSplitBackgroundDrawable(d); + } + + @Override + public View getCustomView() { + return mActionBar.getCustomView(); + } + + @Override + public CharSequence getTitle() { + return mActionBar.getTitle(); + } + + @Override + public CharSequence getSubtitle() { + return mActionBar.getSubtitle(); + } + + @Override + public int getNavigationMode() { + return mActionBar.getNavigationMode(); + } + + @Override + public void setNavigationMode(int mode) { + mActionBar.setNavigationMode(mode); + } + + @Override + public int getDisplayOptions() { + return mActionBar.getDisplayOptions(); + } + + public class TabWrapper extends ActionBar.Tab implements android.app.ActionBar.TabListener { + final android.app.ActionBar.Tab mNativeTab; + private Object mTag; + private TabListener mListener; + + public TabWrapper(android.app.ActionBar.Tab nativeTab) { + mNativeTab = nativeTab; + mNativeTab.setTag(this); + mNativeTab.setTabListener(this); + } + + @Override + public int getPosition() { + return mNativeTab.getPosition(); + } + + @Override + public Drawable getIcon() { + return mNativeTab.getIcon(); + } + + @Override + public CharSequence getText() { + return mNativeTab.getText(); + } + + @Override + public Tab setIcon(Drawable icon) { + mNativeTab.setIcon(icon); + return this; + } + + @Override + public Tab setIcon(int resId) { + mNativeTab.setIcon(resId); + return this; + } + + @Override + public Tab setText(CharSequence text) { + mNativeTab.setText(text); + return this; + } + + @Override + public Tab setText(int resId) { + mNativeTab.setText(resId); + return this; + } + + @Override + public Tab setCustomView(View view) { + mNativeTab.setCustomView(view); + return this; + } + + @Override + public Tab setCustomView(int layoutResId) { + mNativeTab.setCustomView(layoutResId); + return this; + } + + @Override + public View getCustomView() { + return mNativeTab.getCustomView(); + } + + @Override + public Tab setTag(Object obj) { + mTag = obj; + return this; + } + + @Override + public Object getTag() { + return mTag; + } + + @Override + public Tab setTabListener(TabListener listener) { + mListener = listener; + return this; + } + + @Override + public void select() { + mNativeTab.select(); + } + + @Override + public Tab setContentDescription(int resId) { + mNativeTab.setContentDescription(resId); + return this; + } + + @Override + public Tab setContentDescription(CharSequence contentDesc) { + mNativeTab.setContentDescription(contentDesc); + return this; + } + + @Override + public CharSequence getContentDescription() { + return mNativeTab.getContentDescription(); + } + + @Override + public void onTabReselected(android.app.ActionBar.Tab tab, android.app.FragmentTransaction ft) { + if (mListener != null) { + FragmentTransaction trans = null; + if (mActivity instanceof SherlockFragmentActivity) { + trans = ((SherlockFragmentActivity)mActivity).getSupportFragmentManager().beginTransaction() + .disallowAddToBackStack(); + } + + mListener.onTabReselected(this, trans); + + if (trans != null && !trans.isEmpty()) { + trans.commit(); + } + } + } + + @Override + public void onTabSelected(android.app.ActionBar.Tab tab, android.app.FragmentTransaction ft) { + if (mListener != null) { + + if (mFragmentTransaction == null && mActivity instanceof SherlockFragmentActivity) { + mFragmentTransaction = ((SherlockFragmentActivity)mActivity).getSupportFragmentManager().beginTransaction() + .disallowAddToBackStack(); + } + + mListener.onTabSelected(this, mFragmentTransaction); + + if (mFragmentTransaction != null) { + if (!mFragmentTransaction.isEmpty()) { + mFragmentTransaction.commit(); + } + mFragmentTransaction = null; + } + } + } + + @Override + public void onTabUnselected(android.app.ActionBar.Tab tab, android.app.FragmentTransaction ft) { + if (mListener != null) { + FragmentTransaction trans = null; + if (mActivity instanceof SherlockFragmentActivity) { + trans = ((SherlockFragmentActivity)mActivity).getSupportFragmentManager().beginTransaction() + .disallowAddToBackStack(); + mFragmentTransaction = trans; + } + + mListener.onTabUnselected(this, trans); + } + } + } + + @Override + public Tab newTab() { + return new TabWrapper(mActionBar.newTab()); + } + + @Override + public void addTab(Tab tab) { + mActionBar.addTab(((TabWrapper)tab).mNativeTab); + } + + @Override + public void addTab(Tab tab, boolean setSelected) { + mActionBar.addTab(((TabWrapper)tab).mNativeTab, setSelected); + } + + @Override + public void addTab(Tab tab, int position) { + mActionBar.addTab(((TabWrapper)tab).mNativeTab, position); + } + + @Override + public void addTab(Tab tab, int position, boolean setSelected) { + mActionBar.addTab(((TabWrapper)tab).mNativeTab, position, setSelected); + } + + @Override + public void removeTab(Tab tab) { + mActionBar.removeTab(((TabWrapper)tab).mNativeTab); + } + + @Override + public void removeTabAt(int position) { + mActionBar.removeTabAt(position); + } + + @Override + public void removeAllTabs() { + mActionBar.removeAllTabs(); + } + + @Override + public void selectTab(Tab tab) { + mActionBar.selectTab(((TabWrapper)tab).mNativeTab); + } + + @Override + public Tab getSelectedTab() { + android.app.ActionBar.Tab selected = mActionBar.getSelectedTab(); + return (selected != null) ? (Tab)selected.getTag() : null; + } + + @Override + public Tab getTabAt(int index) { + android.app.ActionBar.Tab selected = mActionBar.getTabAt(index); + return (selected != null) ? (Tab)selected.getTag() : null; + } + + @Override + public int getTabCount() { + return mActionBar.getTabCount(); + } + + @Override + public int getHeight() { + return mActionBar.getHeight(); + } + + @Override + public void show() { + mActionBar.show(); + } + + @Override + public void hide() { + mActionBar.hide(); + } + + @Override + public boolean isShowing() { + return mActionBar.isShowing(); + } + + @Override + public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) { + mMenuVisibilityListeners.add(listener); + } + + @Override + public void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener) { + mMenuVisibilityListeners.remove(listener); + } + + @Override + public void onMenuVisibilityChanged(boolean isVisible) { + for (OnMenuVisibilityListener listener : mMenuVisibilityListeners) { + listener.onMenuVisibilityChanged(isVisible); + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/Animator.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/Animator.java new file mode 100644 index 00000000..2caf5b4a --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/Animator.java @@ -0,0 +1,278 @@ +/* + * 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.internal.nineoldandroids.animation; + +import java.util.ArrayList; + +import android.view.animation.Interpolator; + +/** + * This is the superclass for classes which provide basic support for animations which can be + * started, ended, and have AnimatorListeners added to them. + */ +public abstract class Animator implements Cloneable { + + + /** + * The set of listeners to be sent events through the life of an animation. + */ + ArrayList mListeners = null; + + /** + * Starts this animation. If the animation has a nonzero startDelay, the animation will start + * running after that delay elapses. A non-delayed animation will have its initial + * value(s) set immediately, followed by calls to + * {@link AnimatorListener#onAnimationStart(Animator)} for any listeners of this animator. + * + *

The animation started by calling this method will be run on the thread that called + * this method. This thread should have a Looper on it (a runtime exception will be thrown if + * this is not the case). Also, if the animation will animate + * properties of objects in the view hierarchy, then the calling thread should be the UI + * thread for that view hierarchy.

+ * + */ + public void start() { + } + + /** + * Cancels the animation. Unlike {@link #end()}, cancel() causes the animation to + * stop in its tracks, sending an + * {@link android.animation.Animator.AnimatorListener#onAnimationCancel(Animator)} to + * its listeners, followed by an + * {@link android.animation.Animator.AnimatorListener#onAnimationEnd(Animator)} message. + * + *

This method must be called on the thread that is running the animation.

+ */ + public void cancel() { + } + + /** + * Ends the animation. This causes the animation to assign the end value of the property being + * animated, then calling the + * {@link android.animation.Animator.AnimatorListener#onAnimationEnd(Animator)} method on + * its listeners. + * + *

This method must be called on the thread that is running the animation.

+ */ + public void end() { + } + + /** + * The amount of time, in milliseconds, to delay starting the animation after + * {@link #start()} is called. + * + * @return the number of milliseconds to delay running the animation + */ + public abstract long getStartDelay(); + + /** + * The amount of time, in milliseconds, to delay starting the animation after + * {@link #start()} is called. + + * @param startDelay The amount of the delay, in milliseconds + */ + public abstract void setStartDelay(long startDelay); + + + /** + * Sets the length of the animation. + * + * @param duration The length of the animation, in milliseconds. + */ + public abstract Animator setDuration(long duration); + + /** + * Gets the length of the animation. + * + * @return The length of the animation, in milliseconds. + */ + public abstract long getDuration(); + + /** + * The time interpolator used in calculating the elapsed fraction of this animation. The + * interpolator determines whether the animation runs with linear or non-linear motion, + * such as acceleration and deceleration. The default value is + * {@link android.view.animation.AccelerateDecelerateInterpolator} + * + * @param value the interpolator to be used by this animation + */ + public abstract void setInterpolator(/*Time*/Interpolator value); + + /** + * Returns whether this Animator is currently running (having been started and gone past any + * initial startDelay period and not yet ended). + * + * @return Whether the Animator is running. + */ + public abstract boolean isRunning(); + + /** + * Returns whether this Animator has been started and not yet ended. This state is a superset + * of the state of {@link #isRunning()}, because an Animator with a nonzero + * {@link #getStartDelay() startDelay} will return true for {@link #isStarted()} during the + * delay phase, whereas {@link #isRunning()} will return true only after the delay phase + * is complete. + * + * @return Whether the Animator has been started and not yet ended. + */ + public boolean isStarted() { + // Default method returns value for isRunning(). Subclasses should override to return a + // real value. + return isRunning(); + } + + /** + * Adds a listener to the set of listeners that are sent events through the life of an + * animation, such as start, repeat, and end. + * + * @param listener the listener to be added to the current set of listeners for this animation. + */ + public void addListener(AnimatorListener listener) { + if (mListeners == null) { + mListeners = new ArrayList(); + } + mListeners.add(listener); + } + + /** + * Removes a listener from the set listening to this animation. + * + * @param listener the listener to be removed from the current set of listeners for this + * animation. + */ + public void removeListener(AnimatorListener listener) { + if (mListeners == null) { + return; + } + mListeners.remove(listener); + if (mListeners.size() == 0) { + mListeners = null; + } + } + + /** + * Gets the set of {@link android.animation.Animator.AnimatorListener} objects that are currently + * listening for events on this Animator object. + * + * @return ArrayList The set of listeners. + */ + public ArrayList getListeners() { + return mListeners; + } + + /** + * Removes all listeners from this object. This is equivalent to calling + * getListeners() followed by calling clear() on the + * returned list of listeners. + */ + public void removeAllListeners() { + if (mListeners != null) { + mListeners.clear(); + mListeners = null; + } + } + + @Override + public Animator clone() { + try { + final Animator anim = (Animator) super.clone(); + if (mListeners != null) { + ArrayList oldListeners = mListeners; + anim.mListeners = new ArrayList(); + int numListeners = oldListeners.size(); + for (int i = 0; i < numListeners; ++i) { + anim.mListeners.add(oldListeners.get(i)); + } + } + return anim; + } catch (CloneNotSupportedException e) { + throw new AssertionError(); + } + } + + /** + * This method tells the object to use appropriate information to extract + * starting values for the animation. For example, a AnimatorSet object will pass + * this call to its child objects to tell them to set up the values. A + * ObjectAnimator object will use the information it has about its target object + * and PropertyValuesHolder objects to get the start values for its properties. + * An ValueAnimator object will ignore the request since it does not have enough + * information (such as a target object) to gather these values. + */ + public void setupStartValues() { + } + + /** + * This method tells the object to use appropriate information to extract + * ending values for the animation. For example, a AnimatorSet object will pass + * this call to its child objects to tell them to set up the values. A + * ObjectAnimator object will use the information it has about its target object + * and PropertyValuesHolder objects to get the start values for its properties. + * An ValueAnimator object will ignore the request since it does not have enough + * information (such as a target object) to gather these values. + */ + public void setupEndValues() { + } + + /** + * Sets the target object whose property will be animated by this animation. Not all subclasses + * operate on target objects (for example, {@link ValueAnimator}, but this method + * is on the superclass for the convenience of dealing generically with those subclasses + * that do handle targets. + * + * @param target The object being animated + */ + public void setTarget(Object target) { + } + + /** + *

An animation listener receives notifications from an animation. + * Notifications indicate animation related events, such as the end or the + * repetition of the animation.

+ */ + public static interface AnimatorListener { + /** + *

Notifies the start of the animation.

+ * + * @param animation The started animation. + */ + void onAnimationStart(Animator animation); + + /** + *

Notifies the end of the animation. This callback is not invoked + * for animations with repeat count set to INFINITE.

+ * + * @param animation The animation which reached its end. + */ + void onAnimationEnd(Animator animation); + + /** + *

Notifies the cancellation of the animation. This callback is not invoked + * for animations with repeat count set to INFINITE.

+ * + * @param animation The animation which was canceled. + */ + void onAnimationCancel(Animator animation); + + /** + *

Notifies the repetition of the animation.

+ * + * @param animation The animation which was repeated. + */ + void onAnimationRepeat(Animator animation); + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorListenerAdapter.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorListenerAdapter.java new file mode 100644 index 00000000..02ddff48 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorListenerAdapter.java @@ -0,0 +1,54 @@ +/* + * 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.internal.nineoldandroids.animation; + +/** + * This adapter class provides empty implementations of the methods from {@link android.animation.Animator.AnimatorListener}. + * Any custom listener that cares only about a subset of the methods of this listener can + * simply subclass this adapter class instead of implementing the interface directly. + */ +public abstract class AnimatorListenerAdapter implements Animator.AnimatorListener { + + /** + * {@inheritDoc} + */ + @Override + public void onAnimationCancel(Animator animation) { + } + + /** + * {@inheritDoc} + */ + @Override + public void onAnimationEnd(Animator animation) { + } + + /** + * {@inheritDoc} + */ + @Override + public void onAnimationRepeat(Animator animation) { + } + + /** + * {@inheritDoc} + */ + @Override + public void onAnimationStart(Animator animation) { + } + +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorSet.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorSet.java new file mode 100644 index 00000000..3231080c --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/AnimatorSet.java @@ -0,0 +1,1111 @@ +/* + * 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.internal.nineoldandroids.animation; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; + +import android.view.animation.Interpolator; + +/** + * This class plays a set of {@link Animator} objects in the specified order. Animations + * can be set up to play together, in sequence, or after a specified delay. + * + *

There are two different approaches to adding animations to a AnimatorSet: + * either the {@link AnimatorSet#playTogether(Animator[]) playTogether()} or + * {@link AnimatorSet#playSequentially(Animator[]) playSequentially()} methods can be called to add + * a set of animations all at once, or the {@link AnimatorSet#play(Animator)} can be + * used in conjunction with methods in the {@link AnimatorSet.Builder Builder} + * class to add animations + * one by one.

+ * + *

It is possible to set up a AnimatorSet with circular dependencies between + * its animations. For example, an animation a1 could be set up to start before animation a2, a2 + * before a3, and a3 before a1. The results of this configuration are undefined, but will typically + * result in none of the affected animations being played. Because of this (and because + * circular dependencies do not make logical sense anyway), circular dependencies + * should be avoided, and the dependency flow of animations should only be in one direction. + */ +@SuppressWarnings("unchecked") +public final class AnimatorSet extends Animator { + + /** + * Internal variables + * NOTE: This object implements the clone() method, making a deep copy of any referenced + * objects. As other non-trivial fields are added to this class, make sure to add logic + * to clone() to make deep copies of them. + */ + + /** + * Tracks animations currently being played, so that we know what to + * cancel or end when cancel() or end() is called on this AnimatorSet + */ + private ArrayList mPlayingSet = new ArrayList(); + + /** + * Contains all nodes, mapped to their respective Animators. When new + * dependency information is added for an Animator, we want to add it + * to a single node representing that Animator, not create a new Node + * if one already exists. + */ + private HashMap mNodeMap = new HashMap(); + + /** + * Set of all nodes created for this AnimatorSet. This list is used upon + * starting the set, and the nodes are placed in sorted order into the + * sortedNodes collection. + */ + private ArrayList mNodes = new ArrayList(); + + /** + * The sorted list of nodes. This is the order in which the animations will + * be played. The details about when exactly they will be played depend + * on the dependency relationships of the nodes. + */ + private ArrayList mSortedNodes = new ArrayList(); + + /** + * Flag indicating whether the nodes should be sorted prior to playing. This + * flag allows us to cache the previous sorted nodes so that if the sequence + * is replayed with no changes, it does not have to re-sort the nodes again. + */ + private boolean mNeedsSort = true; + + private AnimatorSetListener mSetListener = null; + + /** + * Flag indicating that the AnimatorSet has been manually + * terminated (by calling cancel() or end()). + * This flag is used to avoid starting other animations when currently-playing + * child animations of this AnimatorSet end. It also determines whether cancel/end + * notifications are sent out via the normal AnimatorSetListener mechanism. + */ + boolean mTerminated = false; + + /** + * Indicates whether an AnimatorSet has been start()'d, whether or + * not there is a nonzero startDelay. + */ + private boolean mStarted = false; + + // The amount of time in ms to delay starting the animation after start() is called + private long mStartDelay = 0; + + // Animator used for a nonzero startDelay + private ValueAnimator mDelayAnim = null; + + + // How long the child animations should last in ms. The default value is negative, which + // simply means that there is no duration set on the AnimatorSet. When a real duration is + // set, it is passed along to the child animations. + private long mDuration = -1; + + + /** + * Sets up this AnimatorSet to play all of the supplied animations at the same time. + * + * @param items The animations that will be started simultaneously. + */ + public void playTogether(Animator... items) { + if (items != null) { + mNeedsSort = true; + Builder builder = play(items[0]); + for (int i = 1; i < items.length; ++i) { + builder.with(items[i]); + } + } + } + + /** + * Sets up this AnimatorSet to play all of the supplied animations at the same time. + * + * @param items The animations that will be started simultaneously. + */ + public void playTogether(Collection items) { + if (items != null && items.size() > 0) { + mNeedsSort = true; + Builder builder = null; + for (Animator anim : items) { + if (builder == null) { + builder = play(anim); + } else { + builder.with(anim); + } + } + } + } + + /** + * Sets up this AnimatorSet to play each of the supplied animations when the + * previous animation ends. + * + * @param items The animations that will be started one after another. + */ + public void playSequentially(Animator... items) { + if (items != null) { + mNeedsSort = true; + if (items.length == 1) { + play(items[0]); + } else { + for (int i = 0; i < items.length - 1; ++i) { + play(items[i]).before(items[i+1]); + } + } + } + } + + /** + * Sets up this AnimatorSet to play each of the supplied animations when the + * previous animation ends. + * + * @param items The animations that will be started one after another. + */ + public void playSequentially(List items) { + if (items != null && items.size() > 0) { + mNeedsSort = true; + if (items.size() == 1) { + play(items.get(0)); + } else { + for (int i = 0; i < items.size() - 1; ++i) { + play(items.get(i)).before(items.get(i+1)); + } + } + } + } + + /** + * Returns the current list of child Animator objects controlled by this + * AnimatorSet. This is a copy of the internal list; modifications to the returned list + * will not affect the AnimatorSet, although changes to the underlying Animator objects + * will affect those objects being managed by the AnimatorSet. + * + * @return ArrayList The list of child animations of this AnimatorSet. + */ + public ArrayList getChildAnimations() { + ArrayList childList = new ArrayList(); + for (Node node : mNodes) { + childList.add(node.animation); + } + return childList; + } + + /** + * Sets the target object for all current {@link #getChildAnimations() child animations} + * of this AnimatorSet that take targets ({@link ObjectAnimator} and + * AnimatorSet). + * + * @param target The object being animated + */ + @Override + public void setTarget(Object target) { + for (Node node : mNodes) { + Animator animation = node.animation; + if (animation instanceof AnimatorSet) { + ((AnimatorSet)animation).setTarget(target); + } else if (animation instanceof ObjectAnimator) { + ((ObjectAnimator)animation).setTarget(target); + } + } + } + + /** + * Sets the TimeInterpolator for all current {@link #getChildAnimations() child animations} + * of this AnimatorSet. + * + * @param interpolator the interpolator to be used by each child animation of this AnimatorSet + */ + @Override + public void setInterpolator(/*Time*/Interpolator interpolator) { + for (Node node : mNodes) { + node.animation.setInterpolator(interpolator); + } + } + + /** + * This method creates a Builder object, which is used to + * set up playing constraints. This initial play() method + * tells the Builder the animation that is the dependency for + * the succeeding commands to the Builder. For example, + * calling play(a1).with(a2) sets up the AnimatorSet to play + * a1 and a2 at the same time, + * play(a1).before(a2) sets up the AnimatorSet to play + * a1 first, followed by a2, and + * play(a1).after(a2) sets up the AnimatorSet to play + * a2 first, followed by a1. + * + *

Note that play() is the only way to tell the + * Builder the animation upon which the dependency is created, + * so successive calls to the various functions in Builder + * will all refer to the initial parameter supplied in play() + * as the dependency of the other animations. For example, calling + * play(a1).before(a2).before(a3) will play both a2 + * and a3 when a1 ends; it does not set up a dependency between + * a2 and a3.

+ * + * @param anim The animation that is the dependency used in later calls to the + * methods in the returned Builder object. A null parameter will result + * in a null Builder return value. + * @return Builder The object that constructs the AnimatorSet based on the dependencies + * outlined in the calls to play and the other methods in the + * BuilderNote that canceling a AnimatorSet also cancels all of the animations that it + * is responsible for.

+ */ + @Override + public void cancel() { + mTerminated = true; + if (isStarted()) { + ArrayList tmpListeners = null; + if (mListeners != null) { + tmpListeners = (ArrayList) mListeners.clone(); + for (AnimatorListener listener : tmpListeners) { + listener.onAnimationCancel(this); + } + } + if (mDelayAnim != null && mDelayAnim.isRunning()) { + // If we're currently in the startDelay period, just cancel that animator and + // send out the end event to all listeners + mDelayAnim.cancel(); + } else if (mSortedNodes.size() > 0) { + for (Node node : mSortedNodes) { + node.animation.cancel(); + } + } + if (tmpListeners != null) { + for (AnimatorListener listener : tmpListeners) { + listener.onAnimationEnd(this); + } + } + mStarted = false; + } + } + + /** + * {@inheritDoc} + * + *

Note that ending a AnimatorSet also ends all of the animations that it is + * responsible for.

+ */ + @Override + public void end() { + mTerminated = true; + if (isStarted()) { + if (mSortedNodes.size() != mNodes.size()) { + // hasn't been started yet - sort the nodes now, then end them + sortNodes(); + for (Node node : mSortedNodes) { + if (mSetListener == null) { + mSetListener = new AnimatorSetListener(this); + } + node.animation.addListener(mSetListener); + } + } + if (mDelayAnim != null) { + mDelayAnim.cancel(); + } + if (mSortedNodes.size() > 0) { + for (Node node : mSortedNodes) { + node.animation.end(); + } + } + if (mListeners != null) { + ArrayList tmpListeners = + (ArrayList) mListeners.clone(); + for (AnimatorListener listener : tmpListeners) { + listener.onAnimationEnd(this); + } + } + mStarted = false; + } + } + + /** + * Returns true if any of the child animations of this AnimatorSet have been started and have + * not yet ended. + * @return Whether this AnimatorSet has been started and has not yet ended. + */ + @Override + public boolean isRunning() { + for (Node node : mNodes) { + if (node.animation.isRunning()) { + return true; + } + } + return false; + } + + @Override + public boolean isStarted() { + return mStarted; + } + + /** + * The amount of time, in milliseconds, to delay starting the animation after + * {@link #start()} is called. + * + * @return the number of milliseconds to delay running the animation + */ + @Override + public long getStartDelay() { + return mStartDelay; + } + + /** + * The amount of time, in milliseconds, to delay starting the animation after + * {@link #start()} is called. + + * @param startDelay The amount of the delay, in milliseconds + */ + @Override + public void setStartDelay(long startDelay) { + mStartDelay = startDelay; + } + + /** + * Gets the length of each of the child animations of this AnimatorSet. This value may + * be less than 0, which indicates that no duration has been set on this AnimatorSet + * and each of the child animations will use their own duration. + * + * @return The length of the animation, in milliseconds, of each of the child + * animations of this AnimatorSet. + */ + @Override + public long getDuration() { + return mDuration; + } + + /** + * Sets the length of each of the current child animations of this AnimatorSet. By default, + * each child animation will use its own duration. If the duration is set on the AnimatorSet, + * then each child animation inherits this duration. + * + * @param duration The length of the animation, in milliseconds, of each of the child + * animations of this AnimatorSet. + */ + @Override + public AnimatorSet setDuration(long duration) { + if (duration < 0) { + throw new IllegalArgumentException("duration must be a value of zero or greater"); + } + for (Node node : mNodes) { + // TODO: don't set the duration of the timing-only nodes created by AnimatorSet to + // insert "play-after" delays + node.animation.setDuration(duration); + } + mDuration = duration; + return this; + } + + @Override + public void setupStartValues() { + for (Node node : mNodes) { + node.animation.setupStartValues(); + } + } + + @Override + public void setupEndValues() { + for (Node node : mNodes) { + node.animation.setupEndValues(); + } + } + + /** + * {@inheritDoc} + * + *

Starting this AnimatorSet will, in turn, start the animations for which + * it is responsible. The details of when exactly those animations are started depends on + * the dependency relationships that have been set up between the animations. + */ + @Override + public void start() { + mTerminated = false; + mStarted = true; + + // First, sort the nodes (if necessary). This will ensure that sortedNodes + // contains the animation nodes in the correct order. + sortNodes(); + + int numSortedNodes = mSortedNodes.size(); + for (int i = 0; i < numSortedNodes; ++i) { + Node node = mSortedNodes.get(i); + // First, clear out the old listeners + ArrayList oldListeners = node.animation.getListeners(); + if (oldListeners != null && oldListeners.size() > 0) { + final ArrayList clonedListeners = new + ArrayList(oldListeners); + + for (AnimatorListener listener : clonedListeners) { + if (listener instanceof DependencyListener || + listener instanceof AnimatorSetListener) { + node.animation.removeListener(listener); + } + } + } + } + + // nodesToStart holds the list of nodes to be started immediately. We don't want to + // start the animations in the loop directly because we first need to set up + // dependencies on all of the nodes. For example, we don't want to start an animation + // when some other animation also wants to start when the first animation begins. + final ArrayList nodesToStart = new ArrayList(); + for (int i = 0; i < numSortedNodes; ++i) { + Node node = mSortedNodes.get(i); + if (mSetListener == null) { + mSetListener = new AnimatorSetListener(this); + } + if (node.dependencies == null || node.dependencies.size() == 0) { + nodesToStart.add(node); + } else { + int numDependencies = node.dependencies.size(); + for (int j = 0; j < numDependencies; ++j) { + Dependency dependency = node.dependencies.get(j); + dependency.node.animation.addListener( + new DependencyListener(this, node, dependency.rule)); + } + node.tmpDependencies = (ArrayList) node.dependencies.clone(); + } + node.animation.addListener(mSetListener); + } + // Now that all dependencies are set up, start the animations that should be started. + if (mStartDelay <= 0) { + for (Node node : nodesToStart) { + node.animation.start(); + mPlayingSet.add(node.animation); + } + } else { + mDelayAnim = ValueAnimator.ofFloat(0f, 1f); + mDelayAnim.setDuration(mStartDelay); + mDelayAnim.addListener(new AnimatorListenerAdapter() { + boolean canceled = false; + public void onAnimationCancel(Animator anim) { + canceled = true; + } + public void onAnimationEnd(Animator anim) { + if (!canceled) { + int numNodes = nodesToStart.size(); + for (int i = 0; i < numNodes; ++i) { + Node node = nodesToStart.get(i); + node.animation.start(); + mPlayingSet.add(node.animation); + } + } + } + }); + mDelayAnim.start(); + } + if (mListeners != null) { + ArrayList tmpListeners = + (ArrayList) mListeners.clone(); + int numListeners = tmpListeners.size(); + for (int i = 0; i < numListeners; ++i) { + tmpListeners.get(i).onAnimationStart(this); + } + } + if (mNodes.size() == 0 && mStartDelay == 0) { + // Handle unusual case where empty AnimatorSet is started - should send out + // end event immediately since the event will not be sent out at all otherwise + mStarted = false; + if (mListeners != null) { + ArrayList tmpListeners = + (ArrayList) mListeners.clone(); + int numListeners = tmpListeners.size(); + for (int i = 0; i < numListeners; ++i) { + tmpListeners.get(i).onAnimationEnd(this); + } + } + } + } + + @Override + public AnimatorSet clone() { + final AnimatorSet anim = (AnimatorSet) super.clone(); + /* + * The basic clone() operation copies all items. This doesn't work very well for + * AnimatorSet, because it will copy references that need to be recreated and state + * that may not apply. What we need to do now is put the clone in an uninitialized + * state, with fresh, empty data structures. Then we will build up the nodes list + * manually, as we clone each Node (and its animation). The clone will then be sorted, + * and will populate any appropriate lists, when it is started. + */ + anim.mNeedsSort = true; + anim.mTerminated = false; + anim.mStarted = false; + anim.mPlayingSet = new ArrayList(); + anim.mNodeMap = new HashMap(); + anim.mNodes = new ArrayList(); + anim.mSortedNodes = new ArrayList(); + + // Walk through the old nodes list, cloning each node and adding it to the new nodemap. + // One problem is that the old node dependencies point to nodes in the old AnimatorSet. + // We need to track the old/new nodes in order to reconstruct the dependencies in the clone. + HashMap nodeCloneMap = new HashMap(); // + for (Node node : mNodes) { + Node nodeClone = node.clone(); + nodeCloneMap.put(node, nodeClone); + anim.mNodes.add(nodeClone); + anim.mNodeMap.put(nodeClone.animation, nodeClone); + // Clear out the dependencies in the clone; we'll set these up manually later + nodeClone.dependencies = null; + nodeClone.tmpDependencies = null; + nodeClone.nodeDependents = null; + nodeClone.nodeDependencies = null; + // clear out any listeners that were set up by the AnimatorSet; these will + // be set up when the clone's nodes are sorted + ArrayList cloneListeners = nodeClone.animation.getListeners(); + if (cloneListeners != null) { + ArrayList listenersToRemove = null; + for (AnimatorListener listener : cloneListeners) { + if (listener instanceof AnimatorSetListener) { + if (listenersToRemove == null) { + listenersToRemove = new ArrayList(); + } + listenersToRemove.add(listener); + } + } + if (listenersToRemove != null) { + for (AnimatorListener listener : listenersToRemove) { + cloneListeners.remove(listener); + } + } + } + } + // Now that we've cloned all of the nodes, we're ready to walk through their + // dependencies, mapping the old dependencies to the new nodes + for (Node node : mNodes) { + Node nodeClone = nodeCloneMap.get(node); + if (node.dependencies != null) { + for (Dependency dependency : node.dependencies) { + Node clonedDependencyNode = nodeCloneMap.get(dependency.node); + Dependency cloneDependency = new Dependency(clonedDependencyNode, + dependency.rule); + nodeClone.addDependency(cloneDependency); + } + } + } + + return anim; + } + + /** + * This class is the mechanism by which animations are started based on events in other + * animations. If an animation has multiple dependencies on other animations, then + * all dependencies must be satisfied before the animation is started. + */ + private static class DependencyListener implements AnimatorListener { + + private AnimatorSet mAnimatorSet; + + // The node upon which the dependency is based. + private Node mNode; + + // The Dependency rule (WITH or AFTER) that the listener should wait for on + // the node + private int mRule; + + public DependencyListener(AnimatorSet animatorSet, Node node, int rule) { + this.mAnimatorSet = animatorSet; + this.mNode = node; + this.mRule = rule; + } + + /** + * Ignore cancel events for now. We may want to handle this eventually, + * to prevent follow-on animations from running when some dependency + * animation is canceled. + */ + public void onAnimationCancel(Animator animation) { + } + + /** + * An end event is received - see if this is an event we are listening for + */ + public void onAnimationEnd(Animator animation) { + if (mRule == Dependency.AFTER) { + startIfReady(animation); + } + } + + /** + * Ignore repeat events for now + */ + public void onAnimationRepeat(Animator animation) { + } + + /** + * A start event is received - see if this is an event we are listening for + */ + public void onAnimationStart(Animator animation) { + if (mRule == Dependency.WITH) { + startIfReady(animation); + } + } + + /** + * Check whether the event received is one that the node was waiting for. + * If so, mark it as complete and see whether it's time to start + * the animation. + * @param dependencyAnimation the animation that sent the event. + */ + private void startIfReady(Animator dependencyAnimation) { + if (mAnimatorSet.mTerminated) { + // if the parent AnimatorSet was canceled, then don't start any dependent anims + return; + } + Dependency dependencyToRemove = null; + int numDependencies = mNode.tmpDependencies.size(); + for (int i = 0; i < numDependencies; ++i) { + Dependency dependency = mNode.tmpDependencies.get(i); + if (dependency.rule == mRule && + dependency.node.animation == dependencyAnimation) { + // rule fired - remove the dependency and listener and check to + // see whether it's time to start the animation + dependencyToRemove = dependency; + dependencyAnimation.removeListener(this); + break; + } + } + mNode.tmpDependencies.remove(dependencyToRemove); + if (mNode.tmpDependencies.size() == 0) { + // all dependencies satisfied: start the animation + mNode.animation.start(); + mAnimatorSet.mPlayingSet.add(mNode.animation); + } + } + + } + + private class AnimatorSetListener implements AnimatorListener { + + private AnimatorSet mAnimatorSet; + + AnimatorSetListener(AnimatorSet animatorSet) { + mAnimatorSet = animatorSet; + } + + public void onAnimationCancel(Animator animation) { + if (!mTerminated) { + // Listeners are already notified of the AnimatorSet canceling in cancel(). + // The logic below only kicks in when animations end normally + if (mPlayingSet.size() == 0) { + if (mListeners != null) { + int numListeners = mListeners.size(); + for (int i = 0; i < numListeners; ++i) { + mListeners.get(i).onAnimationCancel(mAnimatorSet); + } + } + } + } + } + + public void onAnimationEnd(Animator animation) { + animation.removeListener(this); + mPlayingSet.remove(animation); + Node animNode = mAnimatorSet.mNodeMap.get(animation); + animNode.done = true; + if (!mTerminated) { + // Listeners are already notified of the AnimatorSet ending in cancel() or + // end(); the logic below only kicks in when animations end normally + ArrayList sortedNodes = mAnimatorSet.mSortedNodes; + boolean allDone = true; + int numSortedNodes = sortedNodes.size(); + for (int i = 0; i < numSortedNodes; ++i) { + if (!sortedNodes.get(i).done) { + allDone = false; + break; + } + } + if (allDone) { + // If this was the last child animation to end, then notify listeners that this + // AnimatorSet has ended + if (mListeners != null) { + ArrayList tmpListeners = + (ArrayList) mListeners.clone(); + int numListeners = tmpListeners.size(); + for (int i = 0; i < numListeners; ++i) { + tmpListeners.get(i).onAnimationEnd(mAnimatorSet); + } + } + mAnimatorSet.mStarted = false; + } + } + } + + // Nothing to do + public void onAnimationRepeat(Animator animation) { + } + + // Nothing to do + public void onAnimationStart(Animator animation) { + } + + } + + /** + * This method sorts the current set of nodes, if needed. The sort is a simple + * DependencyGraph sort, which goes like this: + * - All nodes without dependencies become 'roots' + * - while roots list is not null + * - for each root r + * - add r to sorted list + * - remove r as a dependency from any other node + * - any nodes with no dependencies are added to the roots list + */ + private void sortNodes() { + if (mNeedsSort) { + mSortedNodes.clear(); + ArrayList roots = new ArrayList(); + int numNodes = mNodes.size(); + for (int i = 0; i < numNodes; ++i) { + Node node = mNodes.get(i); + if (node.dependencies == null || node.dependencies.size() == 0) { + roots.add(node); + } + } + ArrayList tmpRoots = new ArrayList(); + while (roots.size() > 0) { + int numRoots = roots.size(); + for (int i = 0; i < numRoots; ++i) { + Node root = roots.get(i); + mSortedNodes.add(root); + if (root.nodeDependents != null) { + int numDependents = root.nodeDependents.size(); + for (int j = 0; j < numDependents; ++j) { + Node node = root.nodeDependents.get(j); + node.nodeDependencies.remove(root); + if (node.nodeDependencies.size() == 0) { + tmpRoots.add(node); + } + } + } + } + roots.clear(); + roots.addAll(tmpRoots); + tmpRoots.clear(); + } + mNeedsSort = false; + if (mSortedNodes.size() != mNodes.size()) { + throw new IllegalStateException("Circular dependencies cannot exist" + + " in AnimatorSet"); + } + } else { + // Doesn't need sorting, but still need to add in the nodeDependencies list + // because these get removed as the event listeners fire and the dependencies + // are satisfied + int numNodes = mNodes.size(); + for (int i = 0; i < numNodes; ++i) { + Node node = mNodes.get(i); + if (node.dependencies != null && node.dependencies.size() > 0) { + int numDependencies = node.dependencies.size(); + for (int j = 0; j < numDependencies; ++j) { + Dependency dependency = node.dependencies.get(j); + if (node.nodeDependencies == null) { + node.nodeDependencies = new ArrayList(); + } + if (!node.nodeDependencies.contains(dependency.node)) { + node.nodeDependencies.add(dependency.node); + } + } + } + // nodes are 'done' by default; they become un-done when started, and done + // again when ended + node.done = false; + } + } + } + + /** + * Dependency holds information about the node that some other node is + * dependent upon and the nature of that dependency. + * + */ + private static class Dependency { + static final int WITH = 0; // dependent node must start with this dependency node + static final int AFTER = 1; // dependent node must start when this dependency node finishes + + // The node that the other node with this Dependency is dependent upon + public Node node; + + // The nature of the dependency (WITH or AFTER) + public int rule; + + public Dependency(Node node, int rule) { + this.node = node; + this.rule = rule; + } + } + + /** + * A Node is an embodiment of both the Animator that it wraps as well as + * any dependencies that are associated with that Animation. This includes + * both dependencies upon other nodes (in the dependencies list) as + * well as dependencies of other nodes upon this (in the nodeDependents list). + */ + private static class Node implements Cloneable { + public Animator animation; + + /** + * These are the dependencies that this node's animation has on other + * nodes. For example, if this node's animation should begin with some + * other animation ends, then there will be an item in this node's + * dependencies list for that other animation's node. + */ + public ArrayList dependencies = null; + + /** + * tmpDependencies is a runtime detail. We use the dependencies list for sorting. + * But we also use the list to keep track of when multiple dependencies are satisfied, + * but removing each dependency as it is satisfied. We do not want to remove + * the dependency itself from the list, because we need to retain that information + * if the AnimatorSet is launched in the future. So we create a copy of the dependency + * list when the AnimatorSet starts and use this tmpDependencies list to track the + * list of satisfied dependencies. + */ + public ArrayList tmpDependencies = null; + + /** + * nodeDependencies is just a list of the nodes that this Node is dependent upon. + * This information is used in sortNodes(), to determine when a node is a root. + */ + public ArrayList nodeDependencies = null; + + /** + * nodeDepdendents is the list of nodes that have this node as a dependency. This + * is a utility field used in sortNodes to facilitate removing this node as a + * dependency when it is a root node. + */ + public ArrayList nodeDependents = null; + + /** + * Flag indicating whether the animation in this node is finished. This flag + * is used by AnimatorSet to check, as each animation ends, whether all child animations + * are done and it's time to send out an end event for the entire AnimatorSet. + */ + public boolean done = false; + + /** + * Constructs the Node with the animation that it encapsulates. A Node has no + * dependencies by default; dependencies are added via the addDependency() + * method. + * + * @param animation The animation that the Node encapsulates. + */ + public Node(Animator animation) { + this.animation = animation; + } + + /** + * Add a dependency to this Node. The dependency includes information about the + * node that this node is dependency upon and the nature of the dependency. + * @param dependency + */ + public void addDependency(Dependency dependency) { + if (dependencies == null) { + dependencies = new ArrayList(); + nodeDependencies = new ArrayList(); + } + dependencies.add(dependency); + if (!nodeDependencies.contains(dependency.node)) { + nodeDependencies.add(dependency.node); + } + Node dependencyNode = dependency.node; + if (dependencyNode.nodeDependents == null) { + dependencyNode.nodeDependents = new ArrayList(); + } + dependencyNode.nodeDependents.add(this); + } + + @Override + public Node clone() { + try { + Node node = (Node) super.clone(); + node.animation = animation.clone(); + return node; + } catch (CloneNotSupportedException e) { + throw new AssertionError(); + } + } + } + + /** + * The Builder object is a utility class to facilitate adding animations to a + * AnimatorSet along with the relationships between the various animations. The + * intention of the Builder methods, along with the {@link + * AnimatorSet#play(Animator) play()} method of AnimatorSet is to make it possible + * to express the dependency relationships of animations in a natural way. Developers can also + * use the {@link AnimatorSet#playTogether(Animator[]) playTogether()} and {@link + * AnimatorSet#playSequentially(Animator[]) playSequentially()} methods if these suit the need, + * but it might be easier in some situations to express the AnimatorSet of animations in pairs. + *

+ *

The Builder object cannot be constructed directly, but is rather constructed + * internally via a call to {@link AnimatorSet#play(Animator)}.

+ *

+ *

For example, this sets up a AnimatorSet to play anim1 and anim2 at the same time, anim3 to + * play when anim2 finishes, and anim4 to play when anim3 finishes:

+ *
+     *     AnimatorSet s = new AnimatorSet();
+     *     s.play(anim1).with(anim2);
+     *     s.play(anim2).before(anim3);
+     *     s.play(anim4).after(anim3);
+     * 
+ *

+ *

Note in the example that both {@link Builder#before(Animator)} and {@link + * Builder#after(Animator)} are used. These are just different ways of expressing the same + * relationship and are provided to make it easier to say things in a way that is more natural, + * depending on the situation.

+ *

+ *

It is possible to make several calls into the same Builder object to express + * multiple relationships. However, note that it is only the animation passed into the initial + * {@link AnimatorSet#play(Animator)} method that is the dependency in any of the successive + * calls to the Builder object. For example, the following code starts both anim2 + * and anim3 when anim1 ends; there is no direct dependency relationship between anim2 and + * anim3: + *

+     *   AnimatorSet s = new AnimatorSet();
+     *   s.play(anim1).before(anim2).before(anim3);
+     * 
+ * If the desired result is to play anim1 then anim2 then anim3, this code expresses the + * relationship correctly:

+ *
+     *   AnimatorSet s = new AnimatorSet();
+     *   s.play(anim1).before(anim2);
+     *   s.play(anim2).before(anim3);
+     * 
+ *

+ *

Note that it is possible to express relationships that cannot be resolved and will not + * result in sensible results. For example, play(anim1).after(anim1) makes no + * sense. In general, circular dependencies like this one (or more indirect ones where a depends + * on b, which depends on c, which depends on a) should be avoided. Only create AnimatorSets + * that can boil down to a simple, one-way relationship of animations starting with, before, and + * after other, different, animations.

+ */ + public class Builder { + + /** + * This tracks the current node being processed. It is supplied to the play() method + * of AnimatorSet and passed into the constructor of Builder. + */ + private Node mCurrentNode; + + /** + * package-private constructor. Builders are only constructed by AnimatorSet, when the + * play() method is called. + * + * @param anim The animation that is the dependency for the other animations passed into + * the other methods of this Builder object. + */ + Builder(Animator anim) { + mCurrentNode = mNodeMap.get(anim); + if (mCurrentNode == null) { + mCurrentNode = new Node(anim); + mNodeMap.put(anim, mCurrentNode); + mNodes.add(mCurrentNode); + } + } + + /** + * Sets up the given animation to play at the same time as the animation supplied in the + * {@link AnimatorSet#play(Animator)} call that created this Builder object. + * + * @param anim The animation that will play when the animation supplied to the + * {@link AnimatorSet#play(Animator)} method starts. + */ + public Builder with(Animator anim) { + Node node = mNodeMap.get(anim); + if (node == null) { + node = new Node(anim); + mNodeMap.put(anim, node); + mNodes.add(node); + } + Dependency dependency = new Dependency(mCurrentNode, Dependency.WITH); + node.addDependency(dependency); + return this; + } + + /** + * Sets up the given animation to play when the animation supplied in the + * {@link AnimatorSet#play(Animator)} call that created this Builder object + * ends. + * + * @param anim The animation that will play when the animation supplied to the + * {@link AnimatorSet#play(Animator)} method ends. + */ + public Builder before(Animator anim) { + Node node = mNodeMap.get(anim); + if (node == null) { + node = new Node(anim); + mNodeMap.put(anim, node); + mNodes.add(node); + } + Dependency dependency = new Dependency(mCurrentNode, Dependency.AFTER); + node.addDependency(dependency); + return this; + } + + /** + * Sets up the given animation to play when the animation supplied in the + * {@link AnimatorSet#play(Animator)} call that created this Builder object + * to start when the animation supplied in this method call ends. + * + * @param anim The animation whose end will cause the animation supplied to the + * {@link AnimatorSet#play(Animator)} method to play. + */ + public Builder after(Animator anim) { + Node node = mNodeMap.get(anim); + if (node == null) { + node = new Node(anim); + mNodeMap.put(anim, node); + mNodes.add(node); + } + Dependency dependency = new Dependency(node, Dependency.AFTER); + mCurrentNode.addDependency(dependency); + return this; + } + + /** + * Sets up the animation supplied in the + * {@link AnimatorSet#play(Animator)} call that created this Builder object + * to play when the given amount of time elapses. + * + * @param delay The number of milliseconds that should elapse before the + * animation starts. + */ + public Builder after(long delay) { + // setup dummy ValueAnimator just to run the clock + ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f); + anim.setDuration(delay); + after(anim); + return this; + } + + } + +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/FloatEvaluator.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/FloatEvaluator.java new file mode 100644 index 00000000..e4101936 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/FloatEvaluator.java @@ -0,0 +1,42 @@ +/* + * 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.internal.nineoldandroids.animation; + +/** + * This evaluator can be used to perform type interpolation between float values. + */ +public class FloatEvaluator implements TypeEvaluator { + + /** + * This function returns the result of linearly interpolating the start and end values, with + * fraction representing the proportion between the start and end values. The + * calculation is a simple parametric calculation: result = x0 + t * (v1 - v0), + * where x0 is startValue, x1 is endValue, + * and t is fraction. + * + * @param fraction The fraction from the starting to the ending values + * @param startValue The start value; should be of type float or + * Float + * @param endValue The end value; should be of type float or Float + * @return A linear interpolation between the start and end values, given the + * fraction parameter. + */ + public Float evaluate(float fraction, Number startValue, Number endValue) { + float startFloat = startValue.floatValue(); + return startFloat + fraction * (endValue.floatValue() - startFloat); + } +} \ No newline at end of file diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/FloatKeyframeSet.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/FloatKeyframeSet.java new file mode 100644 index 00000000..6d9dafa7 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/FloatKeyframeSet.java @@ -0,0 +1,136 @@ +/* + * 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.internal.nineoldandroids.animation; + +import java.util.ArrayList; +import android.view.animation.Interpolator; + +import com.actionbarsherlock.internal.nineoldandroids.animation.Keyframe.FloatKeyframe; + +/** + * This class holds a collection of FloatKeyframe objects and is called by ValueAnimator to calculate + * values between those keyframes for a given animation. The class internal to the animation + * package because it is an implementation detail of how Keyframes are stored and used. + * + *

This type-specific subclass of KeyframeSet, along with the other type-specific subclass for + * int, exists to speed up the getValue() method when there is no custom + * TypeEvaluator set for the animation, so that values can be calculated without autoboxing to the + * Object equivalents of these primitive types.

+ */ +@SuppressWarnings("unchecked") +class FloatKeyframeSet extends KeyframeSet { + private float firstValue; + private float lastValue; + private float deltaValue; + private boolean firstTime = true; + + public FloatKeyframeSet(FloatKeyframe... keyframes) { + super(keyframes); + } + + @Override + public Object getValue(float fraction) { + return getFloatValue(fraction); + } + + @Override + public FloatKeyframeSet clone() { + ArrayList keyframes = mKeyframes; + int numKeyframes = mKeyframes.size(); + FloatKeyframe[] newKeyframes = new FloatKeyframe[numKeyframes]; + for (int i = 0; i < numKeyframes; ++i) { + newKeyframes[i] = (FloatKeyframe) keyframes.get(i).clone(); + } + FloatKeyframeSet newSet = new FloatKeyframeSet(newKeyframes); + return newSet; + } + + public float getFloatValue(float fraction) { + if (mNumKeyframes == 2) { + if (firstTime) { + firstTime = false; + firstValue = ((FloatKeyframe) mKeyframes.get(0)).getFloatValue(); + lastValue = ((FloatKeyframe) mKeyframes.get(1)).getFloatValue(); + deltaValue = lastValue - firstValue; + } + if (mInterpolator != null) { + fraction = mInterpolator.getInterpolation(fraction); + } + if (mEvaluator == null) { + return firstValue + fraction * deltaValue; + } else { + return ((Number)mEvaluator.evaluate(fraction, firstValue, lastValue)).floatValue(); + } + } + if (fraction <= 0f) { + final FloatKeyframe prevKeyframe = (FloatKeyframe) mKeyframes.get(0); + final FloatKeyframe nextKeyframe = (FloatKeyframe) mKeyframes.get(1); + float prevValue = prevKeyframe.getFloatValue(); + float nextValue = nextKeyframe.getFloatValue(); + float prevFraction = prevKeyframe.getFraction(); + float nextFraction = nextKeyframe.getFraction(); + final /*Time*/Interpolator interpolator = nextKeyframe.getInterpolator(); + if (interpolator != null) { + fraction = interpolator.getInterpolation(fraction); + } + float intervalFraction = (fraction - prevFraction) / (nextFraction - prevFraction); + return mEvaluator == null ? + prevValue + intervalFraction * (nextValue - prevValue) : + ((Number)mEvaluator.evaluate(intervalFraction, prevValue, nextValue)). + floatValue(); + } else if (fraction >= 1f) { + final FloatKeyframe prevKeyframe = (FloatKeyframe) mKeyframes.get(mNumKeyframes - 2); + final FloatKeyframe nextKeyframe = (FloatKeyframe) mKeyframes.get(mNumKeyframes - 1); + float prevValue = prevKeyframe.getFloatValue(); + float nextValue = nextKeyframe.getFloatValue(); + float prevFraction = prevKeyframe.getFraction(); + float nextFraction = nextKeyframe.getFraction(); + final /*Time*/Interpolator interpolator = nextKeyframe.getInterpolator(); + if (interpolator != null) { + fraction = interpolator.getInterpolation(fraction); + } + float intervalFraction = (fraction - prevFraction) / (nextFraction - prevFraction); + return mEvaluator == null ? + prevValue + intervalFraction * (nextValue - prevValue) : + ((Number)mEvaluator.evaluate(intervalFraction, prevValue, nextValue)). + floatValue(); + } + FloatKeyframe prevKeyframe = (FloatKeyframe) mKeyframes.get(0); + for (int i = 1; i < mNumKeyframes; ++i) { + FloatKeyframe nextKeyframe = (FloatKeyframe) mKeyframes.get(i); + if (fraction < nextKeyframe.getFraction()) { + final /*Time*/Interpolator interpolator = nextKeyframe.getInterpolator(); + if (interpolator != null) { + fraction = interpolator.getInterpolation(fraction); + } + float intervalFraction = (fraction - prevKeyframe.getFraction()) / + (nextKeyframe.getFraction() - prevKeyframe.getFraction()); + float prevValue = prevKeyframe.getFloatValue(); + float nextValue = nextKeyframe.getFloatValue(); + return mEvaluator == null ? + prevValue + intervalFraction * (nextValue - prevValue) : + ((Number)mEvaluator.evaluate(intervalFraction, prevValue, nextValue)). + floatValue(); + } + prevKeyframe = nextKeyframe; + } + // shouldn't get here + return ((Number)mKeyframes.get(mNumKeyframes - 1).getValue()).floatValue(); + } + +} + diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/IntEvaluator.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/IntEvaluator.java new file mode 100644 index 00000000..ed5e79ec --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/IntEvaluator.java @@ -0,0 +1,42 @@ +/* + * 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.internal.nineoldandroids.animation; + +/** + * This evaluator can be used to perform type interpolation between int values. + */ +public class IntEvaluator implements TypeEvaluator { + + /** + * This function returns the result of linearly interpolating the start and end values, with + * fraction representing the proportion between the start and end values. The + * calculation is a simple parametric calculation: result = x0 + t * (v1 - v0), + * where x0 is startValue, x1 is endValue, + * and t is fraction. + * + * @param fraction The fraction from the starting to the ending values + * @param startValue The start value; should be of type int or + * Integer + * @param endValue The end value; should be of type int or Integer + * @return A linear interpolation between the start and end values, given the + * fraction parameter. + */ + public Integer evaluate(float fraction, Integer startValue, Integer endValue) { + int startInt = startValue; + return (int)(startInt + fraction * (endValue - startInt)); + } +} \ No newline at end of file diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/IntKeyframeSet.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/IntKeyframeSet.java new file mode 100644 index 00000000..e9215e7f --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/IntKeyframeSet.java @@ -0,0 +1,135 @@ +/* + * 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.internal.nineoldandroids.animation; + +import java.util.ArrayList; +import android.view.animation.Interpolator; + +import com.actionbarsherlock.internal.nineoldandroids.animation.Keyframe.IntKeyframe; + +/** + * This class holds a collection of IntKeyframe objects and is called by ValueAnimator to calculate + * values between those keyframes for a given animation. The class internal to the animation + * package because it is an implementation detail of how Keyframes are stored and used. + * + *

This type-specific subclass of KeyframeSet, along with the other type-specific subclass for + * float, exists to speed up the getValue() method when there is no custom + * TypeEvaluator set for the animation, so that values can be calculated without autoboxing to the + * Object equivalents of these primitive types.

+ */ +@SuppressWarnings("unchecked") +class IntKeyframeSet extends KeyframeSet { + private int firstValue; + private int lastValue; + private int deltaValue; + private boolean firstTime = true; + + public IntKeyframeSet(IntKeyframe... keyframes) { + super(keyframes); + } + + @Override + public Object getValue(float fraction) { + return getIntValue(fraction); + } + + @Override + public IntKeyframeSet clone() { + ArrayList keyframes = mKeyframes; + int numKeyframes = mKeyframes.size(); + IntKeyframe[] newKeyframes = new IntKeyframe[numKeyframes]; + for (int i = 0; i < numKeyframes; ++i) { + newKeyframes[i] = (IntKeyframe) keyframes.get(i).clone(); + } + IntKeyframeSet newSet = new IntKeyframeSet(newKeyframes); + return newSet; + } + + public int getIntValue(float fraction) { + if (mNumKeyframes == 2) { + if (firstTime) { + firstTime = false; + firstValue = ((IntKeyframe) mKeyframes.get(0)).getIntValue(); + lastValue = ((IntKeyframe) mKeyframes.get(1)).getIntValue(); + deltaValue = lastValue - firstValue; + } + if (mInterpolator != null) { + fraction = mInterpolator.getInterpolation(fraction); + } + if (mEvaluator == null) { + return firstValue + (int)(fraction * deltaValue); + } else { + return ((Number)mEvaluator.evaluate(fraction, firstValue, lastValue)).intValue(); + } + } + if (fraction <= 0f) { + final IntKeyframe prevKeyframe = (IntKeyframe) mKeyframes.get(0); + final IntKeyframe nextKeyframe = (IntKeyframe) mKeyframes.get(1); + int prevValue = prevKeyframe.getIntValue(); + int nextValue = nextKeyframe.getIntValue(); + float prevFraction = prevKeyframe.getFraction(); + float nextFraction = nextKeyframe.getFraction(); + final /*Time*/Interpolator interpolator = nextKeyframe.getInterpolator(); + if (interpolator != null) { + fraction = interpolator.getInterpolation(fraction); + } + float intervalFraction = (fraction - prevFraction) / (nextFraction - prevFraction); + return mEvaluator == null ? + prevValue + (int)(intervalFraction * (nextValue - prevValue)) : + ((Number)mEvaluator.evaluate(intervalFraction, prevValue, nextValue)). + intValue(); + } else if (fraction >= 1f) { + final IntKeyframe prevKeyframe = (IntKeyframe) mKeyframes.get(mNumKeyframes - 2); + final IntKeyframe nextKeyframe = (IntKeyframe) mKeyframes.get(mNumKeyframes - 1); + int prevValue = prevKeyframe.getIntValue(); + int nextValue = nextKeyframe.getIntValue(); + float prevFraction = prevKeyframe.getFraction(); + float nextFraction = nextKeyframe.getFraction(); + final /*Time*/Interpolator interpolator = nextKeyframe.getInterpolator(); + if (interpolator != null) { + fraction = interpolator.getInterpolation(fraction); + } + float intervalFraction = (fraction - prevFraction) / (nextFraction - prevFraction); + return mEvaluator == null ? + prevValue + (int)(intervalFraction * (nextValue - prevValue)) : + ((Number)mEvaluator.evaluate(intervalFraction, prevValue, nextValue)).intValue(); + } + IntKeyframe prevKeyframe = (IntKeyframe) mKeyframes.get(0); + for (int i = 1; i < mNumKeyframes; ++i) { + IntKeyframe nextKeyframe = (IntKeyframe) mKeyframes.get(i); + if (fraction < nextKeyframe.getFraction()) { + final /*Time*/Interpolator interpolator = nextKeyframe.getInterpolator(); + if (interpolator != null) { + fraction = interpolator.getInterpolation(fraction); + } + float intervalFraction = (fraction - prevKeyframe.getFraction()) / + (nextKeyframe.getFraction() - prevKeyframe.getFraction()); + int prevValue = prevKeyframe.getIntValue(); + int nextValue = nextKeyframe.getIntValue(); + return mEvaluator == null ? + prevValue + (int)(intervalFraction * (nextValue - prevValue)) : + ((Number)mEvaluator.evaluate(intervalFraction, prevValue, nextValue)). + intValue(); + } + prevKeyframe = nextKeyframe; + } + // shouldn't get here + return ((Number)mKeyframes.get(mNumKeyframes - 1).getValue()).intValue(); + } + +} + diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/Keyframe.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/Keyframe.java new file mode 100644 index 00000000..ab76fa7f --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/Keyframe.java @@ -0,0 +1,361 @@ +/* + * 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.internal.nineoldandroids.animation; + +import android.view.animation.Interpolator; + +/** + * This class holds a time/value pair for an animation. The Keyframe class is used + * by {@link ValueAnimator} to define the values that the animation target will have over the course + * of the animation. As the time proceeds from one keyframe to the other, the value of the + * target object will animate between the value at the previous keyframe and the value at the + * next keyframe. Each keyframe also holds an optional {@link TimeInterpolator} + * object, which defines the time interpolation over the intervalue preceding the keyframe. + * + *

The Keyframe class itself is abstract. The type-specific factory methods will return + * a subclass of Keyframe specific to the type of value being stored. This is done to improve + * performance when dealing with the most common cases (e.g., float and + * int values). Other types will fall into a more general Keyframe class that + * treats its values as Objects. Unless your animation requires dealing with a custom type + * or a data structure that needs to be animated directly (and evaluated using an implementation + * of {@link TypeEvaluator}), you should stick to using float and int as animations using those + * types have lower runtime overhead than other types.

+ */ +@SuppressWarnings("rawtypes") +public abstract class Keyframe implements Cloneable { + /** + * The time at which mValue will hold true. + */ + float mFraction; + + /** + * The type of the value in this Keyframe. This type is determined at construction time, + * based on the type of the value object passed into the constructor. + */ + Class mValueType; + + /** + * The optional time interpolator for the interval preceding this keyframe. A null interpolator + * (the default) results in linear interpolation over the interval. + */ + private /*Time*/Interpolator mInterpolator = null; + + /** + * Flag to indicate whether this keyframe has a valid value. This flag is used when an + * animation first starts, to populate placeholder keyframes with real values derived + * from the target object. + */ + boolean mHasValue = false; + + /** + * Constructs a Keyframe object with the given time and value. The time defines the + * time, as a proportion of an overall animation's duration, at which the value will hold true + * for the animation. The value for the animation between keyframes will be calculated as + * an interpolation between the values at those keyframes. + * + * @param fraction The time, expressed as a value between 0 and 1, representing the fraction + * of time elapsed of the overall animation duration. + * @param value The value that the object will animate to as the animation time approaches + * the time in this keyframe, and the the value animated from as the time passes the time in + * this keyframe. + */ + public static Keyframe ofInt(float fraction, int value) { + return new IntKeyframe(fraction, value); + } + + /** + * Constructs a Keyframe object with the given time. The value at this time will be derived + * from the target object when the animation first starts (note that this implies that keyframes + * with no initial value must be used as part of an {@link ObjectAnimator}). + * The time defines the + * time, as a proportion of an overall animation's duration, at which the value will hold true + * for the animation. The value for the animation between keyframes will be calculated as + * an interpolation between the values at those keyframes. + * + * @param fraction The time, expressed as a value between 0 and 1, representing the fraction + * of time elapsed of the overall animation duration. + */ + public static Keyframe ofInt(float fraction) { + return new IntKeyframe(fraction); + } + + /** + * Constructs a Keyframe object with the given time and value. The time defines the + * time, as a proportion of an overall animation's duration, at which the value will hold true + * for the animation. The value for the animation between keyframes will be calculated as + * an interpolation between the values at those keyframes. + * + * @param fraction The time, expressed as a value between 0 and 1, representing the fraction + * of time elapsed of the overall animation duration. + * @param value The value that the object will animate to as the animation time approaches + * the time in this keyframe, and the the value animated from as the time passes the time in + * this keyframe. + */ + public static Keyframe ofFloat(float fraction, float value) { + return new FloatKeyframe(fraction, value); + } + + /** + * Constructs a Keyframe object with the given time. The value at this time will be derived + * from the target object when the animation first starts (note that this implies that keyframes + * with no initial value must be used as part of an {@link ObjectAnimator}). + * The time defines the + * time, as a proportion of an overall animation's duration, at which the value will hold true + * for the animation. The value for the animation between keyframes will be calculated as + * an interpolation between the values at those keyframes. + * + * @param fraction The time, expressed as a value between 0 and 1, representing the fraction + * of time elapsed of the overall animation duration. + */ + public static Keyframe ofFloat(float fraction) { + return new FloatKeyframe(fraction); + } + + /** + * Constructs a Keyframe object with the given time and value. The time defines the + * time, as a proportion of an overall animation's duration, at which the value will hold true + * for the animation. The value for the animation between keyframes will be calculated as + * an interpolation between the values at those keyframes. + * + * @param fraction The time, expressed as a value between 0 and 1, representing the fraction + * of time elapsed of the overall animation duration. + * @param value The value that the object will animate to as the animation time approaches + * the time in this keyframe, and the the value animated from as the time passes the time in + * this keyframe. + */ + public static Keyframe ofObject(float fraction, Object value) { + return new ObjectKeyframe(fraction, value); + } + + /** + * Constructs a Keyframe object with the given time. The value at this time will be derived + * from the target object when the animation first starts (note that this implies that keyframes + * with no initial value must be used as part of an {@link ObjectAnimator}). + * The time defines the + * time, as a proportion of an overall animation's duration, at which the value will hold true + * for the animation. The value for the animation between keyframes will be calculated as + * an interpolation between the values at those keyframes. + * + * @param fraction The time, expressed as a value between 0 and 1, representing the fraction + * of time elapsed of the overall animation duration. + */ + public static Keyframe ofObject(float fraction) { + return new ObjectKeyframe(fraction, null); + } + + /** + * Indicates whether this keyframe has a valid value. This method is called internally when + * an {@link ObjectAnimator} first starts; keyframes without values are assigned values at + * that time by deriving the value for the property from the target object. + * + * @return boolean Whether this object has a value assigned. + */ + public boolean hasValue() { + return mHasValue; + } + + /** + * Gets the value for this Keyframe. + * + * @return The value for this Keyframe. + */ + public abstract Object getValue(); + + /** + * Sets the value for this Keyframe. + * + * @param value value for this Keyframe. + */ + public abstract void setValue(Object value); + + /** + * Gets the time for this keyframe, as a fraction of the overall animation duration. + * + * @return The time associated with this keyframe, as a fraction of the overall animation + * duration. This should be a value between 0 and 1. + */ + public float getFraction() { + return mFraction; + } + + /** + * Sets the time for this keyframe, as a fraction of the overall animation duration. + * + * @param fraction time associated with this keyframe, as a fraction of the overall animation + * duration. This should be a value between 0 and 1. + */ + public void setFraction(float fraction) { + mFraction = fraction; + } + + /** + * Gets the optional interpolator for this Keyframe. A value of null indicates + * that there is no interpolation, which is the same as linear interpolation. + * + * @return The optional interpolator for this Keyframe. + */ + public /*Time*/Interpolator getInterpolator() { + return mInterpolator; + } + + /** + * Sets the optional interpolator for this Keyframe. A value of null indicates + * that there is no interpolation, which is the same as linear interpolation. + * + * @return The optional interpolator for this Keyframe. + */ + public void setInterpolator(/*Time*/Interpolator interpolator) { + mInterpolator = interpolator; + } + + /** + * Gets the type of keyframe. This information is used by ValueAnimator to determine the type of + * {@link TypeEvaluator} to use when calculating values between keyframes. The type is based + * on the type of Keyframe created. + * + * @return The type of the value stored in the Keyframe. + */ + public Class getType() { + return mValueType; + } + + @Override + public abstract Keyframe clone(); + + /** + * This internal subclass is used for all types which are not int or float. + */ + static class ObjectKeyframe extends Keyframe { + + /** + * The value of the animation at the time mFraction. + */ + Object mValue; + + ObjectKeyframe(float fraction, Object value) { + mFraction = fraction; + mValue = value; + mHasValue = (value != null); + mValueType = mHasValue ? value.getClass() : Object.class; + } + + public Object getValue() { + return mValue; + } + + public void setValue(Object value) { + mValue = value; + mHasValue = (value != null); + } + + @Override + public ObjectKeyframe clone() { + ObjectKeyframe kfClone = new ObjectKeyframe(getFraction(), mValue); + kfClone.setInterpolator(getInterpolator()); + return kfClone; + } + } + + /** + * Internal subclass used when the keyframe value is of type int. + */ + static class IntKeyframe extends Keyframe { + + /** + * The value of the animation at the time mFraction. + */ + int mValue; + + IntKeyframe(float fraction, int value) { + mFraction = fraction; + mValue = value; + mValueType = int.class; + mHasValue = true; + } + + IntKeyframe(float fraction) { + mFraction = fraction; + mValueType = int.class; + } + + public int getIntValue() { + return mValue; + } + + public Object getValue() { + return mValue; + } + + public void setValue(Object value) { + if (value != null && value.getClass() == Integer.class) { + mValue = ((Integer)value).intValue(); + mHasValue = true; + } + } + + @Override + public IntKeyframe clone() { + IntKeyframe kfClone = new IntKeyframe(getFraction(), mValue); + kfClone.setInterpolator(getInterpolator()); + return kfClone; + } + } + + /** + * Internal subclass used when the keyframe value is of type float. + */ + static class FloatKeyframe extends Keyframe { + /** + * The value of the animation at the time mFraction. + */ + float mValue; + + FloatKeyframe(float fraction, float value) { + mFraction = fraction; + mValue = value; + mValueType = float.class; + mHasValue = true; + } + + FloatKeyframe(float fraction) { + mFraction = fraction; + mValueType = float.class; + } + + public float getFloatValue() { + return mValue; + } + + public Object getValue() { + return mValue; + } + + public void setValue(Object value) { + if (value != null && value.getClass() == Float.class) { + mValue = ((Float)value).floatValue(); + mHasValue = true; + } + } + + @Override + public FloatKeyframe clone() { + FloatKeyframe kfClone = new FloatKeyframe(getFraction(), mValue); + kfClone.setInterpolator(getInterpolator()); + return kfClone; + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/KeyframeSet.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/KeyframeSet.java new file mode 100644 index 00000000..a71e1ad3 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/KeyframeSet.java @@ -0,0 +1,227 @@ +/* + * 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.internal.nineoldandroids.animation; + +import java.util.ArrayList; +import java.util.Arrays; +import android.view.animation.Interpolator; + +import com.actionbarsherlock.internal.nineoldandroids.animation.Keyframe.FloatKeyframe; +import com.actionbarsherlock.internal.nineoldandroids.animation.Keyframe.IntKeyframe; +import com.actionbarsherlock.internal.nineoldandroids.animation.Keyframe.ObjectKeyframe; + +/** + * This class holds a collection of Keyframe objects and is called by ValueAnimator to calculate + * values between those keyframes for a given animation. The class internal to the animation + * package because it is an implementation detail of how Keyframes are stored and used. + */ +@SuppressWarnings({"rawtypes", "unchecked"}) +class KeyframeSet { + + int mNumKeyframes; + + Keyframe mFirstKeyframe; + Keyframe mLastKeyframe; + /*Time*/Interpolator mInterpolator; // only used in the 2-keyframe case + ArrayList mKeyframes; // only used when there are not 2 keyframes + TypeEvaluator mEvaluator; + + + public KeyframeSet(Keyframe... keyframes) { + mNumKeyframes = keyframes.length; + mKeyframes = new ArrayList(); + mKeyframes.addAll(Arrays.asList(keyframes)); + mFirstKeyframe = mKeyframes.get(0); + mLastKeyframe = mKeyframes.get(mNumKeyframes - 1); + mInterpolator = mLastKeyframe.getInterpolator(); + } + + public static KeyframeSet ofInt(int... values) { + int numKeyframes = values.length; + IntKeyframe keyframes[] = new IntKeyframe[Math.max(numKeyframes,2)]; + if (numKeyframes == 1) { + keyframes[0] = (IntKeyframe) Keyframe.ofInt(0f); + keyframes[1] = (IntKeyframe) Keyframe.ofInt(1f, values[0]); + } else { + keyframes[0] = (IntKeyframe) Keyframe.ofInt(0f, values[0]); + for (int i = 1; i < numKeyframes; ++i) { + keyframes[i] = (IntKeyframe) Keyframe.ofInt((float) i / (numKeyframes - 1), values[i]); + } + } + return new IntKeyframeSet(keyframes); + } + + public static KeyframeSet ofFloat(float... values) { + int numKeyframes = values.length; + FloatKeyframe keyframes[] = new FloatKeyframe[Math.max(numKeyframes,2)]; + if (numKeyframes == 1) { + keyframes[0] = (FloatKeyframe) Keyframe.ofFloat(0f); + keyframes[1] = (FloatKeyframe) Keyframe.ofFloat(1f, values[0]); + } else { + keyframes[0] = (FloatKeyframe) Keyframe.ofFloat(0f, values[0]); + for (int i = 1; i < numKeyframes; ++i) { + keyframes[i] = (FloatKeyframe) Keyframe.ofFloat((float) i / (numKeyframes - 1), values[i]); + } + } + return new FloatKeyframeSet(keyframes); + } + + public static KeyframeSet ofKeyframe(Keyframe... keyframes) { + // if all keyframes of same primitive type, create the appropriate KeyframeSet + int numKeyframes = keyframes.length; + boolean hasFloat = false; + boolean hasInt = false; + boolean hasOther = false; + for (int i = 0; i < numKeyframes; ++i) { + if (keyframes[i] instanceof FloatKeyframe) { + hasFloat = true; + } else if (keyframes[i] instanceof IntKeyframe) { + hasInt = true; + } else { + hasOther = true; + } + } + if (hasFloat && !hasInt && !hasOther) { + FloatKeyframe floatKeyframes[] = new FloatKeyframe[numKeyframes]; + for (int i = 0; i < numKeyframes; ++i) { + floatKeyframes[i] = (FloatKeyframe) keyframes[i]; + } + return new FloatKeyframeSet(floatKeyframes); + } else if (hasInt && !hasFloat && !hasOther) { + IntKeyframe intKeyframes[] = new IntKeyframe[numKeyframes]; + for (int i = 0; i < numKeyframes; ++i) { + intKeyframes[i] = (IntKeyframe) keyframes[i]; + } + return new IntKeyframeSet(intKeyframes); + } else { + return new KeyframeSet(keyframes); + } + } + + public static KeyframeSet ofObject(Object... values) { + int numKeyframes = values.length; + ObjectKeyframe keyframes[] = new ObjectKeyframe[Math.max(numKeyframes,2)]; + if (numKeyframes == 1) { + keyframes[0] = (ObjectKeyframe) Keyframe.ofObject(0f); + keyframes[1] = (ObjectKeyframe) Keyframe.ofObject(1f, values[0]); + } else { + keyframes[0] = (ObjectKeyframe) Keyframe.ofObject(0f, values[0]); + for (int i = 1; i < numKeyframes; ++i) { + keyframes[i] = (ObjectKeyframe) Keyframe.ofObject((float) i / (numKeyframes - 1), values[i]); + } + } + return new KeyframeSet(keyframes); + } + + /** + * Sets the TypeEvaluator to be used when calculating animated values. This object + * is required only for KeyframeSets that are not either IntKeyframeSet or FloatKeyframeSet, + * both of which assume their own evaluator to speed up calculations with those primitive + * types. + * + * @param evaluator The TypeEvaluator to be used to calculate animated values. + */ + public void setEvaluator(TypeEvaluator evaluator) { + mEvaluator = evaluator; + } + + @Override + public KeyframeSet clone() { + ArrayList keyframes = mKeyframes; + int numKeyframes = mKeyframes.size(); + Keyframe[] newKeyframes = new Keyframe[numKeyframes]; + for (int i = 0; i < numKeyframes; ++i) { + newKeyframes[i] = keyframes.get(i).clone(); + } + KeyframeSet newSet = new KeyframeSet(newKeyframes); + return newSet; + } + + /** + * Gets the animated value, given the elapsed fraction of the animation (interpolated by the + * animation's interpolator) and the evaluator used to calculate in-between values. This + * function maps the input fraction to the appropriate keyframe interval and a fraction + * between them and returns the interpolated value. Note that the input fraction may fall + * outside the [0-1] bounds, if the animation's interpolator made that happen (e.g., a + * spring interpolation that might send the fraction past 1.0). We handle this situation by + * just using the two keyframes at the appropriate end when the value is outside those bounds. + * + * @param fraction The elapsed fraction of the animation + * @return The animated value. + */ + public Object getValue(float fraction) { + + // Special-case optimization for the common case of only two keyframes + if (mNumKeyframes == 2) { + if (mInterpolator != null) { + fraction = mInterpolator.getInterpolation(fraction); + } + return mEvaluator.evaluate(fraction, mFirstKeyframe.getValue(), + mLastKeyframe.getValue()); + } + if (fraction <= 0f) { + final Keyframe nextKeyframe = mKeyframes.get(1); + final /*Time*/Interpolator interpolator = nextKeyframe.getInterpolator(); + if (interpolator != null) { + fraction = interpolator.getInterpolation(fraction); + } + final float prevFraction = mFirstKeyframe.getFraction(); + float intervalFraction = (fraction - prevFraction) / + (nextKeyframe.getFraction() - prevFraction); + return mEvaluator.evaluate(intervalFraction, mFirstKeyframe.getValue(), + nextKeyframe.getValue()); + } else if (fraction >= 1f) { + final Keyframe prevKeyframe = mKeyframes.get(mNumKeyframes - 2); + final /*Time*/Interpolator interpolator = mLastKeyframe.getInterpolator(); + if (interpolator != null) { + fraction = interpolator.getInterpolation(fraction); + } + final float prevFraction = prevKeyframe.getFraction(); + float intervalFraction = (fraction - prevFraction) / + (mLastKeyframe.getFraction() - prevFraction); + return mEvaluator.evaluate(intervalFraction, prevKeyframe.getValue(), + mLastKeyframe.getValue()); + } + Keyframe prevKeyframe = mFirstKeyframe; + for (int i = 1; i < mNumKeyframes; ++i) { + Keyframe nextKeyframe = mKeyframes.get(i); + if (fraction < nextKeyframe.getFraction()) { + final /*Time*/Interpolator interpolator = nextKeyframe.getInterpolator(); + if (interpolator != null) { + fraction = interpolator.getInterpolation(fraction); + } + final float prevFraction = prevKeyframe.getFraction(); + float intervalFraction = (fraction - prevFraction) / + (nextKeyframe.getFraction() - prevFraction); + return mEvaluator.evaluate(intervalFraction, prevKeyframe.getValue(), + nextKeyframe.getValue()); + } + prevKeyframe = nextKeyframe; + } + // shouldn't reach here + return mLastKeyframe.getValue(); + } + + @Override + public String toString() { + String returnVal = " "; + for (int i = 0; i < mNumKeyframes; ++i) { + returnVal += mKeyframes.get(i).getValue() + " "; + } + return returnVal; + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/ObjectAnimator.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/ObjectAnimator.java new file mode 100644 index 00000000..21d15c02 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/ObjectAnimator.java @@ -0,0 +1,491 @@ +/* + * 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.internal.nineoldandroids.animation; + +import android.util.Log; +//import android.util.Property; + +//import java.lang.reflect.Method; +import java.util.ArrayList; + +/** + * This subclass of {@link ValueAnimator} provides support for animating properties on target objects. + * The constructors of this class take parameters to define the target object that will be animated + * as well as the name of the property that will be animated. Appropriate set/get functions + * are then determined internally and the animation will call these functions as necessary to + * animate the property. + * + * @see #setPropertyName(String) + * + */ +@SuppressWarnings("rawtypes") +public final class ObjectAnimator extends ValueAnimator { + private static final boolean DBG = false; + + // The target object on which the property exists, set in the constructor + private Object mTarget; + + private String mPropertyName; + + //private Property mProperty; + + /** + * Sets the name of the property that will be animated. This name is used to derive + * a setter function that will be called to set animated values. + * For example, a property name of foo will result + * in a call to the function setFoo() on the target object. If either + * valueFrom or valueTo is null, then a getter function will + * also be derived and called. + * + *

For best performance of the mechanism that calls the setter function determined by the + * name of the property being animated, use float or int typed values, + * and make the setter function for those properties have a void return value. This + * will cause the code to take an optimized path for these constrained circumstances. Other + * property types and return types will work, but will have more overhead in processing + * the requests due to normal reflection mechanisms.

+ * + *

Note that the setter function derived from this property name + * must take the same parameter type as the + * valueFrom and valueTo properties, otherwise the call to + * the setter function will fail.

+ * + *

If this ObjectAnimator has been set up to animate several properties together, + * using more than one PropertyValuesHolder objects, then setting the propertyName simply + * sets the propertyName in the first of those PropertyValuesHolder objects.

+ * + * @param propertyName The name of the property being animated. Should not be null. + */ + public void setPropertyName(String propertyName) { + // mValues could be null if this is being constructed piecemeal. Just record the + // propertyName to be used later when setValues() is called if so. + if (mValues != null) { + PropertyValuesHolder valuesHolder = mValues[0]; + String oldName = valuesHolder.getPropertyName(); + valuesHolder.setPropertyName(propertyName); + mValuesMap.remove(oldName); + mValuesMap.put(propertyName, valuesHolder); + } + mPropertyName = propertyName; + // New property/values/target should cause re-initialization prior to starting + mInitialized = false; + } + + /** + * Sets the property that will be animated. Property objects will take precedence over + * properties specified by the {@link #setPropertyName(String)} method. Animations should + * be set up to use one or the other, not both. + * + * @param property The property being animated. Should not be null. + */ + //public void setProperty(Property property) { + // // mValues could be null if this is being constructed piecemeal. Just record the + // // propertyName to be used later when setValues() is called if so. + // if (mValues != null) { + // PropertyValuesHolder valuesHolder = mValues[0]; + // String oldName = valuesHolder.getPropertyName(); + // valuesHolder.setProperty(property); + // mValuesMap.remove(oldName); + // mValuesMap.put(mPropertyName, valuesHolder); + // } + // if (mProperty != null) { + // mPropertyName = property.getName(); + // } + // mProperty = property; + // // New property/values/target should cause re-initialization prior to starting + // mInitialized = false; + //} + + /** + * Gets the name of the property that will be animated. This name will be used to derive + * a setter function that will be called to set animated values. + * For example, a property name of foo will result + * in a call to the function setFoo() on the target object. If either + * valueFrom or valueTo is null, then a getter function will + * also be derived and called. + */ + public String getPropertyName() { + return mPropertyName; + } + + /** + * Creates a new ObjectAnimator object. This default constructor is primarily for + * use internally; the other constructors which take parameters are more generally + * useful. + */ + public ObjectAnimator() { + } + + /** + * Private utility constructor that initializes the target object and name of the + * property being animated. + * + * @param target The object whose property is to be animated. This object should + * have a public method on it called setName(), where name is + * the value of the propertyName parameter. + * @param propertyName The name of the property being animated. + */ + private ObjectAnimator(Object target, String propertyName) { + mTarget = target; + setPropertyName(propertyName); + } + + /** + * Private utility constructor that initializes the target object and property being animated. + * + * @param target The object whose property is to be animated. + * @param property The property being animated. + */ + //private ObjectAnimator(T target, Property property) { + // mTarget = target; + // setProperty(property); + //} + + /** + * Constructs and returns an ObjectAnimator that animates between int values. A single + * value implies that that value is the one being animated to. Two values imply a starting + * and ending values. More than two values imply a starting value, values to animate through + * along the way, and an ending value (these values will be distributed evenly across + * the duration of the animation). + * + * @param target The object whose property is to be animated. This object should + * have a public method on it called setName(), where name is + * the value of the propertyName parameter. + * @param propertyName The name of the property being animated. + * @param values A set of values that the animation will animate between over time. + * @return An ObjectAnimator object that is set up to animate between the given values. + */ + public static ObjectAnimator ofInt(Object target, String propertyName, int... values) { + ObjectAnimator anim = new ObjectAnimator(target, propertyName); + anim.setIntValues(values); + return anim; + } + + /** + * Constructs and returns an ObjectAnimator that animates between int values. A single + * value implies that that value is the one being animated to. Two values imply a starting + * and ending values. More than two values imply a starting value, values to animate through + * along the way, and an ending value (these values will be distributed evenly across + * the duration of the animation). + * + * @param target The object whose property is to be animated. + * @param property The property being animated. + * @param values A set of values that the animation will animate between over time. + * @return An ObjectAnimator object that is set up to animate between the given values. + */ + //public static ObjectAnimator ofInt(T target, Property property, int... values) { + // ObjectAnimator anim = new ObjectAnimator(target, property); + // anim.setIntValues(values); + // return anim; + //} + + /** + * Constructs and returns an ObjectAnimator that animates between float values. A single + * value implies that that value is the one being animated to. Two values imply a starting + * and ending values. More than two values imply a starting value, values to animate through + * along the way, and an ending value (these values will be distributed evenly across + * the duration of the animation). + * + * @param target The object whose property is to be animated. This object should + * have a public method on it called setName(), where name is + * the value of the propertyName parameter. + * @param propertyName The name of the property being animated. + * @param values A set of values that the animation will animate between over time. + * @return An ObjectAnimator object that is set up to animate between the given values. + */ + public static ObjectAnimator ofFloat(Object target, String propertyName, float... values) { + ObjectAnimator anim = new ObjectAnimator(target, propertyName); + anim.setFloatValues(values); + return anim; + } + + /** + * Constructs and returns an ObjectAnimator that animates between float values. A single + * value implies that that value is the one being animated to. Two values imply a starting + * and ending values. More than two values imply a starting value, values to animate through + * along the way, and an ending value (these values will be distributed evenly across + * the duration of the animation). + * + * @param target The object whose property is to be animated. + * @param property The property being animated. + * @param values A set of values that the animation will animate between over time. + * @return An ObjectAnimator object that is set up to animate between the given values. + */ + //public static ObjectAnimator ofFloat(T target, Property property, + // float... values) { + // ObjectAnimator anim = new ObjectAnimator(target, property); + // anim.setFloatValues(values); + // return anim; + //} + + /** + * Constructs and returns an ObjectAnimator that animates between Object values. A single + * value implies that that value is the one being animated to. Two values imply a starting + * and ending values. More than two values imply a starting value, values to animate through + * along the way, and an ending value (these values will be distributed evenly across + * the duration of the animation). + * + * @param target The object whose property is to be animated. This object should + * have a public method on it called setName(), where name is + * the value of the propertyName parameter. + * @param propertyName The name of the property being animated. + * @param evaluator A TypeEvaluator that will be called on each animation frame to + * provide the necessary interpolation between the Object values to derive the animated + * value. + * @param values A set of values that the animation will animate between over time. + * @return An ObjectAnimator object that is set up to animate between the given values. + */ + public static ObjectAnimator ofObject(Object target, String propertyName, + TypeEvaluator evaluator, Object... values) { + ObjectAnimator anim = new ObjectAnimator(target, propertyName); + anim.setObjectValues(values); + anim.setEvaluator(evaluator); + return anim; + } + + /** + * Constructs and returns an ObjectAnimator that animates between Object values. A single + * value implies that that value is the one being animated to. Two values imply a starting + * and ending values. More than two values imply a starting value, values to animate through + * along the way, and an ending value (these values will be distributed evenly across + * the duration of the animation). + * + * @param target The object whose property is to be animated. + * @param property The property being animated. + * @param evaluator A TypeEvaluator that will be called on each animation frame to + * provide the necessary interpolation between the Object values to derive the animated + * value. + * @param values A set of values that the animation will animate between over time. + * @return An ObjectAnimator object that is set up to animate between the given values. + */ + //public static ObjectAnimator ofObject(T target, Property property, + // TypeEvaluator evaluator, V... values) { + // ObjectAnimator anim = new ObjectAnimator(target, property); + // anim.setObjectValues(values); + // anim.setEvaluator(evaluator); + // return anim; + //} + + /** + * Constructs and returns an ObjectAnimator that animates between the sets of values specified + * in PropertyValueHolder objects. This variant should be used when animating + * several properties at once with the same ObjectAnimator, since PropertyValuesHolder allows + * you to associate a set of animation values with a property name. + * + * @param target The object whose property is to be animated. Depending on how the + * PropertyValuesObjects were constructed, the target object should either have the {@link + * android.util.Property} objects used to construct the PropertyValuesHolder objects or (if the + * PropertyValuesHOlder objects were created with property names) the target object should have + * public methods on it called setName(), where name is the name of + * the property passed in as the propertyName parameter for each of the + * PropertyValuesHolder objects. + * @param values A set of PropertyValuesHolder objects whose values will be animated between + * over time. + * @return An ObjectAnimator object that is set up to animate between the given values. + */ + public static ObjectAnimator ofPropertyValuesHolder(Object target, + PropertyValuesHolder... values) { + ObjectAnimator anim = new ObjectAnimator(); + anim.mTarget = target; + anim.setValues(values); + return anim; + } + + @Override + public void setIntValues(int... values) { + if (mValues == null || mValues.length == 0) { + // No values yet - this animator is being constructed piecemeal. Init the values with + // whatever the current propertyName is + //if (mProperty != null) { + // setValues(PropertyValuesHolder.ofInt(mProperty, values)); + //} else { + setValues(PropertyValuesHolder.ofInt(mPropertyName, values)); + //} + } else { + super.setIntValues(values); + } + } + + @Override + public void setFloatValues(float... values) { + if (mValues == null || mValues.length == 0) { + // No values yet - this animator is being constructed piecemeal. Init the values with + // whatever the current propertyName is + //if (mProperty != null) { + // setValues(PropertyValuesHolder.ofFloat(mProperty, values)); + //} else { + setValues(PropertyValuesHolder.ofFloat(mPropertyName, values)); + //} + } else { + super.setFloatValues(values); + } + } + + @Override + public void setObjectValues(Object... values) { + if (mValues == null || mValues.length == 0) { + // No values yet - this animator is being constructed piecemeal. Init the values with + // whatever the current propertyName is + //if (mProperty != null) { + // setValues(PropertyValuesHolder.ofObject(mProperty, (TypeEvaluator)null, values)); + //} else { + setValues(PropertyValuesHolder.ofObject(mPropertyName, (TypeEvaluator)null, values)); + //} + } else { + super.setObjectValues(values); + } + } + + @Override + public void start() { + if (DBG) { + Log.d("ObjectAnimator", "Anim target, duration: " + mTarget + ", " + getDuration()); + for (int i = 0; i < mValues.length; ++i) { + PropertyValuesHolder pvh = mValues[i]; + ArrayList keyframes = pvh.mKeyframeSet.mKeyframes; + Log.d("ObjectAnimator", " Values[" + i + "]: " + + pvh.getPropertyName() + ", " + keyframes.get(0).getValue() + ", " + + keyframes.get(pvh.mKeyframeSet.mNumKeyframes - 1).getValue()); + } + } + super.start(); + } + + /** + * This function is called immediately before processing the first animation + * frame of an animation. If there is a nonzero startDelay, the + * function is called after that delay ends. + * It takes care of the final initialization steps for the + * animation. This includes setting mEvaluator, if the user has not yet + * set it up, and the setter/getter methods, if the user did not supply + * them. + * + *

Overriders of this method should call the superclass method to cause + * internal mechanisms to be set up correctly.

+ */ + @Override + void initAnimation() { + if (!mInitialized) { + // mValueType may change due to setter/getter setup; do this before calling super.init(), + // which uses mValueType to set up the default type evaluator. + int numValues = mValues.length; + for (int i = 0; i < numValues; ++i) { + mValues[i].setupSetterAndGetter(mTarget); + } + super.initAnimation(); + } + } + + /** + * Sets the length of the animation. The default duration is 300 milliseconds. + * + * @param duration The length of the animation, in milliseconds. + * @return ObjectAnimator The object called with setDuration(). This return + * value makes it easier to compose statements together that construct and then set the + * duration, as in + * ObjectAnimator.ofInt(target, propertyName, 0, 10).setDuration(500).start(). + */ + @Override + public ObjectAnimator setDuration(long duration) { + super.setDuration(duration); + return this; + } + + + /** + * The target object whose property will be animated by this animation + * + * @return The object being animated + */ + public Object getTarget() { + return mTarget; + } + + /** + * Sets the target object whose property will be animated by this animation + * + * @param target The object being animated + */ + @Override + public void setTarget(Object target) { + if (mTarget != target) { + final Object oldTarget = mTarget; + mTarget = target; + if (oldTarget != null && target != null && oldTarget.getClass() == target.getClass()) { + return; + } + // New target type should cause re-initialization prior to starting + mInitialized = false; + } + } + + @Override + public void setupStartValues() { + initAnimation(); + int numValues = mValues.length; + for (int i = 0; i < numValues; ++i) { + mValues[i].setupStartValue(mTarget); + } + } + + @Override + public void setupEndValues() { + initAnimation(); + int numValues = mValues.length; + for (int i = 0; i < numValues; ++i) { + mValues[i].setupEndValue(mTarget); + } + } + + /** + * This method is called with the elapsed fraction of the animation during every + * animation frame. This function turns the elapsed fraction into an interpolated fraction + * and then into an animated value (from the evaluator. The function is called mostly during + * animation updates, but it is also called when the end() + * function is called, to set the final value on the property. + * + *

Overrides of this method must call the superclass to perform the calculation + * of the animated value.

+ * + * @param fraction The elapsed fraction of the animation. + */ + @Override + void animateValue(float fraction) { + super.animateValue(fraction); + int numValues = mValues.length; + for (int i = 0; i < numValues; ++i) { + mValues[i].setAnimatedValue(mTarget); + } + } + + @Override + public ObjectAnimator clone() { + final ObjectAnimator anim = (ObjectAnimator) super.clone(); + return anim; + } + + @Override + public String toString() { + String returnVal = "ObjectAnimator@" + Integer.toHexString(hashCode()) + ", target " + + mTarget; + if (mValues != null) { + for (int i = 0; i < mValues.length; ++i) { + returnVal += "\n " + mValues[i].toString(); + } + } + return returnVal; + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/PropertyValuesHolder.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/PropertyValuesHolder.java new file mode 100644 index 00000000..84f7504a --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/PropertyValuesHolder.java @@ -0,0 +1,1012 @@ +/* + * 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.internal.nineoldandroids.animation; + +//import android.util.FloatProperty; +//import android.util.IntProperty; +import android.util.Log; +//import android.util.Property; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +/** + * This class holds information about a property and the values that that property + * should take on during an animation. PropertyValuesHolder objects can be used to create + * animations with ValueAnimator or ObjectAnimator that operate on several different properties + * in parallel. + */ +@SuppressWarnings({"rawtypes", "unchecked"}) +public class PropertyValuesHolder implements Cloneable { + + /** + * The name of the property associated with the values. This need not be a real property, + * unless this object is being used with ObjectAnimator. But this is the name by which + * aniamted values are looked up with getAnimatedValue(String) in ValueAnimator. + */ + String mPropertyName; + + /** + * @hide + */ + //protected Property mProperty; + + /** + * The setter function, if needed. ObjectAnimator hands off this functionality to + * PropertyValuesHolder, since it holds all of the per-property information. This + * property is automatically + * derived when the animation starts in setupSetterAndGetter() if using ObjectAnimator. + */ + Method mSetter = null; + + /** + * The getter function, if needed. ObjectAnimator hands off this functionality to + * PropertyValuesHolder, since it holds all of the per-property information. This + * property is automatically + * derived when the animation starts in setupSetterAndGetter() if using ObjectAnimator. + * The getter is only derived and used if one of the values is null. + */ + private Method mGetter = null; + + /** + * The type of values supplied. This information is used both in deriving the setter/getter + * functions and in deriving the type of TypeEvaluator. + */ + Class mValueType; + + /** + * The set of keyframes (time/value pairs) that define this animation. + */ + KeyframeSet mKeyframeSet = null; + + + // type evaluators for the primitive types handled by this implementation + private static final TypeEvaluator sIntEvaluator = new IntEvaluator(); + private static final TypeEvaluator sFloatEvaluator = new FloatEvaluator(); + + // We try several different types when searching for appropriate setter/getter functions. + // The caller may have supplied values in a type that does not match the setter/getter + // functions (such as the integers 0 and 1 to represent floating point values for alpha). + // Also, the use of generics in constructors means that we end up with the Object versions + // of primitive types (Float vs. float). But most likely, the setter/getter functions + // will take primitive types instead. + // So we supply an ordered array of other types to try before giving up. + private static Class[] FLOAT_VARIANTS = {float.class, Float.class, double.class, int.class, + Double.class, Integer.class}; + private static Class[] INTEGER_VARIANTS = {int.class, Integer.class, float.class, double.class, + Float.class, Double.class}; + private static Class[] DOUBLE_VARIANTS = {double.class, Double.class, float.class, int.class, + Float.class, Integer.class}; + + // These maps hold all property entries for a particular class. This map + // is used to speed up property/setter/getter lookups for a given class/property + // combination. No need to use reflection on the combination more than once. + private static final HashMap> sSetterPropertyMap = + new HashMap>(); + private static final HashMap> sGetterPropertyMap = + new HashMap>(); + + // This lock is used to ensure that only one thread is accessing the property maps + // at a time. + final ReentrantReadWriteLock mPropertyMapLock = new ReentrantReadWriteLock(); + + // Used to pass single value to varargs parameter in setter invocation + final Object[] mTmpValueArray = new Object[1]; + + /** + * The type evaluator used to calculate the animated values. This evaluator is determined + * automatically based on the type of the start/end objects passed into the constructor, + * but the system only knows about the primitive types int and float. Any other + * type will need to set the evaluator to a custom evaluator for that type. + */ + private TypeEvaluator mEvaluator; + + /** + * The value most recently calculated by calculateValue(). This is set during + * that function and might be retrieved later either by ValueAnimator.animatedValue() or + * by the property-setting logic in ObjectAnimator.animatedValue(). + */ + private Object mAnimatedValue; + + /** + * Internal utility constructor, used by the factory methods to set the property name. + * @param propertyName The name of the property for this holder. + */ + private PropertyValuesHolder(String propertyName) { + mPropertyName = propertyName; + } + + /** + * Internal utility constructor, used by the factory methods to set the property. + * @param property The property for this holder. + */ + //private PropertyValuesHolder(Property property) { + // mProperty = property; + // if (property != null) { + // mPropertyName = property.getName(); + // } + //} + + /** + * Constructs and returns a PropertyValuesHolder with a given property name and + * set of int values. + * @param propertyName The name of the property being animated. + * @param values The values that the named property will animate between. + * @return PropertyValuesHolder The constructed PropertyValuesHolder object. + */ + public static PropertyValuesHolder ofInt(String propertyName, int... values) { + return new IntPropertyValuesHolder(propertyName, values); + } + + /** + * Constructs and returns a PropertyValuesHolder with a given property and + * set of int values. + * @param property The property being animated. Should not be null. + * @param values The values that the property will animate between. + * @return PropertyValuesHolder The constructed PropertyValuesHolder object. + */ + //public static PropertyValuesHolder ofInt(Property property, int... values) { + // return new IntPropertyValuesHolder(property, values); + //} + + /** + * Constructs and returns a PropertyValuesHolder with a given property name and + * set of float values. + * @param propertyName The name of the property being animated. + * @param values The values that the named property will animate between. + * @return PropertyValuesHolder The constructed PropertyValuesHolder object. + */ + public static PropertyValuesHolder ofFloat(String propertyName, float... values) { + return new FloatPropertyValuesHolder(propertyName, values); + } + + /** + * Constructs and returns a PropertyValuesHolder with a given property and + * set of float values. + * @param property The property being animated. Should not be null. + * @param values The values that the property will animate between. + * @return PropertyValuesHolder The constructed PropertyValuesHolder object. + */ + //public static PropertyValuesHolder ofFloat(Property property, float... values) { + // return new FloatPropertyValuesHolder(property, values); + //} + + /** + * Constructs and returns a PropertyValuesHolder with a given property name and + * set of Object values. This variant also takes a TypeEvaluator because the system + * cannot automatically interpolate between objects of unknown type. + * + * @param propertyName The name of the property being animated. + * @param evaluator A TypeEvaluator that will be called on each animation frame to + * provide the necessary interpolation between the Object values to derive the animated + * value. + * @param values The values that the named property will animate between. + * @return PropertyValuesHolder The constructed PropertyValuesHolder object. + */ + public static PropertyValuesHolder ofObject(String propertyName, TypeEvaluator evaluator, + Object... values) { + PropertyValuesHolder pvh = new PropertyValuesHolder(propertyName); + pvh.setObjectValues(values); + pvh.setEvaluator(evaluator); + return pvh; + } + + /** + * Constructs and returns a PropertyValuesHolder with a given property and + * set of Object values. This variant also takes a TypeEvaluator because the system + * cannot automatically interpolate between objects of unknown type. + * + * @param property The property being animated. Should not be null. + * @param evaluator A TypeEvaluator that will be called on each animation frame to + * provide the necessary interpolation between the Object values to derive the animated + * value. + * @param values The values that the property will animate between. + * @return PropertyValuesHolder The constructed PropertyValuesHolder object. + */ + //public static PropertyValuesHolder ofObject(Property property, + // TypeEvaluator evaluator, V... values) { + // PropertyValuesHolder pvh = new PropertyValuesHolder(property); + // pvh.setObjectValues(values); + // pvh.setEvaluator(evaluator); + // return pvh; + //} + + /** + * Constructs and returns a PropertyValuesHolder object with the specified property name and set + * of values. These values can be of any type, but the type should be consistent so that + * an appropriate {@link android.animation.TypeEvaluator} can be found that matches + * the common type. + *

If there is only one value, it is assumed to be the end value of an animation, + * and an initial value will be derived, if possible, by calling a getter function + * on the object. Also, if any value is null, the value will be filled in when the animation + * starts in the same way. This mechanism of automatically getting null values only works + * if the PropertyValuesHolder object is used in conjunction + * {@link ObjectAnimator}, and with a getter function + * derived automatically from propertyName, since otherwise PropertyValuesHolder has + * no way of determining what the value should be. + * @param propertyName The name of the property associated with this set of values. This + * can be the actual property name to be used when using a ObjectAnimator object, or + * just a name used to get animated values, such as if this object is used with an + * ValueAnimator object. + * @param values The set of values to animate between. + */ + public static PropertyValuesHolder ofKeyframe(String propertyName, Keyframe... values) { + KeyframeSet keyframeSet = KeyframeSet.ofKeyframe(values); + if (keyframeSet instanceof IntKeyframeSet) { + return new IntPropertyValuesHolder(propertyName, (IntKeyframeSet) keyframeSet); + } else if (keyframeSet instanceof FloatKeyframeSet) { + return new FloatPropertyValuesHolder(propertyName, (FloatKeyframeSet) keyframeSet); + } + else { + PropertyValuesHolder pvh = new PropertyValuesHolder(propertyName); + pvh.mKeyframeSet = keyframeSet; + pvh.mValueType = values[0].getType(); + return pvh; + } + } + + /** + * Constructs and returns a PropertyValuesHolder object with the specified property and set + * of values. These values can be of any type, but the type should be consistent so that + * an appropriate {@link android.animation.TypeEvaluator} can be found that matches + * the common type. + *

If there is only one value, it is assumed to be the end value of an animation, + * and an initial value will be derived, if possible, by calling the property's + * {@link android.util.Property#get(Object)} function. + * Also, if any value is null, the value will be filled in when the animation + * starts in the same way. This mechanism of automatically getting null values only works + * if the PropertyValuesHolder object is used in conjunction with + * {@link ObjectAnimator}, since otherwise PropertyValuesHolder has + * no way of determining what the value should be. + * @param property The property associated with this set of values. Should not be null. + * @param values The set of values to animate between. + */ + //public static PropertyValuesHolder ofKeyframe(Property property, Keyframe... values) { + // KeyframeSet keyframeSet = KeyframeSet.ofKeyframe(values); + // if (keyframeSet instanceof IntKeyframeSet) { + // return new IntPropertyValuesHolder(property, (IntKeyframeSet) keyframeSet); + // } else if (keyframeSet instanceof FloatKeyframeSet) { + // return new FloatPropertyValuesHolder(property, (FloatKeyframeSet) keyframeSet); + // } + // else { + // PropertyValuesHolder pvh = new PropertyValuesHolder(property); + // pvh.mKeyframeSet = keyframeSet; + // pvh.mValueType = ((Keyframe)values[0]).getType(); + // return pvh; + // } + //} + + /** + * Set the animated values for this object to this set of ints. + * If there is only one value, it is assumed to be the end value of an animation, + * and an initial value will be derived, if possible, by calling a getter function + * on the object. Also, if any value is null, the value will be filled in when the animation + * starts in the same way. This mechanism of automatically getting null values only works + * if the PropertyValuesHolder object is used in conjunction + * {@link ObjectAnimator}, and with a getter function + * derived automatically from propertyName, since otherwise PropertyValuesHolder has + * no way of determining what the value should be. + * + * @param values One or more values that the animation will animate between. + */ + public void setIntValues(int... values) { + mValueType = int.class; + mKeyframeSet = KeyframeSet.ofInt(values); + } + + /** + * Set the animated values for this object to this set of floats. + * If there is only one value, it is assumed to be the end value of an animation, + * and an initial value will be derived, if possible, by calling a getter function + * on the object. Also, if any value is null, the value will be filled in when the animation + * starts in the same way. This mechanism of automatically getting null values only works + * if the PropertyValuesHolder object is used in conjunction + * {@link ObjectAnimator}, and with a getter function + * derived automatically from propertyName, since otherwise PropertyValuesHolder has + * no way of determining what the value should be. + * + * @param values One or more values that the animation will animate between. + */ + public void setFloatValues(float... values) { + mValueType = float.class; + mKeyframeSet = KeyframeSet.ofFloat(values); + } + + /** + * Set the animated values for this object to this set of Keyframes. + * + * @param values One or more values that the animation will animate between. + */ + public void setKeyframes(Keyframe... values) { + int numKeyframes = values.length; + Keyframe keyframes[] = new Keyframe[Math.max(numKeyframes,2)]; + mValueType = values[0].getType(); + for (int i = 0; i < numKeyframes; ++i) { + keyframes[i] = values[i]; + } + mKeyframeSet = new KeyframeSet(keyframes); + } + + /** + * Set the animated values for this object to this set of Objects. + * If there is only one value, it is assumed to be the end value of an animation, + * and an initial value will be derived, if possible, by calling a getter function + * on the object. Also, if any value is null, the value will be filled in when the animation + * starts in the same way. This mechanism of automatically getting null values only works + * if the PropertyValuesHolder object is used in conjunction + * {@link ObjectAnimator}, and with a getter function + * derived automatically from propertyName, since otherwise PropertyValuesHolder has + * no way of determining what the value should be. + * + * @param values One or more values that the animation will animate between. + */ + public void setObjectValues(Object... values) { + mValueType = values[0].getClass(); + mKeyframeSet = KeyframeSet.ofObject(values); + } + + /** + * Determine the setter or getter function using the JavaBeans convention of setFoo or + * getFoo for a property named 'foo'. This function figures out what the name of the + * function should be and uses reflection to find the Method with that name on the + * target object. + * + * @param targetClass The class to search for the method + * @param prefix "set" or "get", depending on whether we need a setter or getter. + * @param valueType The type of the parameter (in the case of a setter). This type + * is derived from the values set on this PropertyValuesHolder. This type is used as + * a first guess at the parameter type, but we check for methods with several different + * types to avoid problems with slight mis-matches between supplied values and actual + * value types used on the setter. + * @return Method the method associated with mPropertyName. + */ + private Method getPropertyFunction(Class targetClass, String prefix, Class valueType) { + // TODO: faster implementation... + Method returnVal = null; + String methodName = getMethodName(prefix, mPropertyName); + Class args[] = null; + if (valueType == null) { + try { + returnVal = targetClass.getMethod(methodName, args); + } catch (NoSuchMethodException e) { + Log.e("PropertyValuesHolder", targetClass.getSimpleName() + " - " + + "Couldn't find no-arg method for property " + mPropertyName + ": " + e); + } + } else { + args = new Class[1]; + Class typeVariants[]; + if (mValueType.equals(Float.class)) { + typeVariants = FLOAT_VARIANTS; + } else if (mValueType.equals(Integer.class)) { + typeVariants = INTEGER_VARIANTS; + } else if (mValueType.equals(Double.class)) { + typeVariants = DOUBLE_VARIANTS; + } else { + typeVariants = new Class[1]; + typeVariants[0] = mValueType; + } + for (Class typeVariant : typeVariants) { + args[0] = typeVariant; + try { + returnVal = targetClass.getMethod(methodName, args); + // change the value type to suit + mValueType = typeVariant; + return returnVal; + } catch (NoSuchMethodException e) { + // Swallow the error and keep trying other variants + } + } + // If we got here, then no appropriate function was found + Log.e("PropertyValuesHolder", + "Couldn't find " + prefix + "ter property " + mPropertyName + + " for " + targetClass.getSimpleName() + + " with value type "+ mValueType); + } + + return returnVal; + } + + + /** + * Returns the setter or getter requested. This utility function checks whether the + * requested method exists in the propertyMapMap cache. If not, it calls another + * utility function to request the Method from the targetClass directly. + * @param targetClass The Class on which the requested method should exist. + * @param propertyMapMap The cache of setters/getters derived so far. + * @param prefix "set" or "get", for the setter or getter. + * @param valueType The type of parameter passed into the method (null for getter). + * @return Method the method associated with mPropertyName. + */ + private Method setupSetterOrGetter(Class targetClass, + HashMap> propertyMapMap, + String prefix, Class valueType) { + Method setterOrGetter = null; + try { + // Have to lock property map prior to reading it, to guard against + // another thread putting something in there after we've checked it + // but before we've added an entry to it + mPropertyMapLock.writeLock().lock(); + HashMap propertyMap = propertyMapMap.get(targetClass); + if (propertyMap != null) { + setterOrGetter = propertyMap.get(mPropertyName); + } + if (setterOrGetter == null) { + setterOrGetter = getPropertyFunction(targetClass, prefix, valueType); + if (propertyMap == null) { + propertyMap = new HashMap(); + propertyMapMap.put(targetClass, propertyMap); + } + propertyMap.put(mPropertyName, setterOrGetter); + } + } finally { + mPropertyMapLock.writeLock().unlock(); + } + return setterOrGetter; + } + + /** + * Utility function to get the setter from targetClass + * @param targetClass The Class on which the requested method should exist. + */ + void setupSetter(Class targetClass) { + mSetter = setupSetterOrGetter(targetClass, sSetterPropertyMap, "set", mValueType); + } + + /** + * Utility function to get the getter from targetClass + */ + private void setupGetter(Class targetClass) { + mGetter = setupSetterOrGetter(targetClass, sGetterPropertyMap, "get", null); + } + + /** + * Internal function (called from ObjectAnimator) to set up the setter and getter + * prior to running the animation. If the setter has not been manually set for this + * object, it will be derived automatically given the property name, target object, and + * types of values supplied. If no getter has been set, it will be supplied iff any of the + * supplied values was null. If there is a null value, then the getter (supplied or derived) + * will be called to set those null values to the current value of the property + * on the target object. + * @param target The object on which the setter (and possibly getter) exist. + */ + void setupSetterAndGetter(Object target) { + //if (mProperty != null) { + // // check to make sure that mProperty is on the class of target + // try { + // Object testValue = mProperty.get(target); + // for (Keyframe kf : mKeyframeSet.mKeyframes) { + // if (!kf.hasValue()) { + // kf.setValue(mProperty.get(target)); + // } + // } + // return; + // } catch (ClassCastException e) { + // Log.e("PropertyValuesHolder","No such property (" + mProperty.getName() + + // ") on target object " + target + ". Trying reflection instead"); + // mProperty = null; + // } + //} + Class targetClass = target.getClass(); + if (mSetter == null) { + setupSetter(targetClass); + } + for (Keyframe kf : mKeyframeSet.mKeyframes) { + if (!kf.hasValue()) { + if (mGetter == null) { + setupGetter(targetClass); + } + try { + kf.setValue(mGetter.invoke(target)); + } catch (InvocationTargetException e) { + Log.e("PropertyValuesHolder", e.toString()); + } catch (IllegalAccessException e) { + Log.e("PropertyValuesHolder", e.toString()); + } + } + } + } + + /** + * Utility function to set the value stored in a particular Keyframe. The value used is + * whatever the value is for the property name specified in the keyframe on the target object. + * + * @param target The target object from which the current value should be extracted. + * @param kf The keyframe which holds the property name and value. + */ + private void setupValue(Object target, Keyframe kf) { + //if (mProperty != null) { + // kf.setValue(mProperty.get(target)); + //} + try { + if (mGetter == null) { + Class targetClass = target.getClass(); + setupGetter(targetClass); + } + kf.setValue(mGetter.invoke(target)); + } catch (InvocationTargetException e) { + Log.e("PropertyValuesHolder", e.toString()); + } catch (IllegalAccessException e) { + Log.e("PropertyValuesHolder", e.toString()); + } + } + + /** + * This function is called by ObjectAnimator when setting the start values for an animation. + * The start values are set according to the current values in the target object. The + * property whose value is extracted is whatever is specified by the propertyName of this + * PropertyValuesHolder object. + * + * @param target The object which holds the start values that should be set. + */ + void setupStartValue(Object target) { + setupValue(target, mKeyframeSet.mKeyframes.get(0)); + } + + /** + * This function is called by ObjectAnimator when setting the end values for an animation. + * The end values are set according to the current values in the target object. The + * property whose value is extracted is whatever is specified by the propertyName of this + * PropertyValuesHolder object. + * + * @param target The object which holds the start values that should be set. + */ + void setupEndValue(Object target) { + setupValue(target, mKeyframeSet.mKeyframes.get(mKeyframeSet.mKeyframes.size() - 1)); + } + + @Override + public PropertyValuesHolder clone() { + try { + PropertyValuesHolder newPVH = (PropertyValuesHolder) super.clone(); + newPVH.mPropertyName = mPropertyName; + //newPVH.mProperty = mProperty; + newPVH.mKeyframeSet = mKeyframeSet.clone(); + newPVH.mEvaluator = mEvaluator; + return newPVH; + } catch (CloneNotSupportedException e) { + // won't reach here + return null; + } + } + + /** + * Internal function to set the value on the target object, using the setter set up + * earlier on this PropertyValuesHolder object. This function is called by ObjectAnimator + * to handle turning the value calculated by ValueAnimator into a value set on the object + * according to the name of the property. + * @param target The target object on which the value is set + */ + void setAnimatedValue(Object target) { + //if (mProperty != null) { + // mProperty.set(target, getAnimatedValue()); + //} + if (mSetter != null) { + try { + mTmpValueArray[0] = getAnimatedValue(); + mSetter.invoke(target, mTmpValueArray); + } catch (InvocationTargetException e) { + Log.e("PropertyValuesHolder", e.toString()); + } catch (IllegalAccessException e) { + Log.e("PropertyValuesHolder", e.toString()); + } + } + } + + /** + * Internal function, called by ValueAnimator, to set up the TypeEvaluator that will be used + * to calculate animated values. + */ + void init() { + if (mEvaluator == null) { + // We already handle int and float automatically, but not their Object + // equivalents + mEvaluator = (mValueType == Integer.class) ? sIntEvaluator : + (mValueType == Float.class) ? sFloatEvaluator : + null; + } + if (mEvaluator != null) { + // KeyframeSet knows how to evaluate the common types - only give it a custom + // evaluator if one has been set on this class + mKeyframeSet.setEvaluator(mEvaluator); + } + } + + /** + * The TypeEvaluator will the automatically determined based on the type of values + * supplied to PropertyValuesHolder. The evaluator can be manually set, however, if so + * desired. This may be important in cases where either the type of the values supplied + * do not match the way that they should be interpolated between, or if the values + * are of a custom type or one not currently understood by the animation system. Currently, + * only values of type float and int (and their Object equivalents: Float + * and Integer) are correctly interpolated; all other types require setting a TypeEvaluator. + * @param evaluator + */ + public void setEvaluator(TypeEvaluator evaluator) { + mEvaluator = evaluator; + mKeyframeSet.setEvaluator(evaluator); + } + + /** + * Function used to calculate the value according to the evaluator set up for + * this PropertyValuesHolder object. This function is called by ValueAnimator.animateValue(). + * + * @param fraction The elapsed, interpolated fraction of the animation. + */ + void calculateValue(float fraction) { + mAnimatedValue = mKeyframeSet.getValue(fraction); + } + + /** + * Sets the name of the property that will be animated. This name is used to derive + * a setter function that will be called to set animated values. + * For example, a property name of foo will result + * in a call to the function setFoo() on the target object. If either + * valueFrom or valueTo is null, then a getter function will + * also be derived and called. + * + *

Note that the setter function derived from this property name + * must take the same parameter type as the + * valueFrom and valueTo properties, otherwise the call to + * the setter function will fail.

+ * + * @param propertyName The name of the property being animated. + */ + public void setPropertyName(String propertyName) { + mPropertyName = propertyName; + } + + /** + * Sets the property that will be animated. + * + *

Note that if this PropertyValuesHolder object is used with ObjectAnimator, the property + * must exist on the target object specified in that ObjectAnimator.

+ * + * @param property The property being animated. + */ + //public void setProperty(Property property) { + // mProperty = property; + //} + + /** + * Gets the name of the property that will be animated. This name will be used to derive + * a setter function that will be called to set animated values. + * For example, a property name of foo will result + * in a call to the function setFoo() on the target object. If either + * valueFrom or valueTo is null, then a getter function will + * also be derived and called. + */ + public String getPropertyName() { + return mPropertyName; + } + + /** + * Internal function, called by ValueAnimator and ObjectAnimator, to retrieve the value + * most recently calculated in calculateValue(). + * @return + */ + Object getAnimatedValue() { + return mAnimatedValue; + } + + @Override + public String toString() { + return mPropertyName + ": " + mKeyframeSet.toString(); + } + + /** + * Utility method to derive a setter/getter method name from a property name, where the + * prefix is typically "set" or "get" and the first letter of the property name is + * capitalized. + * + * @param prefix The precursor to the method name, before the property name begins, typically + * "set" or "get". + * @param propertyName The name of the property that represents the bulk of the method name + * after the prefix. The first letter of this word will be capitalized in the resulting + * method name. + * @return String the property name converted to a method name according to the conventions + * specified above. + */ + static String getMethodName(String prefix, String propertyName) { + if (propertyName == null || propertyName.length() == 0) { + // shouldn't get here + return prefix; + } + char firstLetter = Character.toUpperCase(propertyName.charAt(0)); + String theRest = propertyName.substring(1); + return prefix + firstLetter + theRest; + } + + static class IntPropertyValuesHolder extends PropertyValuesHolder { + + // Cache JNI functions to avoid looking them up twice + //private static final HashMap> sJNISetterPropertyMap = + // new HashMap>(); + //int mJniSetter; + //private IntProperty mIntProperty; + + IntKeyframeSet mIntKeyframeSet; + int mIntAnimatedValue; + + public IntPropertyValuesHolder(String propertyName, IntKeyframeSet keyframeSet) { + super(propertyName); + mValueType = int.class; + mKeyframeSet = keyframeSet; + mIntKeyframeSet = (IntKeyframeSet) mKeyframeSet; + } + + //public IntPropertyValuesHolder(Property property, IntKeyframeSet keyframeSet) { + // super(property); + // mValueType = int.class; + // mKeyframeSet = keyframeSet; + // mIntKeyframeSet = (IntKeyframeSet) mKeyframeSet; + // if (property instanceof IntProperty) { + // mIntProperty = (IntProperty) mProperty; + // } + //} + + public IntPropertyValuesHolder(String propertyName, int... values) { + super(propertyName); + setIntValues(values); + } + + //public IntPropertyValuesHolder(Property property, int... values) { + // super(property); + // setIntValues(values); + // if (property instanceof IntProperty) { + // mIntProperty = (IntProperty) mProperty; + // } + //} + + @Override + public void setIntValues(int... values) { + super.setIntValues(values); + mIntKeyframeSet = (IntKeyframeSet) mKeyframeSet; + } + + @Override + void calculateValue(float fraction) { + mIntAnimatedValue = mIntKeyframeSet.getIntValue(fraction); + } + + @Override + Object getAnimatedValue() { + return mIntAnimatedValue; + } + + @Override + public IntPropertyValuesHolder clone() { + IntPropertyValuesHolder newPVH = (IntPropertyValuesHolder) super.clone(); + newPVH.mIntKeyframeSet = (IntKeyframeSet) newPVH.mKeyframeSet; + return newPVH; + } + + /** + * Internal function to set the value on the target object, using the setter set up + * earlier on this PropertyValuesHolder object. This function is called by ObjectAnimator + * to handle turning the value calculated by ValueAnimator into a value set on the object + * according to the name of the property. + * @param target The target object on which the value is set + */ + @Override + void setAnimatedValue(Object target) { + //if (mIntProperty != null) { + // mIntProperty.setValue(target, mIntAnimatedValue); + // return; + //} + //if (mProperty != null) { + // mProperty.set(target, mIntAnimatedValue); + // return; + //} + //if (mJniSetter != 0) { + // nCallIntMethod(target, mJniSetter, mIntAnimatedValue); + // return; + //} + if (mSetter != null) { + try { + mTmpValueArray[0] = mIntAnimatedValue; + mSetter.invoke(target, mTmpValueArray); + } catch (InvocationTargetException e) { + Log.e("PropertyValuesHolder", e.toString()); + } catch (IllegalAccessException e) { + Log.e("PropertyValuesHolder", e.toString()); + } + } + } + + @Override + void setupSetter(Class targetClass) { + //if (mProperty != null) { + // return; + //} + // Check new static hashmap for setter method + //try { + // mPropertyMapLock.writeLock().lock(); + // HashMap propertyMap = sJNISetterPropertyMap.get(targetClass); + // if (propertyMap != null) { + // Integer mJniSetterInteger = propertyMap.get(mPropertyName); + // if (mJniSetterInteger != null) { + // mJniSetter = mJniSetterInteger; + // } + // } + // if (mJniSetter == 0) { + // String methodName = getMethodName("set", mPropertyName); + // mJniSetter = nGetIntMethod(targetClass, methodName); + // if (mJniSetter != 0) { + // if (propertyMap == null) { + // propertyMap = new HashMap(); + // sJNISetterPropertyMap.put(targetClass, propertyMap); + // } + // propertyMap.put(mPropertyName, mJniSetter); + // } + // } + //} catch (NoSuchMethodError e) { + // Log.d("PropertyValuesHolder", + // "Can't find native method using JNI, use reflection" + e); + //} finally { + // mPropertyMapLock.writeLock().unlock(); + //} + //if (mJniSetter == 0) { + // Couldn't find method through fast JNI approach - just use reflection + super.setupSetter(targetClass); + //} + } + } + + static class FloatPropertyValuesHolder extends PropertyValuesHolder { + + // Cache JNI functions to avoid looking them up twice + //private static final HashMap> sJNISetterPropertyMap = + // new HashMap>(); + //int mJniSetter; + //private FloatProperty mFloatProperty; + + FloatKeyframeSet mFloatKeyframeSet; + float mFloatAnimatedValue; + + public FloatPropertyValuesHolder(String propertyName, FloatKeyframeSet keyframeSet) { + super(propertyName); + mValueType = float.class; + mKeyframeSet = keyframeSet; + mFloatKeyframeSet = (FloatKeyframeSet) mKeyframeSet; + } + + //public FloatPropertyValuesHolder(Property property, FloatKeyframeSet keyframeSet) { + // super(property); + // mValueType = float.class; + // mKeyframeSet = keyframeSet; + // mFloatKeyframeSet = (FloatKeyframeSet) mKeyframeSet; + // if (property instanceof FloatProperty) { + // mFloatProperty = (FloatProperty) mProperty; + // } + //} + + public FloatPropertyValuesHolder(String propertyName, float... values) { + super(propertyName); + setFloatValues(values); + } + + //public FloatPropertyValuesHolder(Property property, float... values) { + // super(property); + // setFloatValues(values); + // if (property instanceof FloatProperty) { + // mFloatProperty = (FloatProperty) mProperty; + // } + //} + + @Override + public void setFloatValues(float... values) { + super.setFloatValues(values); + mFloatKeyframeSet = (FloatKeyframeSet) mKeyframeSet; + } + + @Override + void calculateValue(float fraction) { + mFloatAnimatedValue = mFloatKeyframeSet.getFloatValue(fraction); + } + + @Override + Object getAnimatedValue() { + return mFloatAnimatedValue; + } + + @Override + public FloatPropertyValuesHolder clone() { + FloatPropertyValuesHolder newPVH = (FloatPropertyValuesHolder) super.clone(); + newPVH.mFloatKeyframeSet = (FloatKeyframeSet) newPVH.mKeyframeSet; + return newPVH; + } + + /** + * Internal function to set the value on the target object, using the setter set up + * earlier on this PropertyValuesHolder object. This function is called by ObjectAnimator + * to handle turning the value calculated by ValueAnimator into a value set on the object + * according to the name of the property. + * @param target The target object on which the value is set + */ + @Override + void setAnimatedValue(Object target) { + //if (mFloatProperty != null) { + // mFloatProperty.setValue(target, mFloatAnimatedValue); + // return; + //} + //if (mProperty != null) { + // mProperty.set(target, mFloatAnimatedValue); + // return; + //} + //if (mJniSetter != 0) { + // nCallFloatMethod(target, mJniSetter, mFloatAnimatedValue); + // return; + //} + if (mSetter != null) { + try { + mTmpValueArray[0] = mFloatAnimatedValue; + mSetter.invoke(target, mTmpValueArray); + } catch (InvocationTargetException e) { + Log.e("PropertyValuesHolder", e.toString()); + } catch (IllegalAccessException e) { + Log.e("PropertyValuesHolder", e.toString()); + } + } + } + + @Override + void setupSetter(Class targetClass) { + //if (mProperty != null) { + // return; + //} + // Check new static hashmap for setter method + //try { + // mPropertyMapLock.writeLock().lock(); + // HashMap propertyMap = sJNISetterPropertyMap.get(targetClass); + // if (propertyMap != null) { + // Integer mJniSetterInteger = propertyMap.get(mPropertyName); + // if (mJniSetterInteger != null) { + // mJniSetter = mJniSetterInteger; + // } + // } + // if (mJniSetter == 0) { + // String methodName = getMethodName("set", mPropertyName); + // mJniSetter = nGetFloatMethod(targetClass, methodName); + // if (mJniSetter != 0) { + // if (propertyMap == null) { + // propertyMap = new HashMap(); + // sJNISetterPropertyMap.put(targetClass, propertyMap); + // } + // propertyMap.put(mPropertyName, mJniSetter); + // } + // } + //} catch (NoSuchMethodError e) { + // Log.d("PropertyValuesHolder", + // "Can't find native method using JNI, use reflection" + e); + //} finally { + // mPropertyMapLock.writeLock().unlock(); + //} + //if (mJniSetter == 0) { + // Couldn't find method through fast JNI approach - just use reflection + super.setupSetter(targetClass); + //} + } + + } + + //native static private int nGetIntMethod(Class targetClass, String methodName); + //native static private int nGetFloatMethod(Class targetClass, String methodName); + //native static private void nCallIntMethod(Object target, int methodID, int arg); + //native static private void nCallFloatMethod(Object target, int methodID, float arg); +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/TypeEvaluator.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/TypeEvaluator.java new file mode 100644 index 00000000..0ea31924 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/TypeEvaluator.java @@ -0,0 +1,44 @@ +/* + * 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.internal.nineoldandroids.animation; + +/** + * Interface for use with the {@link ValueAnimator#setEvaluator(TypeEvaluator)} function. Evaluators + * allow developers to create animations on arbitrary property types, by allowing them to supply + * custom evaulators for types that are not automatically understood and used by the animation + * system. + * + * @see ValueAnimator#setEvaluator(TypeEvaluator) + */ +public interface TypeEvaluator { + + /** + * This function returns the result of linearly interpolating the start and end values, with + * fraction representing the proportion between the start and end values. The + * calculation is a simple parametric calculation: result = x0 + t * (v1 - v0), + * where x0 is startValue, x1 is endValue, + * and t is fraction. + * + * @param fraction The fraction from the starting to the ending values + * @param startValue The start value. + * @param endValue The end value. + * @return A linear interpolation between the start and end values, given the + * fraction parameter. + */ + public T evaluate(float fraction, T startValue, T endValue); + +} \ No newline at end of file diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator.java new file mode 100644 index 00000000..d8a12c68 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator.java @@ -0,0 +1,1265 @@ +/* + * 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.internal.nineoldandroids.animation; + +import android.os.Handler; +import android.os.Looper; +import android.os.Message; +import android.util.AndroidRuntimeException; +import android.view.animation.AccelerateDecelerateInterpolator; +import android.view.animation.AnimationUtils; +import android.view.animation.Interpolator; +import android.view.animation.LinearInterpolator; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * This class provides a simple timing engine for running animations + * which calculate animated values and set them on target objects. + * + *

There is a single timing pulse that all animations use. It runs in a + * custom handler to ensure that property changes happen on the UI thread.

+ * + *

By default, ValueAnimator uses non-linear time interpolation, via the + * {@link AccelerateDecelerateInterpolator} class, which accelerates into and decelerates + * out of an animation. This behavior can be changed by calling + * {@link ValueAnimator#setInterpolator(TimeInterpolator)}.

+ */ +@SuppressWarnings({"rawtypes", "unchecked"}) +public class ValueAnimator extends Animator { + + /** + * Internal constants + */ + + /* + * The default amount of time in ms between animation frames + */ + private static final long DEFAULT_FRAME_DELAY = 10; + + /** + * Messages sent to timing handler: START is sent when an animation first begins, FRAME is sent + * by the handler to itself to process the next animation frame + */ + static final int ANIMATION_START = 0; + static final int ANIMATION_FRAME = 1; + + /** + * Values used with internal variable mPlayingState to indicate the current state of an + * animation. + */ + static final int STOPPED = 0; // Not yet playing + static final int RUNNING = 1; // Playing normally + static final int SEEKED = 2; // Seeked to some time value + + /** + * Internal variables + * NOTE: This object implements the clone() method, making a deep copy of any referenced + * objects. As other non-trivial fields are added to this class, make sure to add logic + * to clone() to make deep copies of them. + */ + + // The first time that the animation's animateFrame() method is called. This time is used to + // determine elapsed time (and therefore the elapsed fraction) in subsequent calls + // to animateFrame() + long mStartTime; + + /** + * Set when setCurrentPlayTime() is called. If negative, animation is not currently seeked + * to a value. + */ + long mSeekTime = -1; + + // TODO: We access the following ThreadLocal variables often, some of them on every update. + // If ThreadLocal access is significantly expensive, we may want to put all of these + // fields into a structure sot hat we just access ThreadLocal once to get the reference + // to that structure, then access the structure directly for each field. + + // The static sAnimationHandler processes the internal timing loop on which all animations + // are based + private static ThreadLocal sAnimationHandler = + new ThreadLocal(); + + // The per-thread list of all active animations + private static final ThreadLocal> sAnimations = + new ThreadLocal>() { + @Override + protected ArrayList initialValue() { + return new ArrayList(); + } + }; + + // The per-thread set of animations to be started on the next animation frame + private static final ThreadLocal> sPendingAnimations = + new ThreadLocal>() { + @Override + protected ArrayList initialValue() { + return new ArrayList(); + } + }; + + /** + * Internal per-thread collections used to avoid set collisions as animations start and end + * while being processed. + */ + private static final ThreadLocal> sDelayedAnims = + new ThreadLocal>() { + @Override + protected ArrayList initialValue() { + return new ArrayList(); + } + }; + + private static final ThreadLocal> sEndingAnims = + new ThreadLocal>() { + @Override + protected ArrayList initialValue() { + return new ArrayList(); + } + }; + + private static final ThreadLocal> sReadyAnims = + new ThreadLocal>() { + @Override + protected ArrayList initialValue() { + return new ArrayList(); + } + }; + + // The time interpolator to be used if none is set on the animation + private static final /*Time*/Interpolator sDefaultInterpolator = + new AccelerateDecelerateInterpolator(); + + // type evaluators for the primitive types handled by this implementation + //private static final TypeEvaluator sIntEvaluator = new IntEvaluator(); + //private static final TypeEvaluator sFloatEvaluator = new FloatEvaluator(); + + /** + * Used to indicate whether the animation is currently playing in reverse. This causes the + * elapsed fraction to be inverted to calculate the appropriate values. + */ + private boolean mPlayingBackwards = false; + + /** + * This variable tracks the current iteration that is playing. When mCurrentIteration exceeds the + * repeatCount (if repeatCount!=INFINITE), the animation ends + */ + private int mCurrentIteration = 0; + + /** + * Tracks current elapsed/eased fraction, for querying in getAnimatedFraction(). + */ + private float mCurrentFraction = 0f; + + /** + * Tracks whether a startDelay'd animation has begun playing through the startDelay. + */ + private boolean mStartedDelay = false; + + /** + * Tracks the time at which the animation began playing through its startDelay. This is + * different from the mStartTime variable, which is used to track when the animation became + * active (which is when the startDelay expired and the animation was added to the active + * animations list). + */ + private long mDelayStartTime; + + /** + * Flag that represents the current state of the animation. Used to figure out when to start + * an animation (if state == STOPPED). Also used to end an animation that + * has been cancel()'d or end()'d since the last animation frame. Possible values are + * STOPPED, RUNNING, SEEKED. + */ + int mPlayingState = STOPPED; + + /** + * Additional playing state to indicate whether an animator has been start()'d. There is + * some lag between a call to start() and the first animation frame. We should still note + * that the animation has been started, even if it's first animation frame has not yet + * happened, and reflect that state in isRunning(). + * Note that delayed animations are different: they are not started until their first + * animation frame, which occurs after their delay elapses. + */ + private boolean mRunning = false; + + /** + * Additional playing state to indicate whether an animator has been start()'d, whether or + * not there is a nonzero startDelay. + */ + private boolean mStarted = false; + + /** + * Flag that denotes whether the animation is set up and ready to go. Used to + * set up animation that has not yet been started. + */ + boolean mInitialized = false; + + // + // Backing variables + // + + // How long the animation should last in ms + private long mDuration = 300; + + // The amount of time in ms to delay starting the animation after start() is called + private long mStartDelay = 0; + + // The number of milliseconds between animation frames + private static long sFrameDelay = DEFAULT_FRAME_DELAY; + + // The number of times the animation will repeat. The default is 0, which means the animation + // will play only once + private int mRepeatCount = 0; + + /** + * The type of repetition that will occur when repeatMode is nonzero. RESTART means the + * animation will start from the beginning on every new cycle. REVERSE means the animation + * will reverse directions on each iteration. + */ + private int mRepeatMode = RESTART; + + /** + * The time interpolator to be used. The elapsed fraction of the animation will be passed + * through this interpolator to calculate the interpolated fraction, which is then used to + * calculate the animated values. + */ + private /*Time*/Interpolator mInterpolator = sDefaultInterpolator; + + /** + * The set of listeners to be sent events through the life of an animation. + */ + private ArrayList mUpdateListeners = null; + + /** + * The property/value sets being animated. + */ + PropertyValuesHolder[] mValues; + + /** + * A hashmap of the PropertyValuesHolder objects. This map is used to lookup animated values + * by property name during calls to getAnimatedValue(String). + */ + HashMap mValuesMap; + + /** + * Public constants + */ + + /** + * When the animation reaches the end and repeatCount is INFINITE + * or a positive value, the animation restarts from the beginning. + */ + public static final int RESTART = 1; + /** + * When the animation reaches the end and repeatCount is INFINITE + * or a positive value, the animation reverses direction on every iteration. + */ + public static final int REVERSE = 2; + /** + * This value used used with the {@link #setRepeatCount(int)} property to repeat + * the animation indefinitely. + */ + public static final int INFINITE = -1; + + /** + * Creates a new ValueAnimator object. This default constructor is primarily for + * use internally; the factory methods which take parameters are more generally + * useful. + */ + public ValueAnimator() { + } + + /** + * Constructs and returns a ValueAnimator that animates between int values. A single + * value implies that that value is the one being animated to. However, this is not typically + * useful in a ValueAnimator object because there is no way for the object to determine the + * starting value for the animation (unlike ObjectAnimator, which can derive that value + * from the target object and property being animated). Therefore, there should typically + * be two or more values. + * + * @param values A set of values that the animation will animate between over time. + * @return A ValueAnimator object that is set up to animate between the given values. + */ + public static ValueAnimator ofInt(int... values) { + ValueAnimator anim = new ValueAnimator(); + anim.setIntValues(values); + return anim; + } + + /** + * Constructs and returns a ValueAnimator that animates between float values. A single + * value implies that that value is the one being animated to. However, this is not typically + * useful in a ValueAnimator object because there is no way for the object to determine the + * starting value for the animation (unlike ObjectAnimator, which can derive that value + * from the target object and property being animated). Therefore, there should typically + * be two or more values. + * + * @param values A set of values that the animation will animate between over time. + * @return A ValueAnimator object that is set up to animate between the given values. + */ + public static ValueAnimator ofFloat(float... values) { + ValueAnimator anim = new ValueAnimator(); + anim.setFloatValues(values); + return anim; + } + + /** + * Constructs and returns a ValueAnimator that animates between the values + * specified in the PropertyValuesHolder objects. + * + * @param values A set of PropertyValuesHolder objects whose values will be animated + * between over time. + * @return A ValueAnimator object that is set up to animate between the given values. + */ + public static ValueAnimator ofPropertyValuesHolder(PropertyValuesHolder... values) { + ValueAnimator anim = new ValueAnimator(); + anim.setValues(values); + return anim; + } + /** + * Constructs and returns a ValueAnimator that animates between Object values. A single + * value implies that that value is the one being animated to. However, this is not typically + * useful in a ValueAnimator object because there is no way for the object to determine the + * starting value for the animation (unlike ObjectAnimator, which can derive that value + * from the target object and property being animated). Therefore, there should typically + * be two or more values. + * + *

Since ValueAnimator does not know how to animate between arbitrary Objects, this + * factory method also takes a TypeEvaluator object that the ValueAnimator will use + * to perform that interpolation. + * + * @param evaluator A TypeEvaluator that will be called on each animation frame to + * provide the ncessry interpolation between the Object values to derive the animated + * value. + * @param values A set of values that the animation will animate between over time. + * @return A ValueAnimator object that is set up to animate between the given values. + */ + public static ValueAnimator ofObject(TypeEvaluator evaluator, Object... values) { + ValueAnimator anim = new ValueAnimator(); + anim.setObjectValues(values); + anim.setEvaluator(evaluator); + return anim; + } + + /** + * Sets int values that will be animated between. A single + * value implies that that value is the one being animated to. However, this is not typically + * useful in a ValueAnimator object because there is no way for the object to determine the + * starting value for the animation (unlike ObjectAnimator, which can derive that value + * from the target object and property being animated). Therefore, there should typically + * be two or more values. + * + *

If there are already multiple sets of values defined for this ValueAnimator via more + * than one PropertyValuesHolder object, this method will set the values for the first + * of those objects.

+ * + * @param values A set of values that the animation will animate between over time. + */ + public void setIntValues(int... values) { + if (values == null || values.length == 0) { + return; + } + if (mValues == null || mValues.length == 0) { + setValues(new PropertyValuesHolder[]{PropertyValuesHolder.ofInt("", values)}); + } else { + PropertyValuesHolder valuesHolder = mValues[0]; + valuesHolder.setIntValues(values); + } + // New property/values/target should cause re-initialization prior to starting + mInitialized = false; + } + + /** + * Sets float values that will be animated between. A single + * value implies that that value is the one being animated to. However, this is not typically + * useful in a ValueAnimator object because there is no way for the object to determine the + * starting value for the animation (unlike ObjectAnimator, which can derive that value + * from the target object and property being animated). Therefore, there should typically + * be two or more values. + * + *

If there are already multiple sets of values defined for this ValueAnimator via more + * than one PropertyValuesHolder object, this method will set the values for the first + * of those objects.

+ * + * @param values A set of values that the animation will animate between over time. + */ + public void setFloatValues(float... values) { + if (values == null || values.length == 0) { + return; + } + if (mValues == null || mValues.length == 0) { + setValues(new PropertyValuesHolder[]{PropertyValuesHolder.ofFloat("", values)}); + } else { + PropertyValuesHolder valuesHolder = mValues[0]; + valuesHolder.setFloatValues(values); + } + // New property/values/target should cause re-initialization prior to starting + mInitialized = false; + } + + /** + * Sets the values to animate between for this animation. A single + * value implies that that value is the one being animated to. However, this is not typically + * useful in a ValueAnimator object because there is no way for the object to determine the + * starting value for the animation (unlike ObjectAnimator, which can derive that value + * from the target object and property being animated). Therefore, there should typically + * be two or more values. + * + *

If there are already multiple sets of values defined for this ValueAnimator via more + * than one PropertyValuesHolder object, this method will set the values for the first + * of those objects.

+ * + *

There should be a TypeEvaluator set on the ValueAnimator that knows how to interpolate + * between these value objects. ValueAnimator only knows how to interpolate between the + * primitive types specified in the other setValues() methods.

+ * + * @param values The set of values to animate between. + */ + public void setObjectValues(Object... values) { + if (values == null || values.length == 0) { + return; + } + if (mValues == null || mValues.length == 0) { + setValues(new PropertyValuesHolder[]{PropertyValuesHolder.ofObject("", + (TypeEvaluator)null, values)}); + } else { + PropertyValuesHolder valuesHolder = mValues[0]; + valuesHolder.setObjectValues(values); + } + // New property/values/target should cause re-initialization prior to starting + mInitialized = false; + } + + /** + * Sets the values, per property, being animated between. This function is called internally + * by the constructors of ValueAnimator that take a list of values. But an ValueAnimator can + * be constructed without values and this method can be called to set the values manually + * instead. + * + * @param values The set of values, per property, being animated between. + */ + public void setValues(PropertyValuesHolder... values) { + int numValues = values.length; + mValues = values; + mValuesMap = new HashMap(numValues); + for (int i = 0; i < numValues; ++i) { + PropertyValuesHolder valuesHolder = values[i]; + mValuesMap.put(valuesHolder.getPropertyName(), valuesHolder); + } + // New property/values/target should cause re-initialization prior to starting + mInitialized = false; + } + + /** + * Returns the values that this ValueAnimator animates between. These values are stored in + * PropertyValuesHolder objects, even if the ValueAnimator was created with a simple list + * of value objects instead. + * + * @return PropertyValuesHolder[] An array of PropertyValuesHolder objects which hold the + * values, per property, that define the animation. + */ + public PropertyValuesHolder[] getValues() { + return mValues; + } + + /** + * This function is called immediately before processing the first animation + * frame of an animation. If there is a nonzero startDelay, the + * function is called after that delay ends. + * It takes care of the final initialization steps for the + * animation. + * + *

Overrides of this method should call the superclass method to ensure + * that internal mechanisms for the animation are set up correctly.

+ */ + void initAnimation() { + if (!mInitialized) { + int numValues = mValues.length; + for (int i = 0; i < numValues; ++i) { + mValues[i].init(); + } + mInitialized = true; + } + } + + + /** + * Sets the length of the animation. The default duration is 300 milliseconds. + * + * @param duration The length of the animation, in milliseconds. This value cannot + * be negative. + * @return ValueAnimator The object called with setDuration(). This return + * value makes it easier to compose statements together that construct and then set the + * duration, as in ValueAnimator.ofInt(0, 10).setDuration(500).start(). + */ + public ValueAnimator setDuration(long duration) { + if (duration < 0) { + throw new IllegalArgumentException("Animators cannot have negative duration: " + + duration); + } + mDuration = duration; + return this; + } + + /** + * Gets the length of the animation. The default duration is 300 milliseconds. + * + * @return The length of the animation, in milliseconds. + */ + public long getDuration() { + return mDuration; + } + + /** + * Sets the position of the animation to the specified point in time. This time should + * be between 0 and the total duration of the animation, including any repetition. If + * the animation has not yet been started, then it will not advance forward after it is + * set to this time; it will simply set the time to this value and perform any appropriate + * actions based on that time. If the animation is already running, then setCurrentPlayTime() + * will set the current playing time to this value and continue playing from that point. + * + * @param playTime The time, in milliseconds, to which the animation is advanced or rewound. + */ + public void setCurrentPlayTime(long playTime) { + initAnimation(); + long currentTime = AnimationUtils.currentAnimationTimeMillis(); + if (mPlayingState != RUNNING) { + mSeekTime = playTime; + mPlayingState = SEEKED; + } + mStartTime = currentTime - playTime; + animationFrame(currentTime); + } + + /** + * Gets the current position of the animation in time, which is equal to the current + * time minus the time that the animation started. An animation that is not yet started will + * return a value of zero. + * + * @return The current position in time of the animation. + */ + public long getCurrentPlayTime() { + if (!mInitialized || mPlayingState == STOPPED) { + return 0; + } + return AnimationUtils.currentAnimationTimeMillis() - mStartTime; + } + + /** + * This custom, static handler handles the timing pulse that is shared by + * all active animations. This approach ensures that the setting of animation + * values will happen on the UI thread and that all animations will share + * the same times for calculating their values, which makes synchronizing + * animations possible. + * + */ + private static class AnimationHandler extends Handler { + /** + * There are only two messages that we care about: ANIMATION_START and + * ANIMATION_FRAME. The START message is sent when an animation's start() + * method is called. It cannot start synchronously when start() is called + * because the call may be on the wrong thread, and it would also not be + * synchronized with other animations because it would not start on a common + * timing pulse. So each animation sends a START message to the handler, which + * causes the handler to place the animation on the active animations queue and + * start processing frames for that animation. + * The FRAME message is the one that is sent over and over while there are any + * active animations to process. + */ + @Override + public void handleMessage(Message msg) { + boolean callAgain = true; + ArrayList animations = sAnimations.get(); + ArrayList delayedAnims = sDelayedAnims.get(); + switch (msg.what) { + // TODO: should we avoid sending frame message when starting if we + // were already running? + case ANIMATION_START: + ArrayList pendingAnimations = sPendingAnimations.get(); + if (animations.size() > 0 || delayedAnims.size() > 0) { + callAgain = false; + } + // pendingAnims holds any animations that have requested to be started + // We're going to clear sPendingAnimations, but starting animation may + // cause more to be added to the pending list (for example, if one animation + // starting triggers another starting). So we loop until sPendingAnimations + // is empty. + while (pendingAnimations.size() > 0) { + ArrayList pendingCopy = + (ArrayList) pendingAnimations.clone(); + pendingAnimations.clear(); + int count = pendingCopy.size(); + for (int i = 0; i < count; ++i) { + ValueAnimator anim = pendingCopy.get(i); + // If the animation has a startDelay, place it on the delayed list + if (anim.mStartDelay == 0) { + anim.startAnimation(); + } else { + delayedAnims.add(anim); + } + } + } + // fall through to process first frame of new animations + case ANIMATION_FRAME: + // currentTime holds the common time for all animations processed + // during this frame + long currentTime = AnimationUtils.currentAnimationTimeMillis(); + ArrayList readyAnims = sReadyAnims.get(); + ArrayList endingAnims = sEndingAnims.get(); + + // First, process animations currently sitting on the delayed queue, adding + // them to the active animations if they are ready + int numDelayedAnims = delayedAnims.size(); + for (int i = 0; i < numDelayedAnims; ++i) { + ValueAnimator anim = delayedAnims.get(i); + if (anim.delayedAnimationFrame(currentTime)) { + readyAnims.add(anim); + } + } + int numReadyAnims = readyAnims.size(); + if (numReadyAnims > 0) { + for (int i = 0; i < numReadyAnims; ++i) { + ValueAnimator anim = readyAnims.get(i); + anim.startAnimation(); + anim.mRunning = true; + delayedAnims.remove(anim); + } + readyAnims.clear(); + } + + // Now process all active animations. The return value from animationFrame() + // tells the handler whether it should now be ended + int numAnims = animations.size(); + int i = 0; + while (i < numAnims) { + ValueAnimator anim = animations.get(i); + if (anim.animationFrame(currentTime)) { + endingAnims.add(anim); + } + if (animations.size() == numAnims) { + ++i; + } else { + // An animation might be canceled or ended by client code + // during the animation frame. Check to see if this happened by + // seeing whether the current index is the same as it was before + // calling animationFrame(). Another approach would be to copy + // animations to a temporary list and process that list instead, + // but that entails garbage and processing overhead that would + // be nice to avoid. + --numAnims; + endingAnims.remove(anim); + } + } + if (endingAnims.size() > 0) { + for (i = 0; i < endingAnims.size(); ++i) { + endingAnims.get(i).endAnimation(); + } + endingAnims.clear(); + } + + // If there are still active or delayed animations, call the handler again + // after the frameDelay + if (callAgain && (!animations.isEmpty() || !delayedAnims.isEmpty())) { + sendEmptyMessageDelayed(ANIMATION_FRAME, Math.max(0, sFrameDelay - + (AnimationUtils.currentAnimationTimeMillis() - currentTime))); + } + break; + } + } + } + + /** + * The amount of time, in milliseconds, to delay starting the animation after + * {@link #start()} is called. + * + * @return the number of milliseconds to delay running the animation + */ + public long getStartDelay() { + return mStartDelay; + } + + /** + * The amount of time, in milliseconds, to delay starting the animation after + * {@link #start()} is called. + + * @param startDelay The amount of the delay, in milliseconds + */ + public void setStartDelay(long startDelay) { + this.mStartDelay = startDelay; + } + + /** + * The amount of time, in milliseconds, between each frame of the animation. This is a + * requested time that the animation will attempt to honor, but the actual delay between + * frames may be different, depending on system load and capabilities. This is a static + * function because the same delay will be applied to all animations, since they are all + * run off of a single timing loop. + * + * @return the requested time between frames, in milliseconds + */ + public static long getFrameDelay() { + return sFrameDelay; + } + + /** + * The amount of time, in milliseconds, between each frame of the animation. This is a + * requested time that the animation will attempt to honor, but the actual delay between + * frames may be different, depending on system load and capabilities. This is a static + * function because the same delay will be applied to all animations, since they are all + * run off of a single timing loop. + * + * @param frameDelay the requested time between frames, in milliseconds + */ + public static void setFrameDelay(long frameDelay) { + sFrameDelay = frameDelay; + } + + /** + * The most recent value calculated by this ValueAnimator when there is just one + * property being animated. This value is only sensible while the animation is running. The main + * purpose for this read-only property is to retrieve the value from the ValueAnimator + * during a call to {@link AnimatorUpdateListener#onAnimationUpdate(ValueAnimator)}, which + * is called during each animation frame, immediately after the value is calculated. + * + * @return animatedValue The value most recently calculated by this ValueAnimator for + * the single property being animated. If there are several properties being animated + * (specified by several PropertyValuesHolder objects in the constructor), this function + * returns the animated value for the first of those objects. + */ + public Object getAnimatedValue() { + if (mValues != null && mValues.length > 0) { + return mValues[0].getAnimatedValue(); + } + // Shouldn't get here; should always have values unless ValueAnimator was set up wrong + return null; + } + + /** + * The most recent value calculated by this ValueAnimator for propertyName. + * The main purpose for this read-only property is to retrieve the value from the + * ValueAnimator during a call to + * {@link AnimatorUpdateListener#onAnimationUpdate(ValueAnimator)}, which + * is called during each animation frame, immediately after the value is calculated. + * + * @return animatedValue The value most recently calculated for the named property + * by this ValueAnimator. + */ + public Object getAnimatedValue(String propertyName) { + PropertyValuesHolder valuesHolder = mValuesMap.get(propertyName); + if (valuesHolder != null) { + return valuesHolder.getAnimatedValue(); + } else { + // At least avoid crashing if called with bogus propertyName + return null; + } + } + + /** + * Sets how many times the animation should be repeated. If the repeat + * count is 0, the animation is never repeated. If the repeat count is + * greater than 0 or {@link #INFINITE}, the repeat mode will be taken + * into account. The repeat count is 0 by default. + * + * @param value the number of times the animation should be repeated + */ + public void setRepeatCount(int value) { + mRepeatCount = value; + } + /** + * Defines how many times the animation should repeat. The default value + * is 0. + * + * @return the number of times the animation should repeat, or {@link #INFINITE} + */ + public int getRepeatCount() { + return mRepeatCount; + } + + /** + * Defines what this animation should do when it reaches the end. This + * setting is applied only when the repeat count is either greater than + * 0 or {@link #INFINITE}. Defaults to {@link #RESTART}. + * + * @param value {@link #RESTART} or {@link #REVERSE} + */ + public void setRepeatMode(int value) { + mRepeatMode = value; + } + + /** + * Defines what this animation should do when it reaches the end. + * + * @return either one of {@link #REVERSE} or {@link #RESTART} + */ + public int getRepeatMode() { + return mRepeatMode; + } + + /** + * Adds a listener to the set of listeners that are sent update events through the life of + * an animation. This method is called on all listeners for every frame of the animation, + * after the values for the animation have been calculated. + * + * @param listener the listener to be added to the current set of listeners for this animation. + */ + public void addUpdateListener(AnimatorUpdateListener listener) { + if (mUpdateListeners == null) { + mUpdateListeners = new ArrayList(); + } + mUpdateListeners.add(listener); + } + + /** + * Removes all listeners from the set listening to frame updates for this animation. + */ + public void removeAllUpdateListeners() { + if (mUpdateListeners == null) { + return; + } + mUpdateListeners.clear(); + mUpdateListeners = null; + } + + /** + * Removes a listener from the set listening to frame updates for this animation. + * + * @param listener the listener to be removed from the current set of update listeners + * for this animation. + */ + public void removeUpdateListener(AnimatorUpdateListener listener) { + if (mUpdateListeners == null) { + return; + } + mUpdateListeners.remove(listener); + if (mUpdateListeners.size() == 0) { + mUpdateListeners = null; + } + } + + + /** + * The time interpolator used in calculating the elapsed fraction of this animation. The + * interpolator determines whether the animation runs with linear or non-linear motion, + * such as acceleration and deceleration. The default value is + * {@link android.view.animation.AccelerateDecelerateInterpolator} + * + * @param value the interpolator to be used by this animation. A value of null + * will result in linear interpolation. + */ + @Override + public void setInterpolator(/*Time*/Interpolator value) { + if (value != null) { + mInterpolator = value; + } else { + mInterpolator = new LinearInterpolator(); + } + } + + /** + * Returns the timing interpolator that this ValueAnimator uses. + * + * @return The timing interpolator for this ValueAnimator. + */ + public /*Time*/Interpolator getInterpolator() { + return mInterpolator; + } + + /** + * The type evaluator to be used when calculating the animated values of this animation. + * The system will automatically assign a float or int evaluator based on the type + * of startValue and endValue in the constructor. But if these values + * are not one of these primitive types, or if different evaluation is desired (such as is + * necessary with int values that represent colors), a custom evaluator needs to be assigned. + * For example, when running an animation on color values, the {@link ArgbEvaluator} + * should be used to get correct RGB color interpolation. + * + *

If this ValueAnimator has only one set of values being animated between, this evaluator + * will be used for that set. If there are several sets of values being animated, which is + * the case if PropertyValuesHOlder objects were set on the ValueAnimator, then the evaluator + * is assigned just to the first PropertyValuesHolder object.

+ * + * @param value the evaluator to be used this animation + */ + public void setEvaluator(TypeEvaluator value) { + if (value != null && mValues != null && mValues.length > 0) { + mValues[0].setEvaluator(value); + } + } + + /** + * Start the animation playing. This version of start() takes a boolean flag that indicates + * whether the animation should play in reverse. The flag is usually false, but may be set + * to true if called from the reverse() method. + * + *

The animation started by calling this method will be run on the thread that called + * this method. This thread should have a Looper on it (a runtime exception will be thrown if + * this is not the case). Also, if the animation will animate + * properties of objects in the view hierarchy, then the calling thread should be the UI + * thread for that view hierarchy.

+ * + * @param playBackwards Whether the ValueAnimator should start playing in reverse. + */ + private void start(boolean playBackwards) { + if (Looper.myLooper() == null) { + throw new AndroidRuntimeException("Animators may only be run on Looper threads"); + } + mPlayingBackwards = playBackwards; + mCurrentIteration = 0; + mPlayingState = STOPPED; + mStarted = true; + mStartedDelay = false; + sPendingAnimations.get().add(this); + if (mStartDelay == 0) { + // This sets the initial value of the animation, prior to actually starting it running + setCurrentPlayTime(getCurrentPlayTime()); + mPlayingState = STOPPED; + mRunning = true; + + if (mListeners != null) { + ArrayList tmpListeners = + (ArrayList) mListeners.clone(); + int numListeners = tmpListeners.size(); + for (int i = 0; i < numListeners; ++i) { + tmpListeners.get(i).onAnimationStart(this); + } + } + } + AnimationHandler animationHandler = sAnimationHandler.get(); + if (animationHandler == null) { + animationHandler = new AnimationHandler(); + sAnimationHandler.set(animationHandler); + } + animationHandler.sendEmptyMessage(ANIMATION_START); + } + + @Override + public void start() { + start(false); + } + + @Override + public void cancel() { + // Only cancel if the animation is actually running or has been started and is about + // to run + if (mPlayingState != STOPPED || sPendingAnimations.get().contains(this) || + sDelayedAnims.get().contains(this)) { + // Only notify listeners if the animator has actually started + if (mRunning && mListeners != null) { + ArrayList tmpListeners = + (ArrayList) mListeners.clone(); + for (AnimatorListener listener : tmpListeners) { + listener.onAnimationCancel(this); + } + } + endAnimation(); + } + } + + @Override + public void end() { + if (!sAnimations.get().contains(this) && !sPendingAnimations.get().contains(this)) { + // Special case if the animation has not yet started; get it ready for ending + mStartedDelay = false; + startAnimation(); + } else if (!mInitialized) { + initAnimation(); + } + // The final value set on the target varies, depending on whether the animation + // was supposed to repeat an odd number of times + if (mRepeatCount > 0 && (mRepeatCount & 0x01) == 1) { + animateValue(0f); + } else { + animateValue(1f); + } + endAnimation(); + } + + @Override + public boolean isRunning() { + return (mPlayingState == RUNNING || mRunning); + } + + @Override + public boolean isStarted() { + return mStarted; + } + + /** + * Plays the ValueAnimator in reverse. If the animation is already running, + * it will stop itself and play backwards from the point reached when reverse was called. + * If the animation is not currently running, then it will start from the end and + * play backwards. This behavior is only set for the current animation; future playing + * of the animation will use the default behavior of playing forward. + */ + public void reverse() { + mPlayingBackwards = !mPlayingBackwards; + if (mPlayingState == RUNNING) { + long currentTime = AnimationUtils.currentAnimationTimeMillis(); + long currentPlayTime = currentTime - mStartTime; + long timeLeft = mDuration - currentPlayTime; + mStartTime = currentTime - timeLeft; + } else { + start(true); + } + } + + /** + * Called internally to end an animation by removing it from the animations list. Must be + * called on the UI thread. + */ + private void endAnimation() { + sAnimations.get().remove(this); + sPendingAnimations.get().remove(this); + sDelayedAnims.get().remove(this); + mPlayingState = STOPPED; + if (mRunning && mListeners != null) { + ArrayList tmpListeners = + (ArrayList) mListeners.clone(); + int numListeners = tmpListeners.size(); + for (int i = 0; i < numListeners; ++i) { + tmpListeners.get(i).onAnimationEnd(this); + } + } + mRunning = false; + mStarted = false; + } + + /** + * Called internally to start an animation by adding it to the active animations list. Must be + * called on the UI thread. + */ + private void startAnimation() { + initAnimation(); + sAnimations.get().add(this); + if (mStartDelay > 0 && mListeners != null) { + // Listeners were already notified in start() if startDelay is 0; this is + // just for delayed animations + ArrayList tmpListeners = + (ArrayList) mListeners.clone(); + int numListeners = tmpListeners.size(); + for (int i = 0; i < numListeners; ++i) { + tmpListeners.get(i).onAnimationStart(this); + } + } + } + + /** + * Internal function called to process an animation frame on an animation that is currently + * sleeping through its startDelay phase. The return value indicates whether it + * should be woken up and put on the active animations queue. + * + * @param currentTime The current animation time, used to calculate whether the animation + * has exceeded its startDelay and should be started. + * @return True if the animation's startDelay has been exceeded and the animation + * should be added to the set of active animations. + */ + private boolean delayedAnimationFrame(long currentTime) { + if (!mStartedDelay) { + mStartedDelay = true; + mDelayStartTime = currentTime; + } else { + long deltaTime = currentTime - mDelayStartTime; + if (deltaTime > mStartDelay) { + // startDelay ended - start the anim and record the + // mStartTime appropriately + mStartTime = currentTime - (deltaTime - mStartDelay); + mPlayingState = RUNNING; + return true; + } + } + return false; + } + + /** + * This internal function processes a single animation frame for a given animation. The + * currentTime parameter is the timing pulse sent by the handler, used to calculate the + * elapsed duration, and therefore + * the elapsed fraction, of the animation. The return value indicates whether the animation + * should be ended (which happens when the elapsed time of the animation exceeds the + * animation's duration, including the repeatCount). + * + * @param currentTime The current time, as tracked by the static timing handler + * @return true if the animation's duration, including any repetitions due to + * repeatCount has been exceeded and the animation should be ended. + */ + boolean animationFrame(long currentTime) { + boolean done = false; + + if (mPlayingState == STOPPED) { + mPlayingState = RUNNING; + if (mSeekTime < 0) { + mStartTime = currentTime; + } else { + mStartTime = currentTime - mSeekTime; + // Now that we're playing, reset the seek time + mSeekTime = -1; + } + } + switch (mPlayingState) { + case RUNNING: + case SEEKED: + float fraction = mDuration > 0 ? (float)(currentTime - mStartTime) / mDuration : 1f; + if (fraction >= 1f) { + if (mCurrentIteration < mRepeatCount || mRepeatCount == INFINITE) { + // Time to repeat + if (mListeners != null) { + int numListeners = mListeners.size(); + for (int i = 0; i < numListeners; ++i) { + mListeners.get(i).onAnimationRepeat(this); + } + } + if (mRepeatMode == REVERSE) { + mPlayingBackwards = mPlayingBackwards ? false : true; + } + mCurrentIteration += (int)fraction; + fraction = fraction % 1f; + mStartTime += mDuration; + } else { + done = true; + fraction = Math.min(fraction, 1.0f); + } + } + if (mPlayingBackwards) { + fraction = 1f - fraction; + } + animateValue(fraction); + break; + } + + return done; + } + + /** + * Returns the current animation fraction, which is the elapsed/interpolated fraction used in + * the most recent frame update on the animation. + * + * @return Elapsed/interpolated fraction of the animation. + */ + public float getAnimatedFraction() { + return mCurrentFraction; + } + + /** + * This method is called with the elapsed fraction of the animation during every + * animation frame. This function turns the elapsed fraction into an interpolated fraction + * and then into an animated value (from the evaluator. The function is called mostly during + * animation updates, but it is also called when the end() + * function is called, to set the final value on the property. + * + *

Overrides of this method must call the superclass to perform the calculation + * of the animated value.

+ * + * @param fraction The elapsed fraction of the animation. + */ + void animateValue(float fraction) { + fraction = mInterpolator.getInterpolation(fraction); + mCurrentFraction = fraction; + int numValues = mValues.length; + for (int i = 0; i < numValues; ++i) { + mValues[i].calculateValue(fraction); + } + if (mUpdateListeners != null) { + int numListeners = mUpdateListeners.size(); + for (int i = 0; i < numListeners; ++i) { + mUpdateListeners.get(i).onAnimationUpdate(this); + } + } + } + + @Override + public ValueAnimator clone() { + final ValueAnimator anim = (ValueAnimator) super.clone(); + if (mUpdateListeners != null) { + ArrayList oldListeners = mUpdateListeners; + anim.mUpdateListeners = new ArrayList(); + int numListeners = oldListeners.size(); + for (int i = 0; i < numListeners; ++i) { + anim.mUpdateListeners.add(oldListeners.get(i)); + } + } + anim.mSeekTime = -1; + anim.mPlayingBackwards = false; + anim.mCurrentIteration = 0; + anim.mInitialized = false; + anim.mPlayingState = STOPPED; + anim.mStartedDelay = false; + PropertyValuesHolder[] oldValues = mValues; + if (oldValues != null) { + int numValues = oldValues.length; + anim.mValues = new PropertyValuesHolder[numValues]; + anim.mValuesMap = new HashMap(numValues); + for (int i = 0; i < numValues; ++i) { + PropertyValuesHolder newValuesHolder = oldValues[i].clone(); + anim.mValues[i] = newValuesHolder; + anim.mValuesMap.put(newValuesHolder.getPropertyName(), newValuesHolder); + } + } + return anim; + } + + /** + * Implementors of this interface can add themselves as update listeners + * to an ValueAnimator instance to receive callbacks on every animation + * frame, after the current frame's values have been calculated for that + * ValueAnimator. + */ + public static interface AnimatorUpdateListener { + /** + *

Notifies the occurrence of another frame of the animation.

+ * + * @param animation The animation which was repeated. + */ + void onAnimationUpdate(ValueAnimator animation); + + } + + /** + * Return the number of animations currently running. + * + * Used by StrictMode internally to annotate violations. Only + * called on the main thread. + * + * @hide + */ + public static int getCurrentAnimationsCount() { + return sAnimations.get().size(); + } + + /** + * Clear all animations on this thread, without canceling or ending them. + * This should be used with caution. + * + * @hide + */ + public static void clearAllAnimations() { + sAnimations.get().clear(); + sPendingAnimations.get().clear(); + sDelayedAnims.get().clear(); + } + + @Override + public String toString() { + String returnVal = "ValueAnimator@" + Integer.toHexString(hashCode()); + if (mValues != null) { + for (int i = 0; i < mValues.length; ++i) { + returnVal += "\n " + mValues[i].toString(); + } + } + return returnVal; + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/view/NineViewGroup.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/view/NineViewGroup.java new file mode 100644 index 00000000..7b830b9c --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/view/NineViewGroup.java @@ -0,0 +1,79 @@ +package com.actionbarsherlock.internal.nineoldandroids.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.ViewGroup; + +import com.actionbarsherlock.internal.nineoldandroids.view.animation.AnimatorProxy; + +public abstract class NineViewGroup extends ViewGroup { + private final AnimatorProxy mProxy; + + public NineViewGroup(Context context) { + super(context); + mProxy = AnimatorProxy.NEEDS_PROXY ? AnimatorProxy.wrap(this) : null; + } + public NineViewGroup(Context context, AttributeSet attrs) { + super(context, attrs); + mProxy = AnimatorProxy.NEEDS_PROXY ? AnimatorProxy.wrap(this) : null; + } + public NineViewGroup(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + mProxy = AnimatorProxy.NEEDS_PROXY ? AnimatorProxy.wrap(this) : null; + } + + @Override + public void setVisibility(int visibility) { + if (mProxy != null) { + if (visibility == GONE) { + clearAnimation(); + } else if (visibility == VISIBLE) { + setAnimation(mProxy); + } + } + super.setVisibility(visibility); + } + + public float getAlpha() { + if (AnimatorProxy.NEEDS_PROXY) { + return mProxy.getAlpha(); + } else { + return super.getAlpha(); + } + } + public void setAlpha(float alpha) { + if (AnimatorProxy.NEEDS_PROXY) { + mProxy.setAlpha(alpha); + } else { + super.setAlpha(alpha); + } + } + public float getTranslationX() { + if (AnimatorProxy.NEEDS_PROXY) { + return mProxy.getTranslationX(); + } else { + return super.getTranslationX(); + } + } + public void setTranslationX(float translationX) { + if (AnimatorProxy.NEEDS_PROXY) { + mProxy.setTranslationX(translationX); + } else { + super.setTranslationX(translationX); + } + } + public float getTranslationY() { + if (AnimatorProxy.NEEDS_PROXY) { + return mProxy.getTranslationY(); + } else { + return super.getTranslationY(); + } + } + public void setTranslationY(float translationY) { + if (AnimatorProxy.NEEDS_PROXY) { + mProxy.setTranslationY(translationY); + } else { + super.setTranslationY(translationY); + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/view/animation/AnimatorProxy.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/view/animation/AnimatorProxy.java new file mode 100644 index 00000000..e284604b --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/view/animation/AnimatorProxy.java @@ -0,0 +1,205 @@ +package com.actionbarsherlock.internal.nineoldandroids.view.animation; + +import java.lang.ref.WeakReference; +import java.util.WeakHashMap; +import android.graphics.Matrix; +import android.graphics.RectF; +import android.os.Build; +import android.util.FloatMath; +import android.view.View; +import android.view.animation.Animation; +import android.view.animation.Transformation; + +public final class AnimatorProxy extends Animation { + public static final boolean NEEDS_PROXY = Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB; + + private static final WeakHashMap PROXIES = + new WeakHashMap(); + + public static AnimatorProxy wrap(View view) { + AnimatorProxy proxy = PROXIES.get(view); + if (proxy == null) { + proxy = new AnimatorProxy(view); + PROXIES.put(view, proxy); + } + return proxy; + } + + private final WeakReference mView; + + private float mAlpha = 1; + private float mScaleX = 1; + private float mScaleY = 1; + private float mTranslationX; + private float mTranslationY; + + private final RectF mBefore = new RectF(); + private final RectF mAfter = new RectF(); + private final Matrix mTempMatrix = new Matrix(); + + private AnimatorProxy(View view) { + setDuration(0); //perform transformation immediately + setFillAfter(true); //persist transformation beyond duration + view.setAnimation(this); + mView = new WeakReference(view); + } + + public float getAlpha() { + return mAlpha; + } + public void setAlpha(float alpha) { + if (mAlpha != alpha) { + mAlpha = alpha; + View view = mView.get(); + if (view != null) { + view.invalidate(); + } + } + } + public float getScaleX() { + return mScaleX; + } + public void setScaleX(float scaleX) { + if (mScaleX != scaleX) { + prepareForUpdate(); + mScaleX = scaleX; + invalidateAfterUpdate(); + } + } + public float getScaleY() { + return mScaleY; + } + public void setScaleY(float scaleY) { + if (mScaleY != scaleY) { + prepareForUpdate(); + mScaleY = scaleY; + invalidateAfterUpdate(); + } + } + public int getScrollX() { + View view = mView.get(); + if (view == null) { + return 0; + } + return view.getScrollX(); + } + public void setScrollX(int value) { + View view = mView.get(); + if (view != null) { + view.scrollTo(value, view.getScrollY()); + } + } + public int getScrollY() { + View view = mView.get(); + if (view == null) { + return 0; + } + return view.getScrollY(); + } + public void setScrollY(int value) { + View view = mView.get(); + if (view != null) { + view.scrollTo(view.getScrollY(), value); + } + } + + public float getTranslationX() { + return mTranslationX; + } + public void setTranslationX(float translationX) { + if (mTranslationX != translationX) { + prepareForUpdate(); + mTranslationX = translationX; + invalidateAfterUpdate(); + } + } + public float getTranslationY() { + return mTranslationY; + } + public void setTranslationY(float translationY) { + if (mTranslationY != translationY) { + prepareForUpdate(); + mTranslationY = translationY; + invalidateAfterUpdate(); + } + } + + private void prepareForUpdate() { + View view = mView.get(); + if (view != null) { + computeRect(mBefore, view); + } + } + private void invalidateAfterUpdate() { + View view = mView.get(); + if (view == null) { + return; + } + View parent = (View)view.getParent(); + if (parent == null) { + return; + } + + final RectF after = mAfter; + computeRect(after, view); + after.union(mBefore); + + parent.invalidate( + (int) FloatMath.floor(after.left), + (int) FloatMath.floor(after.top), + (int) FloatMath.ceil(after.right), + (int) FloatMath.ceil(after.bottom)); + } + + private void computeRect(final RectF r, View view) { + // compute current rectangle according to matrix transformation + final float w = view.getWidth(); + final float h = view.getHeight(); + + // use a rectangle at 0,0 to make sure we don't run into issues with scaling + r.set(0, 0, w, h); + + final Matrix m = mTempMatrix; + m.reset(); + transformMatrix(m, view); + mTempMatrix.mapRect(r); + + r.offset(view.getLeft(), view.getTop()); + + // Straighten coords if rotations flipped them + if (r.right < r.left) { + final float f = r.right; + r.right = r.left; + r.left = f; + } + if (r.bottom < r.top) { + final float f = r.top; + r.top = r.bottom; + r.bottom = f; + } + } + + private void transformMatrix(Matrix m, View view) { + final float w = view.getWidth(); + final float h = view.getHeight(); + + final float sX = mScaleX; + final float sY = mScaleY; + if ((sX != 1.0f) || (sY != 1.0f)) { + final float deltaSX = ((sX * w) - w) / 2f; + final float deltaSY = ((sY * h) - h) / 2f; + m.postScale(sX, sY); + m.postTranslate(-deltaSX, -deltaSY); + } + m.postTranslate(mTranslationX, mTranslationY); + } + + @Override + protected void applyTransformation(float interpolatedTime, Transformation t) { + View view = mView.get(); + if (view != null) { + t.setAlpha(mAlpha); + transformMatrix(t.getMatrix(), view); + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/widget/NineFrameLayout.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/widget/NineFrameLayout.java new file mode 100644 index 00000000..2c428e90 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/widget/NineFrameLayout.java @@ -0,0 +1,65 @@ +package com.actionbarsherlock.internal.nineoldandroids.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.FrameLayout; + +import com.actionbarsherlock.internal.nineoldandroids.view.animation.AnimatorProxy; + +public class NineFrameLayout extends FrameLayout { + private final AnimatorProxy mProxy; + + public NineFrameLayout(Context context) { + super(context); + mProxy = AnimatorProxy.NEEDS_PROXY ? AnimatorProxy.wrap(this) : null; + } + public NineFrameLayout(Context context, AttributeSet attrs) { + super(context, attrs); + mProxy = AnimatorProxy.NEEDS_PROXY ? AnimatorProxy.wrap(this) : null; + } + public NineFrameLayout(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + mProxy = AnimatorProxy.NEEDS_PROXY ? AnimatorProxy.wrap(this) : null; + } + + @Override + public void setVisibility(int visibility) { + if (mProxy != null) { + if (visibility == GONE) { + clearAnimation(); + } else if (visibility == VISIBLE) { + setAnimation(mProxy); + } + } + super.setVisibility(visibility); + } + + public float getAlpha() { + if (AnimatorProxy.NEEDS_PROXY) { + return mProxy.getAlpha(); + } else { + return super.getAlpha(); + } + } + public void setAlpha(float alpha) { + if (AnimatorProxy.NEEDS_PROXY) { + mProxy.setAlpha(alpha); + } else { + super.setAlpha(alpha); + } + } + public float getTranslationY() { + if (AnimatorProxy.NEEDS_PROXY) { + return mProxy.getTranslationY(); + } else { + return super.getTranslationY(); + } + } + public void setTranslationY(float translationY) { + if (AnimatorProxy.NEEDS_PROXY) { + mProxy.setTranslationY(translationY); + } else { + super.setTranslationY(translationY); + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/widget/NineHorizontalScrollView.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/widget/NineHorizontalScrollView.java new file mode 100644 index 00000000..129b5aaa --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/widget/NineHorizontalScrollView.java @@ -0,0 +1,41 @@ +package com.actionbarsherlock.internal.nineoldandroids.widget; + +import android.content.Context; +import android.widget.HorizontalScrollView; +import com.actionbarsherlock.internal.nineoldandroids.view.animation.AnimatorProxy; + +public class NineHorizontalScrollView extends HorizontalScrollView { + private final AnimatorProxy mProxy; + + public NineHorizontalScrollView(Context context) { + super(context); + mProxy = AnimatorProxy.NEEDS_PROXY ? AnimatorProxy.wrap(this) : null; + } + + @Override + public void setVisibility(int visibility) { + if (mProxy != null) { + if (visibility == GONE) { + clearAnimation(); + } else if (visibility == VISIBLE) { + setAnimation(mProxy); + } + } + super.setVisibility(visibility); + } + + public float getAlpha() { + if (AnimatorProxy.NEEDS_PROXY) { + return mProxy.getAlpha(); + } else { + return super.getAlpha(); + } + } + public void setAlpha(float alpha) { + if (AnimatorProxy.NEEDS_PROXY) { + mProxy.setAlpha(alpha); + } else { + super.setAlpha(alpha); + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/widget/NineLinearLayout.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/widget/NineLinearLayout.java new file mode 100644 index 00000000..a670b1f6 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/widget/NineLinearLayout.java @@ -0,0 +1,65 @@ +package com.actionbarsherlock.internal.nineoldandroids.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.LinearLayout; + +import com.actionbarsherlock.internal.nineoldandroids.view.animation.AnimatorProxy; + +public class NineLinearLayout extends LinearLayout { + private final AnimatorProxy mProxy; + + public NineLinearLayout(Context context) { + super(context); + mProxy = AnimatorProxy.NEEDS_PROXY ? AnimatorProxy.wrap(this) : null; + } + public NineLinearLayout(Context context, AttributeSet attrs) { + super(context, attrs); + mProxy = AnimatorProxy.NEEDS_PROXY ? AnimatorProxy.wrap(this) : null; + } + public NineLinearLayout(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + mProxy = AnimatorProxy.NEEDS_PROXY ? AnimatorProxy.wrap(this) : null; + } + + @Override + public void setVisibility(int visibility) { + if (mProxy != null) { + if (visibility == GONE) { + clearAnimation(); + } else if (visibility == VISIBLE) { + setAnimation(mProxy); + } + } + super.setVisibility(visibility); + } + + public float getAlpha() { + if (AnimatorProxy.NEEDS_PROXY) { + return mProxy.getAlpha(); + } else { + return super.getAlpha(); + } + } + public void setAlpha(float alpha) { + if (AnimatorProxy.NEEDS_PROXY) { + mProxy.setAlpha(alpha); + } else { + super.setAlpha(alpha); + } + } + public float getTranslationX() { + if (AnimatorProxy.NEEDS_PROXY) { + return mProxy.getTranslationX(); + } else { + return super.getTranslationX(); + } + } + public void setTranslationX(float translationX) { + if (AnimatorProxy.NEEDS_PROXY) { + mProxy.setTranslationX(translationX); + } else { + super.setTranslationX(translationX); + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/ActionProviderWrapper.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/ActionProviderWrapper.java new file mode 100644 index 00000000..b136d50f --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/ActionProviderWrapper.java @@ -0,0 +1,40 @@ +package com.actionbarsherlock.internal.view; + +import com.actionbarsherlock.internal.view.menu.SubMenuWrapper; +import com.actionbarsherlock.view.ActionProvider; +import android.view.View; + +public class ActionProviderWrapper extends android.view.ActionProvider { + private final ActionProvider mProvider; + + + public ActionProviderWrapper(ActionProvider provider) { + super(null/*TODO*/); //XXX this *should* be unused + mProvider = provider; + } + + + public ActionProvider unwrap() { + return mProvider; + } + + @Override + public View onCreateActionView() { + return mProvider.onCreateActionView(); + } + + @Override + public boolean hasSubMenu() { + return mProvider.hasSubMenu(); + } + + @Override + public boolean onPerformDefaultAction() { + return mProvider.onPerformDefaultAction(); + } + + @Override + public void onPrepareSubMenu(android.view.SubMenu subMenu) { + mProvider.onPrepareSubMenu(new SubMenuWrapper(subMenu)); + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/StandaloneActionMode.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/StandaloneActionMode.java new file mode 100644 index 00000000..0a87bd3f --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/StandaloneActionMode.java @@ -0,0 +1,148 @@ +/* + * 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.internal.view; + +import android.content.Context; +import android.view.View; +import android.view.accessibility.AccessibilityEvent; + +import java.lang.ref.WeakReference; + +import com.actionbarsherlock.internal.view.menu.MenuBuilder; +import com.actionbarsherlock.internal.view.menu.MenuPopupHelper; +import com.actionbarsherlock.internal.view.menu.SubMenuBuilder; +import com.actionbarsherlock.internal.widget.ActionBarContextView; +import com.actionbarsherlock.view.ActionMode; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuInflater; +import com.actionbarsherlock.view.MenuItem; + +public class StandaloneActionMode extends ActionMode implements MenuBuilder.Callback { + private Context mContext; + private ActionBarContextView mContextView; + private ActionMode.Callback mCallback; + private WeakReference mCustomView; + private boolean mFinished; + private boolean mFocusable; + + private MenuBuilder mMenu; + + public StandaloneActionMode(Context context, ActionBarContextView view, + ActionMode.Callback callback, boolean isFocusable) { + mContext = context; + mContextView = view; + mCallback = callback; + + mMenu = new MenuBuilder(context).setDefaultShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + mMenu.setCallback(this); + mFocusable = isFocusable; + } + + @Override + public void setTitle(CharSequence title) { + mContextView.setTitle(title); + } + + @Override + public void setSubtitle(CharSequence subtitle) { + mContextView.setSubtitle(subtitle); + } + + @Override + public void setTitle(int resId) { + setTitle(mContext.getString(resId)); + } + + @Override + public void setSubtitle(int resId) { + setSubtitle(mContext.getString(resId)); + } + + @Override + public void setCustomView(View view) { + mContextView.setCustomView(view); + mCustomView = view != null ? new WeakReference(view) : null; + } + + @Override + public void invalidate() { + mCallback.onPrepareActionMode(this, mMenu); + } + + @Override + public void finish() { + if (mFinished) { + return; + } + mFinished = true; + + mContextView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); + mCallback.onDestroyActionMode(this); + } + + @Override + public Menu getMenu() { + return mMenu; + } + + @Override + public CharSequence getTitle() { + return mContextView.getTitle(); + } + + @Override + public CharSequence getSubtitle() { + return mContextView.getSubtitle(); + } + + @Override + public View getCustomView() { + return mCustomView != null ? mCustomView.get() : null; + } + + @Override + public MenuInflater getMenuInflater() { + return new MenuInflater(mContext); + } + + public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) { + return mCallback.onActionItemClicked(this, item); + } + + public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) { + } + + public boolean onSubMenuSelected(SubMenuBuilder subMenu) { + if (!subMenu.hasVisibleItems()) { + return true; + } + + new MenuPopupHelper(mContext, subMenu).show(); + return true; + } + + public void onCloseSubMenu(SubMenuBuilder menu) { + } + + public void onMenuModeChange(MenuBuilder menu) { + invalidate(); + mContextView.showOverflowMenu(); + } + + public boolean isUiFocusable() { + return mFocusable; + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/View_HasStateListenerSupport.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/View_HasStateListenerSupport.java new file mode 100644 index 00000000..7d45e81b --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/View_HasStateListenerSupport.java @@ -0,0 +1,6 @@ +package com.actionbarsherlock.internal.view; + +public interface View_HasStateListenerSupport { + void addOnAttachStateChangeListener(View_OnAttachStateChangeListener listener); + void removeOnAttachStateChangeListener(View_OnAttachStateChangeListener listener); +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/View_OnAttachStateChangeListener.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/View_OnAttachStateChangeListener.java new file mode 100644 index 00000000..3869d329 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/View_OnAttachStateChangeListener.java @@ -0,0 +1,8 @@ +package com.actionbarsherlock.internal.view; + +import android.view.View; + +public interface View_OnAttachStateChangeListener { + void onViewAttachedToWindow(View v); + void onViewDetachedFromWindow(View v); +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenu.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenu.java new file mode 100644 index 00000000..0354ad1a --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenu.java @@ -0,0 +1,264 @@ +/* + * 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.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.view.KeyEvent; + +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuItem; +import com.actionbarsherlock.view.SubMenu; + +/** + * @hide + */ +public class ActionMenu implements Menu { + private Context mContext; + + private boolean mIsQwerty; + + private ArrayList mItems; + + public ActionMenu(Context context) { + mContext = context; + mItems = new ArrayList(); + } + + public Context getContext() { + return mContext; + } + + public MenuItem add(CharSequence title) { + return add(0, 0, 0, title); + } + + public MenuItem add(int titleRes) { + return add(0, 0, 0, titleRes); + } + + public MenuItem add(int groupId, int itemId, int order, int titleRes) { + return add(groupId, itemId, order, mContext.getResources().getString(titleRes)); + } + + public MenuItem add(int groupId, int itemId, int order, CharSequence title) { + ActionMenuItem item = new ActionMenuItem(getContext(), + groupId, itemId, 0, order, title); + mItems.add(order, item); + return item; + } + + public int addIntentOptions(int groupId, int itemId, int order, + ComponentName caller, Intent[] specifics, Intent intent, int flags, + 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; + } + + public SubMenu addSubMenu(CharSequence title) { + // TODO Implement submenus + return null; + } + + public SubMenu addSubMenu(int titleRes) { + // TODO Implement submenus + return null; + } + + public SubMenu addSubMenu(int groupId, int itemId, int order, + CharSequence title) { + // TODO Implement submenus + return null; + } + + public SubMenu addSubMenu(int groupId, int itemId, int order, int titleRes) { + // TODO Implement submenus + return null; + } + + public void clear() { + mItems.clear(); + } + + public void close() { + } + + private int findItemIndex(int id) { + final ArrayList items = mItems; + final int itemCount = items.size(); + for (int i = 0; i < itemCount; i++) { + if (items.get(i).getItemId() == id) { + return i; + } + } + + return -1; + } + + public MenuItem findItem(int id) { + return mItems.get(findItemIndex(id)); + } + + public MenuItem getItem(int index) { + return mItems.get(index); + } + + public boolean hasVisibleItems() { + final ArrayList items = mItems; + final int itemCount = items.size(); + + for (int i = 0; i < itemCount; i++) { + if (items.get(i).isVisible()) { + return true; + } + } + + return false; + } + + private ActionMenuItem findItemWithShortcut(int keyCode, KeyEvent event) { + // TODO Make this smarter. + final boolean qwerty = mIsQwerty; + final ArrayList items = mItems; + final int itemCount = items.size(); + + for (int i = 0; i < itemCount; i++) { + ActionMenuItem item = items.get(i); + final char shortcut = qwerty ? item.getAlphabeticShortcut() : + item.getNumericShortcut(); + if (keyCode == shortcut) { + return item; + } + } + return null; + } + + public boolean isShortcutKey(int keyCode, KeyEvent event) { + return findItemWithShortcut(keyCode, event) != null; + } + + public boolean performIdentifierAction(int id, int flags) { + final int index = findItemIndex(id); + if (index < 0) { + return false; + } + + return mItems.get(index).invoke(); + } + + public boolean performShortcut(int keyCode, KeyEvent event, int flags) { + ActionMenuItem item = findItemWithShortcut(keyCode, event); + if (item == null) { + return false; + } + + return item.invoke(); + } + + public void removeGroup(int groupId) { + final ArrayList items = mItems; + int itemCount = items.size(); + int i = 0; + while (i < itemCount) { + if (items.get(i).getGroupId() == groupId) { + items.remove(i); + itemCount--; + } else { + i++; + } + } + } + + public void removeItem(int id) { + mItems.remove(findItemIndex(id)); + } + + public void setGroupCheckable(int group, boolean checkable, + boolean exclusive) { + final ArrayList items = mItems; + final int itemCount = items.size(); + + for (int i = 0; i < itemCount; i++) { + ActionMenuItem item = items.get(i); + if (item.getGroupId() == group) { + item.setCheckable(checkable); + item.setExclusiveCheckable(exclusive); + } + } + } + + public void setGroupEnabled(int group, boolean enabled) { + final ArrayList items = mItems; + final int itemCount = items.size(); + + for (int i = 0; i < itemCount; i++) { + ActionMenuItem item = items.get(i); + if (item.getGroupId() == group) { + item.setEnabled(enabled); + } + } + } + + public void setGroupVisible(int group, boolean visible) { + final ArrayList items = mItems; + final int itemCount = items.size(); + + for (int i = 0; i < itemCount; i++) { + ActionMenuItem item = items.get(i); + if (item.getGroupId() == group) { + item.setVisible(visible); + } + } + } + + public void setQwertyMode(boolean isQwerty) { + mIsQwerty = isQwerty; + } + + public int size() { + return mItems.size(); + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuItem.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuItem.java new file mode 100644 index 00000000..510b9748 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuItem.java @@ -0,0 +1,278 @@ +/* + * 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.internal.view.menu; + +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.view.ContextMenu.ContextMenuInfo; +import android.view.View; + +import com.actionbarsherlock.view.ActionProvider; +import com.actionbarsherlock.view.MenuItem; +import com.actionbarsherlock.view.SubMenu; + +/** + * @hide + */ +public class ActionMenuItem implements MenuItem { + private final int mId; + private final int mGroup; + //UNUSED private final int mCategoryOrder; + private final int mOrdering; + + private CharSequence mTitle; + private CharSequence mTitleCondensed; + private Intent mIntent; + private char mShortcutNumericChar; + private char mShortcutAlphabeticChar; + + private Drawable mIconDrawable; + //UNUSED private int mIconResId = NO_ICON; + + private Context mContext; + + private MenuItem.OnMenuItemClickListener mClickListener; + + //UNUSED private static final int NO_ICON = 0; + + private int mFlags = ENABLED; + private static final int CHECKABLE = 0x00000001; + private static final int CHECKED = 0x00000002; + private static final int EXCLUSIVE = 0x00000004; + private static final int HIDDEN = 0x00000008; + private static final int ENABLED = 0x00000010; + + public ActionMenuItem(Context context, int group, int id, int categoryOrder, int ordering, + CharSequence title) { + mContext = context; + mId = id; + mGroup = group; + //UNUSED mCategoryOrder = categoryOrder; + mOrdering = ordering; + mTitle = title; + } + + public char getAlphabeticShortcut() { + return mShortcutAlphabeticChar; + } + + public int getGroupId() { + return mGroup; + } + + public Drawable getIcon() { + return mIconDrawable; + } + + public Intent getIntent() { + return mIntent; + } + + public int getItemId() { + return mId; + } + + public ContextMenuInfo getMenuInfo() { + return null; + } + + public char getNumericShortcut() { + return mShortcutNumericChar; + } + + public int getOrder() { + return mOrdering; + } + + public SubMenu getSubMenu() { + return null; + } + + public CharSequence getTitle() { + return mTitle; + } + + public CharSequence getTitleCondensed() { + return mTitleCondensed; + } + + public boolean hasSubMenu() { + return false; + } + + public boolean isCheckable() { + return (mFlags & CHECKABLE) != 0; + } + + public boolean isChecked() { + return (mFlags & CHECKED) != 0; + } + + public boolean isEnabled() { + return (mFlags & ENABLED) != 0; + } + + public boolean isVisible() { + return (mFlags & HIDDEN) == 0; + } + + public MenuItem setAlphabeticShortcut(char alphaChar) { + mShortcutAlphabeticChar = alphaChar; + return this; + } + + public MenuItem setCheckable(boolean checkable) { + mFlags = (mFlags & ~CHECKABLE) | (checkable ? CHECKABLE : 0); + return this; + } + + public ActionMenuItem setExclusiveCheckable(boolean exclusive) { + mFlags = (mFlags & ~EXCLUSIVE) | (exclusive ? EXCLUSIVE : 0); + return this; + } + + public MenuItem setChecked(boolean checked) { + mFlags = (mFlags & ~CHECKED) | (checked ? CHECKED : 0); + return this; + } + + public MenuItem setEnabled(boolean enabled) { + mFlags = (mFlags & ~ENABLED) | (enabled ? ENABLED : 0); + return this; + } + + public MenuItem setIcon(Drawable icon) { + mIconDrawable = icon; + //UNUSED mIconResId = NO_ICON; + return this; + } + + public MenuItem setIcon(int iconRes) { + //UNUSED mIconResId = iconRes; + mIconDrawable = mContext.getResources().getDrawable(iconRes); + return this; + } + + public MenuItem setIntent(Intent intent) { + mIntent = intent; + return this; + } + + public MenuItem setNumericShortcut(char numericChar) { + mShortcutNumericChar = numericChar; + return this; + } + + public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) { + mClickListener = menuItemClickListener; + return this; + } + + public MenuItem setShortcut(char numericChar, char alphaChar) { + mShortcutNumericChar = numericChar; + mShortcutAlphabeticChar = alphaChar; + return this; + } + + public MenuItem setTitle(CharSequence title) { + mTitle = title; + return this; + } + + public MenuItem setTitle(int title) { + mTitle = mContext.getResources().getString(title); + return this; + } + + public MenuItem setTitleCondensed(CharSequence title) { + mTitleCondensed = title; + return this; + } + + public MenuItem setVisible(boolean visible) { + mFlags = (mFlags & HIDDEN) | (visible ? 0 : HIDDEN); + return this; + } + + public boolean invoke() { + if (mClickListener != null && mClickListener.onMenuItemClick(this)) { + return true; + } + + if (mIntent != null) { + mContext.startActivity(mIntent); + return true; + } + + return false; + } + + public void setShowAsAction(int show) { + // Do nothing. ActionMenuItems always show as action buttons. + } + + public MenuItem setActionView(View actionView) { + throw new UnsupportedOperationException(); + } + + public View getActionView() { + return null; + } + + @Override + public MenuItem setActionView(int resId) { + throw new UnsupportedOperationException(); + } + + @Override + public ActionProvider getActionProvider() { + return null; + } + + @Override + public MenuItem setActionProvider(ActionProvider actionProvider) { + throw new UnsupportedOperationException(); + } + + @Override + public MenuItem setShowAsActionFlags(int actionEnum) { + setShowAsAction(actionEnum); + return this; + } + + @Override + public boolean expandActionView() { + return false; + } + + @Override + public boolean collapseActionView() { + return false; + } + + @Override + public boolean isActionViewExpanded() { + return false; + } + + @Override + public MenuItem setOnActionExpandListener(OnActionExpandListener listener) { + // No need to save the listener; ActionMenuItem does not support collapsing items. + return this; + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.java new file mode 100644 index 00000000..dcb50f36 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.java @@ -0,0 +1,295 @@ +/* + * 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.internal.view.menu; + +import java.util.HashSet; +import java.util.Set; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.view.accessibility.AccessibilityEvent; +import android.widget.ImageButton; +import android.widget.LinearLayout; +import android.widget.Toast; + +import com.actionbarsherlock.R; +import com.actionbarsherlock.internal.view.View_HasStateListenerSupport; +import com.actionbarsherlock.internal.view.View_OnAttachStateChangeListener; +import com.actionbarsherlock.internal.widget.CapitalizingButton; + +import static com.actionbarsherlock.internal.ResourcesCompat.getResources_getBoolean; + +/** + * @hide + */ +public class ActionMenuItemView extends LinearLayout + implements MenuView.ItemView, View.OnClickListener, View.OnLongClickListener, + ActionMenuView.ActionMenuChildView, View_HasStateListenerSupport { + //UNUSED private static final String TAG = "ActionMenuItemView"; + + private MenuItemImpl mItemData; + private CharSequence mTitle; + private MenuBuilder.ItemInvoker mItemInvoker; + + private ImageButton mImageButton; + private CapitalizingButton mTextButton; + private boolean mAllowTextWithIcon; + private boolean mExpandedFormat; + private int mMinWidth; + + private final Set mListeners = new HashSet(); + + public ActionMenuItemView(Context context) { + this(context, null); + } + + public ActionMenuItemView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public ActionMenuItemView(Context context, AttributeSet attrs, int defStyle) { + //TODO super(context, attrs, defStyle); + super(context, attrs); + mAllowTextWithIcon = getResources_getBoolean(context, + R.bool.abs__config_allowActionMenuItemTextWithIcon); + TypedArray a = context.obtainStyledAttributes(attrs, + R.styleable.SherlockActionMenuItemView, 0, 0); + mMinWidth = a.getDimensionPixelSize( + R.styleable.SherlockActionMenuItemView_android_minWidth, 0); + a.recycle(); + } + + @Override + public void addOnAttachStateChangeListener(View_OnAttachStateChangeListener listener) { + mListeners.add(listener); + } + + @Override + public void removeOnAttachStateChangeListener(View_OnAttachStateChangeListener listener) { + mListeners.remove(listener); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + for (View_OnAttachStateChangeListener listener : mListeners) { + listener.onViewAttachedToWindow(this); + } + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + for (View_OnAttachStateChangeListener listener : mListeners) { + listener.onViewDetachedFromWindow(this); + } + } + + @Override + public void onFinishInflate() { + + mImageButton = (ImageButton) findViewById(R.id.abs__imageButton); + mTextButton = (CapitalizingButton) findViewById(R.id.abs__textButton); + mImageButton.setOnClickListener(this); + mTextButton.setOnClickListener(this); + mImageButton.setOnLongClickListener(this); + setOnClickListener(this); + setOnLongClickListener(this); + } + + public MenuItemImpl getItemData() { + return mItemData; + } + + public void initialize(MenuItemImpl itemData, int menuType) { + mItemData = itemData; + + setIcon(itemData.getIcon()); + setTitle(itemData.getTitleForItemView(this)); // Title only takes effect if there is no icon + setId(itemData.getItemId()); + + setVisibility(itemData.isVisible() ? View.VISIBLE : View.GONE); + setEnabled(itemData.isEnabled()); + } + + @Override + public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + mImageButton.setEnabled(enabled); + mTextButton.setEnabled(enabled); + } + + public void onClick(View v) { + if (mItemInvoker != null) { + mItemInvoker.invokeItem(mItemData); + } + } + + public void setItemInvoker(MenuBuilder.ItemInvoker invoker) { + mItemInvoker = invoker; + } + + public boolean prefersCondensedTitle() { + return true; + } + + public void setCheckable(boolean checkable) { + // TODO Support checkable action items + } + + public void setChecked(boolean checked) { + // TODO Support checkable action items + } + + public void setExpandedFormat(boolean expandedFormat) { + if (mExpandedFormat != expandedFormat) { + mExpandedFormat = expandedFormat; + if (mItemData != null) { + mItemData.actionFormatChanged(); + } + } + } + + private void updateTextButtonVisibility() { + boolean visible = !TextUtils.isEmpty(mTextButton.getText()); + visible &= mImageButton.getDrawable() == null || + (mItemData.showsTextAsAction() && (mAllowTextWithIcon || mExpandedFormat)); + + mTextButton.setVisibility(visible ? VISIBLE : GONE); + } + + public void setIcon(Drawable icon) { + mImageButton.setImageDrawable(icon); + if (icon != null) { + mImageButton.setVisibility(VISIBLE); + } else { + mImageButton.setVisibility(GONE); + } + + updateTextButtonVisibility(); + } + + public boolean hasText() { + return mTextButton.getVisibility() != GONE; + } + + public void setShortcut(boolean showShortcut, char shortcutKey) { + // Action buttons don't show text for shortcut keys. + } + + public void setTitle(CharSequence title) { + mTitle = title; + + mTextButton.setTextCompat(mTitle); + + setContentDescription(mTitle); + updateTextButtonVisibility(); + } + + @Override + public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { + onPopulateAccessibilityEvent(event); + return true; + } + + @Override + public void onPopulateAccessibilityEvent(AccessibilityEvent event) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + super.onPopulateAccessibilityEvent(event); + } + final CharSequence cdesc = getContentDescription(); + if (!TextUtils.isEmpty(cdesc)) { + event.getText().add(cdesc); + } + } + + @Override + public boolean dispatchHoverEvent(MotionEvent event) { + // Don't allow children to hover; we want this to be treated as a single component. + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + return onHoverEvent(event); + } + return false; + } + + public boolean showsIcon() { + return true; + } + + public boolean needsDividerBefore() { + return hasText() && mItemData.getIcon() == null; + } + + public boolean needsDividerAfter() { + return hasText(); + } + + @Override + public boolean onLongClick(View v) { + if (hasText()) { + // Don't show the cheat sheet for items that already show text. + return false; + } + + final int[] screenPos = new int[2]; + final Rect displayFrame = new Rect(); + getLocationOnScreen(screenPos); + getWindowVisibleDisplayFrame(displayFrame); + + final Context context = getContext(); + final int width = getWidth(); + final int height = getHeight(); + final int midy = screenPos[1] + height / 2; + final int screenWidth = context.getResources().getDisplayMetrics().widthPixels; + + Toast cheatSheet = Toast.makeText(context, mItemData.getTitle(), Toast.LENGTH_SHORT); + if (midy < displayFrame.height()) { + // Show along the top; follow action buttons + cheatSheet.setGravity(Gravity.TOP | Gravity.RIGHT, + screenWidth - screenPos[0] - width / 2, height); + } else { + // Show along the bottom center + cheatSheet.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, height); + } + cheatSheet.show(); + return true; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + + final int widthMode = MeasureSpec.getMode(widthMeasureSpec); + final int specSize = MeasureSpec.getSize(widthMeasureSpec); + final int oldMeasuredWidth = getMeasuredWidth(); + final int targetWidth = widthMode == MeasureSpec.AT_MOST ? Math.min(specSize, mMinWidth) + : mMinWidth; + + if (widthMode != MeasureSpec.EXACTLY && mMinWidth > 0 && oldMeasuredWidth < targetWidth) { + // Remeasure at exactly the minimum width. + super.onMeasure(MeasureSpec.makeMeasureSpec(targetWidth, MeasureSpec.EXACTLY), + heightMeasureSpec); + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter.java new file mode 100644 index 00000000..6f568c69 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter.java @@ -0,0 +1,721 @@ +/* + * 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.internal.view.menu; + +import static com.actionbarsherlock.internal.ResourcesCompat.getResources_getInteger; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.os.Build; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.SparseBooleanArray; +import android.view.SoundEffectConstants; +import android.view.View; +import android.view.View.MeasureSpec; +import android.view.ViewConfiguration; +import android.view.ViewGroup; +import android.widget.ImageButton; +import com.actionbarsherlock.R; +import com.actionbarsherlock.internal.view.View_HasStateListenerSupport; +import com.actionbarsherlock.internal.view.View_OnAttachStateChangeListener; +import com.actionbarsherlock.internal.view.menu.ActionMenuView.ActionMenuChildView; +import com.actionbarsherlock.view.ActionProvider; +import com.actionbarsherlock.view.MenuItem; + +/** + * MenuPresenter for building action menus as seen in the action bar and action modes. + */ +public class ActionMenuPresenter extends BaseMenuPresenter + implements ActionProvider.SubUiVisibilityListener { + //UNUSED private static final String TAG = "ActionMenuPresenter"; + + private View mOverflowButton; + private boolean mReserveOverflow; + private boolean mReserveOverflowSet; + private int mWidthLimit; + private int mActionItemWidthLimit; + private int mMaxItems; + private boolean mMaxItemsSet; + private boolean mStrictWidthLimit; + private boolean mWidthLimitSet; + private boolean mExpandedActionViewsExclusive; + + private int mMinCellSize; + + // Group IDs that have been added as actions - used temporarily, allocated here for reuse. + private final SparseBooleanArray mActionButtonGroups = new SparseBooleanArray(); + + private View mScrapActionButtonView; + + private OverflowPopup mOverflowPopup; + private ActionButtonSubmenu mActionButtonPopup; + + private OpenOverflowRunnable mPostedOpenRunnable; + + final PopupPresenterCallback mPopupPresenterCallback = new PopupPresenterCallback(); + int mOpenSubMenuId; + + public ActionMenuPresenter(Context context) { + super(context, R.layout.abs__action_menu_layout, + R.layout.abs__action_menu_item_layout); + } + + @Override + public void initForMenu(Context context, MenuBuilder menu) { + super.initForMenu(context, menu); + + final Resources res = context.getResources(); + + if (!mReserveOverflowSet) { + mReserveOverflow = reserveOverflow(mContext); + } + + if (!mWidthLimitSet) { + mWidthLimit = res.getDisplayMetrics().widthPixels / 2; + } + + // Measure for initial configuration + if (!mMaxItemsSet) { + mMaxItems = getResources_getInteger(context, R.integer.abs__max_action_buttons); + } + + int width = mWidthLimit; + if (mReserveOverflow) { + if (mOverflowButton == null) { + mOverflowButton = new OverflowMenuButton(mSystemContext); + final int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); + mOverflowButton.measure(spec, spec); + } + width -= mOverflowButton.getMeasuredWidth(); + } else { + mOverflowButton = null; + } + + mActionItemWidthLimit = width; + + mMinCellSize = (int) (ActionMenuView.MIN_CELL_SIZE * res.getDisplayMetrics().density); + + // Drop a scrap view as it may no longer reflect the proper context/config. + mScrapActionButtonView = null; + } + + public static boolean reserveOverflow(Context context) { + //Check for theme-forced overflow action item + TypedArray a = context.getTheme().obtainStyledAttributes(R.styleable.SherlockTheme); + boolean result = a.getBoolean(R.styleable.SherlockTheme_absForceOverflow, false); + a.recycle(); + if (result) { + return true; + } + + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + return (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB); + } else { + return !HasPermanentMenuKey.get(context); + } + } + + private static class HasPermanentMenuKey { + public static boolean get(Context context) { + return ViewConfiguration.get(context).hasPermanentMenuKey(); + } + } + + public void onConfigurationChanged(Configuration newConfig) { + if (!mMaxItemsSet) { + mMaxItems = getResources_getInteger(mContext, + R.integer.abs__max_action_buttons); + if (mMenu != null) { + mMenu.onItemsChanged(true); + } + } + } + + public void setWidthLimit(int width, boolean strict) { + mWidthLimit = width; + mStrictWidthLimit = strict; + mWidthLimitSet = true; + } + + public void setReserveOverflow(boolean reserveOverflow) { + mReserveOverflow = reserveOverflow; + mReserveOverflowSet = true; + } + + public void setItemLimit(int itemCount) { + mMaxItems = itemCount; + mMaxItemsSet = true; + } + + public void setExpandedActionViewsExclusive(boolean isExclusive) { + mExpandedActionViewsExclusive = isExclusive; + } + + @Override + public MenuView getMenuView(ViewGroup root) { + MenuView result = super.getMenuView(root); + ((ActionMenuView) result).setPresenter(this); + return result; + } + + @Override + public View getItemView(MenuItemImpl item, View convertView, ViewGroup parent) { + View actionView = item.getActionView(); + if (actionView == null || item.hasCollapsibleActionView()) { + if (!(convertView instanceof ActionMenuItemView)) { + convertView = null; + } + actionView = super.getItemView(item, convertView, parent); + } + actionView.setVisibility(item.isActionViewExpanded() ? View.GONE : View.VISIBLE); + + final ActionMenuView menuParent = (ActionMenuView) parent; + final ViewGroup.LayoutParams lp = actionView.getLayoutParams(); + if (!menuParent.checkLayoutParams(lp)) { + actionView.setLayoutParams(menuParent.generateLayoutParams(lp)); + } + return actionView; + } + + @Override + public void bindItemView(MenuItemImpl item, MenuView.ItemView itemView) { + itemView.initialize(item, 0); + + final ActionMenuView menuView = (ActionMenuView) mMenuView; + ActionMenuItemView actionItemView = (ActionMenuItemView) itemView; + actionItemView.setItemInvoker(menuView); + } + + @Override + public boolean shouldIncludeItem(int childIndex, MenuItemImpl item) { + return item.isActionButton(); + } + + @Override + public void updateMenuView(boolean cleared) { + super.updateMenuView(cleared); + + if (mMenu != null) { + final ArrayList actionItems = mMenu.getActionItems(); + final int count = actionItems.size(); + for (int i = 0; i < count; i++) { + final ActionProvider provider = actionItems.get(i).getActionProvider(); + if (provider != null) { + provider.setSubUiVisibilityListener(this); + } + } + } + + final ArrayList nonActionItems = mMenu != null ? + mMenu.getNonActionItems() : null; + + boolean hasOverflow = false; + if (mReserveOverflow && nonActionItems != null) { + final int count = nonActionItems.size(); + if (count == 1) { + hasOverflow = !nonActionItems.get(0).isActionViewExpanded(); + } else { + hasOverflow = count > 0; + } + } + + if (hasOverflow) { + if (mOverflowButton == null) { + mOverflowButton = new OverflowMenuButton(mSystemContext); + } + ViewGroup parent = (ViewGroup) mOverflowButton.getParent(); + if (parent != mMenuView) { + if (parent != null) { + parent.removeView(mOverflowButton); + } + ActionMenuView menuView = (ActionMenuView) mMenuView; + menuView.addView(mOverflowButton, menuView.generateOverflowButtonLayoutParams()); + } + } else if (mOverflowButton != null && mOverflowButton.getParent() == mMenuView) { + ((ViewGroup) mMenuView).removeView(mOverflowButton); + } + + ((ActionMenuView) mMenuView).setOverflowReserved(mReserveOverflow); + } + + @Override + public boolean filterLeftoverView(ViewGroup parent, int childIndex) { + if (parent.getChildAt(childIndex) == mOverflowButton) return false; + return super.filterLeftoverView(parent, childIndex); + } + + public boolean onSubMenuSelected(SubMenuBuilder subMenu) { + if (!subMenu.hasVisibleItems()) return false; + + SubMenuBuilder topSubMenu = subMenu; + while (topSubMenu.getParentMenu() != mMenu) { + topSubMenu = (SubMenuBuilder) topSubMenu.getParentMenu(); + } + View anchor = findViewForItem(topSubMenu.getItem()); + if (anchor == null) { + if (mOverflowButton == null) return false; + anchor = mOverflowButton; + } + + mOpenSubMenuId = subMenu.getItem().getItemId(); + mActionButtonPopup = new ActionButtonSubmenu(mContext, subMenu); + mActionButtonPopup.setAnchorView(anchor); + mActionButtonPopup.show(); + super.onSubMenuSelected(subMenu); + return true; + } + + private View findViewForItem(MenuItem item) { + final ViewGroup parent = (ViewGroup) mMenuView; + if (parent == null) return null; + + final int count = parent.getChildCount(); + for (int i = 0; i < count; i++) { + final View child = parent.getChildAt(i); + if (child instanceof MenuView.ItemView && + ((MenuView.ItemView) child).getItemData() == item) { + return child; + } + } + return null; + } + + /** + * Display the overflow menu if one is present. + * @return true if the overflow menu was shown, false otherwise. + */ + public boolean showOverflowMenu() { + if (mReserveOverflow && !isOverflowMenuShowing() && mMenu != null && mMenuView != null && + mPostedOpenRunnable == null && !mMenu.getNonActionItems().isEmpty()) { + OverflowPopup popup = new OverflowPopup(mContext, mMenu, mOverflowButton, true); + mPostedOpenRunnable = new OpenOverflowRunnable(popup); + // Post this for later; we might still need a layout for the anchor to be right. + ((View) mMenuView).post(mPostedOpenRunnable); + + // ActionMenuPresenter uses null as a callback argument here + // to indicate overflow is opening. + super.onSubMenuSelected(null); + + return true; + } + return false; + } + + /** + * Hide the overflow menu if it is currently showing. + * + * @return true if the overflow menu was hidden, false otherwise. + */ + public boolean hideOverflowMenu() { + if (mPostedOpenRunnable != null && mMenuView != null) { + ((View) mMenuView).removeCallbacks(mPostedOpenRunnable); + mPostedOpenRunnable = null; + return true; + } + + MenuPopupHelper popup = mOverflowPopup; + if (popup != null) { + popup.dismiss(); + return true; + } + return false; + } + + /** + * Dismiss all popup menus - overflow and submenus. + * @return true if popups were dismissed, false otherwise. (This can be because none were open.) + */ + public boolean dismissPopupMenus() { + boolean result = hideOverflowMenu(); + result |= hideSubMenus(); + return result; + } + + /** + * Dismiss all submenu popups. + * + * @return true if popups were dismissed, false otherwise. (This can be because none were open.) + */ + public boolean hideSubMenus() { + if (mActionButtonPopup != null) { + mActionButtonPopup.dismiss(); + return true; + } + return false; + } + + /** + * @return true if the overflow menu is currently showing + */ + public boolean isOverflowMenuShowing() { + return mOverflowPopup != null && mOverflowPopup.isShowing(); + } + + /** + * @return true if space has been reserved in the action menu for an overflow item. + */ + public boolean isOverflowReserved() { + return mReserveOverflow; + } + + public boolean flagActionItems() { + final ArrayList visibleItems = mMenu.getVisibleItems(); + final int itemsSize = visibleItems.size(); + int maxActions = mMaxItems; + int widthLimit = mActionItemWidthLimit; + final int querySpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); + final ViewGroup parent = (ViewGroup) mMenuView; + + int requiredItems = 0; + int requestedItems = 0; + int firstActionWidth = 0; + boolean hasOverflow = false; + for (int i = 0; i < itemsSize; i++) { + MenuItemImpl item = visibleItems.get(i); + if (item.requiresActionButton()) { + requiredItems++; + } else if (item.requestsActionButton()) { + requestedItems++; + } else { + hasOverflow = true; + } + if (mExpandedActionViewsExclusive && item.isActionViewExpanded()) { + // Overflow everything if we have an expanded action view and we're + // space constrained. + maxActions = 0; + } + } + + // Reserve a spot for the overflow item if needed. + if (mReserveOverflow && + (hasOverflow || requiredItems + requestedItems > maxActions)) { + maxActions--; + } + maxActions -= requiredItems; + + final SparseBooleanArray seenGroups = mActionButtonGroups; + seenGroups.clear(); + + int cellSize = 0; + int cellsRemaining = 0; + if (mStrictWidthLimit) { + cellsRemaining = widthLimit / mMinCellSize; + final int cellSizeRemaining = widthLimit % mMinCellSize; + cellSize = mMinCellSize + cellSizeRemaining / cellsRemaining; + } + + // Flag as many more requested items as will fit. + for (int i = 0; i < itemsSize; i++) { + MenuItemImpl item = visibleItems.get(i); + + if (item.requiresActionButton()) { + View v = getItemView(item, mScrapActionButtonView, parent); + if (mScrapActionButtonView == null) { + mScrapActionButtonView = v; + } + if (mStrictWidthLimit) { + cellsRemaining -= ActionMenuView.measureChildForCells(v, + cellSize, cellsRemaining, querySpec, 0); + } else { + v.measure(querySpec, querySpec); + } + final int measuredWidth = v.getMeasuredWidth(); + widthLimit -= measuredWidth; + if (firstActionWidth == 0) { + firstActionWidth = measuredWidth; + } + final int groupId = item.getGroupId(); + if (groupId != 0) { + seenGroups.put(groupId, true); + } + item.setIsActionButton(true); + } else if (item.requestsActionButton()) { + // Items in a group with other items that already have an action slot + // can break the max actions rule, but not the width limit. + final int groupId = item.getGroupId(); + final boolean inGroup = seenGroups.get(groupId); + boolean isAction = (maxActions > 0 || inGroup) && widthLimit > 0 && + (!mStrictWidthLimit || cellsRemaining > 0); + + if (isAction) { + View v = getItemView(item, mScrapActionButtonView, parent); + if (mScrapActionButtonView == null) { + mScrapActionButtonView = v; + } + if (mStrictWidthLimit) { + final int cells = ActionMenuView.measureChildForCells(v, + cellSize, cellsRemaining, querySpec, 0); + cellsRemaining -= cells; + if (cells == 0) { + isAction = false; + } + } else { + v.measure(querySpec, querySpec); + } + final int measuredWidth = v.getMeasuredWidth(); + widthLimit -= measuredWidth; + if (firstActionWidth == 0) { + firstActionWidth = measuredWidth; + } + + if (mStrictWidthLimit) { + isAction &= widthLimit >= 0; + } else { + // Did this push the entire first item past the limit? + isAction &= widthLimit + firstActionWidth > 0; + } + } + + if (isAction && groupId != 0) { + seenGroups.put(groupId, true); + } else if (inGroup) { + // We broke the width limit. Demote the whole group, they all overflow now. + seenGroups.put(groupId, false); + for (int j = 0; j < i; j++) { + MenuItemImpl areYouMyGroupie = visibleItems.get(j); + if (areYouMyGroupie.getGroupId() == groupId) { + // Give back the action slot + if (areYouMyGroupie.isActionButton()) maxActions++; + areYouMyGroupie.setIsActionButton(false); + } + } + } + + if (isAction) maxActions--; + + item.setIsActionButton(isAction); + } + } + return true; + } + + @Override + public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) { + dismissPopupMenus(); + super.onCloseMenu(menu, allMenusAreClosing); + } + + @Override + public Parcelable onSaveInstanceState() { + SavedState state = new SavedState(); + state.openSubMenuId = mOpenSubMenuId; + return state; + } + + @Override + public void onRestoreInstanceState(Parcelable state) { + SavedState saved = (SavedState) state; + if (saved.openSubMenuId > 0) { + MenuItem item = mMenu.findItem(saved.openSubMenuId); + if (item != null) { + SubMenuBuilder subMenu = (SubMenuBuilder) item.getSubMenu(); + onSubMenuSelected(subMenu); + } + } + } + + @Override + public void onSubUiVisibilityChanged(boolean isVisible) { + if (isVisible) { + // Not a submenu, but treat it like one. + super.onSubMenuSelected(null); + } else { + mMenu.close(false); + } + } + + private static class SavedState implements Parcelable { + public int openSubMenuId; + + SavedState() { + } + + SavedState(Parcel in) { + openSubMenuId = in.readInt(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(openSubMenuId); + } + + @SuppressWarnings("unused") + public static final Parcelable.Creator CREATOR + = new Parcelable.Creator() { + public SavedState createFromParcel(Parcel in) { + return new SavedState(in); + } + + public SavedState[] newArray(int size) { + return new SavedState[size]; + } + }; + } + + private class OverflowMenuButton extends ImageButton implements ActionMenuChildView, View_HasStateListenerSupport { + private final Set mListeners = new HashSet(); + + public OverflowMenuButton(Context context) { + super(context, null, R.attr.actionOverflowButtonStyle); + + setClickable(true); + setFocusable(true); + setVisibility(VISIBLE); + setEnabled(true); + } + + @Override + public boolean performClick() { + if (super.performClick()) { + return true; + } + + playSoundEffect(SoundEffectConstants.CLICK); + showOverflowMenu(); + return true; + } + + public boolean needsDividerBefore() { + return false; + } + + public boolean needsDividerAfter() { + return false; + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + for (View_OnAttachStateChangeListener listener : mListeners) { + listener.onViewAttachedToWindow(this); + } + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + for (View_OnAttachStateChangeListener listener : mListeners) { + listener.onViewDetachedFromWindow(this); + } + } + + @Override + public void addOnAttachStateChangeListener(View_OnAttachStateChangeListener listener) { + mListeners.add(listener); + } + + @Override + public void removeOnAttachStateChangeListener(View_OnAttachStateChangeListener listener) { + mListeners.remove(listener); + } + } + + private class OverflowPopup extends MenuPopupHelper { + public OverflowPopup(Context context, MenuBuilder menu, View anchorView, + boolean overflowOnly) { + super(context, menu, anchorView, overflowOnly); + setCallback(mPopupPresenterCallback); + } + + @Override + public void onDismiss() { + super.onDismiss(); + mMenu.close(); + mOverflowPopup = null; + } + } + + private class ActionButtonSubmenu extends MenuPopupHelper { + //UNUSED private SubMenuBuilder mSubMenu; + + public ActionButtonSubmenu(Context context, SubMenuBuilder subMenu) { + super(context, subMenu); + //UNUSED mSubMenu = subMenu; + + MenuItemImpl item = (MenuItemImpl) subMenu.getItem(); + if (!item.isActionButton()) { + // Give a reasonable anchor to nested submenus. + setAnchorView(mOverflowButton == null ? (View) mMenuView : mOverflowButton); + } + + setCallback(mPopupPresenterCallback); + + boolean preserveIconSpacing = false; + final int count = subMenu.size(); + for (int i = 0; i < count; i++) { + MenuItem childItem = subMenu.getItem(i); + if (childItem.isVisible() && childItem.getIcon() != null) { + preserveIconSpacing = true; + break; + } + } + setForceShowIcon(preserveIconSpacing); + } + + @Override + public void onDismiss() { + super.onDismiss(); + mActionButtonPopup = null; + mOpenSubMenuId = 0; + } + } + + private class PopupPresenterCallback implements MenuPresenter.Callback { + + @Override + public boolean onOpenSubMenu(MenuBuilder subMenu) { + if (subMenu == null) return false; + + mOpenSubMenuId = ((SubMenuBuilder) subMenu).getItem().getItemId(); + return false; + } + + @Override + public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) { + if (menu instanceof SubMenuBuilder) { + ((SubMenuBuilder) menu).getRootMenu().close(false); + } + } + } + + private class OpenOverflowRunnable implements Runnable { + private OverflowPopup mPopup; + + public OpenOverflowRunnable(OverflowPopup popup) { + mPopup = popup; + } + + public void run() { + mMenu.changeMenuMode(); + final View menuView = (View) mMenuView; + if (menuView != null && menuView.getWindowToken() != null && mPopup.tryShow()) { + mOverflowPopup = mPopup; + } + mPostedOpenRunnable = null; + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuView.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuView.java new file mode 100644 index 00000000..e090677a --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuView.java @@ -0,0 +1,572 @@ +/* + * 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.internal.view.menu; + +import android.content.Context; +import android.content.res.Configuration; +import android.graphics.Canvas; +import android.os.Build; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.view.accessibility.AccessibilityEvent; +import android.widget.LinearLayout; +import com.actionbarsherlock.internal.widget.IcsLinearLayout; + +/** + * @hide + */ +public class ActionMenuView extends IcsLinearLayout implements MenuBuilder.ItemInvoker, MenuView { + //UNUSED private static final String TAG = "ActionMenuView"; + private static final boolean IS_FROYO = Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO; + + static final int MIN_CELL_SIZE = 56; // dips + static final int GENERATED_ITEM_PADDING = 4; // dips + + private MenuBuilder mMenu; + + private boolean mReserveOverflow; + private ActionMenuPresenter mPresenter; + private boolean mFormatItems; + private int mFormatItemsWidth; + private int mMinCellSize; + private int mGeneratedItemPadding; + //UNUSED private int mMeasuredExtraWidth; + + private boolean mFirst = true; + + public ActionMenuView(Context context) { + this(context, null); + } + + public ActionMenuView(Context context, AttributeSet attrs) { + super(context, attrs); + setBaselineAligned(false); + final float density = context.getResources().getDisplayMetrics().density; + mMinCellSize = (int) (MIN_CELL_SIZE * density); + mGeneratedItemPadding = (int) (GENERATED_ITEM_PADDING * density); + } + + public void setPresenter(ActionMenuPresenter presenter) { + mPresenter = presenter; + } + + public boolean isExpandedFormat() { + return mFormatItems; + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + if (IS_FROYO) { + super.onConfigurationChanged(newConfig); + } + mPresenter.updateMenuView(false); + + if (mPresenter != null && mPresenter.isOverflowMenuShowing()) { + mPresenter.hideOverflowMenu(); + mPresenter.showOverflowMenu(); + } + } + + @Override + protected void onDraw(Canvas canvas) { + //Need to trigger a relayout since we may have been added extremely + //late in the initial rendering (e.g., when contained in a ViewPager). + //See: https://github.com/JakeWharton/ActionBarSherlock/issues/272 + if (!IS_FROYO && mFirst) { + mFirst = false; + requestLayout(); + return; + } + super.onDraw(canvas); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + // If we've been given an exact size to match, apply special formatting during layout. + final boolean wasFormatted = mFormatItems; + mFormatItems = MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY; + + if (wasFormatted != mFormatItems) { + mFormatItemsWidth = 0; // Reset this when switching modes + } + + // Special formatting can change whether items can fit as action buttons. + // Kick the menu and update presenters when this changes. + final int widthSize = MeasureSpec.getMode(widthMeasureSpec); + if (mFormatItems && mMenu != null && widthSize != mFormatItemsWidth) { + mFormatItemsWidth = widthSize; + mMenu.onItemsChanged(true); + } + + if (mFormatItems) { + onMeasureExactFormat(widthMeasureSpec, heightMeasureSpec); + } else { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + } + + private void onMeasureExactFormat(int widthMeasureSpec, int heightMeasureSpec) { + // We already know the width mode is EXACTLY if we're here. + final int heightMode = MeasureSpec.getMode(heightMeasureSpec); + int widthSize = MeasureSpec.getSize(widthMeasureSpec); + int heightSize = MeasureSpec.getSize(heightMeasureSpec); + + final int widthPadding = getPaddingLeft() + getPaddingRight(); + final int heightPadding = getPaddingTop() + getPaddingBottom(); + + widthSize -= widthPadding; + + // Divide the view into cells. + final int cellCount = widthSize / mMinCellSize; + final int cellSizeRemaining = widthSize % mMinCellSize; + + if (cellCount == 0) { + // Give up, nothing fits. + setMeasuredDimension(widthSize, 0); + return; + } + + final int cellSize = mMinCellSize + cellSizeRemaining / cellCount; + + int cellsRemaining = cellCount; + int maxChildHeight = 0; + int maxCellsUsed = 0; + int expandableItemCount = 0; + int visibleItemCount = 0; + boolean hasOverflow = false; + + // This is used as a bitfield to locate the smallest items present. Assumes childCount < 64. + long smallestItemsAt = 0; + + final int childCount = getChildCount(); + for (int i = 0; i < childCount; i++) { + final View child = getChildAt(i); + if (child.getVisibility() == GONE) continue; + + final boolean isGeneratedItem = child instanceof ActionMenuItemView; + visibleItemCount++; + + if (isGeneratedItem) { + // Reset padding for generated menu item views; it may change below + // and views are recycled. + child.setPadding(mGeneratedItemPadding, 0, mGeneratedItemPadding, 0); + } + + final LayoutParams lp = (LayoutParams) child.getLayoutParams(); + lp.expanded = false; + lp.extraPixels = 0; + lp.cellsUsed = 0; + lp.expandable = false; + lp.leftMargin = 0; + lp.rightMargin = 0; + lp.preventEdgeOffset = isGeneratedItem && ((ActionMenuItemView) child).hasText(); + + // Overflow always gets 1 cell. No more, no less. + final int cellsAvailable = lp.isOverflowButton ? 1 : cellsRemaining; + + final int cellsUsed = measureChildForCells(child, cellSize, cellsAvailable, + heightMeasureSpec, heightPadding); + + maxCellsUsed = Math.max(maxCellsUsed, cellsUsed); + if (lp.expandable) expandableItemCount++; + if (lp.isOverflowButton) hasOverflow = true; + + cellsRemaining -= cellsUsed; + maxChildHeight = Math.max(maxChildHeight, child.getMeasuredHeight()); + if (cellsUsed == 1) smallestItemsAt |= (1 << i); + } + + // When we have overflow and a single expanded (text) item, we want to try centering it + // visually in the available space even though overflow consumes some of it. + final boolean centerSingleExpandedItem = hasOverflow && visibleItemCount == 2; + + // Divide space for remaining cells if we have items that can expand. + // Try distributing whole leftover cells to smaller items first. + + boolean needsExpansion = false; + while (expandableItemCount > 0 && cellsRemaining > 0) { + int minCells = Integer.MAX_VALUE; + long minCellsAt = 0; // Bit locations are indices of relevant child views + int minCellsItemCount = 0; + for (int i = 0; i < childCount; i++) { + final View child = getChildAt(i); + final LayoutParams lp = (LayoutParams) child.getLayoutParams(); + + // Don't try to expand items that shouldn't. + if (!lp.expandable) continue; + + // Mark indices of children that can receive an extra cell. + if (lp.cellsUsed < minCells) { + minCells = lp.cellsUsed; + minCellsAt = 1 << i; + minCellsItemCount = 1; + } else if (lp.cellsUsed == minCells) { + minCellsAt |= 1 << i; + minCellsItemCount++; + } + } + + // Items that get expanded will always be in the set of smallest items when we're done. + smallestItemsAt |= minCellsAt; + + if (minCellsItemCount > cellsRemaining) break; // Couldn't expand anything evenly. Stop. + + // We have enough cells, all minimum size items will be incremented. + minCells++; + + for (int i = 0; i < childCount; i++) { + final View child = getChildAt(i); + final LayoutParams lp = (LayoutParams) child.getLayoutParams(); + if ((minCellsAt & (1 << i)) == 0) { + // If this item is already at our small item count, mark it for later. + if (lp.cellsUsed == minCells) smallestItemsAt |= 1 << i; + continue; + } + + if (centerSingleExpandedItem && lp.preventEdgeOffset && cellsRemaining == 1) { + // Add padding to this item such that it centers. + child.setPadding(mGeneratedItemPadding + cellSize, 0, mGeneratedItemPadding, 0); + } + lp.cellsUsed++; + lp.expanded = true; + cellsRemaining--; + } + + needsExpansion = true; + } + + // Divide any space left that wouldn't divide along cell boundaries + // evenly among the smallest items + + final boolean singleItem = !hasOverflow && visibleItemCount == 1; + if (cellsRemaining > 0 && smallestItemsAt != 0 && + (cellsRemaining < visibleItemCount - 1 || singleItem || maxCellsUsed > 1)) { + float expandCount = Long.bitCount(smallestItemsAt); + + if (!singleItem) { + // The items at the far edges may only expand by half in order to pin to either side. + if ((smallestItemsAt & 1) != 0) { + LayoutParams lp = (LayoutParams) getChildAt(0).getLayoutParams(); + if (!lp.preventEdgeOffset) expandCount -= 0.5f; + } + if ((smallestItemsAt & (1 << (childCount - 1))) != 0) { + LayoutParams lp = ((LayoutParams) getChildAt(childCount - 1).getLayoutParams()); + if (!lp.preventEdgeOffset) expandCount -= 0.5f; + } + } + + final int extraPixels = expandCount > 0 ? + (int) (cellsRemaining * cellSize / expandCount) : 0; + + for (int i = 0; i < childCount; i++) { + if ((smallestItemsAt & (1 << i)) == 0) continue; + + final View child = getChildAt(i); + final LayoutParams lp = (LayoutParams) child.getLayoutParams(); + if (child instanceof ActionMenuItemView) { + // If this is one of our views, expand and measure at the larger size. + lp.extraPixels = extraPixels; + lp.expanded = true; + if (i == 0 && !lp.preventEdgeOffset) { + // First item gets part of its new padding pushed out of sight. + // The last item will get this implicitly from layout. + lp.leftMargin = -extraPixels / 2; + } + needsExpansion = true; + } else if (lp.isOverflowButton) { + lp.extraPixels = extraPixels; + lp.expanded = true; + lp.rightMargin = -extraPixels / 2; + needsExpansion = true; + } else { + // If we don't know what it is, give it some margins instead + // and let it center within its space. We still want to pin + // against the edges. + if (i != 0) { + lp.leftMargin = extraPixels / 2; + } + if (i != childCount - 1) { + lp.rightMargin = extraPixels / 2; + } + } + } + + cellsRemaining = 0; + } + + // Remeasure any items that have had extra space allocated to them. + if (needsExpansion) { + int heightSpec = MeasureSpec.makeMeasureSpec(heightSize - heightPadding, heightMode); + for (int i = 0; i < childCount; i++) { + final View child = getChildAt(i); + final LayoutParams lp = (LayoutParams) child.getLayoutParams(); + + if (!lp.expanded) continue; + + final int width = lp.cellsUsed * cellSize + lp.extraPixels; + child.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), heightSpec); + } + } + + if (heightMode != MeasureSpec.EXACTLY) { + heightSize = maxChildHeight; + } + + setMeasuredDimension(widthSize, heightSize); + //UNUSED mMeasuredExtraWidth = cellsRemaining * cellSize; + } + + /** + * Measure a child view to fit within cell-based formatting. The child's width + * will be measured to a whole multiple of cellSize. + * + *

Sets the expandable and cellsUsed fields of LayoutParams. + * + * @param child Child to measure + * @param cellSize Size of one cell + * @param cellsRemaining Number of cells remaining that this view can expand to fill + * @param parentHeightMeasureSpec MeasureSpec used by the parent view + * @param parentHeightPadding Padding present in the parent view + * @return Number of cells this child was measured to occupy + */ + static int measureChildForCells(View child, int cellSize, int cellsRemaining, + int parentHeightMeasureSpec, int parentHeightPadding) { + final LayoutParams lp = (LayoutParams) child.getLayoutParams(); + + final int childHeightSize = MeasureSpec.getSize(parentHeightMeasureSpec) - + parentHeightPadding; + final int childHeightMode = MeasureSpec.getMode(parentHeightMeasureSpec); + final int childHeightSpec = MeasureSpec.makeMeasureSpec(childHeightSize, childHeightMode); + + int cellsUsed = 0; + if (cellsRemaining > 0) { + final int childWidthSpec = MeasureSpec.makeMeasureSpec( + cellSize * cellsRemaining, MeasureSpec.AT_MOST); + child.measure(childWidthSpec, childHeightSpec); + + final int measuredWidth = child.getMeasuredWidth(); + cellsUsed = measuredWidth / cellSize; + if (measuredWidth % cellSize != 0) cellsUsed++; + } + + final ActionMenuItemView itemView = child instanceof ActionMenuItemView ? + (ActionMenuItemView) child : null; + final boolean expandable = !lp.isOverflowButton && itemView != null && itemView.hasText(); + lp.expandable = expandable; + + lp.cellsUsed = cellsUsed; + final int targetWidth = cellsUsed * cellSize; + child.measure(MeasureSpec.makeMeasureSpec(targetWidth, MeasureSpec.EXACTLY), + childHeightSpec); + return cellsUsed; + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + if (!mFormatItems) { + super.onLayout(changed, left, top, right, bottom); + return; + } + + final int childCount = getChildCount(); + final int midVertical = (top + bottom) / 2; + final int dividerWidth = 0;//getDividerWidth(); + int overflowWidth = 0; + //UNUSED int nonOverflowWidth = 0; + int nonOverflowCount = 0; + int widthRemaining = right - left - getPaddingRight() - getPaddingLeft(); + boolean hasOverflow = false; + for (int i = 0; i < childCount; i++) { + final View v = getChildAt(i); + if (v.getVisibility() == GONE) { + continue; + } + + LayoutParams p = (LayoutParams) v.getLayoutParams(); + if (p.isOverflowButton) { + overflowWidth = v.getMeasuredWidth(); + if (hasDividerBeforeChildAt(i)) { + overflowWidth += dividerWidth; + } + + int height = v.getMeasuredHeight(); + int r = getWidth() - getPaddingRight() - p.rightMargin; + int l = r - overflowWidth; + int t = midVertical - (height / 2); + int b = t + height; + v.layout(l, t, r, b); + + widthRemaining -= overflowWidth; + hasOverflow = true; + } else { + final int size = v.getMeasuredWidth() + p.leftMargin + p.rightMargin; + //UNUSED nonOverflowWidth += size; + widthRemaining -= size; + //if (hasDividerBeforeChildAt(i)) { + //UNUSED nonOverflowWidth += dividerWidth; + //} + nonOverflowCount++; + } + } + + if (childCount == 1 && !hasOverflow) { + // Center a single child + final View v = getChildAt(0); + final int width = v.getMeasuredWidth(); + final int height = v.getMeasuredHeight(); + final int midHorizontal = (right - left) / 2; + final int l = midHorizontal - width / 2; + final int t = midVertical - height / 2; + v.layout(l, t, l + width, t + height); + return; + } + + final int spacerCount = nonOverflowCount - (hasOverflow ? 0 : 1); + final int spacerSize = Math.max(0, spacerCount > 0 ? widthRemaining / spacerCount : 0); + + int startLeft = getPaddingLeft(); + for (int i = 0; i < childCount; i++) { + final View v = getChildAt(i); + final LayoutParams lp = (LayoutParams) v.getLayoutParams(); + if (v.getVisibility() == GONE || lp.isOverflowButton) { + continue; + } + + startLeft += lp.leftMargin; + int width = v.getMeasuredWidth(); + int height = v.getMeasuredHeight(); + int t = midVertical - height / 2; + v.layout(startLeft, t, startLeft + width, t + height); + startLeft += width + lp.rightMargin + spacerSize; + } + } + + @Override + public void onDetachedFromWindow() { + super.onDetachedFromWindow(); + mPresenter.dismissPopupMenus(); + } + + public boolean isOverflowReserved() { + return mReserveOverflow; + } + + public void setOverflowReserved(boolean reserveOverflow) { + mReserveOverflow = reserveOverflow; + } + + @Override + protected LayoutParams generateDefaultLayoutParams() { + LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, + LayoutParams.WRAP_CONTENT); + params.gravity = Gravity.CENTER_VERTICAL; + return params; + } + + @Override + public LayoutParams generateLayoutParams(AttributeSet attrs) { + return new LayoutParams(getContext(), attrs); + } + + @Override + protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) { + if (p instanceof LayoutParams) { + LayoutParams result = new LayoutParams((LayoutParams) p); + if (result.gravity <= Gravity.NO_GRAVITY) { + result.gravity = Gravity.CENTER_VERTICAL; + } + return result; + } + return generateDefaultLayoutParams(); + } + + @Override + protected boolean checkLayoutParams(ViewGroup.LayoutParams p) { + return p != null && p instanceof LayoutParams; + } + + public LayoutParams generateOverflowButtonLayoutParams() { + LayoutParams result = generateDefaultLayoutParams(); + result.isOverflowButton = true; + return result; + } + + public boolean invokeItem(MenuItemImpl item) { + return mMenu.performItemAction(item, 0); + } + + public int getWindowAnimations() { + return 0; + } + + public void initialize(MenuBuilder menu) { + mMenu = menu; + } + + //@Override + protected boolean hasDividerBeforeChildAt(int childIndex) { + final View childBefore = getChildAt(childIndex - 1); + final View child = getChildAt(childIndex); + boolean result = false; + if (childIndex < getChildCount() && childBefore instanceof ActionMenuChildView) { + result |= ((ActionMenuChildView) childBefore).needsDividerAfter(); + } + if (childIndex > 0 && child instanceof ActionMenuChildView) { + result |= ((ActionMenuChildView) child).needsDividerBefore(); + } + return result; + } + + public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { + return false; + } + + public interface ActionMenuChildView { + public boolean needsDividerBefore(); + public boolean needsDividerAfter(); + } + + public static class LayoutParams extends LinearLayout.LayoutParams { + public boolean isOverflowButton; + public int cellsUsed; + public int extraPixels; + public boolean expandable; + public boolean preventEdgeOffset; + + public boolean expanded; + + public LayoutParams(Context c, AttributeSet attrs) { + super(c, attrs); + } + + public LayoutParams(LayoutParams other) { + super((LinearLayout.LayoutParams) other); + isOverflowButton = other.isOverflowButton; + } + + public LayoutParams(int width, int height) { + super(width, height); + isOverflowButton = false; + } + + public LayoutParams(int width, int height, boolean isOverflowButton) { + super(width, height); + this.isOverflowButton = isOverflowButton; + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/BaseMenuPresenter.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/BaseMenuPresenter.java new file mode 100644 index 00000000..6da26f2a --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/BaseMenuPresenter.java @@ -0,0 +1,231 @@ +/* + * 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.internal.view.menu; + +import java.util.ArrayList; +import android.content.Context; +import android.os.Build; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +/** + * Base class for MenuPresenters that have a consistent container view and item + * views. Behaves similarly to an AdapterView in that existing item views will + * be reused if possible when items change. + */ +public abstract class BaseMenuPresenter implements MenuPresenter { + private static final boolean IS_HONEYCOMB = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; + + protected Context mSystemContext; + protected Context mContext; + protected MenuBuilder mMenu; + protected LayoutInflater mSystemInflater; + protected LayoutInflater mInflater; + private Callback mCallback; + + private int mMenuLayoutRes; + private int mItemLayoutRes; + + protected MenuView mMenuView; + + private int mId; + + /** + * Construct a new BaseMenuPresenter. + * + * @param context Context for generating system-supplied views + * @param menuLayoutRes Layout resource ID for the menu container view + * @param itemLayoutRes Layout resource ID for a single item view + */ + public BaseMenuPresenter(Context context, int menuLayoutRes, int itemLayoutRes) { + mSystemContext = context; + mSystemInflater = LayoutInflater.from(context); + mMenuLayoutRes = menuLayoutRes; + mItemLayoutRes = itemLayoutRes; + } + + @Override + public void initForMenu(Context context, MenuBuilder menu) { + mContext = context; + mInflater = LayoutInflater.from(mContext); + mMenu = menu; + } + + @Override + public MenuView getMenuView(ViewGroup root) { + if (mMenuView == null) { + mMenuView = (MenuView) mSystemInflater.inflate(mMenuLayoutRes, root, false); + mMenuView.initialize(mMenu); + updateMenuView(true); + } + + return mMenuView; + } + + /** + * Reuses item views when it can + */ + public void updateMenuView(boolean cleared) { + final ViewGroup parent = (ViewGroup) mMenuView; + if (parent == null) return; + + int childIndex = 0; + if (mMenu != null) { + mMenu.flagActionItems(); + ArrayList visibleItems = mMenu.getVisibleItems(); + final int itemCount = visibleItems.size(); + for (int i = 0; i < itemCount; i++) { + MenuItemImpl item = visibleItems.get(i); + if (shouldIncludeItem(childIndex, item)) { + final View convertView = parent.getChildAt(childIndex); + final MenuItemImpl oldItem = convertView instanceof MenuView.ItemView ? + ((MenuView.ItemView) convertView).getItemData() : null; + final View itemView = getItemView(item, convertView, parent); + if (item != oldItem) { + // Don't let old states linger with new data. + itemView.setPressed(false); + if (IS_HONEYCOMB) itemView.jumpDrawablesToCurrentState(); + } + if (itemView != convertView) { + addItemView(itemView, childIndex); + } + childIndex++; + } + } + } + + // Remove leftover views. + while (childIndex < parent.getChildCount()) { + if (!filterLeftoverView(parent, childIndex)) { + childIndex++; + } + } + } + + /** + * Add an item view at the given index. + * + * @param itemView View to add + * @param childIndex Index within the parent to insert at + */ + protected void addItemView(View itemView, int childIndex) { + final ViewGroup currentParent = (ViewGroup) itemView.getParent(); + if (currentParent != null) { + currentParent.removeView(itemView); + } + ((ViewGroup) mMenuView).addView(itemView, childIndex); + } + + /** + * Filter the child view at index and remove it if appropriate. + * @param parent Parent to filter from + * @param childIndex Index to filter + * @return true if the child view at index was removed + */ + protected boolean filterLeftoverView(ViewGroup parent, int childIndex) { + parent.removeViewAt(childIndex); + return true; + } + + public void setCallback(Callback cb) { + mCallback = cb; + } + + /** + * Create a new item view that can be re-bound to other item data later. + * + * @return The new item view + */ + public MenuView.ItemView createItemView(ViewGroup parent) { + return (MenuView.ItemView) mSystemInflater.inflate(mItemLayoutRes, parent, false); + } + + /** + * Prepare an item view for use. See AdapterView for the basic idea at work here. + * This may require creating a new item view, but well-behaved implementations will + * re-use the view passed as convertView if present. The returned view will be populated + * with data from the item parameter. + * + * @param item Item to present + * @param convertView Existing view to reuse + * @param parent Intended parent view - use for inflation. + * @return View that presents the requested menu item + */ + public View getItemView(MenuItemImpl item, View convertView, ViewGroup parent) { + MenuView.ItemView itemView; + if (convertView instanceof MenuView.ItemView) { + itemView = (MenuView.ItemView) convertView; + } else { + itemView = createItemView(parent); + } + bindItemView(item, itemView); + return (View) itemView; + } + + /** + * Bind item data to an existing item view. + * + * @param item Item to bind + * @param itemView View to populate with item data + */ + public abstract void bindItemView(MenuItemImpl item, MenuView.ItemView itemView); + + /** + * Filter item by child index and item data. + * + * @param childIndex Indended presentation index of this item + * @param item Item to present + * @return true if this item should be included in this menu presentation; false otherwise + */ + public boolean shouldIncludeItem(int childIndex, MenuItemImpl item) { + return true; + } + + public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) { + if (mCallback != null) { + mCallback.onCloseMenu(menu, allMenusAreClosing); + } + } + + public boolean onSubMenuSelected(SubMenuBuilder menu) { + if (mCallback != null) { + return mCallback.onOpenSubMenu(menu); + } + return false; + } + + public boolean flagActionItems() { + return false; + } + + public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) { + return false; + } + + public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) { + return false; + } + + public int getId() { + return mId; + } + + public void setId(int id) { + mId = id; + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ListMenuItemView.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ListMenuItemView.java new file mode 100644 index 00000000..ac25c373 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ListMenuItemView.java @@ -0,0 +1,278 @@ +/* + * 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 com.actionbarsherlock.R; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RadioButton; +import android.widget.TextView; + +/** + * The item view for each item in the ListView-based MenuViews. + */ +public class ListMenuItemView extends LinearLayout implements MenuView.ItemView { + private MenuItemImpl mItemData; + + private ImageView mIconView; + private RadioButton mRadioButton; + private TextView mTitleView; + private CheckBox mCheckBox; + private TextView mShortcutView; + + private Drawable mBackground; + private int mTextAppearance; + private Context mTextAppearanceContext; + private boolean mPreserveIconSpacing; + + //UNUSED private int mMenuType; + + private LayoutInflater mInflater; + + private boolean mForceShowIcon; + + final Context mContext; + + public ListMenuItemView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs); + mContext = context; + + TypedArray a = + context.obtainStyledAttributes( + attrs, R.styleable.SherlockMenuView, defStyle, 0); + + mBackground = a.getDrawable(R.styleable.SherlockMenuView_itemBackground); + mTextAppearance = a.getResourceId(R.styleable. + SherlockMenuView_itemTextAppearance, -1); + mPreserveIconSpacing = a.getBoolean( + R.styleable.SherlockMenuView_preserveIconSpacing, false); + mTextAppearanceContext = context; + + a.recycle(); + } + + public ListMenuItemView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + + setBackgroundDrawable(mBackground); + + mTitleView = (TextView) findViewById(R.id.abs__title); + if (mTextAppearance != -1) { + mTitleView.setTextAppearance(mTextAppearanceContext, + mTextAppearance); + } + + mShortcutView = (TextView) findViewById(R.id.abs__shortcut); + } + + public void initialize(MenuItemImpl itemData, int menuType) { + mItemData = itemData; + //UNUSED mMenuType = menuType; + + setVisibility(itemData.isVisible() ? View.VISIBLE : View.GONE); + + setTitle(itemData.getTitleForItemView(this)); + setCheckable(itemData.isCheckable()); + setShortcut(itemData.shouldShowShortcut(), itemData.getShortcut()); + setIcon(itemData.getIcon()); + setEnabled(itemData.isEnabled()); + } + + public void setForceShowIcon(boolean forceShow) { + mPreserveIconSpacing = mForceShowIcon = forceShow; + } + + public void setTitle(CharSequence title) { + if (title != null) { + mTitleView.setText(title); + + if (mTitleView.getVisibility() != VISIBLE) mTitleView.setVisibility(VISIBLE); + } else { + if (mTitleView.getVisibility() != GONE) mTitleView.setVisibility(GONE); + } + } + + public MenuItemImpl getItemData() { + return mItemData; + } + + public void setCheckable(boolean checkable) { + + if (!checkable && mRadioButton == null && mCheckBox == null) { + return; + } + + if (mRadioButton == null) { + insertRadioButton(); + } + if (mCheckBox == null) { + insertCheckBox(); + } + + // Depending on whether its exclusive check or not, the checkbox or + // radio button will be the one in use (and the other will be otherCompoundButton) + final CompoundButton compoundButton; + final CompoundButton otherCompoundButton; + + if (mItemData.isExclusiveCheckable()) { + compoundButton = mRadioButton; + otherCompoundButton = mCheckBox; + } else { + compoundButton = mCheckBox; + otherCompoundButton = mRadioButton; + } + + if (checkable) { + compoundButton.setChecked(mItemData.isChecked()); + + final int newVisibility = checkable ? VISIBLE : GONE; + if (compoundButton.getVisibility() != newVisibility) { + compoundButton.setVisibility(newVisibility); + } + + // Make sure the other compound button isn't visible + if (otherCompoundButton.getVisibility() != GONE) { + otherCompoundButton.setVisibility(GONE); + } + } else { + mCheckBox.setVisibility(GONE); + mRadioButton.setVisibility(GONE); + } + } + + public void setChecked(boolean checked) { + CompoundButton compoundButton; + + if (mItemData.isExclusiveCheckable()) { + if (mRadioButton == null) { + insertRadioButton(); + } + compoundButton = mRadioButton; + } else { + if (mCheckBox == null) { + insertCheckBox(); + } + compoundButton = mCheckBox; + } + + compoundButton.setChecked(checked); + } + + public void setShortcut(boolean showShortcut, char shortcutKey) { + final int newVisibility = (showShortcut && mItemData.shouldShowShortcut()) + ? VISIBLE : GONE; + + if (newVisibility == VISIBLE) { + mShortcutView.setText(mItemData.getShortcutLabel()); + } + + if (mShortcutView.getVisibility() != newVisibility) { + mShortcutView.setVisibility(newVisibility); + } + } + + public void setIcon(Drawable icon) { + final boolean showIcon = mItemData.shouldShowIcon() || mForceShowIcon; + if (!showIcon && !mPreserveIconSpacing) { + return; + } + + if (mIconView == null && icon == null && !mPreserveIconSpacing) { + return; + } + + if (mIconView == null) { + insertIconView(); + } + + if (icon != null || mPreserveIconSpacing) { + mIconView.setImageDrawable(showIcon ? icon : null); + + if (mIconView.getVisibility() != VISIBLE) { + mIconView.setVisibility(VISIBLE); + } + } else { + mIconView.setVisibility(GONE); + } + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + if (mIconView != null && mPreserveIconSpacing) { + // Enforce minimum icon spacing + ViewGroup.LayoutParams lp = getLayoutParams(); + LayoutParams iconLp = (LayoutParams) mIconView.getLayoutParams(); + if (lp.height > 0 && iconLp.width <= 0) { + iconLp.width = lp.height; + } + } + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + private void insertIconView() { + LayoutInflater inflater = getInflater(); + mIconView = (ImageView) inflater.inflate(R.layout.abs__list_menu_item_icon, + this, false); + addView(mIconView, 0); + } + + private void insertRadioButton() { + LayoutInflater inflater = getInflater(); + mRadioButton = + (RadioButton) inflater.inflate(R.layout.abs__list_menu_item_radio, + this, false); + addView(mRadioButton); + } + + private void insertCheckBox() { + LayoutInflater inflater = getInflater(); + mCheckBox = + (CheckBox) inflater.inflate(R.layout.abs__list_menu_item_checkbox, + this, false); + addView(mCheckBox); + } + + public boolean prefersCondensedTitle() { + return false; + } + + public boolean showsIcon() { + return mForceShowIcon; + } + + private LayoutInflater getInflater() { + if (mInflater == null) { + mInflater = LayoutInflater.from(mContext); + } + return mInflater; + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuBuilder.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuBuilder.java new file mode 100644 index 00000000..179b8f03 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuBuilder.java @@ -0,0 +1,1335 @@ +/* + * 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 java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.os.Parcelable; +import android.util.SparseArray; +import android.view.ContextMenu.ContextMenuInfo; +import android.view.KeyCharacterMap; +import android.view.KeyEvent; +import android.view.View; + +import com.actionbarsherlock.R; +import com.actionbarsherlock.view.ActionProvider; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuItem; +import com.actionbarsherlock.view.SubMenu; + +/** + * Implementation of the {@link android.view.Menu} interface for creating a + * standard menu UI. + */ +public class MenuBuilder implements Menu { + //UNUSED private static final String TAG = "MenuBuilder"; + + private static final String PRESENTER_KEY = "android:menu:presenters"; + private static final String ACTION_VIEW_STATES_KEY = "android:menu:actionviewstates"; + private static final String EXPANDED_ACTION_VIEW_ID = "android:menu:expandedactionview"; + + private static final int[] sCategoryToOrder = new int[] { + 1, /* No category */ + 4, /* CONTAINER */ + 5, /* SYSTEM */ + 3, /* SECONDARY */ + 2, /* ALTERNATIVE */ + 0, /* SELECTED_ALTERNATIVE */ + }; + + private final Context mContext; + private final Resources mResources; + + /** + * Whether the shortcuts should be qwerty-accessible. Use isQwertyMode() + * instead of accessing this directly. + */ + private boolean mQwertyMode; + + /** + * Whether the shortcuts should be visible on menus. Use isShortcutsVisible() + * instead of accessing this directly. + */ + private boolean mShortcutsVisible; + + /** + * Callback that will receive the various menu-related events generated by + * this class. Use getCallback to get a reference to the callback. + */ + private Callback mCallback; + + /** Contains all of the items for this menu */ + private ArrayList mItems; + + /** Contains only the items that are currently visible. This will be created/refreshed from + * {@link #getVisibleItems()} */ + private ArrayList mVisibleItems; + /** + * Whether or not the items (or any one item's shown state) has changed since it was last + * fetched from {@link #getVisibleItems()} + */ + private boolean mIsVisibleItemsStale; + + /** + * Contains only the items that should appear in the Action Bar, if present. + */ + private ArrayList mActionItems; + /** + * Contains items that should NOT appear in the Action Bar, if present. + */ + private ArrayList mNonActionItems; + + /** + * Whether or not the items (or any one item's action state) has changed since it was + * last fetched. + */ + private boolean mIsActionItemsStale; + + /** + * Default value for how added items should show in the action list. + */ + private int mDefaultShowAsAction = MenuItem.SHOW_AS_ACTION_NEVER; + + /** + * Current use case is Context Menus: As Views populate the context menu, each one has + * extra information that should be passed along. This is the current menu info that + * should be set on all items added to this menu. + */ + private ContextMenuInfo mCurrentMenuInfo; + + /** Header title for menu types that have a header (context and submenus) */ + CharSequence mHeaderTitle; + /** Header icon for menu types that have a header and support icons (context) */ + Drawable mHeaderIcon; + /** Header custom view for menu types that have a header and support custom views (context) */ + View mHeaderView; + + /** + * Contains the state of the View hierarchy for all menu views when the menu + * was frozen. + */ + //UNUSED private SparseArray mFrozenViewStates; + + /** + * Prevents onItemsChanged from doing its junk, useful for batching commands + * that may individually call onItemsChanged. + */ + private boolean mPreventDispatchingItemsChanged = false; + private boolean mItemsChangedWhileDispatchPrevented = false; + + private boolean mOptionalIconsVisible = false; + + private boolean mIsClosing = false; + + private ArrayList mTempShortcutItemList = new ArrayList(); + + private CopyOnWriteArrayList> mPresenters = + new CopyOnWriteArrayList>(); + + /** + * Currently expanded menu item; must be collapsed when we clear. + */ + private MenuItemImpl mExpandedItem; + + /** + * Called by menu to notify of close and selection changes. + */ + public interface Callback { + /** + * Called when a menu item is selected. + * @param menu The menu that is the parent of the item + * @param item The menu item that is selected + * @return whether the menu item selection was handled + */ + public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item); + + /** + * Called when the mode of the menu changes (for example, from icon to expanded). + * + * @param menu the menu that has changed modes + */ + public void onMenuModeChange(MenuBuilder menu); + } + + /** + * Called by menu items to execute their associated action + */ + public interface ItemInvoker { + public boolean invokeItem(MenuItemImpl item); + } + + public MenuBuilder(Context context) { + mContext = context; + mResources = context.getResources(); + + mItems = new ArrayList(); + + mVisibleItems = new ArrayList(); + mIsVisibleItemsStale = true; + + mActionItems = new ArrayList(); + mNonActionItems = new ArrayList(); + mIsActionItemsStale = true; + + setShortcutsVisibleInner(true); + } + + public MenuBuilder setDefaultShowAsAction(int defaultShowAsAction) { + mDefaultShowAsAction = defaultShowAsAction; + return this; + } + + /** + * Add a presenter to this menu. This will only hold a WeakReference; + * you do not need to explicitly remove a presenter, but you can using + * {@link #removeMenuPresenter(MenuPresenter)}. + * + * @param presenter The presenter to add + */ + public void addMenuPresenter(MenuPresenter presenter) { + mPresenters.add(new WeakReference(presenter)); + presenter.initForMenu(mContext, this); + mIsActionItemsStale = true; + } + + /** + * Remove a presenter from this menu. That presenter will no longer + * receive notifications of updates to this menu's data. + * + * @param presenter The presenter to remove + */ + public void removeMenuPresenter(MenuPresenter presenter) { + for (WeakReference ref : mPresenters) { + final MenuPresenter item = ref.get(); + if (item == null || item == presenter) { + mPresenters.remove(ref); + } + } + } + + private void dispatchPresenterUpdate(boolean cleared) { + if (mPresenters.isEmpty()) return; + + stopDispatchingItemsChanged(); + for (WeakReference ref : mPresenters) { + final MenuPresenter presenter = ref.get(); + if (presenter == null) { + mPresenters.remove(ref); + } else { + presenter.updateMenuView(cleared); + } + } + startDispatchingItemsChanged(); + } + + private boolean dispatchSubMenuSelected(SubMenuBuilder subMenu) { + if (mPresenters.isEmpty()) return false; + + boolean result = false; + + for (WeakReference ref : mPresenters) { + final MenuPresenter presenter = ref.get(); + if (presenter == null) { + mPresenters.remove(ref); + } else if (!result) { + result = presenter.onSubMenuSelected(subMenu); + } + } + return result; + } + + private void dispatchSaveInstanceState(Bundle outState) { + if (mPresenters.isEmpty()) return; + + SparseArray presenterStates = new SparseArray(); + + for (WeakReference ref : mPresenters) { + final MenuPresenter presenter = ref.get(); + if (presenter == null) { + mPresenters.remove(ref); + } else { + final int id = presenter.getId(); + if (id > 0) { + final Parcelable state = presenter.onSaveInstanceState(); + if (state != null) { + presenterStates.put(id, state); + } + } + } + } + + outState.putSparseParcelableArray(PRESENTER_KEY, presenterStates); + } + + private void dispatchRestoreInstanceState(Bundle state) { + SparseArray presenterStates = state.getSparseParcelableArray(PRESENTER_KEY); + + if (presenterStates == null || mPresenters.isEmpty()) return; + + for (WeakReference ref : mPresenters) { + final MenuPresenter presenter = ref.get(); + if (presenter == null) { + mPresenters.remove(ref); + } else { + final int id = presenter.getId(); + if (id > 0) { + Parcelable parcel = presenterStates.get(id); + if (parcel != null) { + presenter.onRestoreInstanceState(parcel); + } + } + } + } + } + + public void savePresenterStates(Bundle outState) { + dispatchSaveInstanceState(outState); + } + + public void restorePresenterStates(Bundle state) { + dispatchRestoreInstanceState(state); + } + + public void saveActionViewStates(Bundle outStates) { + SparseArray viewStates = null; + + final int itemCount = size(); + for (int i = 0; i < itemCount; i++) { + final MenuItem item = getItem(i); + final View v = item.getActionView(); + if (v != null && v.getId() != View.NO_ID) { + if (viewStates == null) { + viewStates = new SparseArray(); + } + v.saveHierarchyState(viewStates); + if (item.isActionViewExpanded()) { + outStates.putInt(EXPANDED_ACTION_VIEW_ID, item.getItemId()); + } + } + if (item.hasSubMenu()) { + final SubMenuBuilder subMenu = (SubMenuBuilder) item.getSubMenu(); + subMenu.saveActionViewStates(outStates); + } + } + + if (viewStates != null) { + outStates.putSparseParcelableArray(getActionViewStatesKey(), viewStates); + } + } + + public void restoreActionViewStates(Bundle states) { + if (states == null) { + return; + } + + SparseArray viewStates = states.getSparseParcelableArray( + getActionViewStatesKey()); + + final int itemCount = size(); + for (int i = 0; i < itemCount; i++) { + final MenuItem item = getItem(i); + final View v = item.getActionView(); + if (v != null && v.getId() != View.NO_ID) { + v.restoreHierarchyState(viewStates); + } + if (item.hasSubMenu()) { + final SubMenuBuilder subMenu = (SubMenuBuilder) item.getSubMenu(); + subMenu.restoreActionViewStates(states); + } + } + + final int expandedId = states.getInt(EXPANDED_ACTION_VIEW_ID); + if (expandedId > 0) { + MenuItem itemToExpand = findItem(expandedId); + if (itemToExpand != null) { + itemToExpand.expandActionView(); + } + } + } + + protected String getActionViewStatesKey() { + return ACTION_VIEW_STATES_KEY; + } + + public void setCallback(Callback cb) { + mCallback = cb; + } + + /** + * Adds an item to the menu. The other add methods funnel to this. + */ + private MenuItem addInternal(int group, int id, int categoryOrder, CharSequence title) { + final int ordering = getOrdering(categoryOrder); + + final MenuItemImpl item = new MenuItemImpl(this, group, id, categoryOrder, + ordering, title, mDefaultShowAsAction); + + if (mCurrentMenuInfo != null) { + // Pass along the current menu info + item.setMenuInfo(mCurrentMenuInfo); + } + + mItems.add(findInsertIndex(mItems, ordering), item); + onItemsChanged(true); + + return item; + } + + public MenuItem add(CharSequence title) { + return addInternal(0, 0, 0, title); + } + + public MenuItem add(int titleRes) { + return addInternal(0, 0, 0, mResources.getString(titleRes)); + } + + public MenuItem add(int group, int id, int categoryOrder, CharSequence title) { + return addInternal(group, id, categoryOrder, title); + } + + public MenuItem add(int group, int id, int categoryOrder, int title) { + return addInternal(group, id, categoryOrder, mResources.getString(title)); + } + + public SubMenu addSubMenu(CharSequence title) { + return addSubMenu(0, 0, 0, title); + } + + public SubMenu addSubMenu(int titleRes) { + return addSubMenu(0, 0, 0, mResources.getString(titleRes)); + } + + public SubMenu addSubMenu(int group, int id, int categoryOrder, CharSequence title) { + final MenuItemImpl item = (MenuItemImpl) addInternal(group, id, categoryOrder, title); + final SubMenuBuilder subMenu = new SubMenuBuilder(mContext, this, item); + item.setSubMenu(subMenu); + + return subMenu; + } + + public SubMenu addSubMenu(int group, int id, int categoryOrder, int title) { + return addSubMenu(group, id, categoryOrder, mResources.getString(title)); + } + + public int addIntentOptions(int group, int id, int categoryOrder, ComponentName caller, + Intent[] specifics, Intent intent, int flags, 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(group); + } + + for (int i=0; i= 0) { + outSpecificItems[ri.specificIndex] = item; + } + } + + return N; + } + + public void removeItem(int id) { + removeItemAtInt(findItemIndex(id), true); + } + + public void removeGroup(int group) { + final int i = findGroupIndex(group); + + if (i >= 0) { + final int maxRemovable = mItems.size() - i; + int numRemoved = 0; + while ((numRemoved++ < maxRemovable) && (mItems.get(i).getGroupId() == group)) { + // Don't force update for each one, this method will do it at the end + removeItemAtInt(i, false); + } + + // Notify menu views + onItemsChanged(true); + } + } + + /** + * Remove the item at the given index and optionally forces menu views to + * update. + * + * @param index The index of the item to be removed. If this index is + * invalid an exception is thrown. + * @param updateChildrenOnMenuViews Whether to force update on menu views. + * Please make sure you eventually call this after your batch of + * removals. + */ + private void removeItemAtInt(int index, boolean updateChildrenOnMenuViews) { + if ((index < 0) || (index >= mItems.size())) return; + + mItems.remove(index); + + if (updateChildrenOnMenuViews) onItemsChanged(true); + } + + public void removeItemAt(int index) { + removeItemAtInt(index, true); + } + + public void clearAll() { + mPreventDispatchingItemsChanged = true; + clear(); + clearHeader(); + mPreventDispatchingItemsChanged = false; + mItemsChangedWhileDispatchPrevented = false; + onItemsChanged(true); + } + + public void clear() { + if (mExpandedItem != null) { + collapseItemActionView(mExpandedItem); + } + mItems.clear(); + + onItemsChanged(true); + } + + 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); + } + } + } + + public void setGroupCheckable(int group, boolean checkable, boolean exclusive) { + final int N = mItems.size(); + + for (int i = 0; i < N; i++) { + MenuItemImpl item = mItems.get(i); + if (item.getGroupId() == group) { + item.setExclusiveCheckable(exclusive); + item.setCheckable(checkable); + } + } + } + + public void setGroupVisible(int group, boolean visible) { + final int N = mItems.size(); + + // We handle the notification of items being changed ourselves, so we use setVisibleInt rather + // than setVisible and at the end notify of items being changed + + boolean changedAtLeastOneItem = false; + for (int i = 0; i < N; i++) { + MenuItemImpl item = mItems.get(i); + if (item.getGroupId() == group) { + if (item.setVisibleInt(visible)) changedAtLeastOneItem = true; + } + } + + if (changedAtLeastOneItem) onItemsChanged(true); + } + + public void setGroupEnabled(int group, boolean enabled) { + final int N = mItems.size(); + + for (int i = 0; i < N; i++) { + MenuItemImpl item = mItems.get(i); + if (item.getGroupId() == group) { + item.setEnabled(enabled); + } + } + } + + public boolean hasVisibleItems() { + final int size = size(); + + for (int i = 0; i < size; i++) { + MenuItemImpl item = mItems.get(i); + if (item.isVisible()) { + return true; + } + } + + return false; + } + + public MenuItem findItem(int id) { + final int size = size(); + for (int i = 0; i < size; i++) { + MenuItemImpl item = mItems.get(i); + if (item.getItemId() == id) { + return item; + } else if (item.hasSubMenu()) { + MenuItem possibleItem = item.getSubMenu().findItem(id); + + if (possibleItem != null) { + return possibleItem; + } + } + } + + return null; + } + + public int findItemIndex(int id) { + final int size = size(); + + for (int i = 0; i < size; i++) { + MenuItemImpl item = mItems.get(i); + if (item.getItemId() == id) { + return i; + } + } + + return -1; + } + + public int findGroupIndex(int group) { + return findGroupIndex(group, 0); + } + + public int findGroupIndex(int group, int start) { + final int size = size(); + + if (start < 0) { + start = 0; + } + + for (int i = start; i < size; i++) { + final MenuItemImpl item = mItems.get(i); + + if (item.getGroupId() == group) { + return i; + } + } + + return -1; + } + + public int size() { + return mItems.size(); + } + + /** {@inheritDoc} */ + public MenuItem getItem(int index) { + return mItems.get(index); + } + + public boolean isShortcutKey(int keyCode, KeyEvent event) { + return findItemWithShortcutForKey(keyCode, event) != null; + } + + public void setQwertyMode(boolean isQwerty) { + mQwertyMode = isQwerty; + + onItemsChanged(false); + } + + /** + * 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 >= sCategoryToOrder.length) { + throw new IllegalArgumentException("order does not contain a valid category."); + } + + return (sCategoryToOrder[index] << CATEGORY_SHIFT) | (categoryOrder & USER_MASK); + } + + /** + * @return whether the menu shortcuts are in qwerty mode or not + */ + boolean isQwertyMode() { + return mQwertyMode; + } + + /** + * Sets whether the shortcuts should be visible on menus. Devices without hardware + * key input will never make shortcuts visible even if this method is passed 'true'. + * + * @param shortcutsVisible Whether shortcuts should be visible (if true and a + * menu item does not have a shortcut defined, that item will + * still NOT show a shortcut) + */ + public void setShortcutsVisible(boolean shortcutsVisible) { + if (mShortcutsVisible == shortcutsVisible) return; + + setShortcutsVisibleInner(shortcutsVisible); + onItemsChanged(false); + } + + private void setShortcutsVisibleInner(boolean shortcutsVisible) { + mShortcutsVisible = shortcutsVisible + && mResources.getConfiguration().keyboard != Configuration.KEYBOARD_NOKEYS + && mResources.getBoolean( + R.bool.abs__config_showMenuShortcutsWhenKeyboardPresent); + } + + /** + * @return Whether shortcuts should be visible on menus. + */ + public boolean isShortcutsVisible() { + return mShortcutsVisible; + } + + Resources getResources() { + return mResources; + } + + public Context getContext() { + return mContext; + } + + boolean dispatchMenuItemSelected(MenuBuilder menu, MenuItem item) { + return mCallback != null && mCallback.onMenuItemSelected(menu, item); + } + + /** + * Dispatch a mode change event to this menu's callback. + */ + public void changeMenuMode() { + if (mCallback != null) { + mCallback.onMenuModeChange(this); + } + } + + 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; + } + + public boolean performShortcut(int keyCode, KeyEvent event, int flags) { + final MenuItemImpl item = findItemWithShortcutForKey(keyCode, event); + + boolean handled = false; + + if (item != null) { + handled = performItemAction(item, flags); + } + + if ((flags & FLAG_ALWAYS_PERFORM_CLOSE) != 0) { + close(true); + } + + return handled; + } + + /* + * This function will return all the menu and sub-menu items that can + * be directly (the shortcut directly corresponds) and indirectly + * (the ALT-enabled char corresponds to the shortcut) associated + * with the keyCode. + */ + @SuppressWarnings("deprecation") + void findItemsWithShortcutForKey(List items, int keyCode, KeyEvent event) { + final boolean qwerty = isQwertyMode(); + final int metaState = event.getMetaState(); + final KeyCharacterMap.KeyData possibleChars = new KeyCharacterMap.KeyData(); + // Get the chars associated with the keyCode (i.e using any chording combo) + final boolean isKeyCodeMapped = event.getKeyData(possibleChars); + // The delete key is not mapped to '\b' so we treat it specially + if (!isKeyCodeMapped && (keyCode != KeyEvent.KEYCODE_DEL)) { + return; + } + + // Look for an item whose shortcut is this key. + final int N = mItems.size(); + for (int i = 0; i < N; i++) { + MenuItemImpl item = mItems.get(i); + if (item.hasSubMenu()) { + ((MenuBuilder)item.getSubMenu()).findItemsWithShortcutForKey(items, keyCode, event); + } + final char shortcutChar = qwerty ? item.getAlphabeticShortcut() : item.getNumericShortcut(); + if (((metaState & (KeyEvent.META_SHIFT_ON | KeyEvent.META_SYM_ON)) == 0) && + (shortcutChar != 0) && + (shortcutChar == possibleChars.meta[0] + || shortcutChar == possibleChars.meta[2] + || (qwerty && shortcutChar == '\b' && + keyCode == KeyEvent.KEYCODE_DEL)) && + item.isEnabled()) { + items.add(item); + } + } + } + + /* + * We want to return the menu item associated with the key, but if there is no + * ambiguity (i.e. there is only one menu item corresponding to the key) we want + * to return it even if it's not an exact match; this allow the user to + * _not_ use the ALT key for example, making the use of shortcuts slightly more + * user-friendly. An example is on the G1, '!' and '1' are on the same key, and + * in Gmail, Menu+1 will trigger Menu+! (the actual shortcut). + * + * On the other hand, if two (or more) shortcuts corresponds to the same key, + * we have to only return the exact match. + */ + @SuppressWarnings("deprecation") + MenuItemImpl findItemWithShortcutForKey(int keyCode, KeyEvent event) { + // Get all items that can be associated directly or indirectly with the keyCode + ArrayList items = mTempShortcutItemList; + items.clear(); + findItemsWithShortcutForKey(items, keyCode, event); + + if (items.isEmpty()) { + return null; + } + + final int metaState = event.getMetaState(); + final KeyCharacterMap.KeyData possibleChars = new KeyCharacterMap.KeyData(); + // Get the chars associated with the keyCode (i.e using any chording combo) + event.getKeyData(possibleChars); + + // If we have only one element, we can safely returns it + final int size = items.size(); + if (size == 1) { + return items.get(0); + } + + final boolean qwerty = isQwertyMode(); + // If we found more than one item associated with the key, + // we have to return the exact match + for (int i = 0; i < size; i++) { + final MenuItemImpl item = items.get(i); + final char shortcutChar = qwerty ? item.getAlphabeticShortcut() : + item.getNumericShortcut(); + if ((shortcutChar == possibleChars.meta[0] && + (metaState & KeyEvent.META_ALT_ON) == 0) + || (shortcutChar == possibleChars.meta[2] && + (metaState & KeyEvent.META_ALT_ON) != 0) + || (qwerty && shortcutChar == '\b' && + keyCode == KeyEvent.KEYCODE_DEL)) { + return item; + } + } + return null; + } + + public boolean performIdentifierAction(int id, int flags) { + // Look for an item whose identifier is the id. + return performItemAction(findItem(id), flags); + } + + public boolean performItemAction(MenuItem item, int flags) { + MenuItemImpl itemImpl = (MenuItemImpl) item; + + if (itemImpl == null || !itemImpl.isEnabled()) { + return false; + } + + boolean invoked = itemImpl.invoke(); + + if (itemImpl.hasCollapsibleActionView()) { + invoked |= itemImpl.expandActionView(); + if (invoked) close(true); + } else if (item.hasSubMenu()) { + close(false); + + final SubMenuBuilder subMenu = (SubMenuBuilder) item.getSubMenu(); + final ActionProvider provider = item.getActionProvider(); + if (provider != null && provider.hasSubMenu()) { + provider.onPrepareSubMenu(subMenu); + } + invoked |= dispatchSubMenuSelected(subMenu); + if (!invoked) close(true); + } else { + if ((flags & FLAG_PERFORM_NO_CLOSE) == 0) { + close(true); + } + } + + return invoked; + } + + /** + * Closes the visible menu. + * + * @param allMenusAreClosing Whether the menus are completely closing (true), + * or whether there is another menu coming in this menu's place + * (false). For example, if the menu is closing because a + * sub menu is about to be shown, allMenusAreClosing + * is false. + */ + final void close(boolean allMenusAreClosing) { + if (mIsClosing) return; + + mIsClosing = true; + for (WeakReference ref : mPresenters) { + final MenuPresenter presenter = ref.get(); + if (presenter == null) { + mPresenters.remove(ref); + } else { + presenter.onCloseMenu(this, allMenusAreClosing); + } + } + mIsClosing = false; + } + + /** {@inheritDoc} */ + public void close() { + close(true); + } + + /** + * Called when an item is added or removed. + * + * @param structureChanged true if the menu structure changed, + * false if only item properties changed. + * (Visibility is a structural property since it affects layout.) + */ + void onItemsChanged(boolean structureChanged) { + if (!mPreventDispatchingItemsChanged) { + if (structureChanged) { + mIsVisibleItemsStale = true; + mIsActionItemsStale = true; + } + + dispatchPresenterUpdate(structureChanged); + } else { + mItemsChangedWhileDispatchPrevented = true; + } + } + + /** + * Stop dispatching item changed events to presenters until + * {@link #startDispatchingItemsChanged()} is called. Useful when + * many menu operations are going to be performed as a batch. + */ + public void stopDispatchingItemsChanged() { + if (!mPreventDispatchingItemsChanged) { + mPreventDispatchingItemsChanged = true; + mItemsChangedWhileDispatchPrevented = false; + } + } + + public void startDispatchingItemsChanged() { + mPreventDispatchingItemsChanged = false; + + if (mItemsChangedWhileDispatchPrevented) { + mItemsChangedWhileDispatchPrevented = false; + onItemsChanged(true); + } + } + + /** + * Called by {@link MenuItemImpl} when its visible flag is changed. + * @param item The item that has gone through a visibility change. + */ + void onItemVisibleChanged(MenuItemImpl item) { + // Notify of items being changed + mIsVisibleItemsStale = true; + onItemsChanged(true); + } + + /** + * Called by {@link MenuItemImpl} when its action request status is changed. + * @param item The item that has gone through a change in action request status. + */ + void onItemActionRequestChanged(MenuItemImpl item) { + // Notify of items being changed + mIsActionItemsStale = true; + onItemsChanged(true); + } + + ArrayList getVisibleItems() { + if (!mIsVisibleItemsStale) return mVisibleItems; + + // Refresh the visible items + mVisibleItems.clear(); + + final int itemsSize = mItems.size(); + MenuItemImpl item; + for (int i = 0; i < itemsSize; i++) { + item = mItems.get(i); + if (item.isVisible()) mVisibleItems.add(item); + } + + mIsVisibleItemsStale = false; + mIsActionItemsStale = true; + + return mVisibleItems; + } + + /** + * This method determines which menu items get to be 'action items' that will appear + * in an action bar and which items should be 'overflow items' in a secondary menu. + * The rules are as follows: + * + *

Items are considered for inclusion in the order specified within the menu. + * There is a limit of mMaxActionItems as a total count, optionally including the overflow + * menu button itself. This is a soft limit; if an item shares a group ID with an item + * previously included as an action item, the new item will stay with its group and become + * an action item itself even if it breaks the max item count limit. This is done to + * limit the conceptual complexity of the items presented within an action bar. Only a few + * unrelated concepts should be presented to the user in this space, and groups are treated + * as a single concept. + * + *

There is also a hard limit of consumed measurable space: mActionWidthLimit. This + * limit may be broken by a single item that exceeds the remaining space, but no further + * items may be added. If an item that is part of a group cannot fit within the remaining + * measured width, the entire group will be demoted to overflow. This is done to ensure room + * for navigation and other affordances in the action bar as well as reduce general UI clutter. + * + *

The space freed by demoting a full group cannot be consumed by future menu items. + * Once items begin to overflow, all future items become overflow items as well. This is + * to avoid inadvertent reordering that may break the app's intended design. + */ + public void flagActionItems() { + if (!mIsActionItemsStale) { + return; + } + + // Presenters flag action items as needed. + boolean flagged = false; + for (WeakReference ref : mPresenters) { + final MenuPresenter presenter = ref.get(); + if (presenter == null) { + mPresenters.remove(ref); + } else { + flagged |= presenter.flagActionItems(); + } + } + + if (flagged) { + mActionItems.clear(); + mNonActionItems.clear(); + ArrayList visibleItems = getVisibleItems(); + final int itemsSize = visibleItems.size(); + for (int i = 0; i < itemsSize; i++) { + MenuItemImpl item = visibleItems.get(i); + if (item.isActionButton()) { + mActionItems.add(item); + } else { + mNonActionItems.add(item); + } + } + } else { + // Nobody flagged anything, everything is a non-action item. + // (This happens during a first pass with no action-item presenters.) + mActionItems.clear(); + mNonActionItems.clear(); + mNonActionItems.addAll(getVisibleItems()); + } + mIsActionItemsStale = false; + } + + ArrayList getActionItems() { + flagActionItems(); + return mActionItems; + } + + ArrayList getNonActionItems() { + flagActionItems(); + return mNonActionItems; + } + + public void clearHeader() { + mHeaderIcon = null; + mHeaderTitle = null; + mHeaderView = null; + + onItemsChanged(false); + } + + private void setHeaderInternal(final int titleRes, final CharSequence title, final int iconRes, + final Drawable icon, final View view) { + final Resources r = getResources(); + + if (view != null) { + mHeaderView = view; + + // If using a custom view, then the title and icon aren't used + mHeaderTitle = null; + mHeaderIcon = null; + } else { + if (titleRes > 0) { + mHeaderTitle = r.getText(titleRes); + } else if (title != null) { + mHeaderTitle = title; + } + + if (iconRes > 0) { + mHeaderIcon = r.getDrawable(iconRes); + } else if (icon != null) { + mHeaderIcon = icon; + } + + // If using the title or icon, then a custom view isn't used + mHeaderView = null; + } + + // Notify of change + onItemsChanged(false); + } + + /** + * Sets the header's title. This replaces the header view. Called by the + * builder-style methods of subclasses. + * + * @param title The new title. + * @return This MenuBuilder so additional setters can be called. + */ + protected MenuBuilder setHeaderTitleInt(CharSequence title) { + setHeaderInternal(0, title, 0, null, null); + return this; + } + + /** + * Sets the header's title. This replaces the header view. Called by the + * builder-style methods of subclasses. + * + * @param titleRes The new title (as a resource ID). + * @return This MenuBuilder so additional setters can be called. + */ + protected MenuBuilder setHeaderTitleInt(int titleRes) { + setHeaderInternal(titleRes, null, 0, null, null); + return this; + } + + /** + * Sets the header's icon. This replaces the header view. Called by the + * builder-style methods of subclasses. + * + * @param icon The new icon. + * @return This MenuBuilder so additional setters can be called. + */ + protected MenuBuilder setHeaderIconInt(Drawable icon) { + setHeaderInternal(0, null, 0, icon, null); + return this; + } + + /** + * Sets the header's icon. This replaces the header view. Called by the + * builder-style methods of subclasses. + * + * @param iconRes The new icon (as a resource ID). + * @return This MenuBuilder so additional setters can be called. + */ + protected MenuBuilder setHeaderIconInt(int iconRes) { + setHeaderInternal(0, null, iconRes, null, null); + return this; + } + + /** + * Sets the header's view. This replaces the title and icon. Called by the + * builder-style methods of subclasses. + * + * @param view The new view. + * @return This MenuBuilder so additional setters can be called. + */ + protected MenuBuilder setHeaderViewInt(View view) { + setHeaderInternal(0, null, 0, null, view); + return this; + } + + public CharSequence getHeaderTitle() { + return mHeaderTitle; + } + + public Drawable getHeaderIcon() { + return mHeaderIcon; + } + + public View getHeaderView() { + return mHeaderView; + } + + /** + * Gets the root menu (if this is a submenu, find its root menu). + * @return The root menu. + */ + public MenuBuilder getRootMenu() { + return this; + } + + /** + * Sets the current menu info that is set on all items added to this menu + * (until this is called again with different menu info, in which case that + * one will be added to all subsequent item additions). + * + * @param menuInfo The extra menu information to add. + */ + public void setCurrentMenuInfo(ContextMenuInfo menuInfo) { + mCurrentMenuInfo = menuInfo; + } + + void setOptionalIconsVisible(boolean visible) { + mOptionalIconsVisible = visible; + } + + boolean getOptionalIconsVisible() { + return mOptionalIconsVisible; + } + + public boolean expandItemActionView(MenuItemImpl item) { + if (mPresenters.isEmpty()) return false; + + boolean expanded = false; + + stopDispatchingItemsChanged(); + for (WeakReference ref : mPresenters) { + final MenuPresenter presenter = ref.get(); + if (presenter == null) { + mPresenters.remove(ref); + } else if ((expanded = presenter.expandItemActionView(this, item))) { + break; + } + } + startDispatchingItemsChanged(); + + if (expanded) { + mExpandedItem = item; + } + return expanded; + } + + public boolean collapseItemActionView(MenuItemImpl item) { + if (mPresenters.isEmpty() || mExpandedItem != item) return false; + + boolean collapsed = false; + + stopDispatchingItemsChanged(); + for (WeakReference ref : mPresenters) { + final MenuPresenter presenter = ref.get(); + if (presenter == null) { + mPresenters.remove(ref); + } else if ((collapsed = presenter.collapseItemActionView(this, item))) { + break; + } + } + startDispatchingItemsChanged(); + + if (collapsed) { + mExpandedItem = null; + } + return collapsed; + } + + public MenuItemImpl getExpandedItem() { + return mExpandedItem; + } + + public boolean bindNativeOverflow(android.view.Menu menu, android.view.MenuItem.OnMenuItemClickListener listener, HashMap map) { + final List nonActionItems = getNonActionItems(); + if (nonActionItems == null || nonActionItems.size() == 0) { + return false; + } + + boolean visible = false; + menu.clear(); + for (MenuItemImpl nonActionItem : nonActionItems) { + if (!nonActionItem.isVisible()) { + continue; + } + visible = true; + + android.view.MenuItem nativeItem; + if (nonActionItem.hasSubMenu()) { + android.view.SubMenu nativeSub = menu.addSubMenu(nonActionItem.getGroupId(), nonActionItem.getItemId(), + nonActionItem.getOrder(), nonActionItem.getTitle()); + + SubMenuBuilder subMenu = (SubMenuBuilder)nonActionItem.getSubMenu(); + for (MenuItemImpl subItem : subMenu.getVisibleItems()) { + android.view.MenuItem nativeSubItem = nativeSub.add(subItem.getGroupId(), subItem.getItemId(), + subItem.getOrder(), subItem.getTitle()); + + nativeSubItem.setIcon(subItem.getIcon()); + nativeSubItem.setOnMenuItemClickListener(listener); + nativeSubItem.setEnabled(subItem.isEnabled()); + nativeSubItem.setIntent(subItem.getIntent()); + nativeSubItem.setNumericShortcut(subItem.getNumericShortcut()); + nativeSubItem.setAlphabeticShortcut(subItem.getAlphabeticShortcut()); + nativeSubItem.setTitleCondensed(subItem.getTitleCondensed()); + nativeSubItem.setCheckable(subItem.isCheckable()); + nativeSubItem.setChecked(subItem.isChecked()); + + if (subItem.isExclusiveCheckable()) { + nativeSub.setGroupCheckable(subItem.getGroupId(), true, true); + } + + map.put(nativeSubItem, subItem); + } + + nativeItem = nativeSub.getItem(); + } else { + nativeItem = menu.add(nonActionItem.getGroupId(), nonActionItem.getItemId(), + nonActionItem.getOrder(), nonActionItem.getTitle()); + } + nativeItem.setIcon(nonActionItem.getIcon()); + nativeItem.setOnMenuItemClickListener(listener); + nativeItem.setEnabled(nonActionItem.isEnabled()); + nativeItem.setIntent(nonActionItem.getIntent()); + nativeItem.setNumericShortcut(nonActionItem.getNumericShortcut()); + nativeItem.setAlphabeticShortcut(nonActionItem.getAlphabeticShortcut()); + nativeItem.setTitleCondensed(nonActionItem.getTitleCondensed()); + nativeItem.setCheckable(nonActionItem.isCheckable()); + nativeItem.setChecked(nonActionItem.isChecked()); + + if (nonActionItem.isExclusiveCheckable()) { + menu.setGroupCheckable(nonActionItem.getGroupId(), true, true); + } + + map.put(nativeItem, nonActionItem); + } + return visible; + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuItemImpl.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuItemImpl.java new file mode 100644 index 00000000..f5359fb4 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuItemImpl.java @@ -0,0 +1,647 @@ +/* + * 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.content.ActivityNotFoundException; +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.util.Log; +import android.view.ContextMenu.ContextMenuInfo; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewDebug; +import android.widget.LinearLayout; + +import com.actionbarsherlock.view.ActionProvider; +import com.actionbarsherlock.view.MenuItem; +import com.actionbarsherlock.view.SubMenu; + +/** + * @hide + */ +public final class MenuItemImpl implements MenuItem { + private static final String TAG = "MenuItemImpl"; + + private static final int SHOW_AS_ACTION_MASK = SHOW_AS_ACTION_NEVER | + SHOW_AS_ACTION_IF_ROOM | + SHOW_AS_ACTION_ALWAYS; + + private final int mId; + private final int mGroup; + private final int mCategoryOrder; + private final int mOrdering; + private CharSequence mTitle; + private CharSequence mTitleCondensed; + private Intent mIntent; + private char mShortcutNumericChar; + private char mShortcutAlphabeticChar; + + /** The icon's drawable which is only created as needed */ + private Drawable mIconDrawable; + /** + * The icon's resource ID which is used to get the Drawable when it is + * needed (if the Drawable isn't already obtained--only one of the two is + * needed). + */ + private int mIconResId = NO_ICON; + + /** The menu to which this item belongs */ + private MenuBuilder mMenu; + /** If this item should launch a sub menu, this is the sub menu to launch */ + private SubMenuBuilder mSubMenu; + + private Runnable mItemCallback; + private MenuItem.OnMenuItemClickListener mClickListener; + + private int mFlags = ENABLED; + private static final int CHECKABLE = 0x00000001; + private static final int CHECKED = 0x00000002; + private static final int EXCLUSIVE = 0x00000004; + private static final int HIDDEN = 0x00000008; + private static final int ENABLED = 0x00000010; + private static final int IS_ACTION = 0x00000020; + + private int mShowAsAction = SHOW_AS_ACTION_NEVER; + + private View mActionView; + private ActionProvider mActionProvider; + private OnActionExpandListener mOnActionExpandListener; + private boolean mIsActionViewExpanded = false; + + /** Used for the icon resource ID if this item does not have an icon */ + static final int NO_ICON = 0; + + /** + * Current use case is for context menu: Extra information linked to the + * View that added this item to the context menu. + */ + private ContextMenuInfo mMenuInfo; + + private static String sPrependShortcutLabel; + private static String sEnterShortcutLabel; + private static String sDeleteShortcutLabel; + private static String sSpaceShortcutLabel; + + + /** + * Instantiates this menu item. + * + * @param menu + * @param group Item ordering grouping control. The item will be added after + * all other items whose order is <= this number, and before any + * that are larger than it. This can also be used to define + * groups of items for batch state changes. Normally use 0. + * @param id Unique item ID. Use 0 if you do not need a unique ID. + * @param categoryOrder The ordering for this item. + * @param title The text to display for the item. + */ + MenuItemImpl(MenuBuilder menu, int group, int id, int categoryOrder, int ordering, + CharSequence title, int showAsAction) { + + /* TODO if (sPrependShortcutLabel == null) { + // This is instantiated from the UI thread, so no chance of sync issues + sPrependShortcutLabel = menu.getContext().getResources().getString( + com.android.internal.R.string.prepend_shortcut_label); + sEnterShortcutLabel = menu.getContext().getResources().getString( + com.android.internal.R.string.menu_enter_shortcut_label); + sDeleteShortcutLabel = menu.getContext().getResources().getString( + com.android.internal.R.string.menu_delete_shortcut_label); + sSpaceShortcutLabel = menu.getContext().getResources().getString( + com.android.internal.R.string.menu_space_shortcut_label); + }*/ + + mMenu = menu; + mId = id; + mGroup = group; + mCategoryOrder = categoryOrder; + mOrdering = ordering; + mTitle = title; + mShowAsAction = showAsAction; + } + + /** + * Invokes the item by calling various listeners or callbacks. + * + * @return true if the invocation was handled, false otherwise + */ + public boolean invoke() { + if (mClickListener != null && + mClickListener.onMenuItemClick(this)) { + return true; + } + + if (mMenu.dispatchMenuItemSelected(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); + } + } + + if (mActionProvider != null && mActionProvider.onPerformDefaultAction()) { + return true; + } + + return false; + } + + public boolean isEnabled() { + return (mFlags & ENABLED) != 0; + } + + public MenuItem setEnabled(boolean enabled) { + if (enabled) { + mFlags |= ENABLED; + } else { + mFlags &= ~ENABLED; + } + + mMenu.onItemsChanged(false); + + return this; + } + + public int getGroupId() { + return mGroup; + } + + @ViewDebug.CapturedViewProperty + public int getItemId() { + return mId; + } + + public int getOrder() { + return mCategoryOrder; + } + + public int getOrdering() { + return mOrdering; + } + + public Intent getIntent() { + return mIntent; + } + + public MenuItem setIntent(Intent intent) { + mIntent = intent; + return this; + } + + Runnable getCallback() { + return mItemCallback; + } + + public MenuItem setCallback(Runnable callback) { + mItemCallback = callback; + return this; + } + + public char getAlphabeticShortcut() { + return mShortcutAlphabeticChar; + } + + public MenuItem setAlphabeticShortcut(char alphaChar) { + if (mShortcutAlphabeticChar == alphaChar) return this; + + mShortcutAlphabeticChar = Character.toLowerCase(alphaChar); + + mMenu.onItemsChanged(false); + + return this; + } + + public char getNumericShortcut() { + return mShortcutNumericChar; + } + + public MenuItem setNumericShortcut(char numericChar) { + if (mShortcutNumericChar == numericChar) return this; + + mShortcutNumericChar = numericChar; + + mMenu.onItemsChanged(false); + + return this; + } + + public MenuItem setShortcut(char numericChar, char alphaChar) { + mShortcutNumericChar = numericChar; + mShortcutAlphabeticChar = Character.toLowerCase(alphaChar); + + mMenu.onItemsChanged(false); + + return this; + } + + /** + * @return The active shortcut (based on QWERTY-mode of the menu). + */ + char getShortcut() { + return (mMenu.isQwertyMode() ? mShortcutAlphabeticChar : mShortcutNumericChar); + } + + /** + * @return The label to show for the shortcut. This includes the chording + * key (for example 'Menu+a'). Also, any non-human readable + * characters should be human readable (for example 'Menu+enter'). + */ + String getShortcutLabel() { + + char shortcut = getShortcut(); + if (shortcut == 0) { + return ""; + } + + StringBuilder sb = new StringBuilder(sPrependShortcutLabel); + switch (shortcut) { + + case '\n': + sb.append(sEnterShortcutLabel); + break; + + case '\b': + sb.append(sDeleteShortcutLabel); + break; + + case ' ': + sb.append(sSpaceShortcutLabel); + break; + + default: + sb.append(shortcut); + break; + } + + return sb.toString(); + } + + /** + * @return Whether this menu item should be showing shortcuts (depends on + * whether the menu should show shortcuts and whether this item has + * a shortcut defined) + */ + boolean shouldShowShortcut() { + // Show shortcuts if the menu is supposed to show shortcuts AND this item has a shortcut + return mMenu.isShortcutsVisible() && (getShortcut() != 0); + } + + public SubMenu getSubMenu() { + return mSubMenu; + } + + public boolean hasSubMenu() { + return mSubMenu != null; + } + + void setSubMenu(SubMenuBuilder subMenu) { + mSubMenu = subMenu; + + subMenu.setHeaderTitle(getTitle()); + } + + @ViewDebug.CapturedViewProperty + public CharSequence getTitle() { + return mTitle; + } + + /** + * Gets the title for a particular {@link ItemView} + * + * @param itemView The ItemView that is receiving the title + * @return Either the title or condensed title based on what the ItemView + * prefers + */ + CharSequence getTitleForItemView(MenuView.ItemView itemView) { + return ((itemView != null) && itemView.prefersCondensedTitle()) + ? getTitleCondensed() + : getTitle(); + } + + public MenuItem setTitle(CharSequence title) { + mTitle = title; + + mMenu.onItemsChanged(false); + + if (mSubMenu != null) { + mSubMenu.setHeaderTitle(title); + } + + return this; + } + + public MenuItem setTitle(int title) { + return setTitle(mMenu.getContext().getString(title)); + } + + public CharSequence getTitleCondensed() { + return mTitleCondensed != null ? mTitleCondensed : mTitle; + } + + public MenuItem setTitleCondensed(CharSequence title) { + mTitleCondensed = title; + + // Could use getTitle() in the loop below, but just cache what it would do here + if (title == null) { + title = mTitle; + } + + mMenu.onItemsChanged(false); + + return this; + } + + public Drawable getIcon() { + if (mIconDrawable != null) { + return mIconDrawable; + } + + if (mIconResId != NO_ICON) { + return mMenu.getResources().getDrawable(mIconResId); + } + + return null; + } + + public MenuItem setIcon(Drawable icon) { + mIconResId = NO_ICON; + mIconDrawable = icon; + mMenu.onItemsChanged(false); + + return this; + } + + public MenuItem setIcon(int iconResId) { + mIconDrawable = null; + mIconResId = iconResId; + + // If we have a view, we need to push the Drawable to them + mMenu.onItemsChanged(false); + + return this; + } + + public boolean isCheckable() { + return (mFlags & CHECKABLE) == CHECKABLE; + } + + public MenuItem setCheckable(boolean checkable) { + final int oldFlags = mFlags; + mFlags = (mFlags & ~CHECKABLE) | (checkable ? CHECKABLE : 0); + if (oldFlags != mFlags) { + mMenu.onItemsChanged(false); + } + + return this; + } + + public void setExclusiveCheckable(boolean exclusive) { + mFlags = (mFlags & ~EXCLUSIVE) | (exclusive ? EXCLUSIVE : 0); + } + + public boolean isExclusiveCheckable() { + return (mFlags & EXCLUSIVE) != 0; + } + + public boolean isChecked() { + return (mFlags & CHECKED) == CHECKED; + } + + public MenuItem setChecked(boolean checked) { + if ((mFlags & EXCLUSIVE) != 0) { + // 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 int oldFlags = mFlags; + mFlags = (mFlags & ~CHECKED) | (checked ? CHECKED : 0); + if (oldFlags != mFlags) { + mMenu.onItemsChanged(false); + } + } + + public boolean isVisible() { + return (mFlags & HIDDEN) == 0; + } + + /** + * Changes the visibility of the item. This method DOES NOT notify the + * parent menu of a change in this item, so this should only be called from + * methods that will eventually trigger this change. If unsure, use {@link #setVisible(boolean)} + * instead. + * + * @param shown Whether to show (true) or hide (false). + * @return Whether the item's shown state was changed + */ + boolean setVisibleInt(boolean shown) { + final int oldFlags = mFlags; + mFlags = (mFlags & ~HIDDEN) | (shown ? 0 : HIDDEN); + return oldFlags != mFlags; + } + + public MenuItem setVisible(boolean shown) { + // Try to set the shown state to the given state. If the shown state was changed + // (i.e. the previous state isn't the same as given state), notify the parent menu that + // the shown state has changed for this item + if (setVisibleInt(shown)) mMenu.onItemVisibleChanged(this); + + return this; + } + + public MenuItem setOnMenuItemClickListener(MenuItem.OnMenuItemClickListener clickListener) { + mClickListener = clickListener; + return this; + } + + @Override + public String toString() { + return mTitle.toString(); + } + + void setMenuInfo(ContextMenuInfo menuInfo) { + mMenuInfo = menuInfo; + } + + public ContextMenuInfo getMenuInfo() { + return mMenuInfo; + } + + public void actionFormatChanged() { + mMenu.onItemActionRequestChanged(this); + } + + /** + * @return Whether the menu should show icons for menu items. + */ + public boolean shouldShowIcon() { + return mMenu.getOptionalIconsVisible(); + } + + public boolean isActionButton() { + return (mFlags & IS_ACTION) == IS_ACTION; + } + + public boolean requestsActionButton() { + return (mShowAsAction & SHOW_AS_ACTION_IF_ROOM) == SHOW_AS_ACTION_IF_ROOM; + } + + public boolean requiresActionButton() { + return (mShowAsAction & SHOW_AS_ACTION_ALWAYS) == SHOW_AS_ACTION_ALWAYS; + } + + public void setIsActionButton(boolean isActionButton) { + if (isActionButton) { + mFlags |= IS_ACTION; + } else { + mFlags &= ~IS_ACTION; + } + } + + public boolean showsTextAsAction() { + return (mShowAsAction & SHOW_AS_ACTION_WITH_TEXT) == SHOW_AS_ACTION_WITH_TEXT; + } + + public void setShowAsAction(int actionEnum) { + switch (actionEnum & SHOW_AS_ACTION_MASK) { + case SHOW_AS_ACTION_ALWAYS: + case SHOW_AS_ACTION_IF_ROOM: + case SHOW_AS_ACTION_NEVER: + // Looks good! + break; + + default: + // Mutually exclusive options selected! + throw new IllegalArgumentException("SHOW_AS_ACTION_ALWAYS, SHOW_AS_ACTION_IF_ROOM," + + " and SHOW_AS_ACTION_NEVER are mutually exclusive."); + } + mShowAsAction = actionEnum; + mMenu.onItemActionRequestChanged(this); + } + + public MenuItem setActionView(View view) { + mActionView = view; + mActionProvider = null; + if (view != null && view.getId() == View.NO_ID && mId > 0) { + view.setId(mId); + } + mMenu.onItemActionRequestChanged(this); + return this; + } + + public MenuItem setActionView(int resId) { + final Context context = mMenu.getContext(); + final LayoutInflater inflater = LayoutInflater.from(context); + setActionView(inflater.inflate(resId, new LinearLayout(context), false)); + return this; + } + + public View getActionView() { + if (mActionView != null) { + return mActionView; + } else if (mActionProvider != null) { + mActionView = mActionProvider.onCreateActionView(); + return mActionView; + } else { + return null; + } + } + + public ActionProvider getActionProvider() { + return mActionProvider; + } + + public MenuItem setActionProvider(ActionProvider actionProvider) { + mActionView = null; + mActionProvider = actionProvider; + mMenu.onItemsChanged(true); // Measurement can be changed + return this; + } + + @Override + public MenuItem setShowAsActionFlags(int actionEnum) { + setShowAsAction(actionEnum); + return this; + } + + @Override + public boolean expandActionView() { + if ((mShowAsAction & SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW) == 0 || mActionView == null) { + return false; + } + + if (mOnActionExpandListener == null || + mOnActionExpandListener.onMenuItemActionExpand(this)) { + return mMenu.expandItemActionView(this); + } + + return false; + } + + @Override + public boolean collapseActionView() { + if ((mShowAsAction & SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW) == 0) { + return false; + } + if (mActionView == null) { + // We're already collapsed if we have no action view. + return true; + } + + if (mOnActionExpandListener == null || + mOnActionExpandListener.onMenuItemActionCollapse(this)) { + return mMenu.collapseItemActionView(this); + } + + return false; + } + + @Override + public MenuItem setOnActionExpandListener(OnActionExpandListener listener) { + mOnActionExpandListener = listener; + return this; + } + + public boolean hasCollapsibleActionView() { + return (mShowAsAction & SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW) != 0 && mActionView != null; + } + + public void setActionViewExpanded(boolean isExpanded) { + mIsActionViewExpanded = isExpanded; + mMenu.onItemsChanged(false); + } + + public boolean isActionViewExpanded() { + return mIsActionViewExpanded; + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuItemMule.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuItemMule.java new file mode 100644 index 00000000..5a809983 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuItemMule.java @@ -0,0 +1,234 @@ +package com.actionbarsherlock.internal.view.menu; + +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.view.ActionProvider; +import android.view.MenuItem; +import android.view.SubMenu; +import android.view.View; +import android.view.ContextMenu.ContextMenuInfo; + +/** Used to carry an instance of our version of MenuItem through a native channel. */ +public class MenuItemMule implements MenuItem { + private static final String ERROR = "Cannot interact with object designed for temporary " + + "instance passing. Make sure you using both SherlockFragmentActivity and " + + "SherlockFragment."; + + + private final com.actionbarsherlock.view.MenuItem mItem; + + public MenuItemMule(com.actionbarsherlock.view.MenuItem item) { + mItem = item; + } + + public com.actionbarsherlock.view.MenuItem unwrap() { + return mItem; + } + + + @Override + public boolean collapseActionView() { + throw new IllegalStateException(ERROR); + } + + @Override + public boolean expandActionView() { + throw new IllegalStateException(ERROR); + } + + @Override + public ActionProvider getActionProvider() { + throw new IllegalStateException(ERROR); + } + + @Override + public View getActionView() { + throw new IllegalStateException(ERROR); + } + + @Override + public char getAlphabeticShortcut() { + throw new IllegalStateException(ERROR); + } + + @Override + public int getGroupId() { + throw new IllegalStateException(ERROR); + } + + @Override + public Drawable getIcon() { + throw new IllegalStateException(ERROR); + } + + @Override + public Intent getIntent() { + throw new IllegalStateException(ERROR); + } + + @Override + public int getItemId() { + throw new IllegalStateException(ERROR); + } + + @Override + public ContextMenuInfo getMenuInfo() { + throw new IllegalStateException(ERROR); + } + + @Override + public char getNumericShortcut() { + throw new IllegalStateException(ERROR); + } + + @Override + public int getOrder() { + throw new IllegalStateException(ERROR); + } + + @Override + public SubMenu getSubMenu() { + throw new IllegalStateException(ERROR); + } + + @Override + public CharSequence getTitle() { + throw new IllegalStateException(ERROR); + } + + @Override + public CharSequence getTitleCondensed() { + return mItem.getTitleCondensed(); + //throw new IllegalStateException(ERROR); + } + + @Override + public boolean hasSubMenu() { + throw new IllegalStateException(ERROR); + } + + @Override + public boolean isActionViewExpanded() { + throw new IllegalStateException(ERROR); + } + + @Override + public boolean isCheckable() { + throw new IllegalStateException(ERROR); + } + + @Override + public boolean isChecked() { + throw new IllegalStateException(ERROR); + } + + @Override + public boolean isEnabled() { + throw new IllegalStateException(ERROR); + } + + @Override + public boolean isVisible() { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem setActionProvider(ActionProvider arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem setActionView(View arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem setActionView(int arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem setAlphabeticShortcut(char arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem setCheckable(boolean arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem setChecked(boolean arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem setEnabled(boolean arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem setIcon(Drawable arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem setIcon(int arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem setIntent(Intent arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem setNumericShortcut(char arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem setOnActionExpandListener(OnActionExpandListener arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem setShortcut(char arg0, char arg1) { + throw new IllegalStateException(ERROR); + } + + @Override + public void setShowAsAction(int arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem setShowAsActionFlags(int arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem setTitle(CharSequence arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem setTitle(int arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem setTitleCondensed(CharSequence arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem setVisible(boolean arg0) { + throw new IllegalStateException(ERROR); + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuItemWrapper.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuItemWrapper.java new file mode 100644 index 00000000..907a7aa0 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuItemWrapper.java @@ -0,0 +1,292 @@ +package com.actionbarsherlock.internal.view.menu; + +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.view.View; +import android.view.ContextMenu.ContextMenuInfo; +import com.actionbarsherlock.internal.view.ActionProviderWrapper; +import com.actionbarsherlock.view.ActionProvider; +import com.actionbarsherlock.view.MenuItem; +import com.actionbarsherlock.view.SubMenu; + +public class MenuItemWrapper implements MenuItem, android.view.MenuItem.OnMenuItemClickListener { + private final android.view.MenuItem mNativeItem; + private SubMenu mSubMenu = null; + private OnMenuItemClickListener mMenuItemClickListener = null; + private OnActionExpandListener mActionExpandListener = null; + private android.view.MenuItem.OnActionExpandListener mNativeActionExpandListener = null; + + + public MenuItemWrapper(android.view.MenuItem nativeItem) { + if (nativeItem == null) { + throw new IllegalStateException("Wrapped menu item cannot be null."); + } + mNativeItem = nativeItem; + } + + + @Override + public int getItemId() { + return mNativeItem.getItemId(); + } + + @Override + public int getGroupId() { + return mNativeItem.getGroupId(); + } + + @Override + public int getOrder() { + return mNativeItem.getOrder(); + } + + @Override + public MenuItem setTitle(CharSequence title) { + mNativeItem.setTitle(title); + return this; + } + + @Override + public MenuItem setTitle(int title) { + mNativeItem.setTitle(title); + return this; + } + + @Override + public CharSequence getTitle() { + return mNativeItem.getTitle(); + } + + @Override + public MenuItem setTitleCondensed(CharSequence title) { + mNativeItem.setTitleCondensed(title); + return this; + } + + @Override + public CharSequence getTitleCondensed() { + return mNativeItem.getTitleCondensed(); + } + + @Override + public MenuItem setIcon(Drawable icon) { + mNativeItem.setIcon(icon); + return this; + } + + @Override + public MenuItem setIcon(int iconRes) { + mNativeItem.setIcon(iconRes); + return this; + } + + @Override + public Drawable getIcon() { + return mNativeItem.getIcon(); + } + + @Override + public MenuItem setIntent(Intent intent) { + mNativeItem.setIntent(intent); + return this; + } + + @Override + public Intent getIntent() { + return mNativeItem.getIntent(); + } + + @Override + public MenuItem setShortcut(char numericChar, char alphaChar) { + mNativeItem.setShortcut(numericChar, alphaChar); + return this; + } + + @Override + public MenuItem setNumericShortcut(char numericChar) { + mNativeItem.setNumericShortcut(numericChar); + return this; + } + + @Override + public char getNumericShortcut() { + return mNativeItem.getNumericShortcut(); + } + + @Override + public MenuItem setAlphabeticShortcut(char alphaChar) { + mNativeItem.setAlphabeticShortcut(alphaChar); + return this; + } + + @Override + public char getAlphabeticShortcut() { + return mNativeItem.getAlphabeticShortcut(); + } + + @Override + public MenuItem setCheckable(boolean checkable) { + mNativeItem.setCheckable(checkable); + return this; + } + + @Override + public boolean isCheckable() { + return mNativeItem.isCheckable(); + } + + @Override + public MenuItem setChecked(boolean checked) { + mNativeItem.setChecked(checked); + return this; + } + + @Override + public boolean isChecked() { + return mNativeItem.isChecked(); + } + + @Override + public MenuItem setVisible(boolean visible) { + mNativeItem.setVisible(visible); + return this; + } + + @Override + public boolean isVisible() { + return mNativeItem.isVisible(); + } + + @Override + public MenuItem setEnabled(boolean enabled) { + mNativeItem.setEnabled(enabled); + return this; + } + + @Override + public boolean isEnabled() { + return mNativeItem.isEnabled(); + } + + @Override + public boolean hasSubMenu() { + return mNativeItem.hasSubMenu(); + } + + @Override + public SubMenu getSubMenu() { + if (hasSubMenu() && (mSubMenu == null)) { + mSubMenu = new SubMenuWrapper(mNativeItem.getSubMenu()); + } + return mSubMenu; + } + + @Override + public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) { + mMenuItemClickListener = menuItemClickListener; + //Register ourselves as the listener to proxy + mNativeItem.setOnMenuItemClickListener(this); + return this; + } + + @Override + public boolean onMenuItemClick(android.view.MenuItem item) { + if (mMenuItemClickListener != null) { + return mMenuItemClickListener.onMenuItemClick(this); + } + return false; + } + + @Override + public ContextMenuInfo getMenuInfo() { + return mNativeItem.getMenuInfo(); + } + + @Override + public void setShowAsAction(int actionEnum) { + mNativeItem.setShowAsAction(actionEnum); + } + + @Override + public MenuItem setShowAsActionFlags(int actionEnum) { + mNativeItem.setShowAsActionFlags(actionEnum); + return this; + } + + @Override + public MenuItem setActionView(View view) { + mNativeItem.setActionView(view); + return this; + } + + @Override + public MenuItem setActionView(int resId) { + mNativeItem.setActionView(resId); + return this; + } + + @Override + public View getActionView() { + return mNativeItem.getActionView(); + } + + @Override + public MenuItem setActionProvider(ActionProvider actionProvider) { + mNativeItem.setActionProvider(new ActionProviderWrapper(actionProvider)); + return this; + } + + @Override + public ActionProvider getActionProvider() { + android.view.ActionProvider nativeProvider = mNativeItem.getActionProvider(); + if (nativeProvider != null && nativeProvider instanceof ActionProviderWrapper) { + return ((ActionProviderWrapper)nativeProvider).unwrap(); + } + return null; + } + + @Override + public boolean expandActionView() { + return mNativeItem.expandActionView(); + } + + @Override + public boolean collapseActionView() { + return mNativeItem.collapseActionView(); + } + + @Override + public boolean isActionViewExpanded() { + return mNativeItem.isActionViewExpanded(); + } + + @Override + public MenuItem setOnActionExpandListener(OnActionExpandListener listener) { + mActionExpandListener = listener; + + if (mNativeActionExpandListener == null) { + mNativeActionExpandListener = new android.view.MenuItem.OnActionExpandListener() { + @Override + public boolean onMenuItemActionExpand(android.view.MenuItem menuItem) { + if (mActionExpandListener != null) { + return mActionExpandListener.onMenuItemActionExpand(MenuItemWrapper.this); + } + return false; + } + + @Override + public boolean onMenuItemActionCollapse(android.view.MenuItem menuItem) { + if (mActionExpandListener != null) { + return mActionExpandListener.onMenuItemActionCollapse(MenuItemWrapper.this); + } + return false; + } + }; + + //Register our inner-class as the listener to proxy method calls + mNativeItem.setOnActionExpandListener(mNativeActionExpandListener); + } + + return this; + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuMule.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuMule.java new file mode 100644 index 00000000..b2385b90 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuMule.java @@ -0,0 +1,151 @@ +package com.actionbarsherlock.internal.view.menu; + +import android.content.ComponentName; +import android.content.Intent; +import android.view.KeyEvent; +import android.view.Menu; +import android.view.MenuItem; +import android.view.SubMenu; + +/** Used to carry an instance of our version of Menu through a native channel. */ +public class MenuMule implements Menu { + private static final String ERROR = "Cannot interact with object designed for temporary " + + "instance passing. Make sure you using both SherlockFragmentActivity and " + + "SherlockFragment."; + + + private final com.actionbarsherlock.view.Menu mMenu; + public boolean mDispatchShow = false; + + public MenuMule(com.actionbarsherlock.view.Menu menu) { + mMenu = menu; + } + + public com.actionbarsherlock.view.Menu unwrap() { + return mMenu; + } + + + @Override + public MenuItem add(CharSequence arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem add(int arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem add(int arg0, int arg1, int arg2, CharSequence arg3) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem add(int arg0, int arg1, int arg2, int arg3) { + throw new IllegalStateException(ERROR); + } + + @Override + public int addIntentOptions(int arg0, int arg1, int arg2, + ComponentName arg3, Intent[] arg4, Intent arg5, int arg6, + MenuItem[] arg7) { + throw new IllegalStateException(ERROR); + } + + @Override + public SubMenu addSubMenu(CharSequence arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public SubMenu addSubMenu(int arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public SubMenu addSubMenu(int arg0, int arg1, int arg2, CharSequence arg3) { + throw new IllegalStateException(ERROR); + } + + @Override + public SubMenu addSubMenu(int arg0, int arg1, int arg2, int arg3) { + throw new IllegalStateException(ERROR); + } + + @Override + public void clear() { + throw new IllegalStateException(ERROR); + } + + @Override + public void close() { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem findItem(int arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public MenuItem getItem(int arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public boolean hasVisibleItems() { + return mMenu.hasVisibleItems(); + //throw new IllegalStateException(ERROR); + } + + @Override + public boolean isShortcutKey(int arg0, KeyEvent arg1) { + throw new IllegalStateException(ERROR); + } + + @Override + public boolean performIdentifierAction(int arg0, int arg1) { + throw new IllegalStateException(ERROR); + } + + @Override + public boolean performShortcut(int arg0, KeyEvent arg1, int arg2) { + throw new IllegalStateException(ERROR); + } + + @Override + public void removeGroup(int arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public void removeItem(int arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public void setGroupCheckable(int arg0, boolean arg1, boolean arg2) { + throw new IllegalStateException(ERROR); + } + + @Override + public void setGroupEnabled(int arg0, boolean arg1) { + throw new IllegalStateException(ERROR); + } + + @Override + public void setGroupVisible(int arg0, boolean arg1) { + throw new IllegalStateException(ERROR); + } + + @Override + public void setQwertyMode(boolean arg0) { + throw new IllegalStateException(ERROR); + } + + @Override + public int size() { + throw new IllegalStateException(ERROR); + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuPopupHelper.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuPopupHelper.java new file mode 100644 index 00000000..f030de31 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuPopupHelper.java @@ -0,0 +1,376 @@ +/* + * 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.internal.view.menu; + +import java.util.ArrayList; +import android.content.Context; +import android.content.res.Resources; +import android.database.DataSetObserver; +import android.os.Parcelable; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.MeasureSpec; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.ListAdapter; +import android.widget.PopupWindow; +import com.actionbarsherlock.R; +import com.actionbarsherlock.internal.view.View_HasStateListenerSupport; +import com.actionbarsherlock.internal.view.View_OnAttachStateChangeListener; +import com.actionbarsherlock.internal.widget.IcsListPopupWindow; +import com.actionbarsherlock.view.MenuItem; + +/** + * Presents a menu as a small, simple popup anchored to another view. + * @hide + */ +public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.OnKeyListener, + ViewTreeObserver.OnGlobalLayoutListener, PopupWindow.OnDismissListener, + View_OnAttachStateChangeListener, MenuPresenter { + //UNUSED private static final String TAG = "MenuPopupHelper"; + + static final int ITEM_LAYOUT = R.layout.abs__popup_menu_item_layout; + + private Context mContext; + private LayoutInflater mInflater; + private IcsListPopupWindow mPopup; + private MenuBuilder mMenu; + private int mPopupMaxWidth; + private View mAnchorView; + private boolean mOverflowOnly; + private ViewTreeObserver mTreeObserver; + + private MenuAdapter mAdapter; + + private Callback mPresenterCallback; + + boolean mForceShowIcon; + + private ViewGroup mMeasureParent; + + public MenuPopupHelper(Context context, MenuBuilder menu) { + this(context, menu, null, false); + } + + public MenuPopupHelper(Context context, MenuBuilder menu, View anchorView) { + this(context, menu, anchorView, false); + } + + public MenuPopupHelper(Context context, MenuBuilder menu, + View anchorView, boolean overflowOnly) { + mContext = context; + mInflater = LayoutInflater.from(context); + mMenu = menu; + mOverflowOnly = overflowOnly; + + final Resources res = context.getResources(); + mPopupMaxWidth = Math.max(res.getDisplayMetrics().widthPixels / 2, + res.getDimensionPixelSize(R.dimen.abs__config_prefDialogWidth)); + + mAnchorView = anchorView; + + menu.addMenuPresenter(this); + } + + public void setAnchorView(View anchor) { + mAnchorView = anchor; + } + + public void setForceShowIcon(boolean forceShow) { + mForceShowIcon = forceShow; + } + + public void show() { + if (!tryShow()) { + throw new IllegalStateException("MenuPopupHelper cannot be used without an anchor"); + } + } + + public boolean tryShow() { + mPopup = new IcsListPopupWindow(mContext, null, R.attr.popupMenuStyle); + mPopup.setOnDismissListener(this); + mPopup.setOnItemClickListener(this); + + mAdapter = new MenuAdapter(mMenu); + mPopup.setAdapter(mAdapter); + mPopup.setModal(true); + + View anchor = mAnchorView; + if (anchor != null) { + final boolean addGlobalListener = mTreeObserver == null; + mTreeObserver = anchor.getViewTreeObserver(); // Refresh to latest + if (addGlobalListener) mTreeObserver.addOnGlobalLayoutListener(this); + ((View_HasStateListenerSupport)anchor).addOnAttachStateChangeListener(this); + mPopup.setAnchorView(anchor); + } else { + return false; + } + + mPopup.setContentWidth(Math.min(measureContentWidth(mAdapter), mPopupMaxWidth)); + mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED); + mPopup.show(); + mPopup.getListView().setOnKeyListener(this); + return true; + } + + public void dismiss() { + if (isShowing()) { + mPopup.dismiss(); + } + } + + public void onDismiss() { + mPopup = null; + mMenu.close(); + if (mTreeObserver != null) { + if (!mTreeObserver.isAlive()) mTreeObserver = mAnchorView.getViewTreeObserver(); + mTreeObserver.removeGlobalOnLayoutListener(this); + mTreeObserver = null; + } + ((View_HasStateListenerSupport)mAnchorView).removeOnAttachStateChangeListener(this); + } + + public boolean isShowing() { + return mPopup != null && mPopup.isShowing(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + MenuAdapter adapter = mAdapter; + adapter.mAdapterMenu.performItemAction(adapter.getItem(position), 0); + } + + public boolean onKey(View v, int keyCode, KeyEvent event) { + if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_MENU) { + dismiss(); + return true; + } + return false; + } + + private int measureContentWidth(ListAdapter adapter) { + // Menus don't tend to be long, so this is more sane than it looks. + int width = 0; + View itemView = null; + int itemType = 0; + final int widthMeasureSpec = + MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); + final int heightMeasureSpec = + MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); + final int count = adapter.getCount(); + for (int i = 0; i < count; i++) { + final int positionType = adapter.getItemViewType(i); + if (positionType != itemType) { + itemType = positionType; + itemView = null; + } + if (mMeasureParent == null) { + mMeasureParent = new FrameLayout(mContext); + } + itemView = adapter.getView(i, itemView, mMeasureParent); + itemView.measure(widthMeasureSpec, heightMeasureSpec); + width = Math.max(width, itemView.getMeasuredWidth()); + } + return width; + } + + @Override + public void onGlobalLayout() { + if (isShowing()) { + final View anchor = mAnchorView; + if (anchor == null || !anchor.isShown()) { + dismiss(); + } else if (isShowing()) { + // Recompute window size and position + mPopup.show(); + } + } + } + + @Override + public void onViewAttachedToWindow(View v) { + } + + @Override + public void onViewDetachedFromWindow(View v) { + if (mTreeObserver != null) { + if (!mTreeObserver.isAlive()) mTreeObserver = v.getViewTreeObserver(); + mTreeObserver.removeGlobalOnLayoutListener(this); + } + ((View_HasStateListenerSupport)v).removeOnAttachStateChangeListener(this); + } + + @Override + public void initForMenu(Context context, MenuBuilder menu) { + // Don't need to do anything; we added as a presenter in the constructor. + } + + @Override + public MenuView getMenuView(ViewGroup root) { + throw new UnsupportedOperationException("MenuPopupHelpers manage their own views"); + } + + @Override + public void updateMenuView(boolean cleared) { + if (mAdapter != null) mAdapter.notifyDataSetChanged(); + } + + @Override + public void setCallback(Callback cb) { + mPresenterCallback = cb; + } + + @Override + public boolean onSubMenuSelected(SubMenuBuilder subMenu) { + if (subMenu.hasVisibleItems()) { + MenuPopupHelper subPopup = new MenuPopupHelper(mContext, subMenu, mAnchorView, false); + subPopup.setCallback(mPresenterCallback); + + boolean preserveIconSpacing = false; + final int count = subMenu.size(); + for (int i = 0; i < count; i++) { + MenuItem childItem = subMenu.getItem(i); + if (childItem.isVisible() && childItem.getIcon() != null) { + preserveIconSpacing = true; + break; + } + } + subPopup.setForceShowIcon(preserveIconSpacing); + + if (subPopup.tryShow()) { + if (mPresenterCallback != null) { + mPresenterCallback.onOpenSubMenu(subMenu); + } + return true; + } + } + return false; + } + + @Override + public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) { + // Only care about the (sub)menu we're presenting. + if (menu != mMenu) return; + + dismiss(); + if (mPresenterCallback != null) { + mPresenterCallback.onCloseMenu(menu, allMenusAreClosing); + } + } + + @Override + public boolean flagActionItems() { + return false; + } + + public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) { + return false; + } + + public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) { + return false; + } + + @Override + public int getId() { + return 0; + } + + @Override + public Parcelable onSaveInstanceState() { + return null; + } + + @Override + public void onRestoreInstanceState(Parcelable state) { + } + + private class MenuAdapter extends BaseAdapter { + private MenuBuilder mAdapterMenu; + private int mExpandedIndex = -1; + + public MenuAdapter(MenuBuilder menu) { + mAdapterMenu = menu; + registerDataSetObserver(new ExpandedIndexObserver()); + findExpandedIndex(); + } + + public int getCount() { + ArrayList items = mOverflowOnly ? + mAdapterMenu.getNonActionItems() : mAdapterMenu.getVisibleItems(); + if (mExpandedIndex < 0) { + return items.size(); + } + return items.size() - 1; + } + + public MenuItemImpl getItem(int position) { + ArrayList items = mOverflowOnly ? + mAdapterMenu.getNonActionItems() : mAdapterMenu.getVisibleItems(); + if (mExpandedIndex >= 0 && position >= mExpandedIndex) { + position++; + } + return items.get(position); + } + + public long getItemId(int position) { + // Since a menu item's ID is optional, we'll use the position as an + // ID for the item in the AdapterView + return position; + } + + public View getView(int position, View convertView, ViewGroup parent) { + if (convertView == null) { + convertView = mInflater.inflate(ITEM_LAYOUT, parent, false); + } + + MenuView.ItemView itemView = (MenuView.ItemView) convertView; + if (mForceShowIcon) { + ((ListMenuItemView) convertView).setForceShowIcon(true); + } + itemView.initialize(getItem(position), 0); + return convertView; + } + + void findExpandedIndex() { + final MenuItemImpl expandedItem = mMenu.getExpandedItem(); + if (expandedItem != null) { + final ArrayList items = mMenu.getNonActionItems(); + final int count = items.size(); + for (int i = 0; i < count; i++) { + final MenuItemImpl item = items.get(i); + if (item == expandedItem) { + mExpandedIndex = i; + return; + } + } + } + mExpandedIndex = -1; + } + } + + private class ExpandedIndexObserver extends DataSetObserver { + @Override + public void onChanged() { + mAdapter.findExpandedIndex(); + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuPresenter.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuPresenter.java new file mode 100644 index 00000000..c3f35472 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuPresenter.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 com.actionbarsherlock.internal.view.menu; + +import android.content.Context; +import android.os.Parcelable; +import android.view.ViewGroup; + +/** + * A MenuPresenter is responsible for building views for a Menu object. + * It takes over some responsibility from the old style monolithic MenuBuilder class. + */ +public interface MenuPresenter { + /** + * Called by menu implementation to notify another component of open/close events. + */ + public interface Callback { + /** + * Called when a menu is closing. + * @param menu + * @param allMenusAreClosing + */ + public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing); + + /** + * Called when a submenu opens. Useful for notifying the application + * of menu state so that it does not attempt to hide the action bar + * while a submenu is open or similar. + * + * @param subMenu Submenu currently being opened + * @return true if the Callback will handle presenting the submenu, false if + * the presenter should attempt to do so. + */ + public boolean onOpenSubMenu(MenuBuilder subMenu); + } + + /** + * Initialize this presenter for the given context and menu. + * This method is called by MenuBuilder when a presenter is + * added. See {@link MenuBuilder#addMenuPresenter(MenuPresenter)} + * + * @param context Context for this presenter; used for view creation and resource management + * @param menu Menu to host + */ + public void initForMenu(Context context, MenuBuilder menu); + + /** + * Retrieve a MenuView to display the menu specified in + * {@link #initForMenu(Context, Menu)}. + * + * @param root Intended parent of the MenuView. + * @return A freshly created MenuView. + */ + public MenuView getMenuView(ViewGroup root); + + /** + * Update the menu UI in response to a change. Called by + * MenuBuilder during the normal course of operation. + * + * @param cleared true if the menu was entirely cleared + */ + public void updateMenuView(boolean cleared); + + /** + * Set a callback object that will be notified of menu events + * related to this specific presentation. + * @param cb Callback that will be notified of future events + */ + public void setCallback(Callback cb); + + /** + * Called by Menu implementations to indicate that a submenu item + * has been selected. An active Callback should be notified, and + * if applicable the presenter should present the submenu. + * + * @param subMenu SubMenu being opened + * @return true if the the event was handled, false otherwise. + */ + public boolean onSubMenuSelected(SubMenuBuilder subMenu); + + /** + * Called by Menu implementations to indicate that a menu or submenu is + * closing. Presenter implementations should close the representation + * of the menu indicated as necessary and notify a registered callback. + * + * @param menu Menu or submenu that is closing. + * @param allMenusAreClosing True if all associated menus are closing. + */ + public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing); + + /** + * Called by Menu implementations to flag items that will be shown as actions. + * @return true if this presenter changed the action status of any items. + */ + public boolean flagActionItems(); + + /** + * Called when a menu item with a collapsable action view should expand its action view. + * + * @param menu Menu containing the item to be expanded + * @param item Item to be expanded + * @return true if this presenter expanded the action view, false otherwise. + */ + public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item); + + /** + * Called when a menu item with a collapsable action view should collapse its action view. + * + * @param menu Menu containing the item to be collapsed + * @param item Item to be collapsed + * @return true if this presenter collapsed the action view, false otherwise. + */ + public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item); + + /** + * Returns an ID for determining how to save/restore instance state. + * @return a valid ID value. + */ + public int getId(); + + /** + * Returns a Parcelable describing the current state of the presenter. + * It will be passed to the {@link #onRestoreInstanceState(Parcelable)} + * method of the presenter sharing the same ID later. + * @return The saved instance state + */ + public Parcelable onSaveInstanceState(); + + /** + * Supplies the previously saved instance state to be restored. + * @param state The previously saved instance state + */ + public void onRestoreInstanceState(Parcelable state); +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuView.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuView.java new file mode 100644 index 00000000..323ba2d8 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuView.java @@ -0,0 +1,120 @@ +/* + * 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; + +/** + * Minimal interface for a menu view. {@link #initialize(MenuBuilder)} 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. + */ + public void initialize(MenuBuilder menu); + + /** + * 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 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); + + /** + * 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(); + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuWrapper.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuWrapper.java new file mode 100644 index 00000000..64fc4aea --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuWrapper.java @@ -0,0 +1,180 @@ +package com.actionbarsherlock.internal.view.menu; + +import java.util.WeakHashMap; +import android.content.ComponentName; +import android.content.Intent; +import android.view.KeyEvent; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuItem; +import com.actionbarsherlock.view.SubMenu; + +public class MenuWrapper implements Menu { + private final android.view.Menu mNativeMenu; + + private final WeakHashMap mNativeMap = + new WeakHashMap(); + + + public MenuWrapper(android.view.Menu nativeMenu) { + mNativeMenu = nativeMenu; + } + + public android.view.Menu unwrap() { + return mNativeMenu; + } + + private MenuItem addInternal(android.view.MenuItem nativeItem) { + MenuItem item = new MenuItemWrapper(nativeItem); + mNativeMap.put(nativeItem, item); + return item; + } + + @Override + public MenuItem add(CharSequence title) { + return addInternal(mNativeMenu.add(title)); + } + + @Override + public MenuItem add(int titleRes) { + return addInternal(mNativeMenu.add(titleRes)); + } + + @Override + public MenuItem add(int groupId, int itemId, int order, CharSequence title) { + return addInternal(mNativeMenu.add(groupId, itemId, order, title)); + } + + @Override + public MenuItem add(int groupId, int itemId, int order, int titleRes) { + return addInternal(mNativeMenu.add(groupId, itemId, order, titleRes)); + } + + private SubMenu addInternal(android.view.SubMenu nativeSubMenu) { + SubMenu subMenu = new SubMenuWrapper(nativeSubMenu); + android.view.MenuItem nativeItem = nativeSubMenu.getItem(); + MenuItem item = subMenu.getItem(); + mNativeMap.put(nativeItem, item); + return subMenu; + } + + @Override + public SubMenu addSubMenu(CharSequence title) { + return addInternal(mNativeMenu.addSubMenu(title)); + } + + @Override + public SubMenu addSubMenu(int titleRes) { + return addInternal(mNativeMenu.addSubMenu(titleRes)); + } + + @Override + public SubMenu addSubMenu(int groupId, int itemId, int order, CharSequence title) { + return addInternal(mNativeMenu.addSubMenu(groupId, itemId, order, title)); + } + + @Override + public SubMenu addSubMenu(int groupId, int itemId, int order, int titleRes) { + return addInternal(mNativeMenu.addSubMenu(groupId, itemId, order, titleRes)); + } + + @Override + public int addIntentOptions(int groupId, int itemId, int order, ComponentName caller, Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) { + android.view.MenuItem[] nativeOutItems = new android.view.MenuItem[outSpecificItems.length]; + int result = mNativeMenu.addIntentOptions(groupId, itemId, order, caller, specifics, intent, flags, nativeOutItems); + for (int i = 0, length = outSpecificItems.length; i < length; i++) { + outSpecificItems[i] = new MenuItemWrapper(nativeOutItems[i]); + } + return result; + } + + @Override + public void removeItem(int id) { + mNativeMenu.removeItem(id); + } + + @Override + public void removeGroup(int groupId) { + mNativeMenu.removeGroup(groupId); + } + + @Override + public void clear() { + mNativeMap.clear(); + mNativeMenu.clear(); + } + + @Override + public void setGroupCheckable(int group, boolean checkable, boolean exclusive) { + mNativeMenu.setGroupCheckable(group, checkable, exclusive); + } + + @Override + public void setGroupVisible(int group, boolean visible) { + mNativeMenu.setGroupVisible(group, visible); + } + + @Override + public void setGroupEnabled(int group, boolean enabled) { + mNativeMenu.setGroupEnabled(group, enabled); + } + + @Override + public boolean hasVisibleItems() { + return mNativeMenu.hasVisibleItems(); + } + + @Override + public MenuItem findItem(int id) { + android.view.MenuItem nativeItem = mNativeMenu.findItem(id); + return findItem(nativeItem); + } + + public MenuItem findItem(android.view.MenuItem nativeItem) { + if (nativeItem == null) { + return null; + } + + MenuItem wrapped = mNativeMap.get(nativeItem); + if (wrapped != null) { + return wrapped; + } + + return addInternal(nativeItem); + } + + @Override + public int size() { + return mNativeMenu.size(); + } + + @Override + public MenuItem getItem(int index) { + android.view.MenuItem nativeItem = mNativeMenu.getItem(index); + return findItem(nativeItem); + } + + @Override + public void close() { + mNativeMenu.close(); + } + + @Override + public boolean performShortcut(int keyCode, KeyEvent event, int flags) { + return mNativeMenu.performShortcut(keyCode, event, flags); + } + + @Override + public boolean isShortcutKey(int keyCode, KeyEvent event) { + return mNativeMenu.isShortcutKey(keyCode, event); + } + + @Override + public boolean performIdentifierAction(int id, int flags) { + return mNativeMenu.performIdentifierAction(id, flags); + } + + @Override + public void setQwertyMode(boolean isQwerty) { + mNativeMenu.setQwertyMode(isQwerty); + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/SubMenuBuilder.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/SubMenuBuilder.java new file mode 100644 index 00000000..6679cf38 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/SubMenuBuilder.java @@ -0,0 +1,134 @@ +/* + * 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.content.Context; +import android.graphics.drawable.Drawable; +import android.view.View; + +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuItem; +import com.actionbarsherlock.view.SubMenu; + +/** + * The model for a sub menu, which is an extension of the menu. Most methods are proxied to + * the parent menu. + */ +public 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(); + } + + public Menu getParentMenu() { + return mParentMenu; + } + + public MenuItem getItem() { + return mItem; + } + + @Override + public void setCallback(Callback callback) { + mParentMenu.setCallback(callback); + } + + @Override + public MenuBuilder getRootMenu() { + return mParentMenu; + } + + @Override + boolean dispatchMenuItemSelected(MenuBuilder menu, MenuItem item) { + return super.dispatchMenuItemSelected(menu, item) || + mParentMenu.dispatchMenuItemSelected(menu, item); + } + + public SubMenu setIcon(Drawable icon) { + mItem.setIcon(icon); + return this; + } + + public SubMenu setIcon(int iconRes) { + mItem.setIcon(iconRes); + return this; + } + + public SubMenu setHeaderIcon(Drawable icon) { + return (SubMenu) super.setHeaderIconInt(icon); + } + + public SubMenu setHeaderIcon(int iconRes) { + return (SubMenu) super.setHeaderIconInt(iconRes); + } + + public SubMenu setHeaderTitle(CharSequence title) { + return (SubMenu) super.setHeaderTitleInt(title); + } + + public SubMenu setHeaderTitle(int titleRes) { + return (SubMenu) super.setHeaderTitleInt(titleRes); + } + + public SubMenu setHeaderView(View view) { + return (SubMenu) super.setHeaderViewInt(view); + } + + @Override + public boolean expandItemActionView(MenuItemImpl item) { + return mParentMenu.expandItemActionView(item); + } + + @Override + public boolean collapseItemActionView(MenuItemImpl item) { + return mParentMenu.collapseItemActionView(item); + } + + @Override + public String getActionViewStatesKey() { + final int itemId = mItem != null ? mItem.getItemId() : 0; + if (itemId == 0) { + return null; + } + return super.getActionViewStatesKey() + ":" + itemId; + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/SubMenuWrapper.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/SubMenuWrapper.java new file mode 100644 index 00000000..7d307acb --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/SubMenuWrapper.java @@ -0,0 +1,72 @@ +package com.actionbarsherlock.internal.view.menu; + +import android.graphics.drawable.Drawable; +import android.view.View; +import com.actionbarsherlock.view.MenuItem; +import com.actionbarsherlock.view.SubMenu; + +public class SubMenuWrapper extends MenuWrapper implements SubMenu { + private final android.view.SubMenu mNativeSubMenu; + private MenuItem mItem = null; + + public SubMenuWrapper(android.view.SubMenu nativeSubMenu) { + super(nativeSubMenu); + mNativeSubMenu = nativeSubMenu; + } + + + @Override + public SubMenu setHeaderTitle(int titleRes) { + mNativeSubMenu.setHeaderTitle(titleRes); + return this; + } + + @Override + public SubMenu setHeaderTitle(CharSequence title) { + mNativeSubMenu.setHeaderTitle(title); + return this; + } + + @Override + public SubMenu setHeaderIcon(int iconRes) { + mNativeSubMenu.setHeaderIcon(iconRes); + return this; + } + + @Override + public SubMenu setHeaderIcon(Drawable icon) { + mNativeSubMenu.setHeaderIcon(icon); + return this; + } + + @Override + public SubMenu setHeaderView(View view) { + mNativeSubMenu.setHeaderView(view); + return this; + } + + @Override + public void clearHeader() { + mNativeSubMenu.clearHeader(); + } + + @Override + public SubMenu setIcon(int iconRes) { + mNativeSubMenu.setIcon(iconRes); + return this; + } + + @Override + public SubMenu setIcon(Drawable icon) { + mNativeSubMenu.setIcon(icon); + return this; + } + + @Override + public MenuItem getItem() { + if (mItem == null) { + mItem = new MenuItemWrapper(mNativeSubMenu.getItem()); + } + return mItem; + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/AbsActionBarView.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/AbsActionBarView.java new file mode 100644 index 00000000..3a4a4467 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/AbsActionBarView.java @@ -0,0 +1,291 @@ +/* + * 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.internal.widget; + +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.TypedArray; +import android.os.Build; +import android.util.AttributeSet; +import android.view.View; +import android.view.animation.DecelerateInterpolator; +import android.view.animation.Interpolator; + +import com.actionbarsherlock.R; +import com.actionbarsherlock.internal.nineoldandroids.animation.Animator; +import com.actionbarsherlock.internal.nineoldandroids.animation.AnimatorSet; +import com.actionbarsherlock.internal.nineoldandroids.animation.ObjectAnimator; +import com.actionbarsherlock.internal.nineoldandroids.view.NineViewGroup; +import com.actionbarsherlock.internal.view.menu.ActionMenuPresenter; +import com.actionbarsherlock.internal.view.menu.ActionMenuView; + +import static com.actionbarsherlock.internal.ResourcesCompat.getResources_getBoolean; + +public abstract class AbsActionBarView extends NineViewGroup { + protected ActionMenuView mMenuView; + protected ActionMenuPresenter mActionMenuPresenter; + protected ActionBarContainer mSplitView; + protected boolean mSplitActionBar; + protected boolean mSplitWhenNarrow; + protected int mContentHeight; + + final Context mContext; + + protected Animator mVisibilityAnim; + protected final VisibilityAnimListener mVisAnimListener = new VisibilityAnimListener(); + + private static final /*Time*/Interpolator sAlphaInterpolator = new DecelerateInterpolator(); + + private static final int FADE_DURATION = 200; + + public AbsActionBarView(Context context) { + super(context); + mContext = context; + } + + public AbsActionBarView(Context context, AttributeSet attrs) { + super(context, attrs); + mContext = context; + } + + public AbsActionBarView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + mContext = context; + } + + /* + * Must be public so we can dispatch pre-2.2 via ActionBarImpl. + */ + @Override + public void onConfigurationChanged(Configuration newConfig) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) { + super.onConfigurationChanged(newConfig); + } else if (mMenuView != null) { + mMenuView.onConfigurationChanged(newConfig); + } + + // Action bar can change size on configuration changes. + // Reread the desired height from the theme-specified style. + TypedArray a = getContext().obtainStyledAttributes(null, R.styleable.SherlockActionBar, + R.attr.actionBarStyle, 0); + setContentHeight(a.getLayoutDimension(R.styleable.SherlockActionBar_height, 0)); + a.recycle(); + if (mSplitWhenNarrow) { + setSplitActionBar(getResources_getBoolean(getContext(), + R.bool.abs__split_action_bar_is_narrow)); + } + if (mActionMenuPresenter != null) { + mActionMenuPresenter.onConfigurationChanged(newConfig); + } + } + + /** + * Sets whether the bar should be split right now, no questions asked. + * @param split true if the bar should split + */ + public void setSplitActionBar(boolean split) { + mSplitActionBar = split; + } + + /** + * Sets whether the bar should split if we enter a narrow screen configuration. + * @param splitWhenNarrow true if the bar should check to split after a config change + */ + public void setSplitWhenNarrow(boolean splitWhenNarrow) { + mSplitWhenNarrow = splitWhenNarrow; + } + + public void setContentHeight(int height) { + mContentHeight = height; + requestLayout(); + } + + public int getContentHeight() { + return mContentHeight; + } + + public void setSplitView(ActionBarContainer splitView) { + mSplitView = splitView; + } + + /** + * @return Current visibility or if animating, the visibility being animated to. + */ + public int getAnimatedVisibility() { + if (mVisibilityAnim != null) { + return mVisAnimListener.mFinalVisibility; + } + return getVisibility(); + } + + public void animateToVisibility(int visibility) { + if (mVisibilityAnim != null) { + mVisibilityAnim.cancel(); + } + if (visibility == VISIBLE) { + if (getVisibility() != VISIBLE) { + setAlpha(0); + if (mSplitView != null && mMenuView != null) { + mMenuView.setAlpha(0); + } + } + ObjectAnimator anim = ObjectAnimator.ofFloat(this, "alpha", 1); + anim.setDuration(FADE_DURATION); + anim.setInterpolator(sAlphaInterpolator); + if (mSplitView != null && mMenuView != null) { + AnimatorSet set = new AnimatorSet(); + ObjectAnimator splitAnim = ObjectAnimator.ofFloat(mMenuView, "alpha", 1); + splitAnim.setDuration(FADE_DURATION); + set.addListener(mVisAnimListener.withFinalVisibility(visibility)); + set.play(anim).with(splitAnim); + set.start(); + } else { + anim.addListener(mVisAnimListener.withFinalVisibility(visibility)); + anim.start(); + } + } else { + ObjectAnimator anim = ObjectAnimator.ofFloat(this, "alpha", 0); + anim.setDuration(FADE_DURATION); + anim.setInterpolator(sAlphaInterpolator); + if (mSplitView != null && mMenuView != null) { + AnimatorSet set = new AnimatorSet(); + ObjectAnimator splitAnim = ObjectAnimator.ofFloat(mMenuView, "alpha", 0); + splitAnim.setDuration(FADE_DURATION); + set.addListener(mVisAnimListener.withFinalVisibility(visibility)); + set.play(anim).with(splitAnim); + set.start(); + } else { + anim.addListener(mVisAnimListener.withFinalVisibility(visibility)); + anim.start(); + } + } + } + + @Override + public void setVisibility(int visibility) { + if (mVisibilityAnim != null) { + mVisibilityAnim.end(); + } + super.setVisibility(visibility); + } + + public boolean showOverflowMenu() { + if (mActionMenuPresenter != null) { + return mActionMenuPresenter.showOverflowMenu(); + } + return false; + } + + public void postShowOverflowMenu() { + post(new Runnable() { + public void run() { + showOverflowMenu(); + } + }); + } + + public boolean hideOverflowMenu() { + if (mActionMenuPresenter != null) { + return mActionMenuPresenter.hideOverflowMenu(); + } + return false; + } + + public boolean isOverflowMenuShowing() { + if (mActionMenuPresenter != null) { + return mActionMenuPresenter.isOverflowMenuShowing(); + } + return false; + } + + public boolean isOverflowReserved() { + return mActionMenuPresenter != null && mActionMenuPresenter.isOverflowReserved(); + } + + public void dismissPopupMenus() { + if (mActionMenuPresenter != null) { + mActionMenuPresenter.dismissPopupMenus(); + } + } + + protected int measureChildView(View child, int availableWidth, int childSpecHeight, + int spacing) { + child.measure(MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.AT_MOST), + childSpecHeight); + + availableWidth -= child.getMeasuredWidth(); + availableWidth -= spacing; + + return Math.max(0, availableWidth); + } + + protected int positionChild(View child, int x, int y, int contentHeight) { + int childWidth = child.getMeasuredWidth(); + int childHeight = child.getMeasuredHeight(); + int childTop = y + (contentHeight - childHeight) / 2; + + child.layout(x, childTop, x + childWidth, childTop + childHeight); + + return childWidth; + } + + protected int positionChildInverse(View child, int x, int y, int contentHeight) { + int childWidth = child.getMeasuredWidth(); + int childHeight = child.getMeasuredHeight(); + int childTop = y + (contentHeight - childHeight) / 2; + + child.layout(x - childWidth, childTop, x, childTop + childHeight); + + return childWidth; + } + + protected class VisibilityAnimListener implements Animator.AnimatorListener { + private boolean mCanceled = false; + int mFinalVisibility; + + public VisibilityAnimListener withFinalVisibility(int visibility) { + mFinalVisibility = visibility; + return this; + } + + @Override + public void onAnimationStart(Animator animation) { + setVisibility(VISIBLE); + mVisibilityAnim = animation; + mCanceled = false; + } + + @Override + public void onAnimationEnd(Animator animation) { + if (mCanceled) return; + + mVisibilityAnim = null; + setVisibility(mFinalVisibility); + if (mSplitView != null && mMenuView != null) { + mMenuView.setVisibility(mFinalVisibility); + } + } + + @Override + public void onAnimationCancel(Animator animation) { + mCanceled = true; + } + + @Override + public void onAnimationRepeat(Animator animation) { + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarContainer.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarContainer.java new file mode 100644 index 00000000..5e5aa286 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarContainer.java @@ -0,0 +1,245 @@ +/* + * 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.internal.widget; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; + +import com.actionbarsherlock.R; +import com.actionbarsherlock.app.ActionBar; +import com.actionbarsherlock.internal.nineoldandroids.widget.NineFrameLayout; + +/** + * This class acts as a container for the action bar view and action mode context views. + * It applies special styles as needed to help handle animated transitions between them. + * @hide + */ +public class ActionBarContainer extends NineFrameLayout { + private boolean mIsTransitioning; + private View mTabContainer; + private ActionBarView mActionBarView; + + private Drawable mBackground; + private Drawable mStackedBackground; + private Drawable mSplitBackground; + private boolean mIsSplit; + private boolean mIsStacked; + + public ActionBarContainer(Context context) { + this(context, null); + } + + public ActionBarContainer(Context context, AttributeSet attrs) { + super(context, attrs); + + setBackgroundDrawable(null); + + TypedArray a = context.obtainStyledAttributes(attrs, + R.styleable.SherlockActionBar); + mBackground = a.getDrawable(R.styleable.SherlockActionBar_background); + mStackedBackground = a.getDrawable( + R.styleable.SherlockActionBar_backgroundStacked); + + if (getId() == R.id.abs__split_action_bar) { + mIsSplit = true; + mSplitBackground = a.getDrawable( + R.styleable.SherlockActionBar_backgroundSplit); + } + a.recycle(); + + setWillNotDraw(mIsSplit ? mSplitBackground == null : + mBackground == null && mStackedBackground == null); + } + + @Override + public void onFinishInflate() { + super.onFinishInflate(); + mActionBarView = (ActionBarView) findViewById(R.id.abs__action_bar); + } + + public void setPrimaryBackground(Drawable bg) { + mBackground = bg; + invalidate(); + } + + public void setStackedBackground(Drawable bg) { + mStackedBackground = bg; + invalidate(); + } + + public void setSplitBackground(Drawable bg) { + mSplitBackground = bg; + invalidate(); + } + + /** + * Set the action bar into a "transitioning" state. While transitioning + * the bar will block focus and touch from all of its descendants. This + * prevents the user from interacting with the bar while it is animating + * in or out. + * + * @param isTransitioning true if the bar is currently transitioning, false otherwise. + */ + public void setTransitioning(boolean isTransitioning) { + mIsTransitioning = isTransitioning; + setDescendantFocusability(isTransitioning ? FOCUS_BLOCK_DESCENDANTS + : FOCUS_AFTER_DESCENDANTS); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + return mIsTransitioning || super.onInterceptTouchEvent(ev); + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + super.onTouchEvent(ev); + + // An action bar always eats touch events. + return true; + } + + @Override + public boolean onHoverEvent(MotionEvent ev) { + super.onHoverEvent(ev); + + // An action bar always eats hover events. + return true; + } + + public void setTabContainer(ScrollingTabContainerView tabView) { + if (mTabContainer != null) { + removeView(mTabContainer); + } + mTabContainer = tabView; + if (tabView != null) { + addView(tabView); + final ViewGroup.LayoutParams lp = tabView.getLayoutParams(); + lp.width = LayoutParams.MATCH_PARENT; + lp.height = LayoutParams.WRAP_CONTENT; + tabView.setAllowCollapse(false); + } + } + + public View getTabContainer() { + return mTabContainer; + } + + @Override + public void onDraw(Canvas canvas) { + if (getWidth() == 0 || getHeight() == 0) { + return; + } + + if (mIsSplit) { + if (mSplitBackground != null) mSplitBackground.draw(canvas); + } else { + if (mBackground != null) { + mBackground.draw(canvas); + } + if (mStackedBackground != null && mIsStacked) { + mStackedBackground.draw(canvas); + } + } + } + + //This causes the animation reflection to fail on pre-HC platforms + //@Override + //public android.view.ActionMode startActionModeForChild(View child, android.view.ActionMode.Callback callback) { + // // No starting an action mode for an action bar child! (Where would it go?) + // return null; + //} + + @Override + public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + + if (mActionBarView == null) return; + + final LayoutParams lp = (LayoutParams) mActionBarView.getLayoutParams(); + final int actionBarViewHeight = mActionBarView.isCollapsed() ? 0 : + mActionBarView.getMeasuredHeight() + lp.topMargin + lp.bottomMargin; + + if (mTabContainer != null && mTabContainer.getVisibility() != GONE) { + final int mode = MeasureSpec.getMode(heightMeasureSpec); + if (mode == MeasureSpec.AT_MOST) { + final int maxHeight = MeasureSpec.getSize(heightMeasureSpec); + setMeasuredDimension(getMeasuredWidth(), + Math.min(actionBarViewHeight + mTabContainer.getMeasuredHeight(), + maxHeight)); + } + } + } + + @Override + public void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + + final boolean hasTabs = mTabContainer != null && mTabContainer.getVisibility() != GONE; + + if (mTabContainer != null && mTabContainer.getVisibility() != GONE) { + final int containerHeight = getMeasuredHeight(); + final int tabHeight = mTabContainer.getMeasuredHeight(); + + if ((mActionBarView.getDisplayOptions() & ActionBar.DISPLAY_SHOW_HOME) == 0) { + // Not showing home, put tabs on top. + final int count = getChildCount(); + for (int i = 0; i < count; i++) { + final View child = getChildAt(i); + + if (child == mTabContainer) continue; + + if (!mActionBarView.isCollapsed()) { + child.offsetTopAndBottom(tabHeight); + } + } + mTabContainer.layout(l, 0, r, tabHeight); + } else { + mTabContainer.layout(l, containerHeight - tabHeight, r, containerHeight); + } + } + + boolean needsInvalidate = false; + if (mIsSplit) { + if (mSplitBackground != null) { + mSplitBackground.setBounds(0, 0, getMeasuredWidth(), getMeasuredHeight()); + needsInvalidate = true; + } + } else { + if (mBackground != null) { + mBackground.setBounds(mActionBarView.getLeft(), mActionBarView.getTop(), + mActionBarView.getRight(), mActionBarView.getBottom()); + needsInvalidate = true; + } + if ((mIsStacked = hasTabs && mStackedBackground != null)) { + mStackedBackground.setBounds(mTabContainer.getLeft(), mTabContainer.getTop(), + mTabContainer.getRight(), mTabContainer.getBottom()); + needsInvalidate = true; + } + } + + if (needsInvalidate) { + invalidate(); + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarContextView.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarContextView.java new file mode 100644 index 00000000..9ec250f3 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarContextView.java @@ -0,0 +1,518 @@ +/* + * 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.internal.widget; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.accessibility.AccessibilityEvent; +import android.view.animation.DecelerateInterpolator; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.actionbarsherlock.R; +import com.actionbarsherlock.internal.nineoldandroids.animation.Animator; +import com.actionbarsherlock.internal.nineoldandroids.animation.Animator.AnimatorListener; +import com.actionbarsherlock.internal.nineoldandroids.animation.AnimatorSet; +import com.actionbarsherlock.internal.nineoldandroids.animation.ObjectAnimator; +import com.actionbarsherlock.internal.nineoldandroids.view.animation.AnimatorProxy; +import com.actionbarsherlock.internal.nineoldandroids.widget.NineLinearLayout; +import com.actionbarsherlock.internal.view.menu.ActionMenuPresenter; +import com.actionbarsherlock.internal.view.menu.ActionMenuView; +import com.actionbarsherlock.internal.view.menu.MenuBuilder; +import com.actionbarsherlock.view.ActionMode; + +/** + * @hide + */ +public class ActionBarContextView extends AbsActionBarView implements AnimatorListener { + //UNUSED private static final String TAG = "ActionBarContextView"; + + private CharSequence mTitle; + private CharSequence mSubtitle; + + private NineLinearLayout mClose; + private View mCustomView; + private LinearLayout mTitleLayout; + private TextView mTitleView; + private TextView mSubtitleView; + private int mTitleStyleRes; + private int mSubtitleStyleRes; + private Drawable mSplitBackground; + + private Animator mCurrentAnimation; + private boolean mAnimateInOnLayout; + private int mAnimationMode; + + private static final int ANIMATE_IDLE = 0; + private static final int ANIMATE_IN = 1; + private static final int ANIMATE_OUT = 2; + + public ActionBarContextView(Context context) { + this(context, null); + } + + public ActionBarContextView(Context context, AttributeSet attrs) { + this(context, attrs, R.attr.actionModeStyle); + } + + public ActionBarContextView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SherlockActionMode, defStyle, 0); + setBackgroundDrawable(a.getDrawable( + R.styleable.SherlockActionMode_background)); + mTitleStyleRes = a.getResourceId( + R.styleable.SherlockActionMode_titleTextStyle, 0); + mSubtitleStyleRes = a.getResourceId( + R.styleable.SherlockActionMode_subtitleTextStyle, 0); + + mContentHeight = a.getLayoutDimension( + R.styleable.SherlockActionMode_height, 0); + + mSplitBackground = a.getDrawable( + R.styleable.SherlockActionMode_backgroundSplit); + + a.recycle(); + } + + @Override + public void onDetachedFromWindow() { + super.onDetachedFromWindow(); + if (mActionMenuPresenter != null) { + mActionMenuPresenter.hideOverflowMenu(); + mActionMenuPresenter.hideSubMenus(); + } + } + + @Override + public void setSplitActionBar(boolean split) { + if (mSplitActionBar != split) { + if (mActionMenuPresenter != null) { + // Mode is already active; move everything over and adjust the menu itself. + final LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, + LayoutParams.MATCH_PARENT); + if (!split) { + mMenuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this); + mMenuView.setBackgroundDrawable(null); + final ViewGroup oldParent = (ViewGroup) mMenuView.getParent(); + if (oldParent != null) oldParent.removeView(mMenuView); + addView(mMenuView, layoutParams); + } else { + // Allow full screen width in split mode. + mActionMenuPresenter.setWidthLimit( + getContext().getResources().getDisplayMetrics().widthPixels, true); + // No limit to the item count; use whatever will fit. + mActionMenuPresenter.setItemLimit(Integer.MAX_VALUE); + // Span the whole width + layoutParams.width = LayoutParams.MATCH_PARENT; + layoutParams.height = mContentHeight; + mMenuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this); + mMenuView.setBackgroundDrawable(mSplitBackground); + final ViewGroup oldParent = (ViewGroup) mMenuView.getParent(); + if (oldParent != null) oldParent.removeView(mMenuView); + mSplitView.addView(mMenuView, layoutParams); + } + } + super.setSplitActionBar(split); + } + } + + public void setContentHeight(int height) { + mContentHeight = height; + } + + public void setCustomView(View view) { + if (mCustomView != null) { + removeView(mCustomView); + } + mCustomView = view; + if (mTitleLayout != null) { + removeView(mTitleLayout); + mTitleLayout = null; + } + if (view != null) { + addView(view); + } + requestLayout(); + } + + public void setTitle(CharSequence title) { + mTitle = title; + initTitle(); + } + + public void setSubtitle(CharSequence subtitle) { + mSubtitle = subtitle; + initTitle(); + } + + public CharSequence getTitle() { + return mTitle; + } + + public CharSequence getSubtitle() { + return mSubtitle; + } + + private void initTitle() { + if (mTitleLayout == null) { + LayoutInflater inflater = LayoutInflater.from(getContext()); + inflater.inflate(R.layout.abs__action_bar_title_item, this); + mTitleLayout = (LinearLayout) getChildAt(getChildCount() - 1); + mTitleView = (TextView) mTitleLayout.findViewById(R.id.abs__action_bar_title); + mSubtitleView = (TextView) mTitleLayout.findViewById(R.id.abs__action_bar_subtitle); + if (mTitleStyleRes != 0) { + mTitleView.setTextAppearance(mContext, mTitleStyleRes); + } + if (mSubtitleStyleRes != 0) { + mSubtitleView.setTextAppearance(mContext, mSubtitleStyleRes); + } + } + + mTitleView.setText(mTitle); + mSubtitleView.setText(mSubtitle); + + final boolean hasTitle = !TextUtils.isEmpty(mTitle); + final boolean hasSubtitle = !TextUtils.isEmpty(mSubtitle); + mSubtitleView.setVisibility(hasSubtitle ? VISIBLE : GONE); + mTitleLayout.setVisibility(hasTitle || hasSubtitle ? VISIBLE : GONE); + if (mTitleLayout.getParent() == null) { + addView(mTitleLayout); + } + } + + public void initForMode(final ActionMode mode) { + if (mClose == null) { + LayoutInflater inflater = LayoutInflater.from(mContext); + mClose = (NineLinearLayout)inflater.inflate(R.layout.abs__action_mode_close_item, this, false); + addView(mClose); + } else if (mClose.getParent() == null) { + addView(mClose); + } + + View closeButton = mClose.findViewById(R.id.abs__action_mode_close_button); + closeButton.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + mode.finish(); + } + }); + + final MenuBuilder menu = (MenuBuilder) mode.getMenu(); + if (mActionMenuPresenter != null) { + mActionMenuPresenter.dismissPopupMenus(); + } + mActionMenuPresenter = new ActionMenuPresenter(mContext); + mActionMenuPresenter.setReserveOverflow(true); + + final LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, + LayoutParams.MATCH_PARENT); + if (!mSplitActionBar) { + menu.addMenuPresenter(mActionMenuPresenter); + mMenuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this); + mMenuView.setBackgroundDrawable(null); + addView(mMenuView, layoutParams); + } else { + // Allow full screen width in split mode. + mActionMenuPresenter.setWidthLimit( + getContext().getResources().getDisplayMetrics().widthPixels, true); + // No limit to the item count; use whatever will fit. + mActionMenuPresenter.setItemLimit(Integer.MAX_VALUE); + // Span the whole width + layoutParams.width = LayoutParams.MATCH_PARENT; + layoutParams.height = mContentHeight; + menu.addMenuPresenter(mActionMenuPresenter); + mMenuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this); + mMenuView.setBackgroundDrawable(mSplitBackground); + mSplitView.addView(mMenuView, layoutParams); + } + + mAnimateInOnLayout = true; + } + + public void closeMode() { + if (mAnimationMode == ANIMATE_OUT) { + // Called again during close; just finish what we were doing. + return; + } + if (mClose == null) { + killMode(); + return; + } + + finishAnimation(); + mAnimationMode = ANIMATE_OUT; + mCurrentAnimation = makeOutAnimation(); + mCurrentAnimation.start(); + } + + private void finishAnimation() { + final Animator a = mCurrentAnimation; + if (a != null) { + mCurrentAnimation = null; + a.end(); + } + } + + public void killMode() { + finishAnimation(); + removeAllViews(); + if (mSplitView != null) { + mSplitView.removeView(mMenuView); + } + mCustomView = null; + mMenuView = null; + mAnimateInOnLayout = false; + } + + @Override + public boolean showOverflowMenu() { + if (mActionMenuPresenter != null) { + return mActionMenuPresenter.showOverflowMenu(); + } + return false; + } + + @Override + public boolean hideOverflowMenu() { + if (mActionMenuPresenter != null) { + return mActionMenuPresenter.hideOverflowMenu(); + } + return false; + } + + @Override + public boolean isOverflowMenuShowing() { + if (mActionMenuPresenter != null) { + return mActionMenuPresenter.isOverflowMenuShowing(); + } + return false; + } + + @Override + protected ViewGroup.LayoutParams generateDefaultLayoutParams() { + // Used by custom views if they don't supply layout params. Everything else + // added to an ActionBarContextView should have them already. + return new MarginLayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); + } + + @Override + public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) { + return new MarginLayoutParams(getContext(), attrs); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + final int widthMode = MeasureSpec.getMode(widthMeasureSpec); + if (widthMode != MeasureSpec.EXACTLY) { + throw new IllegalStateException(getClass().getSimpleName() + " can only be used " + + "with android:layout_width=\"match_parent\" (or fill_parent)"); + } + + final int heightMode = MeasureSpec.getMode(heightMeasureSpec); + if (heightMode == MeasureSpec.UNSPECIFIED) { + throw new IllegalStateException(getClass().getSimpleName() + " can only be used " + + "with android:layout_height=\"wrap_content\""); + } + + final int contentWidth = MeasureSpec.getSize(widthMeasureSpec); + + int maxHeight = mContentHeight > 0 ? + mContentHeight : MeasureSpec.getSize(heightMeasureSpec); + + final int verticalPadding = getPaddingTop() + getPaddingBottom(); + int availableWidth = contentWidth - getPaddingLeft() - getPaddingRight(); + final int height = maxHeight - verticalPadding; + final int childSpecHeight = MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST); + + if (mClose != null) { + availableWidth = measureChildView(mClose, availableWidth, childSpecHeight, 0); + MarginLayoutParams lp = (MarginLayoutParams) mClose.getLayoutParams(); + availableWidth -= lp.leftMargin + lp.rightMargin; + } + + if (mMenuView != null && mMenuView.getParent() == this) { + availableWidth = measureChildView(mMenuView, availableWidth, + childSpecHeight, 0); + } + + if (mTitleLayout != null && mCustomView == null) { + availableWidth = measureChildView(mTitleLayout, availableWidth, childSpecHeight, 0); + } + + if (mCustomView != null) { + ViewGroup.LayoutParams lp = mCustomView.getLayoutParams(); + final int customWidthMode = lp.width != LayoutParams.WRAP_CONTENT ? + MeasureSpec.EXACTLY : MeasureSpec.AT_MOST; + final int customWidth = lp.width >= 0 ? + Math.min(lp.width, availableWidth) : availableWidth; + final int customHeightMode = lp.height != LayoutParams.WRAP_CONTENT ? + MeasureSpec.EXACTLY : MeasureSpec.AT_MOST; + final int customHeight = lp.height >= 0 ? + Math.min(lp.height, height) : height; + mCustomView.measure(MeasureSpec.makeMeasureSpec(customWidth, customWidthMode), + MeasureSpec.makeMeasureSpec(customHeight, customHeightMode)); + } + + if (mContentHeight <= 0) { + int measuredHeight = 0; + final int count = getChildCount(); + for (int i = 0; i < count; i++) { + View v = getChildAt(i); + int paddedViewHeight = v.getMeasuredHeight() + verticalPadding; + if (paddedViewHeight > measuredHeight) { + measuredHeight = paddedViewHeight; + } + } + setMeasuredDimension(contentWidth, measuredHeight); + } else { + setMeasuredDimension(contentWidth, maxHeight); + } + } + + private Animator makeInAnimation() { + mClose.setTranslationX(-mClose.getWidth() - + ((MarginLayoutParams) mClose.getLayoutParams()).leftMargin); + ObjectAnimator buttonAnimator = ObjectAnimator.ofFloat(mClose, "translationX", 0); + buttonAnimator.setDuration(200); + buttonAnimator.addListener(this); + buttonAnimator.setInterpolator(new DecelerateInterpolator()); + + AnimatorSet set = new AnimatorSet(); + AnimatorSet.Builder b = set.play(buttonAnimator); + + if (mMenuView != null) { + final int count = mMenuView.getChildCount(); + if (count > 0) { + for (int i = count - 1, j = 0; i >= 0; i--, j++) { + AnimatorProxy child = AnimatorProxy.wrap(mMenuView.getChildAt(i)); + child.setScaleY(0); + ObjectAnimator a = ObjectAnimator.ofFloat(child, "scaleY", 0, 1); + a.setDuration(100); + a.setStartDelay(j * 70); + b.with(a); + } + } + } + + return set; + } + + private Animator makeOutAnimation() { + ObjectAnimator buttonAnimator = ObjectAnimator.ofFloat(mClose, "translationX", + -mClose.getWidth() - ((MarginLayoutParams) mClose.getLayoutParams()).leftMargin); + buttonAnimator.setDuration(200); + buttonAnimator.addListener(this); + buttonAnimator.setInterpolator(new DecelerateInterpolator()); + + AnimatorSet set = new AnimatorSet(); + AnimatorSet.Builder b = set.play(buttonAnimator); + + if (mMenuView != null) { + final int count = mMenuView.getChildCount(); + if (count > 0) { + for (int i = 0; i < 0; i++) { + AnimatorProxy child = AnimatorProxy.wrap(mMenuView.getChildAt(i)); + child.setScaleY(0); + ObjectAnimator a = ObjectAnimator.ofFloat(child, "scaleY", 0); + a.setDuration(100); + a.setStartDelay(i * 70); + b.with(a); + } + } + } + + return set; + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + int x = getPaddingLeft(); + final int y = getPaddingTop(); + final int contentHeight = b - t - getPaddingTop() - getPaddingBottom(); + + if (mClose != null && mClose.getVisibility() != GONE) { + MarginLayoutParams lp = (MarginLayoutParams) mClose.getLayoutParams(); + x += lp.leftMargin; + x += positionChild(mClose, x, y, contentHeight); + x += lp.rightMargin; + + if (mAnimateInOnLayout) { + mAnimationMode = ANIMATE_IN; + mCurrentAnimation = makeInAnimation(); + mCurrentAnimation.start(); + mAnimateInOnLayout = false; + } + } + + if (mTitleLayout != null && mCustomView == null) { + x += positionChild(mTitleLayout, x, y, contentHeight); + } + + if (mCustomView != null) { + x += positionChild(mCustomView, x, y, contentHeight); + } + + x = r - l - getPaddingRight(); + + if (mMenuView != null) { + x -= positionChildInverse(mMenuView, x, y, contentHeight); + } + } + + @Override + public void onAnimationStart(Animator animation) { + } + + @Override + public void onAnimationEnd(Animator animation) { + if (mAnimationMode == ANIMATE_OUT) { + killMode(); + } + mAnimationMode = ANIMATE_IDLE; + } + + @Override + public void onAnimationCancel(Animator animation) { + } + + @Override + public void onAnimationRepeat(Animator animation) { + } + + @Override + public boolean shouldDelayChildPressedState() { + return false; + } + + @Override + public void onInitializeAccessibilityEvent(AccessibilityEvent event) { + if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { + // Action mode started + //TODO event.setSource(this); + event.setClassName(getClass().getName()); + event.setPackageName(getContext().getPackageName()); + event.setContentDescription(mTitle); + } else { + //TODO super.onInitializeAccessibilityEvent(event); + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarView.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarView.java new file mode 100644 index 00000000..4636de17 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarView.java @@ -0,0 +1,1548 @@ +/* + * 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.internal.widget; + +import org.xmlpull.v1.XmlPullParser; +import android.app.Activity; +import android.content.Context; +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.TypedArray; +import android.content.res.XmlResourceParser; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.os.Parcel; +import android.os.Parcelable; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewParent; +import android.view.accessibility.AccessibilityEvent; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.SpinnerAdapter; +import android.widget.TextView; + +import com.actionbarsherlock.R; +import com.actionbarsherlock.app.ActionBar; +import com.actionbarsherlock.app.ActionBar.OnNavigationListener; +import com.actionbarsherlock.internal.ActionBarSherlockCompat; +import com.actionbarsherlock.internal.view.menu.ActionMenuItem; +import com.actionbarsherlock.internal.view.menu.ActionMenuPresenter; +import com.actionbarsherlock.internal.view.menu.ActionMenuView; +import com.actionbarsherlock.internal.view.menu.MenuBuilder; +import com.actionbarsherlock.internal.view.menu.MenuItemImpl; +import com.actionbarsherlock.internal.view.menu.MenuPresenter; +import com.actionbarsherlock.internal.view.menu.MenuView; +import com.actionbarsherlock.internal.view.menu.SubMenuBuilder; +import com.actionbarsherlock.view.CollapsibleActionView; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuItem; +import com.actionbarsherlock.view.Window; + +import static com.actionbarsherlock.internal.ResourcesCompat.getResources_getBoolean; + +/** + * @hide + */ +public class ActionBarView extends AbsActionBarView { + private static final String TAG = "ActionBarView"; + private static final boolean DEBUG = false; + + /** + * Display options applied by default + */ + public static final int DISPLAY_DEFAULT = 0; + + /** + * Display options that require re-layout as opposed to a simple invalidate + */ + private static final int DISPLAY_RELAYOUT_MASK = + ActionBar.DISPLAY_SHOW_HOME | + ActionBar.DISPLAY_USE_LOGO | + ActionBar.DISPLAY_HOME_AS_UP | + ActionBar.DISPLAY_SHOW_CUSTOM | + ActionBar.DISPLAY_SHOW_TITLE; + + private static final int DEFAULT_CUSTOM_GRAVITY = Gravity.LEFT | Gravity.CENTER_VERTICAL; + + private int mNavigationMode; + private int mDisplayOptions = -1; + private CharSequence mTitle; + private CharSequence mSubtitle; + private Drawable mIcon; + private Drawable mLogo; + + private HomeView mHomeLayout; + private HomeView mExpandedHomeLayout; + private LinearLayout mTitleLayout; + private TextView mTitleView; + private TextView mSubtitleView; + private View mTitleUpView; + + private IcsSpinner mSpinner; + private IcsLinearLayout mListNavLayout; + private ScrollingTabContainerView mTabScrollView; + private View mCustomNavView; + private IcsProgressBar mProgressView; + private IcsProgressBar mIndeterminateProgressView; + + private int mProgressBarPadding; + private int mItemPadding; + + private int mTitleStyleRes; + private int mSubtitleStyleRes; + private int mProgressStyle; + private int mIndeterminateProgressStyle; + + private boolean mUserTitle; + private boolean mIncludeTabs; + private boolean mIsCollapsable; + private boolean mIsCollapsed; + + private MenuBuilder mOptionsMenu; + + private ActionBarContextView mContextView; + + private ActionMenuItem mLogoNavItem; + + private SpinnerAdapter mSpinnerAdapter; + private OnNavigationListener mCallback; + + //UNUSED private Runnable mTabSelector; + + private ExpandedActionViewMenuPresenter mExpandedMenuPresenter; + View mExpandedActionView; + + Window.Callback mWindowCallback; + + @SuppressWarnings("rawtypes") + private final IcsAdapterView.OnItemSelectedListener mNavItemSelectedListener = + new IcsAdapterView.OnItemSelectedListener() { + public void onItemSelected(IcsAdapterView parent, View view, int position, long id) { + if (mCallback != null) { + mCallback.onNavigationItemSelected(position, id); + } + } + public void onNothingSelected(IcsAdapterView parent) { + // Do nothing + } + }; + + private final OnClickListener mExpandedActionViewUpListener = new OnClickListener() { + @Override + public void onClick(View v) { + final MenuItemImpl item = mExpandedMenuPresenter.mCurrentExpandedItem; + if (item != null) { + item.collapseActionView(); + } + } + }; + + private final OnClickListener mUpClickListener = new OnClickListener() { + public void onClick(View v) { + mWindowCallback.onMenuItemSelected(Window.FEATURE_OPTIONS_PANEL, mLogoNavItem); + } + }; + + public ActionBarView(Context context, AttributeSet attrs) { + super(context, attrs); + + // Background is always provided by the container. + setBackgroundResource(0); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SherlockActionBar, + R.attr.actionBarStyle, 0); + + ApplicationInfo appInfo = context.getApplicationInfo(); + PackageManager pm = context.getPackageManager(); + mNavigationMode = a.getInt(R.styleable.SherlockActionBar_navigationMode, + ActionBar.NAVIGATION_MODE_STANDARD); + mTitle = a.getText(R.styleable.SherlockActionBar_title); + mSubtitle = a.getText(R.styleable.SherlockActionBar_subtitle); + + mLogo = a.getDrawable(R.styleable.SherlockActionBar_logo); + if (mLogo == null) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { + if (context instanceof Activity) { + //Even though native methods existed in API 9 and 10 they don't work + //so just parse the manifest to look for the logo pre-Honeycomb + final int resId = loadLogoFromManifest((Activity) context); + if (resId != 0) { + mLogo = context.getResources().getDrawable(resId); + } + } + } else { + if (context instanceof Activity) { + try { + mLogo = pm.getActivityLogo(((Activity) context).getComponentName()); + } catch (NameNotFoundException e) { + Log.e(TAG, "Activity component name not found!", e); + } + } + if (mLogo == null) { + mLogo = appInfo.loadLogo(pm); + } + } + } + + mIcon = a.getDrawable(R.styleable.SherlockActionBar_icon); + if (mIcon == null) { + if (context instanceof Activity) { + try { + mIcon = pm.getActivityIcon(((Activity) context).getComponentName()); + } catch (NameNotFoundException e) { + Log.e(TAG, "Activity component name not found!", e); + } + } + if (mIcon == null) { + mIcon = appInfo.loadIcon(pm); + } + } + + final LayoutInflater inflater = LayoutInflater.from(context); + + final int homeResId = a.getResourceId( + R.styleable.SherlockActionBar_homeLayout, + R.layout.abs__action_bar_home); + + mHomeLayout = (HomeView) inflater.inflate(homeResId, this, false); + + mExpandedHomeLayout = (HomeView) inflater.inflate(homeResId, this, false); + mExpandedHomeLayout.setUp(true); + mExpandedHomeLayout.setOnClickListener(mExpandedActionViewUpListener); + mExpandedHomeLayout.setContentDescription(getResources().getText( + R.string.abs__action_bar_up_description)); + + mTitleStyleRes = a.getResourceId(R.styleable.SherlockActionBar_titleTextStyle, 0); + mSubtitleStyleRes = a.getResourceId(R.styleable.SherlockActionBar_subtitleTextStyle, 0); + mProgressStyle = a.getResourceId(R.styleable.SherlockActionBar_progressBarStyle, 0); + mIndeterminateProgressStyle = a.getResourceId( + R.styleable.SherlockActionBar_indeterminateProgressStyle, 0); + + mProgressBarPadding = a.getDimensionPixelOffset(R.styleable.SherlockActionBar_progressBarPadding, 0); + mItemPadding = a.getDimensionPixelOffset(R.styleable.SherlockActionBar_itemPadding, 0); + + setDisplayOptions(a.getInt(R.styleable.SherlockActionBar_displayOptions, DISPLAY_DEFAULT)); + + final int customNavId = a.getResourceId(R.styleable.SherlockActionBar_customNavigationLayout, 0); + if (customNavId != 0) { + mCustomNavView = inflater.inflate(customNavId, this, false); + mNavigationMode = ActionBar.NAVIGATION_MODE_STANDARD; + setDisplayOptions(mDisplayOptions | ActionBar.DISPLAY_SHOW_CUSTOM); + } + + mContentHeight = a.getLayoutDimension(R.styleable.SherlockActionBar_height, 0); + + a.recycle(); + + mLogoNavItem = new ActionMenuItem(context, 0, android.R.id.home, 0, 0, mTitle); + mHomeLayout.setOnClickListener(mUpClickListener); + mHomeLayout.setClickable(true); + mHomeLayout.setFocusable(true); + } + + /** + * Attempt to programmatically load the logo from the manifest file of an + * activity by using an XML pull parser. This should allow us to read the + * logo attribute regardless of the platform it is being run on. + * + * @param activity Activity instance. + * @return Logo resource ID. + */ + private static int loadLogoFromManifest(Activity activity) { + int logo = 0; + try { + final String thisPackage = activity.getClass().getName(); + if (DEBUG) Log.i(TAG, "Parsing AndroidManifest.xml for " + thisPackage); + + final String packageName = activity.getApplicationInfo().packageName; + final AssetManager am = activity.createPackageContext(packageName, 0).getAssets(); + final XmlResourceParser xml = am.openXmlResourceParser("AndroidManifest.xml"); + + int eventType = xml.getEventType(); + while (eventType != XmlPullParser.END_DOCUMENT) { + if (eventType == XmlPullParser.START_TAG) { + String name = xml.getName(); + + if ("application".equals(name)) { + //Check if the has the attribute + if (DEBUG) Log.d(TAG, "Got "); + + for (int i = xml.getAttributeCount() - 1; i >= 0; i--) { + if (DEBUG) Log.d(TAG, xml.getAttributeName(i) + ": " + xml.getAttributeValue(i)); + + if ("logo".equals(xml.getAttributeName(i))) { + logo = xml.getAttributeResourceValue(i, 0); + break; //out of for loop + } + } + } else if ("activity".equals(name)) { + //Check if the is us and has the attribute + if (DEBUG) Log.d(TAG, "Got "); + Integer activityLogo = null; + String activityPackage = null; + boolean isOurActivity = false; + + for (int i = xml.getAttributeCount() - 1; i >= 0; i--) { + if (DEBUG) Log.d(TAG, xml.getAttributeName(i) + ": " + xml.getAttributeValue(i)); + + //We need both uiOptions and name attributes + String attrName = xml.getAttributeName(i); + if ("logo".equals(attrName)) { + activityLogo = xml.getAttributeResourceValue(i, 0); + } else if ("name".equals(attrName)) { + activityPackage = ActionBarSherlockCompat.cleanActivityName(packageName, xml.getAttributeValue(i)); + if (!thisPackage.equals(activityPackage)) { + break; //on to the next + } + isOurActivity = true; + } + + //Make sure we have both attributes before processing + if ((activityLogo != null) && (activityPackage != null)) { + //Our activity, logo specified, override with our value + logo = activityLogo.intValue(); + } + } + if (isOurActivity) { + //If we matched our activity but it had no logo don't + //do any more processing of the manifest + break; + } + } + } + eventType = xml.nextToken(); + } + } catch (Exception e) { + e.printStackTrace(); + } + if (DEBUG) Log.i(TAG, "Returning " + Integer.toHexString(logo)); + return logo; + } + + /* + * Must be public so we can dispatch pre-2.2 via ActionBarImpl. + */ + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + + mTitleView = null; + mSubtitleView = null; + mTitleUpView = null; + if (mTitleLayout != null && mTitleLayout.getParent() == this) { + removeView(mTitleLayout); + } + mTitleLayout = null; + if ((mDisplayOptions & ActionBar.DISPLAY_SHOW_TITLE) != 0) { + initTitle(); + } + + if (mTabScrollView != null && mIncludeTabs) { + ViewGroup.LayoutParams lp = mTabScrollView.getLayoutParams(); + if (lp != null) { + lp.width = LayoutParams.WRAP_CONTENT; + lp.height = LayoutParams.MATCH_PARENT; + } + mTabScrollView.setAllowCollapse(true); + } + } + + /** + * Set the window callback used to invoke menu items; used for dispatching home button presses. + * @param cb Window callback to dispatch to + */ + public void setWindowCallback(Window.Callback cb) { + mWindowCallback = cb; + } + + @Override + public void onDetachedFromWindow() { + super.onDetachedFromWindow(); + //UNUSED removeCallbacks(mTabSelector); + if (mActionMenuPresenter != null) { + mActionMenuPresenter.hideOverflowMenu(); + mActionMenuPresenter.hideSubMenus(); + } + } + + @Override + public boolean shouldDelayChildPressedState() { + return false; + } + + public void initProgress() { + mProgressView = new IcsProgressBar(mContext, null, 0, mProgressStyle); + mProgressView.setId(R.id.abs__progress_horizontal); + mProgressView.setMax(10000); + addView(mProgressView); + } + + public void initIndeterminateProgress() { + mIndeterminateProgressView = new IcsProgressBar(mContext, null, 0, mIndeterminateProgressStyle); + mIndeterminateProgressView.setId(R.id.abs__progress_circular); + addView(mIndeterminateProgressView); + } + + @Override + public void setSplitActionBar(boolean splitActionBar) { + if (mSplitActionBar != splitActionBar) { + if (mMenuView != null) { + final ViewGroup oldParent = (ViewGroup) mMenuView.getParent(); + if (oldParent != null) { + oldParent.removeView(mMenuView); + } + if (splitActionBar) { + if (mSplitView != null) { + mSplitView.addView(mMenuView); + } + } else { + addView(mMenuView); + } + } + if (mSplitView != null) { + mSplitView.setVisibility(splitActionBar ? VISIBLE : GONE); + } + super.setSplitActionBar(splitActionBar); + } + } + + public boolean isSplitActionBar() { + return mSplitActionBar; + } + + public boolean hasEmbeddedTabs() { + return mIncludeTabs; + } + + public void setEmbeddedTabView(ScrollingTabContainerView tabs) { + if (mTabScrollView != null) { + removeView(mTabScrollView); + } + mTabScrollView = tabs; + mIncludeTabs = tabs != null; + if (mIncludeTabs && mNavigationMode == ActionBar.NAVIGATION_MODE_TABS) { + addView(mTabScrollView); + ViewGroup.LayoutParams lp = mTabScrollView.getLayoutParams(); + lp.width = LayoutParams.WRAP_CONTENT; + lp.height = LayoutParams.MATCH_PARENT; + tabs.setAllowCollapse(true); + } + } + + public void setCallback(OnNavigationListener callback) { + mCallback = callback; + } + + public void setMenu(Menu menu, MenuPresenter.Callback cb) { + if (menu == mOptionsMenu) return; + + if (mOptionsMenu != null) { + mOptionsMenu.removeMenuPresenter(mActionMenuPresenter); + mOptionsMenu.removeMenuPresenter(mExpandedMenuPresenter); + } + + MenuBuilder builder = (MenuBuilder) menu; + mOptionsMenu = builder; + if (mMenuView != null) { + final ViewGroup oldParent = (ViewGroup) mMenuView.getParent(); + if (oldParent != null) { + oldParent.removeView(mMenuView); + } + } + if (mActionMenuPresenter == null) { + mActionMenuPresenter = new ActionMenuPresenter(mContext); + mActionMenuPresenter.setCallback(cb); + mActionMenuPresenter.setId(R.id.abs__action_menu_presenter); + mExpandedMenuPresenter = new ExpandedActionViewMenuPresenter(); + } + + ActionMenuView menuView; + final LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, + LayoutParams.MATCH_PARENT); + if (!mSplitActionBar) { + mActionMenuPresenter.setExpandedActionViewsExclusive( + getResources_getBoolean(getContext(), + R.bool.abs__action_bar_expanded_action_views_exclusive)); + configPresenters(builder); + menuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this); + final ViewGroup oldParent = (ViewGroup) menuView.getParent(); + if (oldParent != null && oldParent != this) { + oldParent.removeView(menuView); + } + addView(menuView, layoutParams); + } else { + mActionMenuPresenter.setExpandedActionViewsExclusive(false); + // Allow full screen width in split mode. + mActionMenuPresenter.setWidthLimit( + getContext().getResources().getDisplayMetrics().widthPixels, true); + // No limit to the item count; use whatever will fit. + mActionMenuPresenter.setItemLimit(Integer.MAX_VALUE); + // Span the whole width + layoutParams.width = LayoutParams.MATCH_PARENT; + configPresenters(builder); + menuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this); + if (mSplitView != null) { + final ViewGroup oldParent = (ViewGroup) menuView.getParent(); + if (oldParent != null && oldParent != mSplitView) { + oldParent.removeView(menuView); + } + menuView.setVisibility(getAnimatedVisibility()); + mSplitView.addView(menuView, layoutParams); + } else { + // We'll add this later if we missed it this time. + menuView.setLayoutParams(layoutParams); + } + } + mMenuView = menuView; + } + + private void configPresenters(MenuBuilder builder) { + if (builder != null) { + builder.addMenuPresenter(mActionMenuPresenter); + builder.addMenuPresenter(mExpandedMenuPresenter); + } else { + mActionMenuPresenter.initForMenu(mContext, null); + mExpandedMenuPresenter.initForMenu(mContext, null); + mActionMenuPresenter.updateMenuView(true); + mExpandedMenuPresenter.updateMenuView(true); + } + } + + public boolean hasExpandedActionView() { + return mExpandedMenuPresenter != null && + mExpandedMenuPresenter.mCurrentExpandedItem != null; + } + + public void collapseActionView() { + final MenuItemImpl item = mExpandedMenuPresenter == null ? null : + mExpandedMenuPresenter.mCurrentExpandedItem; + if (item != null) { + item.collapseActionView(); + } + } + + public void setCustomNavigationView(View view) { + final boolean showCustom = (mDisplayOptions & ActionBar.DISPLAY_SHOW_CUSTOM) != 0; + if (mCustomNavView != null && showCustom) { + removeView(mCustomNavView); + } + mCustomNavView = view; + if (mCustomNavView != null && showCustom) { + addView(mCustomNavView); + } + } + + public CharSequence getTitle() { + return mTitle; + } + + /** + * Set the action bar title. This will always replace or override window titles. + * @param title Title to set + * + * @see #setWindowTitle(CharSequence) + */ + public void setTitle(CharSequence title) { + mUserTitle = true; + setTitleImpl(title); + } + + /** + * Set the window title. A window title will always be replaced or overridden by a user title. + * @param title Title to set + * + * @see #setTitle(CharSequence) + */ + public void setWindowTitle(CharSequence title) { + if (!mUserTitle) { + setTitleImpl(title); + } + } + + private void setTitleImpl(CharSequence title) { + mTitle = title; + if (mTitleView != null) { + mTitleView.setText(title); + final boolean visible = mExpandedActionView == null && + (mDisplayOptions & ActionBar.DISPLAY_SHOW_TITLE) != 0 && + (!TextUtils.isEmpty(mTitle) || !TextUtils.isEmpty(mSubtitle)); + mTitleLayout.setVisibility(visible ? VISIBLE : GONE); + } + if (mLogoNavItem != null) { + mLogoNavItem.setTitle(title); + } + } + + public CharSequence getSubtitle() { + return mSubtitle; + } + + public void setSubtitle(CharSequence subtitle) { + mSubtitle = subtitle; + if (mSubtitleView != null) { + mSubtitleView.setText(subtitle); + mSubtitleView.setVisibility(subtitle != null ? VISIBLE : GONE); + final boolean visible = mExpandedActionView == null && + (mDisplayOptions & ActionBar.DISPLAY_SHOW_TITLE) != 0 && + (!TextUtils.isEmpty(mTitle) || !TextUtils.isEmpty(mSubtitle)); + mTitleLayout.setVisibility(visible ? VISIBLE : GONE); + } + } + + public void setHomeButtonEnabled(boolean enable) { + mHomeLayout.setEnabled(enable); + mHomeLayout.setFocusable(enable); + // Make sure the home button has an accurate content description for accessibility. + if (!enable) { + mHomeLayout.setContentDescription(null); + } else if ((mDisplayOptions & ActionBar.DISPLAY_HOME_AS_UP) != 0) { + mHomeLayout.setContentDescription(mContext.getResources().getText( + R.string.abs__action_bar_up_description)); + } else { + mHomeLayout.setContentDescription(mContext.getResources().getText( + R.string.abs__action_bar_home_description)); + } + } + + public void setDisplayOptions(int options) { + final int flagsChanged = mDisplayOptions == -1 ? -1 : options ^ mDisplayOptions; + mDisplayOptions = options; + + if ((flagsChanged & DISPLAY_RELAYOUT_MASK) != 0) { + final boolean showHome = (options & ActionBar.DISPLAY_SHOW_HOME) != 0; + final int vis = showHome && mExpandedActionView == null ? VISIBLE : GONE; + mHomeLayout.setVisibility(vis); + + if ((flagsChanged & ActionBar.DISPLAY_HOME_AS_UP) != 0) { + final boolean setUp = (options & ActionBar.DISPLAY_HOME_AS_UP) != 0; + mHomeLayout.setUp(setUp); + + // Showing home as up implicitly enables interaction with it. + // In honeycomb it was always enabled, so make this transition + // a bit easier for developers in the common case. + // (It would be silly to show it as up without responding to it.) + if (setUp) { + setHomeButtonEnabled(true); + } + } + + if ((flagsChanged & ActionBar.DISPLAY_USE_LOGO) != 0) { + final boolean logoVis = mLogo != null && (options & ActionBar.DISPLAY_USE_LOGO) != 0; + mHomeLayout.setIcon(logoVis ? mLogo : mIcon); + } + + if ((flagsChanged & ActionBar.DISPLAY_SHOW_TITLE) != 0) { + if ((options & ActionBar.DISPLAY_SHOW_TITLE) != 0) { + initTitle(); + } else { + removeView(mTitleLayout); + } + } + + if (mTitleLayout != null && (flagsChanged & + (ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_HOME)) != 0) { + final boolean homeAsUp = (mDisplayOptions & ActionBar.DISPLAY_HOME_AS_UP) != 0; + mTitleUpView.setVisibility(!showHome ? (homeAsUp ? VISIBLE : INVISIBLE) : GONE); + mTitleLayout.setEnabled(!showHome && homeAsUp); + } + + if ((flagsChanged & ActionBar.DISPLAY_SHOW_CUSTOM) != 0 && mCustomNavView != null) { + if ((options & ActionBar.DISPLAY_SHOW_CUSTOM) != 0) { + addView(mCustomNavView); + } else { + removeView(mCustomNavView); + } + } + + requestLayout(); + } else { + invalidate(); + } + + // Make sure the home button has an accurate content description for accessibility. + if (!mHomeLayout.isEnabled()) { + mHomeLayout.setContentDescription(null); + } else if ((options & ActionBar.DISPLAY_HOME_AS_UP) != 0) { + mHomeLayout.setContentDescription(mContext.getResources().getText( + R.string.abs__action_bar_up_description)); + } else { + mHomeLayout.setContentDescription(mContext.getResources().getText( + R.string.abs__action_bar_home_description)); + } + } + + public void setIcon(Drawable icon) { + mIcon = icon; + if (icon != null && + ((mDisplayOptions & ActionBar.DISPLAY_USE_LOGO) == 0 || mLogo == null)) { + mHomeLayout.setIcon(icon); + } + } + + public void setIcon(int resId) { + setIcon(mContext.getResources().getDrawable(resId)); + } + + public void setLogo(Drawable logo) { + mLogo = logo; + if (logo != null && (mDisplayOptions & ActionBar.DISPLAY_USE_LOGO) != 0) { + mHomeLayout.setIcon(logo); + } + } + + public void setLogo(int resId) { + setLogo(mContext.getResources().getDrawable(resId)); + } + + public void setNavigationMode(int mode) { + final int oldMode = mNavigationMode; + if (mode != oldMode) { + switch (oldMode) { + case ActionBar.NAVIGATION_MODE_LIST: + if (mListNavLayout != null) { + removeView(mListNavLayout); + } + break; + case ActionBar.NAVIGATION_MODE_TABS: + if (mTabScrollView != null && mIncludeTabs) { + removeView(mTabScrollView); + } + } + + switch (mode) { + case ActionBar.NAVIGATION_MODE_LIST: + if (mSpinner == null) { + mSpinner = new IcsSpinner(mContext, null, + R.attr.actionDropDownStyle); + mListNavLayout = (IcsLinearLayout) LayoutInflater.from(mContext) + .inflate(R.layout.abs__action_bar_tab_bar_view, null); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); + params.gravity = Gravity.CENTER; + mListNavLayout.addView(mSpinner, params); + } + if (mSpinner.getAdapter() != mSpinnerAdapter) { + mSpinner.setAdapter(mSpinnerAdapter); + } + mSpinner.setOnItemSelectedListener(mNavItemSelectedListener); + addView(mListNavLayout); + break; + case ActionBar.NAVIGATION_MODE_TABS: + if (mTabScrollView != null && mIncludeTabs) { + addView(mTabScrollView); + } + break; + } + mNavigationMode = mode; + requestLayout(); + } + } + + public void setDropdownAdapter(SpinnerAdapter adapter) { + mSpinnerAdapter = adapter; + if (mSpinner != null) { + mSpinner.setAdapter(adapter); + } + } + + public SpinnerAdapter getDropdownAdapter() { + return mSpinnerAdapter; + } + + public void setDropdownSelectedPosition(int position) { + mSpinner.setSelection(position); + } + + public int getDropdownSelectedPosition() { + return mSpinner.getSelectedItemPosition(); + } + + public View getCustomNavigationView() { + return mCustomNavView; + } + + public int getNavigationMode() { + return mNavigationMode; + } + + public int getDisplayOptions() { + return mDisplayOptions; + } + + @Override + protected ViewGroup.LayoutParams generateDefaultLayoutParams() { + // Used by custom nav views if they don't supply layout params. Everything else + // added to an ActionBarView should have them already. + return new ActionBar.LayoutParams(DEFAULT_CUSTOM_GRAVITY); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + + addView(mHomeLayout); + + if (mCustomNavView != null && (mDisplayOptions & ActionBar.DISPLAY_SHOW_CUSTOM) != 0) { + final ViewParent parent = mCustomNavView.getParent(); + if (parent != this) { + if (parent instanceof ViewGroup) { + ((ViewGroup) parent).removeView(mCustomNavView); + } + addView(mCustomNavView); + } + } + } + + private void initTitle() { + if (mTitleLayout == null) { + LayoutInflater inflater = LayoutInflater.from(getContext()); + mTitleLayout = (LinearLayout) inflater.inflate(R.layout.abs__action_bar_title_item, + this, false); + mTitleView = (TextView) mTitleLayout.findViewById(R.id.abs__action_bar_title); + mSubtitleView = (TextView) mTitleLayout.findViewById(R.id.abs__action_bar_subtitle); + mTitleUpView = mTitleLayout.findViewById(R.id.abs__up); + + mTitleLayout.setOnClickListener(mUpClickListener); + + if (mTitleStyleRes != 0) { + mTitleView.setTextAppearance(mContext, mTitleStyleRes); + } + if (mTitle != null) { + mTitleView.setText(mTitle); + } + + if (mSubtitleStyleRes != 0) { + mSubtitleView.setTextAppearance(mContext, mSubtitleStyleRes); + } + if (mSubtitle != null) { + mSubtitleView.setText(mSubtitle); + mSubtitleView.setVisibility(VISIBLE); + } + + final boolean homeAsUp = (mDisplayOptions & ActionBar.DISPLAY_HOME_AS_UP) != 0; + final boolean showHome = (mDisplayOptions & ActionBar.DISPLAY_SHOW_HOME) != 0; + mTitleUpView.setVisibility(!showHome ? (homeAsUp ? VISIBLE : INVISIBLE) : GONE); + mTitleLayout.setEnabled(homeAsUp && !showHome); + } + + addView(mTitleLayout); + if (mExpandedActionView != null || + (TextUtils.isEmpty(mTitle) && TextUtils.isEmpty(mSubtitle))) { + // Don't show while in expanded mode or with empty text + mTitleLayout.setVisibility(GONE); + } + } + + public void setContextView(ActionBarContextView view) { + mContextView = view; + } + + public void setCollapsable(boolean collapsable) { + mIsCollapsable = collapsable; + } + + public boolean isCollapsed() { + return mIsCollapsed; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + final int childCount = getChildCount(); + if (mIsCollapsable) { + int visibleChildren = 0; + for (int i = 0; i < childCount; i++) { + final View child = getChildAt(i); + if (child.getVisibility() != GONE && + !(child == mMenuView && mMenuView.getChildCount() == 0)) { + visibleChildren++; + } + } + + if (visibleChildren == 0) { + // No size for an empty action bar when collapsable. + setMeasuredDimension(0, 0); + mIsCollapsed = true; + return; + } + } + mIsCollapsed = false; + + int widthMode = MeasureSpec.getMode(widthMeasureSpec); + if (widthMode != MeasureSpec.EXACTLY) { + throw new IllegalStateException(getClass().getSimpleName() + " can only be used " + + "with android:layout_width=\"match_parent\" (or fill_parent)"); + } + + int heightMode = MeasureSpec.getMode(heightMeasureSpec); + if (heightMode != MeasureSpec.AT_MOST) { + throw new IllegalStateException(getClass().getSimpleName() + " can only be used " + + "with android:layout_height=\"wrap_content\""); + } + + int contentWidth = MeasureSpec.getSize(widthMeasureSpec); + + int maxHeight = mContentHeight > 0 ? + mContentHeight : MeasureSpec.getSize(heightMeasureSpec); + + final int verticalPadding = getPaddingTop() + getPaddingBottom(); + final int paddingLeft = getPaddingLeft(); + final int paddingRight = getPaddingRight(); + final int height = maxHeight - verticalPadding; + final int childSpecHeight = MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST); + + int availableWidth = contentWidth - paddingLeft - paddingRight; + int leftOfCenter = availableWidth / 2; + int rightOfCenter = leftOfCenter; + + HomeView homeLayout = mExpandedActionView != null ? mExpandedHomeLayout : mHomeLayout; + + if (homeLayout.getVisibility() != GONE) { + final ViewGroup.LayoutParams lp = homeLayout.getLayoutParams(); + int homeWidthSpec; + if (lp.width < 0) { + homeWidthSpec = MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.AT_MOST); + } else { + homeWidthSpec = MeasureSpec.makeMeasureSpec(lp.width, MeasureSpec.EXACTLY); + } + homeLayout.measure(homeWidthSpec, + MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); + final int homeWidth = homeLayout.getMeasuredWidth() + homeLayout.getLeftOffset(); + availableWidth = Math.max(0, availableWidth - homeWidth); + leftOfCenter = Math.max(0, availableWidth - homeWidth); + } + + if (mMenuView != null && mMenuView.getParent() == this) { + availableWidth = measureChildView(mMenuView, availableWidth, + childSpecHeight, 0); + rightOfCenter = Math.max(0, rightOfCenter - mMenuView.getMeasuredWidth()); + } + + if (mIndeterminateProgressView != null && + mIndeterminateProgressView.getVisibility() != GONE) { + availableWidth = measureChildView(mIndeterminateProgressView, availableWidth, + childSpecHeight, 0); + rightOfCenter = Math.max(0, + rightOfCenter - mIndeterminateProgressView.getMeasuredWidth()); + } + + final boolean showTitle = mTitleLayout != null && mTitleLayout.getVisibility() != GONE && + (mDisplayOptions & ActionBar.DISPLAY_SHOW_TITLE) != 0; + + if (mExpandedActionView == null) { + switch (mNavigationMode) { + case ActionBar.NAVIGATION_MODE_LIST: + if (mListNavLayout != null) { + final int itemPaddingSize = showTitle ? mItemPadding * 2 : mItemPadding; + availableWidth = Math.max(0, availableWidth - itemPaddingSize); + leftOfCenter = Math.max(0, leftOfCenter - itemPaddingSize); + mListNavLayout.measure( + MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.AT_MOST), + MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); + final int listNavWidth = mListNavLayout.getMeasuredWidth(); + availableWidth = Math.max(0, availableWidth - listNavWidth); + leftOfCenter = Math.max(0, leftOfCenter - listNavWidth); + } + break; + case ActionBar.NAVIGATION_MODE_TABS: + if (mTabScrollView != null) { + final int itemPaddingSize = showTitle ? mItemPadding * 2 : mItemPadding; + availableWidth = Math.max(0, availableWidth - itemPaddingSize); + leftOfCenter = Math.max(0, leftOfCenter - itemPaddingSize); + mTabScrollView.measure( + MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.AT_MOST), + MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); + final int tabWidth = mTabScrollView.getMeasuredWidth(); + availableWidth = Math.max(0, availableWidth - tabWidth); + leftOfCenter = Math.max(0, leftOfCenter - tabWidth); + } + break; + } + } + + View customView = null; + if (mExpandedActionView != null) { + customView = mExpandedActionView; + } else if ((mDisplayOptions & ActionBar.DISPLAY_SHOW_CUSTOM) != 0 && + mCustomNavView != null) { + customView = mCustomNavView; + } + + if (customView != null) { + final ViewGroup.LayoutParams lp = generateLayoutParams(customView.getLayoutParams()); + final ActionBar.LayoutParams ablp = lp instanceof ActionBar.LayoutParams ? + (ActionBar.LayoutParams) lp : null; + + int horizontalMargin = 0; + int verticalMargin = 0; + if (ablp != null) { + horizontalMargin = ablp.leftMargin + ablp.rightMargin; + verticalMargin = ablp.topMargin + ablp.bottomMargin; + } + + // If the action bar is wrapping to its content height, don't allow a custom + // view to MATCH_PARENT. + int customNavHeightMode; + if (mContentHeight <= 0) { + customNavHeightMode = MeasureSpec.AT_MOST; + } else { + customNavHeightMode = lp.height != LayoutParams.WRAP_CONTENT ? + MeasureSpec.EXACTLY : MeasureSpec.AT_MOST; + } + final int customNavHeight = Math.max(0, + (lp.height >= 0 ? Math.min(lp.height, height) : height) - verticalMargin); + + final int customNavWidthMode = lp.width != LayoutParams.WRAP_CONTENT ? + MeasureSpec.EXACTLY : MeasureSpec.AT_MOST; + int customNavWidth = Math.max(0, + (lp.width >= 0 ? Math.min(lp.width, availableWidth) : availableWidth) + - horizontalMargin); + final int hgrav = (ablp != null ? ablp.gravity : DEFAULT_CUSTOM_GRAVITY) & + Gravity.HORIZONTAL_GRAVITY_MASK; + + // Centering a custom view is treated specially; we try to center within the whole + // action bar rather than in the available space. + if (hgrav == Gravity.CENTER_HORIZONTAL && lp.width == LayoutParams.MATCH_PARENT) { + customNavWidth = Math.min(leftOfCenter, rightOfCenter) * 2; + } + + customView.measure( + MeasureSpec.makeMeasureSpec(customNavWidth, customNavWidthMode), + MeasureSpec.makeMeasureSpec(customNavHeight, customNavHeightMode)); + availableWidth -= horizontalMargin + customView.getMeasuredWidth(); + } + + if (mExpandedActionView == null && showTitle) { + availableWidth = measureChildView(mTitleLayout, availableWidth, + MeasureSpec.makeMeasureSpec(mContentHeight, MeasureSpec.EXACTLY), 0); + leftOfCenter = Math.max(0, leftOfCenter - mTitleLayout.getMeasuredWidth()); + } + + if (mContentHeight <= 0) { + int measuredHeight = 0; + for (int i = 0; i < childCount; i++) { + View v = getChildAt(i); + int paddedViewHeight = v.getMeasuredHeight() + verticalPadding; + if (paddedViewHeight > measuredHeight) { + measuredHeight = paddedViewHeight; + } + } + setMeasuredDimension(contentWidth, measuredHeight); + } else { + setMeasuredDimension(contentWidth, maxHeight); + } + + if (mContextView != null) { + mContextView.setContentHeight(getMeasuredHeight()); + } + + if (mProgressView != null && mProgressView.getVisibility() != GONE) { + mProgressView.measure(MeasureSpec.makeMeasureSpec( + contentWidth - mProgressBarPadding * 2, MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(getMeasuredHeight(), MeasureSpec.AT_MOST)); + } + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + int x = getPaddingLeft(); + final int y = getPaddingTop(); + final int contentHeight = b - t - getPaddingTop() - getPaddingBottom(); + + if (contentHeight <= 0) { + // Nothing to do if we can't see anything. + return; + } + + HomeView homeLayout = mExpandedActionView != null ? mExpandedHomeLayout : mHomeLayout; + if (homeLayout.getVisibility() != GONE) { + final int leftOffset = homeLayout.getLeftOffset(); + x += positionChild(homeLayout, x + leftOffset, y, contentHeight) + leftOffset; + } + + if (mExpandedActionView == null) { + final boolean showTitle = mTitleLayout != null && mTitleLayout.getVisibility() != GONE && + (mDisplayOptions & ActionBar.DISPLAY_SHOW_TITLE) != 0; + if (showTitle) { + x += positionChild(mTitleLayout, x, y, contentHeight); + } + + switch (mNavigationMode) { + case ActionBar.NAVIGATION_MODE_STANDARD: + break; + case ActionBar.NAVIGATION_MODE_LIST: + if (mListNavLayout != null) { + if (showTitle) x += mItemPadding; + x += positionChild(mListNavLayout, x, y, contentHeight) + mItemPadding; + } + break; + case ActionBar.NAVIGATION_MODE_TABS: + if (mTabScrollView != null) { + if (showTitle) x += mItemPadding; + x += positionChild(mTabScrollView, x, y, contentHeight) + mItemPadding; + } + break; + } + } + + int menuLeft = r - l - getPaddingRight(); + if (mMenuView != null && mMenuView.getParent() == this) { + positionChildInverse(mMenuView, menuLeft, y, contentHeight); + menuLeft -= mMenuView.getMeasuredWidth(); + } + + if (mIndeterminateProgressView != null && + mIndeterminateProgressView.getVisibility() != GONE) { + positionChildInverse(mIndeterminateProgressView, menuLeft, y, contentHeight); + menuLeft -= mIndeterminateProgressView.getMeasuredWidth(); + } + + View customView = null; + if (mExpandedActionView != null) { + customView = mExpandedActionView; + } else if ((mDisplayOptions & ActionBar.DISPLAY_SHOW_CUSTOM) != 0 && + mCustomNavView != null) { + customView = mCustomNavView; + } + if (customView != null) { + ViewGroup.LayoutParams lp = customView.getLayoutParams(); + final ActionBar.LayoutParams ablp = lp instanceof ActionBar.LayoutParams ? + (ActionBar.LayoutParams) lp : null; + + final int gravity = ablp != null ? ablp.gravity : DEFAULT_CUSTOM_GRAVITY; + final int navWidth = customView.getMeasuredWidth(); + + int topMargin = 0; + int bottomMargin = 0; + if (ablp != null) { + x += ablp.leftMargin; + menuLeft -= ablp.rightMargin; + topMargin = ablp.topMargin; + bottomMargin = ablp.bottomMargin; + } + + int hgravity = gravity & Gravity.HORIZONTAL_GRAVITY_MASK; + // See if we actually have room to truly center; if not push against left or right. + if (hgravity == Gravity.CENTER_HORIZONTAL) { + final int centeredLeft = ((getRight() - getLeft()) - navWidth) / 2; + if (centeredLeft < x) { + hgravity = Gravity.LEFT; + } else if (centeredLeft + navWidth > menuLeft) { + hgravity = Gravity.RIGHT; + } + } else if (gravity == -1) { + hgravity = Gravity.LEFT; + } + + int xpos = 0; + switch (hgravity) { + case Gravity.CENTER_HORIZONTAL: + xpos = ((getRight() - getLeft()) - navWidth) / 2; + break; + case Gravity.LEFT: + xpos = x; + break; + case Gravity.RIGHT: + xpos = menuLeft - navWidth; + break; + } + + int vgravity = gravity & Gravity.VERTICAL_GRAVITY_MASK; + + if (gravity == -1) { + vgravity = Gravity.CENTER_VERTICAL; + } + + int ypos = 0; + switch (vgravity) { + case Gravity.CENTER_VERTICAL: + final int paddedTop = getPaddingTop(); + final int paddedBottom = getBottom() - getTop() - getPaddingBottom(); + ypos = ((paddedBottom - paddedTop) - customView.getMeasuredHeight()) / 2; + break; + case Gravity.TOP: + ypos = getPaddingTop() + topMargin; + break; + case Gravity.BOTTOM: + ypos = getHeight() - getPaddingBottom() - customView.getMeasuredHeight() + - bottomMargin; + break; + } + final int customWidth = customView.getMeasuredWidth(); + customView.layout(xpos, ypos, xpos + customWidth, + ypos + customView.getMeasuredHeight()); + x += customWidth; + } + + if (mProgressView != null) { + mProgressView.bringToFront(); + final int halfProgressHeight = mProgressView.getMeasuredHeight() / 2; + mProgressView.layout(mProgressBarPadding, -halfProgressHeight, + mProgressBarPadding + mProgressView.getMeasuredWidth(), halfProgressHeight); + } + } + + @Override + public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) { + return new ActionBar.LayoutParams(getContext(), attrs); + } + + @Override + public ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) { + if (lp == null) { + lp = generateDefaultLayoutParams(); + } + return lp; + } + + @Override + public Parcelable onSaveInstanceState() { + Parcelable superState = super.onSaveInstanceState(); + SavedState state = new SavedState(superState); + + if (mExpandedMenuPresenter != null && mExpandedMenuPresenter.mCurrentExpandedItem != null) { + state.expandedMenuItemId = mExpandedMenuPresenter.mCurrentExpandedItem.getItemId(); + } + + state.isOverflowOpen = isOverflowMenuShowing(); + + return state; + } + + @Override + public void onRestoreInstanceState(Parcelable p) { + SavedState state = (SavedState) p; + + super.onRestoreInstanceState(state.getSuperState()); + + if (state.expandedMenuItemId != 0 && + mExpandedMenuPresenter != null && mOptionsMenu != null) { + final MenuItem item = mOptionsMenu.findItem(state.expandedMenuItemId); + if (item != null) { + item.expandActionView(); + } + } + + if (state.isOverflowOpen) { + postShowOverflowMenu(); + } + } + + static class SavedState extends BaseSavedState { + int expandedMenuItemId; + boolean isOverflowOpen; + + SavedState(Parcelable superState) { + super(superState); + } + + private SavedState(Parcel in) { + super(in); + expandedMenuItemId = in.readInt(); + isOverflowOpen = in.readInt() != 0; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + super.writeToParcel(out, flags); + out.writeInt(expandedMenuItemId); + out.writeInt(isOverflowOpen ? 1 : 0); + } + + public static final Parcelable.Creator CREATOR = + new Parcelable.Creator() { + public SavedState createFromParcel(Parcel in) { + return new SavedState(in); + } + + public SavedState[] newArray(int size) { + return new SavedState[size]; + } + }; + } + + public static class HomeView extends FrameLayout { + private View mUpView; + private ImageView mIconView; + private int mUpWidth; + + public HomeView(Context context) { + this(context, null); + } + + public HomeView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public void setUp(boolean isUp) { + mUpView.setVisibility(isUp ? VISIBLE : GONE); + } + + public void setIcon(Drawable icon) { + mIconView.setImageDrawable(icon); + } + + @Override + public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { + onPopulateAccessibilityEvent(event); + return true; + } + + @Override + public void onPopulateAccessibilityEvent(AccessibilityEvent event) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + super.onPopulateAccessibilityEvent(event); + } + final CharSequence cdesc = getContentDescription(); + if (!TextUtils.isEmpty(cdesc)) { + event.getText().add(cdesc); + } + } + + @Override + public boolean dispatchHoverEvent(MotionEvent event) { + // Don't allow children to hover; we want this to be treated as a single component. + return onHoverEvent(event); + } + + @Override + protected void onFinishInflate() { + mUpView = findViewById(R.id.abs__up); + mIconView = (ImageView) findViewById(R.id.abs__home); + } + + public int getLeftOffset() { + return mUpView.getVisibility() == GONE ? mUpWidth : 0; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + measureChildWithMargins(mUpView, widthMeasureSpec, 0, heightMeasureSpec, 0); + final LayoutParams upLp = (LayoutParams) mUpView.getLayoutParams(); + mUpWidth = upLp.leftMargin + mUpView.getMeasuredWidth() + upLp.rightMargin; + int width = mUpView.getVisibility() == GONE ? 0 : mUpWidth; + int height = upLp.topMargin + mUpView.getMeasuredHeight() + upLp.bottomMargin; + measureChildWithMargins(mIconView, widthMeasureSpec, width, heightMeasureSpec, 0); + final LayoutParams iconLp = (LayoutParams) mIconView.getLayoutParams(); + width += iconLp.leftMargin + mIconView.getMeasuredWidth() + iconLp.rightMargin; + height = Math.max(height, + iconLp.topMargin + mIconView.getMeasuredHeight() + iconLp.bottomMargin); + + final int widthMode = MeasureSpec.getMode(widthMeasureSpec); + final int heightMode = MeasureSpec.getMode(heightMeasureSpec); + final int widthSize = MeasureSpec.getSize(widthMeasureSpec); + final int heightSize = MeasureSpec.getSize(heightMeasureSpec); + + switch (widthMode) { + case MeasureSpec.AT_MOST: + width = Math.min(width, widthSize); + break; + case MeasureSpec.EXACTLY: + width = widthSize; + break; + case MeasureSpec.UNSPECIFIED: + default: + break; + } + switch (heightMode) { + case MeasureSpec.AT_MOST: + height = Math.min(height, heightSize); + break; + case MeasureSpec.EXACTLY: + height = heightSize; + break; + case MeasureSpec.UNSPECIFIED: + default: + break; + } + setMeasuredDimension(width, height); + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + final int vCenter = (b - t) / 2; + //UNUSED int width = r - l; + int upOffset = 0; + if (mUpView.getVisibility() != GONE) { + final LayoutParams upLp = (LayoutParams) mUpView.getLayoutParams(); + final int upHeight = mUpView.getMeasuredHeight(); + final int upWidth = mUpView.getMeasuredWidth(); + final int upTop = vCenter - upHeight / 2; + mUpView.layout(0, upTop, upWidth, upTop + upHeight); + upOffset = upLp.leftMargin + upWidth + upLp.rightMargin; + //UNUSED width -= upOffset; + l += upOffset; + } + final LayoutParams iconLp = (LayoutParams) mIconView.getLayoutParams(); + final int iconHeight = mIconView.getMeasuredHeight(); + final int iconWidth = mIconView.getMeasuredWidth(); + final int hCenter = (r - l) / 2; + final int iconLeft = upOffset + Math.max(iconLp.leftMargin, hCenter - iconWidth / 2); + final int iconTop = Math.max(iconLp.topMargin, vCenter - iconHeight / 2); + mIconView.layout(iconLeft, iconTop, iconLeft + iconWidth, iconTop + iconHeight); + } + } + + private class ExpandedActionViewMenuPresenter implements MenuPresenter { + MenuBuilder mMenu; + MenuItemImpl mCurrentExpandedItem; + + @Override + public void initForMenu(Context context, MenuBuilder menu) { + // Clear the expanded action view when menus change. + if (mMenu != null && mCurrentExpandedItem != null) { + mMenu.collapseItemActionView(mCurrentExpandedItem); + } + mMenu = menu; + } + + @Override + public MenuView getMenuView(ViewGroup root) { + return null; + } + + @Override + public void updateMenuView(boolean cleared) { + // Make sure the expanded item we have is still there. + if (mCurrentExpandedItem != null) { + boolean found = false; + + if (mMenu != null) { + final int count = mMenu.size(); + for (int i = 0; i < count; i++) { + final MenuItem item = mMenu.getItem(i); + if (item == mCurrentExpandedItem) { + found = true; + break; + } + } + } + + if (!found) { + // The item we had expanded disappeared. Collapse. + collapseItemActionView(mMenu, mCurrentExpandedItem); + } + } + } + + @Override + public void setCallback(Callback cb) { + } + + @Override + public boolean onSubMenuSelected(SubMenuBuilder subMenu) { + return false; + } + + @Override + public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) { + } + + @Override + public boolean flagActionItems() { + return false; + } + + @Override + public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) { + mExpandedActionView = item.getActionView(); + mExpandedHomeLayout.setIcon(mIcon.getConstantState().newDrawable(/* TODO getResources() */)); + mCurrentExpandedItem = item; + if (mExpandedActionView.getParent() != ActionBarView.this) { + addView(mExpandedActionView); + } + if (mExpandedHomeLayout.getParent() != ActionBarView.this) { + addView(mExpandedHomeLayout); + } + mHomeLayout.setVisibility(GONE); + if (mTitleLayout != null) mTitleLayout.setVisibility(GONE); + if (mTabScrollView != null) mTabScrollView.setVisibility(GONE); + if (mSpinner != null) mSpinner.setVisibility(GONE); + if (mCustomNavView != null) mCustomNavView.setVisibility(GONE); + requestLayout(); + item.setActionViewExpanded(true); + + if (mExpandedActionView instanceof CollapsibleActionView) { + ((CollapsibleActionView) mExpandedActionView).onActionViewExpanded(); + } + + return true; + } + + @Override + public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) { + // Do this before detaching the actionview from the hierarchy, in case + // it needs to dismiss the soft keyboard, etc. + if (mExpandedActionView instanceof CollapsibleActionView) { + ((CollapsibleActionView) mExpandedActionView).onActionViewCollapsed(); + } + + removeView(mExpandedActionView); + removeView(mExpandedHomeLayout); + mExpandedActionView = null; + if ((mDisplayOptions & ActionBar.DISPLAY_SHOW_HOME) != 0) { + mHomeLayout.setVisibility(VISIBLE); + } + if ((mDisplayOptions & ActionBar.DISPLAY_SHOW_TITLE) != 0) { + if (mTitleLayout == null) { + initTitle(); + } else { + mTitleLayout.setVisibility(VISIBLE); + } + } + if (mTabScrollView != null && mNavigationMode == ActionBar.NAVIGATION_MODE_TABS) { + mTabScrollView.setVisibility(VISIBLE); + } + if (mSpinner != null && mNavigationMode == ActionBar.NAVIGATION_MODE_LIST) { + mSpinner.setVisibility(VISIBLE); + } + if (mCustomNavView != null && (mDisplayOptions & ActionBar.DISPLAY_SHOW_CUSTOM) != 0) { + mCustomNavView.setVisibility(VISIBLE); + } + mExpandedHomeLayout.setIcon(null); + mCurrentExpandedItem = null; + requestLayout(); + item.setActionViewExpanded(false); + + return true; + } + + @Override + public int getId() { + return 0; + } + + @Override + public Parcelable onSaveInstanceState() { + return null; + } + + @Override + public void onRestoreInstanceState(Parcelable state) { + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/CapitalizingButton.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/CapitalizingButton.java new file mode 100644 index 00000000..fa3698f3 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/CapitalizingButton.java @@ -0,0 +1,40 @@ +package com.actionbarsherlock.internal.widget; + +import java.util.Locale; +import android.content.Context; +import android.content.res.TypedArray; +import android.os.Build; +import android.util.AttributeSet; +import android.widget.Button; + +public class CapitalizingButton extends Button { + private static final boolean SANS_ICE_CREAM = Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH; + private static final boolean IS_GINGERBREAD = Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD; + + private static final int[] R_styleable_Button = new int[] { + android.R.attr.textAllCaps + }; + private static final int R_styleable_Button_textAllCaps = 0; + + private boolean mAllCaps; + + public CapitalizingButton(Context context, AttributeSet attrs) { + super(context, attrs); + + TypedArray a = context.obtainStyledAttributes(attrs, R_styleable_Button); + mAllCaps = a.getBoolean(R_styleable_Button_textAllCaps, true); + a.recycle(); + } + + public void setTextCompat(CharSequence text) { + if (SANS_ICE_CREAM && mAllCaps && text != null) { + if (IS_GINGERBREAD) { + setText(text.toString().toUpperCase(Locale.ROOT)); + } else { + setText(text.toString().toUpperCase()); + } + } else { + setText(text); + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/CapitalizingTextView.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/CapitalizingTextView.java new file mode 100644 index 00000000..673ec554 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/CapitalizingTextView.java @@ -0,0 +1,44 @@ +package com.actionbarsherlock.internal.widget; + +import java.util.Locale; +import android.content.Context; +import android.content.res.TypedArray; +import android.os.Build; +import android.util.AttributeSet; +import android.widget.TextView; + +public class CapitalizingTextView extends TextView { + private static final boolean SANS_ICE_CREAM = Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH; + private static final boolean IS_GINGERBREAD = Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD; + + private static final int[] R_styleable_TextView = new int[] { + android.R.attr.textAllCaps + }; + private static final int R_styleable_TextView_textAllCaps = 0; + + private boolean mAllCaps; + + public CapitalizingTextView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public CapitalizingTextView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + TypedArray a = context.obtainStyledAttributes(attrs, R_styleable_TextView, defStyle, 0); + mAllCaps = a.getBoolean(R_styleable_TextView_textAllCaps, true); + a.recycle(); + } + + public void setTextCompat(CharSequence text) { + if (SANS_ICE_CREAM && mAllCaps && text != null) { + if (IS_GINGERBREAD) { + setText(text.toString().toUpperCase(Locale.ROOT)); + } else { + setText(text.toString().toUpperCase()); + } + } else { + setText(text); + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/FakeDialogPhoneWindow.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/FakeDialogPhoneWindow.java new file mode 100644 index 00000000..ad1b4f0a --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/FakeDialogPhoneWindow.java @@ -0,0 +1,64 @@ +package com.actionbarsherlock.internal.widget; + +import static android.view.View.MeasureSpec.EXACTLY; +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.util.DisplayMetrics; +import android.util.TypedValue; +import android.widget.LinearLayout; +import com.actionbarsherlock.R; + +public class FakeDialogPhoneWindow extends LinearLayout { + final TypedValue mMinWidthMajor = new TypedValue(); + final TypedValue mMinWidthMinor = new TypedValue(); + + public FakeDialogPhoneWindow(Context context, AttributeSet attrs) { + super(context, attrs); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SherlockTheme); + + a.getValue(R.styleable.SherlockTheme_windowMinWidthMajor, mMinWidthMajor); + a.getValue(R.styleable.SherlockTheme_windowMinWidthMinor, mMinWidthMinor); + + a.recycle(); + } + + /* Stolen from PhoneWindow */ + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + final DisplayMetrics metrics = getContext().getResources().getDisplayMetrics(); + final boolean isPortrait = metrics.widthPixels < metrics.heightPixels; + + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + + int width = getMeasuredWidth(); + boolean measure = false; + + widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, EXACTLY); + + final TypedValue tv = isPortrait ? mMinWidthMinor : mMinWidthMajor; + + if (tv.type != TypedValue.TYPE_NULL) { + final int min; + if (tv.type == TypedValue.TYPE_DIMENSION) { + min = (int)tv.getDimension(metrics); + } else if (tv.type == TypedValue.TYPE_FRACTION) { + min = (int)tv.getFraction(metrics.widthPixels, metrics.widthPixels); + } else { + min = 0; + } + + if (width < min) { + widthMeasureSpec = MeasureSpec.makeMeasureSpec(min, EXACTLY); + measure = true; + } + } + + // TODO: Support height? + + if (measure) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsAbsSpinner.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsAbsSpinner.java new file mode 100644 index 00000000..ce0cb3bc --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsAbsSpinner.java @@ -0,0 +1,479 @@ +/* + * 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.widget; + +import android.content.Context; +import android.database.DataSetObserver; +import android.graphics.Rect; +import android.os.Build; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.AttributeSet; +import android.util.SparseArray; +import android.view.View; +import android.view.ViewGroup; +import android.widget.SpinnerAdapter; + +/** + * An abstract base class for spinner widgets. SDK users will probably not + * need to use this class. + * + * @attr ref android.R.styleable#AbsSpinner_entries + */ +public abstract class IcsAbsSpinner extends IcsAdapterView { + private static final boolean IS_HONEYCOMB = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; + + SpinnerAdapter mAdapter; + + int mHeightMeasureSpec; + int mWidthMeasureSpec; + boolean mBlockLayoutRequests; + + int mSelectionLeftPadding = 0; + int mSelectionTopPadding = 0; + int mSelectionRightPadding = 0; + int mSelectionBottomPadding = 0; + final Rect mSpinnerPadding = new Rect(); + + final RecycleBin mRecycler = new RecycleBin(); + private DataSetObserver mDataSetObserver; + + /** Temporary frame to hold a child View's frame rectangle */ + private Rect mTouchFrame; + + public IcsAbsSpinner(Context context) { + super(context); + initAbsSpinner(); + } + + public IcsAbsSpinner(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public IcsAbsSpinner(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + initAbsSpinner(); + + /* + TypedArray a = context.obtainStyledAttributes(attrs, + com.android.internal.R.styleable.AbsSpinner, defStyle, 0); + + CharSequence[] entries = a.getTextArray(R.styleable.AbsSpinner_entries); + if (entries != null) { + ArrayAdapter adapter = + new ArrayAdapter(context, + R.layout.simple_spinner_item, entries); + adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item); + setAdapter(adapter); + } + + a.recycle(); + */ + } + + /** + * Common code for different constructor flavors + */ + private void initAbsSpinner() { + setFocusable(true); + setWillNotDraw(false); + } + + /** + * The Adapter is used to provide the data which backs this Spinner. + * It also provides methods to transform spinner items based on their position + * relative to the selected item. + * @param adapter The SpinnerAdapter to use for this Spinner + */ + @Override + public void setAdapter(SpinnerAdapter adapter) { + if (null != mAdapter) { + mAdapter.unregisterDataSetObserver(mDataSetObserver); + resetList(); + } + + mAdapter = adapter; + + mOldSelectedPosition = INVALID_POSITION; + mOldSelectedRowId = INVALID_ROW_ID; + + if (mAdapter != null) { + mOldItemCount = mItemCount; + mItemCount = mAdapter.getCount(); + checkFocus(); + + mDataSetObserver = new AdapterDataSetObserver(); + mAdapter.registerDataSetObserver(mDataSetObserver); + + int position = mItemCount > 0 ? 0 : INVALID_POSITION; + + setSelectedPositionInt(position); + setNextSelectedPositionInt(position); + + if (mItemCount == 0) { + // Nothing selected + checkSelectionChanged(); + } + + } else { + checkFocus(); + resetList(); + // Nothing selected + checkSelectionChanged(); + } + + requestLayout(); + } + + /** + * Clear out all children from the list + */ + void resetList() { + mDataChanged = false; + mNeedSync = false; + + removeAllViewsInLayout(); + mOldSelectedPosition = INVALID_POSITION; + mOldSelectedRowId = INVALID_ROW_ID; + + setSelectedPositionInt(INVALID_POSITION); + setNextSelectedPositionInt(INVALID_POSITION); + invalidate(); + } + + /** + * @see android.view.View#measure(int, int) + * + * Figure out the dimensions of this Spinner. The width comes from + * the widthMeasureSpec as Spinnners can't have their width set to + * UNSPECIFIED. The height is based on the height of the selected item + * plus padding. + */ + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int widthMode = MeasureSpec.getMode(widthMeasureSpec); + int widthSize; + int heightSize; + + final int mPaddingLeft = getPaddingLeft(); + final int mPaddingTop = getPaddingTop(); + final int mPaddingRight = getPaddingRight(); + final int mPaddingBottom = getPaddingBottom(); + + mSpinnerPadding.left = mPaddingLeft > mSelectionLeftPadding ? mPaddingLeft + : mSelectionLeftPadding; + mSpinnerPadding.top = mPaddingTop > mSelectionTopPadding ? mPaddingTop + : mSelectionTopPadding; + mSpinnerPadding.right = mPaddingRight > mSelectionRightPadding ? mPaddingRight + : mSelectionRightPadding; + mSpinnerPadding.bottom = mPaddingBottom > mSelectionBottomPadding ? mPaddingBottom + : mSelectionBottomPadding; + + if (mDataChanged) { + handleDataChanged(); + } + + int preferredHeight = 0; + int preferredWidth = 0; + boolean needsMeasuring = true; + + int selectedPosition = getSelectedItemPosition(); + if (selectedPosition >= 0 && mAdapter != null && selectedPosition < mAdapter.getCount()) { + // Try looking in the recycler. (Maybe we were measured once already) + View view = mRecycler.get(selectedPosition); + if (view == null) { + // Make a new one + view = mAdapter.getView(selectedPosition, null, this); + } + + if (view != null) { + // Put in recycler for re-measuring and/or layout + mRecycler.put(selectedPosition, view); + } + + if (view != null) { + if (view.getLayoutParams() == null) { + mBlockLayoutRequests = true; + view.setLayoutParams(generateDefaultLayoutParams()); + mBlockLayoutRequests = false; + } + measureChild(view, widthMeasureSpec, heightMeasureSpec); + + preferredHeight = getChildHeight(view) + mSpinnerPadding.top + mSpinnerPadding.bottom; + preferredWidth = getChildWidth(view) + mSpinnerPadding.left + mSpinnerPadding.right; + + needsMeasuring = false; + } + } + + if (needsMeasuring) { + // No views -- just use padding + preferredHeight = mSpinnerPadding.top + mSpinnerPadding.bottom; + if (widthMode == MeasureSpec.UNSPECIFIED) { + preferredWidth = mSpinnerPadding.left + mSpinnerPadding.right; + } + } + + preferredHeight = Math.max(preferredHeight, getSuggestedMinimumHeight()); + preferredWidth = Math.max(preferredWidth, getSuggestedMinimumWidth()); + + if (IS_HONEYCOMB) { + heightSize = resolveSizeAndState(preferredHeight, heightMeasureSpec, 0); + widthSize = resolveSizeAndState(preferredWidth, widthMeasureSpec, 0); + } else { + heightSize = resolveSize(preferredHeight, heightMeasureSpec); + widthSize = resolveSize(preferredWidth, widthMeasureSpec); + } + + setMeasuredDimension(widthSize, heightSize); + mHeightMeasureSpec = heightMeasureSpec; + mWidthMeasureSpec = widthMeasureSpec; + } + + int getChildHeight(View child) { + return child.getMeasuredHeight(); + } + + int getChildWidth(View child) { + return child.getMeasuredWidth(); + } + + @Override + protected ViewGroup.LayoutParams generateDefaultLayoutParams() { + return new ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + + void recycleAllViews() { + final int childCount = getChildCount(); + final IcsAbsSpinner.RecycleBin recycleBin = mRecycler; + final int position = mFirstPosition; + + // All views go in recycler + for (int i = 0; i < childCount; i++) { + View v = getChildAt(i); + int index = position + i; + recycleBin.put(index, v); + } + } + + /** + * Jump directly to a specific item in the adapter data. + */ + public void setSelection(int position, boolean animate) { + // Animate only if requested position is already on screen somewhere + boolean shouldAnimate = animate && mFirstPosition <= position && + position <= mFirstPosition + getChildCount() - 1; + setSelectionInt(position, shouldAnimate); + } + + @Override + public void setSelection(int position) { + setNextSelectedPositionInt(position); + requestLayout(); + invalidate(); + } + + + /** + * Makes the item at the supplied position selected. + * + * @param position Position to select + * @param animate Should the transition be animated + * + */ + void setSelectionInt(int position, boolean animate) { + if (position != mOldSelectedPosition) { + mBlockLayoutRequests = true; + int delta = position - mSelectedPosition; + setNextSelectedPositionInt(position); + layout(delta, animate); + mBlockLayoutRequests = false; + } + } + + abstract void layout(int delta, boolean animate); + + @Override + public View getSelectedView() { + if (mItemCount > 0 && mSelectedPosition >= 0) { + return getChildAt(mSelectedPosition - mFirstPosition); + } else { + return null; + } + } + + /** + * Override to prevent spamming ourselves with layout requests + * as we place views + * + * @see android.view.View#requestLayout() + */ + @Override + public void requestLayout() { + if (!mBlockLayoutRequests) { + super.requestLayout(); + } + } + + @Override + public SpinnerAdapter getAdapter() { + return mAdapter; + } + + @Override + public int getCount() { + return mItemCount; + } + + /** + * Maps a point to a position in the list. + * + * @param x X in local coordinate + * @param y Y in local coordinate + * @return The position of the item which contains the specified point, or + * {@link #INVALID_POSITION} if the point does not intersect an item. + */ + public int pointToPosition(int x, int y) { + Rect frame = mTouchFrame; + if (frame == null) { + mTouchFrame = new Rect(); + frame = mTouchFrame; + } + + final int count = getChildCount(); + for (int i = count - 1; i >= 0; i--) { + View child = getChildAt(i); + if (child.getVisibility() == View.VISIBLE) { + child.getHitRect(frame); + if (frame.contains(x, y)) { + return mFirstPosition + i; + } + } + } + return INVALID_POSITION; + } + + static class SavedState extends BaseSavedState { + long selectedId; + int position; + + /** + * Constructor called from {@link AbsSpinner#onSaveInstanceState()} + */ + SavedState(Parcelable superState) { + super(superState); + } + + /** + * Constructor called from {@link #CREATOR} + */ + private SavedState(Parcel in) { + super(in); + selectedId = in.readLong(); + position = in.readInt(); + } + + @Override + public void writeToParcel(Parcel out, int flags) { + super.writeToParcel(out, flags); + out.writeLong(selectedId); + out.writeInt(position); + } + + @Override + public String toString() { + return "AbsSpinner.SavedState{" + + Integer.toHexString(System.identityHashCode(this)) + + " selectedId=" + selectedId + + " position=" + position + "}"; + } + + public static final Parcelable.Creator CREATOR + = new Parcelable.Creator() { + public SavedState createFromParcel(Parcel in) { + return new SavedState(in); + } + + public SavedState[] newArray(int size) { + return new SavedState[size]; + } + }; + } + + @Override + public Parcelable onSaveInstanceState() { + Parcelable superState = super.onSaveInstanceState(); + SavedState ss = new SavedState(superState); + ss.selectedId = getSelectedItemId(); + if (ss.selectedId >= 0) { + ss.position = getSelectedItemPosition(); + } else { + ss.position = INVALID_POSITION; + } + return ss; + } + + @Override + public void onRestoreInstanceState(Parcelable state) { + SavedState ss = (SavedState) state; + + super.onRestoreInstanceState(ss.getSuperState()); + + if (ss.selectedId >= 0) { + mDataChanged = true; + mNeedSync = true; + mSyncRowId = ss.selectedId; + mSyncPosition = ss.position; + mSyncMode = SYNC_SELECTED_POSITION; + requestLayout(); + } + } + + class RecycleBin { + private final SparseArray mScrapHeap = new SparseArray(); + + public void put(int position, View v) { + mScrapHeap.put(position, v); + } + + View get(int position) { + // System.out.print("Looking for " + position); + View result = mScrapHeap.get(position); + if (result != null) { + // System.out.println(" HIT"); + mScrapHeap.delete(position); + } else { + // System.out.println(" MISS"); + } + return result; + } + + void clear() { + final SparseArray scrapHeap = mScrapHeap; + final int count = scrapHeap.size(); + for (int i = 0; i < count; i++) { + final View view = scrapHeap.valueAt(i); + if (view != null) { + removeDetachedView(view, true); + } + } + scrapHeap.clear(); + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsAdapterView.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsAdapterView.java new file mode 100644 index 00000000..c786dc5c --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsAdapterView.java @@ -0,0 +1,1160 @@ +/* + * 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.widget; + +import android.content.Context; +import android.database.DataSetObserver; +import android.os.Parcelable; +import android.os.SystemClock; +import android.util.AttributeSet; +import android.util.SparseArray; +import android.view.ContextMenu; +import android.view.SoundEffectConstants; +import android.view.View; +import android.view.ViewDebug; +import android.view.ViewGroup; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityNodeInfo; +import android.widget.Adapter; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ListView; + + +/** + * An AdapterView is a view whose children are determined by an {@link Adapter}. + * + *

+ * See {@link ListView}, {@link GridView}, {@link Spinner} and + * {@link Gallery} for commonly used subclasses of AdapterView. + * + *

+ *

Developer Guides

+ *

For more information about using AdapterView, read the + * Binding to Data with AdapterView + * developer guide.

+ */ +public abstract class IcsAdapterView extends ViewGroup { + + /** + * The item view type returned by {@link Adapter#getItemViewType(int)} when + * the adapter does not want the item's view recycled. + */ + public static final int ITEM_VIEW_TYPE_IGNORE = -1; + + /** + * The item view type returned by {@link Adapter#getItemViewType(int)} when + * the item is a header or footer. + */ + public static final int ITEM_VIEW_TYPE_HEADER_OR_FOOTER = -2; + + /** + * The position of the first child displayed + */ + @ViewDebug.ExportedProperty(category = "scrolling") + int mFirstPosition = 0; + + /** + * The offset in pixels from the top of the AdapterView to the top + * of the view to select during the next layout. + */ + int mSpecificTop; + + /** + * Position from which to start looking for mSyncRowId + */ + int mSyncPosition; + + /** + * Row id to look for when data has changed + */ + long mSyncRowId = INVALID_ROW_ID; + + /** + * Height of the view when mSyncPosition and mSyncRowId where set + */ + long mSyncHeight; + + /** + * True if we need to sync to mSyncRowId + */ + boolean mNeedSync = false; + + /** + * Indicates whether to sync based on the selection or position. Possible + * values are {@link #SYNC_SELECTED_POSITION} or + * {@link #SYNC_FIRST_POSITION}. + */ + int mSyncMode; + + /** + * Our height after the last layout + */ + private int mLayoutHeight; + + /** + * Sync based on the selected child + */ + static final int SYNC_SELECTED_POSITION = 0; + + /** + * Sync based on the first child displayed + */ + static final int SYNC_FIRST_POSITION = 1; + + /** + * Maximum amount of time to spend in {@link #findSyncPosition()} + */ + static final int SYNC_MAX_DURATION_MILLIS = 100; + + /** + * Indicates that this view is currently being laid out. + */ + boolean mInLayout = false; + + /** + * The listener that receives notifications when an item is selected. + */ + OnItemSelectedListener mOnItemSelectedListener; + + /** + * The listener that receives notifications when an item is clicked. + */ + OnItemClickListener mOnItemClickListener; + + /** + * The listener that receives notifications when an item is long clicked. + */ + OnItemLongClickListener mOnItemLongClickListener; + + /** + * True if the data has changed since the last layout + */ + boolean mDataChanged; + + /** + * The position within the adapter's data set of the item to select + * during the next layout. + */ + @ViewDebug.ExportedProperty(category = "list") + int mNextSelectedPosition = INVALID_POSITION; + + /** + * The item id of the item to select during the next layout. + */ + long mNextSelectedRowId = INVALID_ROW_ID; + + /** + * The position within the adapter's data set of the currently selected item. + */ + @ViewDebug.ExportedProperty(category = "list") + int mSelectedPosition = INVALID_POSITION; + + /** + * The item id of the currently selected item. + */ + long mSelectedRowId = INVALID_ROW_ID; + + /** + * View to show if there are no items to show. + */ + private View mEmptyView; + + /** + * The number of items in the current adapter. + */ + @ViewDebug.ExportedProperty(category = "list") + int mItemCount; + + /** + * The number of items in the adapter before a data changed event occurred. + */ + int mOldItemCount; + + /** + * Represents an invalid position. All valid positions are in the range 0 to 1 less than the + * number of items in the current adapter. + */ + public static final int INVALID_POSITION = -1; + + /** + * Represents an empty or invalid row id + */ + public static final long INVALID_ROW_ID = Long.MIN_VALUE; + + /** + * The last selected position we used when notifying + */ + int mOldSelectedPosition = INVALID_POSITION; + + /** + * The id of the last selected position we used when notifying + */ + long mOldSelectedRowId = INVALID_ROW_ID; + + /** + * Indicates what focusable state is requested when calling setFocusable(). + * In addition to this, this view has other criteria for actually + * determining the focusable state (such as whether its empty or the text + * filter is shown). + * + * @see #setFocusable(boolean) + * @see #checkFocus() + */ + private boolean mDesiredFocusableState; + private boolean mDesiredFocusableInTouchModeState; + + private SelectionNotifier mSelectionNotifier; + /** + * When set to true, calls to requestLayout() will not propagate up the parent hierarchy. + * This is used to layout the children during a layout pass. + */ + boolean mBlockLayoutRequests = false; + + public IcsAdapterView(Context context) { + super(context); + } + + public IcsAdapterView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public IcsAdapterView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + /** + * Register a callback to be invoked when an item in this AdapterView has + * been clicked. + * + * @param listener The callback that will be invoked. + */ + public void setOnItemClickListener(OnItemClickListener listener) { + mOnItemClickListener = listener; + } + + /** + * @return The callback to be invoked with an item in this AdapterView has + * been clicked, or null id no callback has been set. + */ + public final OnItemClickListener getOnItemClickListener() { + return mOnItemClickListener; + } + + /** + * Call the OnItemClickListener, if it is defined. + * + * @param view The view within the AdapterView that was clicked. + * @param position The position of the view in the adapter. + * @param id The row id of the item that was clicked. + * @return True if there was an assigned OnItemClickListener that was + * called, false otherwise is returned. + */ + public boolean performItemClick(View view, int position, long id) { + if (mOnItemClickListener != null) { + playSoundEffect(SoundEffectConstants.CLICK); + if (view != null) { + view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED); + } + mOnItemClickListener.onItemClick(/*this*/null, view, position, id); + return true; + } + + return false; + } + + /** + * Interface definition for a callback to be invoked when an item in this + * view has been clicked and held. + */ + public interface OnItemLongClickListener { + /** + * Callback method to be invoked when an item in this view has been + * clicked and held. + * + * Implementers can call getItemAtPosition(position) if they need to access + * the data associated with the selected item. + * + * @param parent The AbsListView where the click happened + * @param view The view within the AbsListView that was clicked + * @param position The position of the view in the list + * @param id The row id of the item that was clicked + * + * @return true if the callback consumed the long click, false otherwise + */ + boolean onItemLongClick(IcsAdapterView parent, View view, int position, long id); + } + + + /** + * Register a callback to be invoked when an item in this AdapterView has + * been clicked and held + * + * @param listener The callback that will run + */ + public void setOnItemLongClickListener(OnItemLongClickListener listener) { + if (!isLongClickable()) { + setLongClickable(true); + } + mOnItemLongClickListener = listener; + } + + /** + * @return The callback to be invoked with an item in this AdapterView has + * been clicked and held, or null id no callback as been set. + */ + public final OnItemLongClickListener getOnItemLongClickListener() { + return mOnItemLongClickListener; + } + + /** + * Interface definition for a callback to be invoked when + * an item in this view has been selected. + */ + public interface OnItemSelectedListener { + /** + *

Callback method to be invoked when an item in this view has been + * selected. This callback is invoked only when the newly selected + * position is different from the previously selected position or if + * there was no selected item.

+ * + * Impelmenters can call getItemAtPosition(position) if they need to access the + * data associated with the selected item. + * + * @param parent The AdapterView where the selection happened + * @param view The view within the AdapterView that was clicked + * @param position The position of the view in the adapter + * @param id The row id of the item that is selected + */ + void onItemSelected(IcsAdapterView parent, View view, int position, long id); + + /** + * Callback method to be invoked when the selection disappears from this + * view. The selection can disappear for instance when touch is activated + * or when the adapter becomes empty. + * + * @param parent The AdapterView that now contains no selected item. + */ + void onNothingSelected(IcsAdapterView parent); + } + + + /** + * Register a callback to be invoked when an item in this AdapterView has + * been selected. + * + * @param listener The callback that will run + */ + public void setOnItemSelectedListener(OnItemSelectedListener listener) { + mOnItemSelectedListener = listener; + } + + public final OnItemSelectedListener getOnItemSelectedListener() { + return mOnItemSelectedListener; + } + + /** + * Extra menu information provided to the + * {@link android.view.View.OnCreateContextMenuListener#onCreateContextMenu(ContextMenu, View, ContextMenuInfo) } + * callback when a context menu is brought up for this AdapterView. + * + */ + public static class AdapterContextMenuInfo implements ContextMenu.ContextMenuInfo { + + public AdapterContextMenuInfo(View targetView, int position, long id) { + this.targetView = targetView; + this.position = position; + this.id = id; + } + + /** + * The child view for which the context menu is being displayed. This + * will be one of the children of this AdapterView. + */ + public View targetView; + + /** + * The position in the adapter for which the context menu is being + * displayed. + */ + public int position; + + /** + * The row id of the item for which the context menu is being displayed. + */ + public long id; + } + + /** + * Returns the adapter currently associated with this widget. + * + * @return The adapter used to provide this view's content. + */ + public abstract T getAdapter(); + + /** + * Sets the adapter that provides the data and the views to represent the data + * in this widget. + * + * @param adapter The adapter to use to create this view's content. + */ + public abstract void setAdapter(T adapter); + + /** + * This method is not supported and throws an UnsupportedOperationException when called. + * + * @param child Ignored. + * + * @throws UnsupportedOperationException Every time this method is invoked. + */ + @Override + public void addView(View child) { + throw new UnsupportedOperationException("addView(View) is not supported in AdapterView"); + } + + /** + * This method is not supported and throws an UnsupportedOperationException when called. + * + * @param child Ignored. + * @param index Ignored. + * + * @throws UnsupportedOperationException Every time this method is invoked. + */ + @Override + public void addView(View child, int index) { + throw new UnsupportedOperationException("addView(View, int) is not supported in AdapterView"); + } + + /** + * This method is not supported and throws an UnsupportedOperationException when called. + * + * @param child Ignored. + * @param params Ignored. + * + * @throws UnsupportedOperationException Every time this method is invoked. + */ + @Override + public void addView(View child, LayoutParams params) { + throw new UnsupportedOperationException("addView(View, LayoutParams) " + + "is not supported in AdapterView"); + } + + /** + * This method is not supported and throws an UnsupportedOperationException when called. + * + * @param child Ignored. + * @param index Ignored. + * @param params Ignored. + * + * @throws UnsupportedOperationException Every time this method is invoked. + */ + @Override + public void addView(View child, int index, LayoutParams params) { + throw new UnsupportedOperationException("addView(View, int, LayoutParams) " + + "is not supported in AdapterView"); + } + + /** + * This method is not supported and throws an UnsupportedOperationException when called. + * + * @param child Ignored. + * + * @throws UnsupportedOperationException Every time this method is invoked. + */ + @Override + public void removeView(View child) { + throw new UnsupportedOperationException("removeView(View) is not supported in AdapterView"); + } + + /** + * This method is not supported and throws an UnsupportedOperationException when called. + * + * @param index Ignored. + * + * @throws UnsupportedOperationException Every time this method is invoked. + */ + @Override + public void removeViewAt(int index) { + throw new UnsupportedOperationException("removeViewAt(int) is not supported in AdapterView"); + } + + /** + * This method is not supported and throws an UnsupportedOperationException when called. + * + * @throws UnsupportedOperationException Every time this method is invoked. + */ + @Override + public void removeAllViews() { + throw new UnsupportedOperationException("removeAllViews() is not supported in AdapterView"); + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + mLayoutHeight = getHeight(); + } + + /** + * Return the position of the currently selected item within the adapter's data set + * + * @return int Position (starting at 0), or {@link #INVALID_POSITION} if there is nothing selected. + */ + @ViewDebug.CapturedViewProperty + public int getSelectedItemPosition() { + return mNextSelectedPosition; + } + + /** + * @return The id corresponding to the currently selected item, or {@link #INVALID_ROW_ID} + * if nothing is selected. + */ + @ViewDebug.CapturedViewProperty + public long getSelectedItemId() { + return mNextSelectedRowId; + } + + /** + * @return The view corresponding to the currently selected item, or null + * if nothing is selected + */ + public abstract View getSelectedView(); + + /** + * @return The data corresponding to the currently selected item, or + * null if there is nothing selected. + */ + public Object getSelectedItem() { + T adapter = getAdapter(); + int selection = getSelectedItemPosition(); + if (adapter != null && adapter.getCount() > 0 && selection >= 0) { + return adapter.getItem(selection); + } else { + return null; + } + } + + /** + * @return The number of items owned by the Adapter associated with this + * AdapterView. (This is the number of data items, which may be + * larger than the number of visible views.) + */ + @ViewDebug.CapturedViewProperty + public int getCount() { + return mItemCount; + } + + /** + * Get the position within the adapter's data set for the view, where view is a an adapter item + * or a descendant of an adapter item. + * + * @param view an adapter item, or a descendant of an adapter item. This must be visible in this + * AdapterView at the time of the call. + * @return the position within the adapter's data set of the view, or {@link #INVALID_POSITION} + * if the view does not correspond to a list item (or it is not currently visible). + */ + public int getPositionForView(View view) { + View listItem = view; + try { + View v; + while (!(v = (View) listItem.getParent()).equals(this)) { + listItem = v; + } + } catch (ClassCastException e) { + // We made it up to the window without find this list view + return INVALID_POSITION; + } + + // Search the children for the list item + final int childCount = getChildCount(); + for (int i = 0; i < childCount; i++) { + if (getChildAt(i).equals(listItem)) { + return mFirstPosition + i; + } + } + + // Child not found! + return INVALID_POSITION; + } + + /** + * Returns the position within the adapter's data set for the first item + * displayed on screen. + * + * @return The position within the adapter's data set + */ + public int getFirstVisiblePosition() { + return mFirstPosition; + } + + /** + * Returns the position within the adapter's data set for the last item + * displayed on screen. + * + * @return The position within the adapter's data set + */ + public int getLastVisiblePosition() { + return mFirstPosition + getChildCount() - 1; + } + + /** + * Sets the currently selected item. To support accessibility subclasses that + * override this method must invoke the overriden super method first. + * + * @param position Index (starting at 0) of the data item to be selected. + */ + public abstract void setSelection(int position); + + /** + * Sets the view to show if the adapter is empty + */ + public void setEmptyView(View emptyView) { + mEmptyView = emptyView; + + final T adapter = getAdapter(); + final boolean empty = ((adapter == null) || adapter.isEmpty()); + updateEmptyStatus(empty); + } + + /** + * When the current adapter is empty, the AdapterView can display a special view + * call the empty view. The empty view is used to provide feedback to the user + * that no data is available in this AdapterView. + * + * @return The view to show if the adapter is empty. + */ + public View getEmptyView() { + return mEmptyView; + } + + /** + * Indicates whether this view is in filter mode. Filter mode can for instance + * be enabled by a user when typing on the keyboard. + * + * @return True if the view is in filter mode, false otherwise. + */ + boolean isInFilterMode() { + return false; + } + + @Override + public void setFocusable(boolean focusable) { + final T adapter = getAdapter(); + final boolean empty = adapter == null || adapter.getCount() == 0; + + mDesiredFocusableState = focusable; + if (!focusable) { + mDesiredFocusableInTouchModeState = false; + } + + super.setFocusable(focusable && (!empty || isInFilterMode())); + } + + @Override + public void setFocusableInTouchMode(boolean focusable) { + final T adapter = getAdapter(); + final boolean empty = adapter == null || adapter.getCount() == 0; + + mDesiredFocusableInTouchModeState = focusable; + if (focusable) { + mDesiredFocusableState = true; + } + + super.setFocusableInTouchMode(focusable && (!empty || isInFilterMode())); + } + + void checkFocus() { + final T adapter = getAdapter(); + final boolean empty = adapter == null || adapter.getCount() == 0; + final boolean focusable = !empty || isInFilterMode(); + // The order in which we set focusable in touch mode/focusable may matter + // for the client, see View.setFocusableInTouchMode() comments for more + // details + super.setFocusableInTouchMode(focusable && mDesiredFocusableInTouchModeState); + super.setFocusable(focusable && mDesiredFocusableState); + if (mEmptyView != null) { + updateEmptyStatus((adapter == null) || adapter.isEmpty()); + } + } + + /** + * Update the status of the list based on the empty parameter. If empty is true and + * we have an empty view, display it. In all the other cases, make sure that the listview + * is VISIBLE and that the empty view is GONE (if it's not null). + */ + private void updateEmptyStatus(boolean empty) { + if (isInFilterMode()) { + empty = false; + } + + if (empty) { + if (mEmptyView != null) { + mEmptyView.setVisibility(View.VISIBLE); + setVisibility(View.GONE); + } else { + // If the caller just removed our empty view, make sure the list view is visible + setVisibility(View.VISIBLE); + } + + // We are now GONE, so pending layouts will not be dispatched. + // Force one here to make sure that the state of the list matches + // the state of the adapter. + if (mDataChanged) { + this.onLayout(false, getLeft(), getTop(), getRight(), getBottom()); + } + } else { + if (mEmptyView != null) mEmptyView.setVisibility(View.GONE); + setVisibility(View.VISIBLE); + } + } + + /** + * Gets the data associated with the specified position in the list. + * + * @param position Which data to get + * @return The data associated with the specified position in the list + */ + public Object getItemAtPosition(int position) { + T adapter = getAdapter(); + return (adapter == null || position < 0) ? null : adapter.getItem(position); + } + + public long getItemIdAtPosition(int position) { + T adapter = getAdapter(); + return (adapter == null || position < 0) ? INVALID_ROW_ID : adapter.getItemId(position); + } + + @Override + public void setOnClickListener(OnClickListener l) { + throw new RuntimeException("Don't call setOnClickListener for an AdapterView. " + + "You probably want setOnItemClickListener instead"); + } + + /** + * Override to prevent freezing of any views created by the adapter. + */ + @Override + protected void dispatchSaveInstanceState(SparseArray container) { + dispatchFreezeSelfOnly(container); + } + + /** + * Override to prevent thawing of any views created by the adapter. + */ + @Override + protected void dispatchRestoreInstanceState(SparseArray container) { + dispatchThawSelfOnly(container); + } + + class AdapterDataSetObserver extends DataSetObserver { + + private Parcelable mInstanceState = null; + + @Override + public void onChanged() { + mDataChanged = true; + mOldItemCount = mItemCount; + mItemCount = getAdapter().getCount(); + + // Detect the case where a cursor that was previously invalidated has + // been repopulated with new data. + if (IcsAdapterView.this.getAdapter().hasStableIds() && mInstanceState != null + && mOldItemCount == 0 && mItemCount > 0) { + IcsAdapterView.this.onRestoreInstanceState(mInstanceState); + mInstanceState = null; + } else { + rememberSyncState(); + } + checkFocus(); + requestLayout(); + } + + @Override + public void onInvalidated() { + mDataChanged = true; + + if (IcsAdapterView.this.getAdapter().hasStableIds()) { + // Remember the current state for the case where our hosting activity is being + // stopped and later restarted + mInstanceState = IcsAdapterView.this.onSaveInstanceState(); + } + + // Data is invalid so we should reset our state + mOldItemCount = mItemCount; + mItemCount = 0; + mSelectedPosition = INVALID_POSITION; + mSelectedRowId = INVALID_ROW_ID; + mNextSelectedPosition = INVALID_POSITION; + mNextSelectedRowId = INVALID_ROW_ID; + mNeedSync = false; + + checkFocus(); + requestLayout(); + } + + public void clearSavedState() { + mInstanceState = null; + } + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + removeCallbacks(mSelectionNotifier); + } + + private class SelectionNotifier implements Runnable { + public void run() { + if (mDataChanged) { + // Data has changed between when this SelectionNotifier + // was posted and now. We need to wait until the AdapterView + // has been synched to the new data. + if (getAdapter() != null) { + post(this); + } + } else { + fireOnSelected(); + } + } + } + + void selectionChanged() { + if (mOnItemSelectedListener != null) { + if (mInLayout || mBlockLayoutRequests) { + // If we are in a layout traversal, defer notification + // by posting. This ensures that the view tree is + // in a consistent state and is able to accomodate + // new layout or invalidate requests. + if (mSelectionNotifier == null) { + mSelectionNotifier = new SelectionNotifier(); + } + post(mSelectionNotifier); + } else { + fireOnSelected(); + } + } + + // we fire selection events here not in View + if (mSelectedPosition != ListView.INVALID_POSITION && isShown() && !isInTouchMode()) { + sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); + } + } + + private void fireOnSelected() { + if (mOnItemSelectedListener == null) + return; + + int selection = this.getSelectedItemPosition(); + if (selection >= 0) { + View v = getSelectedView(); + mOnItemSelectedListener.onItemSelected(this, v, selection, + getAdapter().getItemId(selection)); + } else { + mOnItemSelectedListener.onNothingSelected(this); + } + } + + @Override + public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { + View selectedView = getSelectedView(); + if (selectedView != null && selectedView.getVisibility() == VISIBLE + && selectedView.dispatchPopulateAccessibilityEvent(event)) { + return true; + } + return false; + } + + @Override + public boolean onRequestSendAccessibilityEvent(View child, AccessibilityEvent event) { + if (super.onRequestSendAccessibilityEvent(child, event)) { + // Add a record for ourselves as well. + AccessibilityEvent record = AccessibilityEvent.obtain(); + onInitializeAccessibilityEvent(record); + // Populate with the text of the requesting child. + child.dispatchPopulateAccessibilityEvent(record); + event.appendRecord(record); + return true; + } + return false; + } + + @Override + public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { + super.onInitializeAccessibilityNodeInfo(info); + info.setScrollable(isScrollableForAccessibility()); + View selectedView = getSelectedView(); + if (selectedView != null) { + info.setEnabled(selectedView.isEnabled()); + } + } + + @Override + public void onInitializeAccessibilityEvent(AccessibilityEvent event) { + super.onInitializeAccessibilityEvent(event); + event.setScrollable(isScrollableForAccessibility()); + View selectedView = getSelectedView(); + if (selectedView != null) { + event.setEnabled(selectedView.isEnabled()); + } + event.setCurrentItemIndex(getSelectedItemPosition()); + event.setFromIndex(getFirstVisiblePosition()); + event.setToIndex(getLastVisiblePosition()); + event.setItemCount(getCount()); + } + + private boolean isScrollableForAccessibility() { + T adapter = getAdapter(); + if (adapter != null) { + final int itemCount = adapter.getCount(); + return itemCount > 0 + && (getFirstVisiblePosition() > 0 || getLastVisiblePosition() < itemCount - 1); + } + return false; + } + + @Override + protected boolean canAnimate() { + return super.canAnimate() && mItemCount > 0; + } + + void handleDataChanged() { + final int count = mItemCount; + boolean found = false; + + if (count > 0) { + + int newPos; + + // Find the row we are supposed to sync to + if (mNeedSync) { + // Update this first, since setNextSelectedPositionInt inspects + // it + mNeedSync = false; + + // See if we can find a position in the new data with the same + // id as the old selection + newPos = findSyncPosition(); + if (newPos >= 0) { + // Verify that new selection is selectable + int selectablePos = lookForSelectablePosition(newPos, true); + if (selectablePos == newPos) { + // Same row id is selected + setNextSelectedPositionInt(newPos); + found = true; + } + } + } + if (!found) { + // Try to use the same position if we can't find matching data + newPos = getSelectedItemPosition(); + + // Pin position to the available range + if (newPos >= count) { + newPos = count - 1; + } + if (newPos < 0) { + newPos = 0; + } + + // Make sure we select something selectable -- first look down + int selectablePos = lookForSelectablePosition(newPos, true); + if (selectablePos < 0) { + // Looking down didn't work -- try looking up + selectablePos = lookForSelectablePosition(newPos, false); + } + if (selectablePos >= 0) { + setNextSelectedPositionInt(selectablePos); + checkSelectionChanged(); + found = true; + } + } + } + if (!found) { + // Nothing is selected + mSelectedPosition = INVALID_POSITION; + mSelectedRowId = INVALID_ROW_ID; + mNextSelectedPosition = INVALID_POSITION; + mNextSelectedRowId = INVALID_ROW_ID; + mNeedSync = false; + checkSelectionChanged(); + } + } + + void checkSelectionChanged() { + if ((mSelectedPosition != mOldSelectedPosition) || (mSelectedRowId != mOldSelectedRowId)) { + selectionChanged(); + mOldSelectedPosition = mSelectedPosition; + mOldSelectedRowId = mSelectedRowId; + } + } + + /** + * Searches the adapter for a position matching mSyncRowId. The search starts at mSyncPosition + * and then alternates between moving up and moving down until 1) we find the right position, or + * 2) we run out of time, or 3) we have looked at every position + * + * @return Position of the row that matches mSyncRowId, or {@link #INVALID_POSITION} if it can't + * be found + */ + int findSyncPosition() { + int count = mItemCount; + + if (count == 0) { + return INVALID_POSITION; + } + + long idToMatch = mSyncRowId; + int seed = mSyncPosition; + + // If there isn't a selection don't hunt for it + if (idToMatch == INVALID_ROW_ID) { + return INVALID_POSITION; + } + + // Pin seed to reasonable values + seed = Math.max(0, seed); + seed = Math.min(count - 1, seed); + + long endTime = SystemClock.uptimeMillis() + SYNC_MAX_DURATION_MILLIS; + + long rowId; + + // first position scanned so far + int first = seed; + + // last position scanned so far + int last = seed; + + // True if we should move down on the next iteration + boolean next = false; + + // True when we have looked at the first item in the data + boolean hitFirst; + + // True when we have looked at the last item in the data + boolean hitLast; + + // Get the item ID locally (instead of getItemIdAtPosition), so + // we need the adapter + T adapter = getAdapter(); + if (adapter == null) { + return INVALID_POSITION; + } + + while (SystemClock.uptimeMillis() <= endTime) { + rowId = adapter.getItemId(seed); + if (rowId == idToMatch) { + // Found it! + return seed; + } + + hitLast = last == count - 1; + hitFirst = first == 0; + + if (hitLast && hitFirst) { + // Looked at everything + break; + } + + if (hitFirst || (next && !hitLast)) { + // Either we hit the top, or we are trying to move down + last++; + seed = last; + // Try going up next time + next = false; + } else if (hitLast || (!next && !hitFirst)) { + // Either we hit the bottom, or we are trying to move up + first--; + seed = first; + // Try going down next time + next = true; + } + + } + + return INVALID_POSITION; + } + + /** + * Find a position that can be selected (i.e., is not a separator). + * + * @param position The starting position to look at. + * @param lookDown Whether to look down for other positions. + * @return The next selectable position starting at position and then searching either up or + * down. Returns {@link #INVALID_POSITION} if nothing can be found. + */ + int lookForSelectablePosition(int position, boolean lookDown) { + return position; + } + + /** + * Utility to keep mSelectedPosition and mSelectedRowId in sync + * @param position Our current position + */ + void setSelectedPositionInt(int position) { + mSelectedPosition = position; + mSelectedRowId = getItemIdAtPosition(position); + } + + /** + * Utility to keep mNextSelectedPosition and mNextSelectedRowId in sync + * @param position Intended value for mSelectedPosition the next time we go + * through layout + */ + void setNextSelectedPositionInt(int position) { + mNextSelectedPosition = position; + mNextSelectedRowId = getItemIdAtPosition(position); + // If we are trying to sync to the selection, update that too + if (mNeedSync && mSyncMode == SYNC_SELECTED_POSITION && position >= 0) { + mSyncPosition = position; + mSyncRowId = mNextSelectedRowId; + } + } + + /** + * Remember enough information to restore the screen state when the data has + * changed. + * + */ + void rememberSyncState() { + if (getChildCount() > 0) { + mNeedSync = true; + mSyncHeight = mLayoutHeight; + if (mSelectedPosition >= 0) { + // Sync the selection state + View v = getChildAt(mSelectedPosition - mFirstPosition); + mSyncRowId = mNextSelectedRowId; + mSyncPosition = mNextSelectedPosition; + if (v != null) { + mSpecificTop = v.getTop(); + } + mSyncMode = SYNC_SELECTED_POSITION; + } else { + // Sync the based on the offset of the first view + View v = getChildAt(0); + T adapter = getAdapter(); + if (mFirstPosition >= 0 && mFirstPosition < adapter.getCount()) { + mSyncRowId = adapter.getItemId(mFirstPosition); + } else { + mSyncRowId = NO_ID; + } + mSyncPosition = mFirstPosition; + if (v != null) { + mSpecificTop = v.getTop(); + } + mSyncMode = SYNC_FIRST_POSITION; + } + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsLinearLayout.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsLinearLayout.java new file mode 100644 index 00000000..1b4463a5 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsLinearLayout.java @@ -0,0 +1,272 @@ +package com.actionbarsherlock.internal.widget; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.View; +import com.actionbarsherlock.internal.nineoldandroids.widget.NineLinearLayout; + +/** + * A simple extension of a regular linear layout that supports the divider API + * of Android 4.0+. The dividers are added adjacent to the children by changing + * their layout params. If you need to rely on the margins which fall in the + * same orientation as the layout you should wrap the child in a simple + * {@link android.widget.FrameLayout} so it can receive the margin. + */ +public class IcsLinearLayout extends NineLinearLayout { + private static final int[] LinearLayout = new int[] { + /* 0 */ android.R.attr.divider, + /* 1 */ android.R.attr.showDividers, + /* 2 */ android.R.attr.dividerPadding, + }; + private static final int LinearLayout_divider = 0; + private static final int LinearLayout_showDividers = 1; + private static final int LinearLayout_dividerPadding = 2; + + /** + * Don't show any dividers. + */ + public static final int SHOW_DIVIDER_NONE = 0; + /** + * Show a divider at the beginning of the group. + */ + public static final int SHOW_DIVIDER_BEGINNING = 1; + /** + * Show dividers between each item in the group. + */ + public static final int SHOW_DIVIDER_MIDDLE = 2; + /** + * Show a divider at the end of the group. + */ + public static final int SHOW_DIVIDER_END = 4; + + + private Drawable mDivider; + private int mDividerWidth; + private int mDividerHeight; + private int mShowDividers; + private int mDividerPadding; + + + public IcsLinearLayout(Context context, AttributeSet attrs) { + super(context, attrs); + + TypedArray a = context.obtainStyledAttributes(attrs, /*com.android.internal.R.styleable.*/LinearLayout); + + setDividerDrawable(a.getDrawable(/*com.android.internal.R.styleable.*/LinearLayout_divider)); + mShowDividers = a.getInt(/*com.android.internal.R.styleable.*/LinearLayout_showDividers, SHOW_DIVIDER_NONE); + mDividerPadding = a.getDimensionPixelSize(/*com.android.internal.R.styleable.*/LinearLayout_dividerPadding, 0); + + a.recycle(); + } + + /** + * Set how dividers should be shown between items in this layout + * + * @param showDividers One or more of {@link #SHOW_DIVIDER_BEGINNING}, + * {@link #SHOW_DIVIDER_MIDDLE}, or {@link #SHOW_DIVIDER_END}, + * or {@link #SHOW_DIVIDER_NONE} to show no dividers. + */ + public void setShowDividers(int showDividers) { + if (showDividers != mShowDividers) { + requestLayout(); + invalidate(); //XXX This is required if you are toggling a divider off + } + mShowDividers = showDividers; + } + + /** + * @return A flag set indicating how dividers should be shown around items. + * @see #setShowDividers(int) + */ + public int getShowDividers() { + return mShowDividers; + } + + /** + * Set a drawable to be used as a divider between items. + * @param divider Drawable that will divide each item. + * @see #setShowDividers(int) + */ + public void setDividerDrawable(Drawable divider) { + if (divider == mDivider) { + return; + } + mDivider = divider; + if (divider != null) { + mDividerWidth = divider.getIntrinsicWidth(); + mDividerHeight = divider.getIntrinsicHeight(); + } else { + mDividerWidth = 0; + mDividerHeight = 0; + } + setWillNotDraw(divider == null); + requestLayout(); + } + + /** + * Set padding displayed on both ends of dividers. + * + * @param padding Padding value in pixels that will be applied to each end + * + * @see #setShowDividers(int) + * @see #setDividerDrawable(Drawable) + * @see #getDividerPadding() + */ + public void setDividerPadding(int padding) { + mDividerPadding = padding; + } + + /** + * Get the padding size used to inset dividers in pixels + * + * @see #setShowDividers(int) + * @see #setDividerDrawable(Drawable) + * @see #setDividerPadding(int) + */ + public int getDividerPadding() { + return mDividerPadding; + } + + /** + * Get the width of the current divider drawable. + * + * @hide Used internally by framework. + */ + public int getDividerWidth() { + return mDividerWidth; + } + + @Override + protected void measureChildWithMargins(View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed) { + final int index = indexOfChild(child); + final int orientation = getOrientation(); + final LayoutParams params = (LayoutParams) child.getLayoutParams(); + if (hasDividerBeforeChildAt(index)) { + if (orientation == VERTICAL) { + //Account for the divider by pushing everything up + params.topMargin = mDividerHeight; + } else { + //Account for the divider by pushing everything left + params.leftMargin = mDividerWidth; + } + } + + final int count = getChildCount(); + if (index == count - 1) { + if (hasDividerBeforeChildAt(count)) { + if (orientation == VERTICAL) { + params.bottomMargin = mDividerHeight; + } else { + params.rightMargin = mDividerWidth; + } + } + } + super.measureChildWithMargins(child, parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed); + } + + @Override + protected void onDraw(Canvas canvas) { + if (mDivider != null) { + if (getOrientation() == VERTICAL) { + drawDividersVertical(canvas); + } else { + drawDividersHorizontal(canvas); + } + } + super.onDraw(canvas); + } + + void drawDividersVertical(Canvas canvas) { + final int count = getChildCount(); + for (int i = 0; i < count; i++) { + final View child = getChildAt(i); + + if (child != null && child.getVisibility() != GONE) { + if (hasDividerBeforeChildAt(i)) { + final LayoutParams lp = (LayoutParams) child.getLayoutParams(); + final int top = child.getTop() - lp.topMargin/* - mDividerHeight*/; + drawHorizontalDivider(canvas, top); + } + } + } + + if (hasDividerBeforeChildAt(count)) { + final View child = getChildAt(count - 1); + int bottom = 0; + if (child == null) { + bottom = getHeight() - getPaddingBottom() - mDividerHeight; + } else { + final LayoutParams lp = (LayoutParams) child.getLayoutParams(); + bottom = child.getBottom()/* + lp.bottomMargin*/; + } + drawHorizontalDivider(canvas, bottom); + } + } + + void drawDividersHorizontal(Canvas canvas) { + final int count = getChildCount(); + for (int i = 0; i < count; i++) { + final View child = getChildAt(i); + + if (child != null && child.getVisibility() != GONE) { + if (hasDividerBeforeChildAt(i)) { + final LayoutParams lp = (LayoutParams) child.getLayoutParams(); + final int left = child.getLeft() - lp.leftMargin/* - mDividerWidth*/; + drawVerticalDivider(canvas, left); + } + } + } + + if (hasDividerBeforeChildAt(count)) { + final View child = getChildAt(count - 1); + int right = 0; + if (child == null) { + right = getWidth() - getPaddingRight() - mDividerWidth; + } else { + final LayoutParams lp = (LayoutParams) child.getLayoutParams(); + right = child.getRight()/* + lp.rightMargin*/; + } + drawVerticalDivider(canvas, right); + } + } + + void drawHorizontalDivider(Canvas canvas, int top) { + mDivider.setBounds(getPaddingLeft() + mDividerPadding, top, + getWidth() - getPaddingRight() - mDividerPadding, top + mDividerHeight); + mDivider.draw(canvas); + } + + void drawVerticalDivider(Canvas canvas, int left) { + mDivider.setBounds(left, getPaddingTop() + mDividerPadding, + left + mDividerWidth, getHeight() - getPaddingBottom() - mDividerPadding); + mDivider.draw(canvas); + } + + /** + * Determines where to position dividers between children. + * + * @param childIndex Index of child to check for preceding divider + * @return true if there should be a divider before the child at childIndex + * @hide Pending API consideration. Currently only used internally by the system. + */ + protected boolean hasDividerBeforeChildAt(int childIndex) { + if (childIndex == 0) { + return (mShowDividers & SHOW_DIVIDER_BEGINNING) != 0; + } else if (childIndex == getChildCount()) { + return (mShowDividers & SHOW_DIVIDER_END) != 0; + } else if ((mShowDividers & SHOW_DIVIDER_MIDDLE) != 0) { + boolean hasVisibleViewBefore = false; + for (int i = childIndex - 1; i >= 0; i--) { + if (getChildAt(i).getVisibility() != GONE) { + hasVisibleViewBefore = true; + break; + } + } + return hasVisibleViewBefore; + } + return false; + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsListPopupWindow.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsListPopupWindow.java new file mode 100644 index 00000000..d13c6cea --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsListPopupWindow.java @@ -0,0 +1,644 @@ +package com.actionbarsherlock.internal.widget; + +import com.actionbarsherlock.R; + +import android.content.Context; +import android.content.res.Resources; +import android.database.DataSetObserver; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.ContextThemeWrapper; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.MeasureSpec; +import android.view.View.OnTouchListener; +import android.view.ViewGroup; +import android.view.ViewParent; +import android.widget.AbsListView; +import android.widget.AdapterView; +import android.widget.LinearLayout; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.PopupWindow; + +/** + * A proxy between pre- and post-Honeycomb implementations of this class. + */ +public class IcsListPopupWindow { + /** + * This value controls the length of time that the user + * must leave a pointer down without scrolling to expand + * the autocomplete dropdown list to cover the IME. + */ + private static final int EXPAND_LIST_TIMEOUT = 250; + + private Context mContext; + private PopupWindow mPopup; + private ListAdapter mAdapter; + private DropDownListView mDropDownList; + + private int mDropDownHeight = ViewGroup.LayoutParams.WRAP_CONTENT; + private int mDropDownWidth = ViewGroup.LayoutParams.WRAP_CONTENT; + private int mDropDownHorizontalOffset; + private int mDropDownVerticalOffset; + private boolean mDropDownVerticalOffsetSet; + + private int mListItemExpandMaximum = Integer.MAX_VALUE; + + private View mPromptView; + private int mPromptPosition = POSITION_PROMPT_ABOVE; + + private DataSetObserver mObserver; + + private View mDropDownAnchorView; + + private Drawable mDropDownListHighlight; + + private AdapterView.OnItemClickListener mItemClickListener; + private AdapterView.OnItemSelectedListener mItemSelectedListener; + + private final ResizePopupRunnable mResizePopupRunnable = new ResizePopupRunnable(); + private final PopupTouchInterceptor mTouchInterceptor = new PopupTouchInterceptor(); + private final PopupScrollListener mScrollListener = new PopupScrollListener(); + private final ListSelectorHider mHideSelector = new ListSelectorHider(); + + private Handler mHandler = new Handler(); + + private Rect mTempRect = new Rect(); + + private boolean mModal; + + public static final int POSITION_PROMPT_ABOVE = 0; + public static final int POSITION_PROMPT_BELOW = 1; + + public IcsListPopupWindow(Context context) { + this(context, null, R.attr.listPopupWindowStyle); + } + + public IcsListPopupWindow(Context context, AttributeSet attrs, int defStyleAttr) { + mContext = context; + mPopup = new PopupWindow(context, attrs, defStyleAttr); + mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); + } + + public IcsListPopupWindow(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + mContext = context; + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { + Context wrapped = new ContextThemeWrapper(context, defStyleRes); + mPopup = new PopupWindow(wrapped, attrs, defStyleAttr); + } else { + mPopup = new PopupWindow(context, attrs, defStyleAttr, defStyleRes); + } + mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); + } + + public void setAdapter(ListAdapter adapter) { + if (mObserver == null) { + mObserver = new PopupDataSetObserver(); + } else if (mAdapter != null) { + mAdapter.unregisterDataSetObserver(mObserver); + } + mAdapter = adapter; + if (mAdapter != null) { + adapter.registerDataSetObserver(mObserver); + } + + if (mDropDownList != null) { + mDropDownList.setAdapter(mAdapter); + } + } + + public void setPromptPosition(int position) { + mPromptPosition = position; + } + + public void setModal(boolean modal) { + mModal = true; + mPopup.setFocusable(modal); + } + + public void setBackgroundDrawable(Drawable d) { + mPopup.setBackgroundDrawable(d); + } + + public void setAnchorView(View anchor) { + mDropDownAnchorView = anchor; + } + + public void setHorizontalOffset(int offset) { + mDropDownHorizontalOffset = offset; + } + + public void setVerticalOffset(int offset) { + mDropDownVerticalOffset = offset; + mDropDownVerticalOffsetSet = true; + } + + public void setContentWidth(int width) { + Drawable popupBackground = mPopup.getBackground(); + if (popupBackground != null) { + popupBackground.getPadding(mTempRect); + mDropDownWidth = mTempRect.left + mTempRect.right + width; + } else { + mDropDownWidth = width; + } + } + + public void setOnItemClickListener(AdapterView.OnItemClickListener clickListener) { + mItemClickListener = clickListener; + } + + public void show() { + int height = buildDropDown(); + + int widthSpec = 0; + int heightSpec = 0; + + boolean noInputMethod = isInputMethodNotNeeded(); + //XXX mPopup.setAllowScrollingAnchorParent(!noInputMethod); + + if (mPopup.isShowing()) { + if (mDropDownWidth == ViewGroup.LayoutParams.MATCH_PARENT) { + // The call to PopupWindow's update method below can accept -1 for any + // value you do not want to update. + widthSpec = -1; + } else if (mDropDownWidth == ViewGroup.LayoutParams.WRAP_CONTENT) { + widthSpec = mDropDownAnchorView.getWidth(); + } else { + widthSpec = mDropDownWidth; + } + + if (mDropDownHeight == ViewGroup.LayoutParams.MATCH_PARENT) { + // The call to PopupWindow's update method below can accept -1 for any + // value you do not want to update. + heightSpec = noInputMethod ? height : ViewGroup.LayoutParams.MATCH_PARENT; + if (noInputMethod) { + mPopup.setWindowLayoutMode( + mDropDownWidth == ViewGroup.LayoutParams.MATCH_PARENT ? + ViewGroup.LayoutParams.MATCH_PARENT : 0, 0); + } else { + mPopup.setWindowLayoutMode( + mDropDownWidth == ViewGroup.LayoutParams.MATCH_PARENT ? + ViewGroup.LayoutParams.MATCH_PARENT : 0, + ViewGroup.LayoutParams.MATCH_PARENT); + } + } else if (mDropDownHeight == ViewGroup.LayoutParams.WRAP_CONTENT) { + heightSpec = height; + } else { + heightSpec = mDropDownHeight; + } + + mPopup.setOutsideTouchable(true); + + mPopup.update(mDropDownAnchorView, mDropDownHorizontalOffset, + mDropDownVerticalOffset, widthSpec, heightSpec); + } else { + if (mDropDownWidth == ViewGroup.LayoutParams.MATCH_PARENT) { + widthSpec = ViewGroup.LayoutParams.MATCH_PARENT; + } else { + if (mDropDownWidth == ViewGroup.LayoutParams.WRAP_CONTENT) { + mPopup.setWidth(mDropDownAnchorView.getWidth()); + } else { + mPopup.setWidth(mDropDownWidth); + } + } + + if (mDropDownHeight == ViewGroup.LayoutParams.MATCH_PARENT) { + heightSpec = ViewGroup.LayoutParams.MATCH_PARENT; + } else { + if (mDropDownHeight == ViewGroup.LayoutParams.WRAP_CONTENT) { + mPopup.setHeight(height); + } else { + mPopup.setHeight(mDropDownHeight); + } + } + + mPopup.setWindowLayoutMode(widthSpec, heightSpec); + //XXX mPopup.setClipToScreenEnabled(true); + + // use outside touchable to dismiss drop down when touching outside of it, so + // only set this if the dropdown is not always visible + mPopup.setOutsideTouchable(true); + mPopup.setTouchInterceptor(mTouchInterceptor); + mPopup.showAsDropDown(mDropDownAnchorView, + mDropDownHorizontalOffset, mDropDownVerticalOffset); + mDropDownList.setSelection(ListView.INVALID_POSITION); + + if (!mModal || mDropDownList.isInTouchMode()) { + clearListSelection(); + } + if (!mModal) { + mHandler.post(mHideSelector); + } + } + } + + public void dismiss() { + mPopup.dismiss(); + if (mPromptView != null) { + final ViewParent parent = mPromptView.getParent(); + if (parent instanceof ViewGroup) { + final ViewGroup group = (ViewGroup) parent; + group.removeView(mPromptView); + } + } + mPopup.setContentView(null); + mDropDownList = null; + mHandler.removeCallbacks(mResizePopupRunnable); + } + + public void setOnDismissListener(PopupWindow.OnDismissListener listener) { + mPopup.setOnDismissListener(listener); + } + + public void setInputMethodMode(int mode) { + mPopup.setInputMethodMode(mode); + } + + public void clearListSelection() { + final DropDownListView list = mDropDownList; + if (list != null) { + // WARNING: Please read the comment where mListSelectionHidden is declared + list.mListSelectionHidden = true; + //XXX list.hideSelector(); + list.requestLayout(); + } + } + + public boolean isShowing() { + return mPopup.isShowing(); + } + + private boolean isInputMethodNotNeeded() { + return mPopup.getInputMethodMode() == PopupWindow.INPUT_METHOD_NOT_NEEDED; + } + + public ListView getListView() { + return mDropDownList; + } + + private int buildDropDown() { + ViewGroup dropDownView; + int otherHeights = 0; + + if (mDropDownList == null) { + Context context = mContext; + + mDropDownList = new DropDownListView(context, !mModal); + if (mDropDownListHighlight != null) { + mDropDownList.setSelector(mDropDownListHighlight); + } + mDropDownList.setAdapter(mAdapter); + mDropDownList.setOnItemClickListener(mItemClickListener); + mDropDownList.setFocusable(true); + mDropDownList.setFocusableInTouchMode(true); + mDropDownList.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + public void onItemSelected(AdapterView parent, View view, + int position, long id) { + + if (position != -1) { + DropDownListView dropDownList = mDropDownList; + + if (dropDownList != null) { + dropDownList.mListSelectionHidden = false; + } + } + } + + public void onNothingSelected(AdapterView parent) { + } + }); + mDropDownList.setOnScrollListener(mScrollListener); + + if (mItemSelectedListener != null) { + mDropDownList.setOnItemSelectedListener(mItemSelectedListener); + } + + dropDownView = mDropDownList; + + View hintView = mPromptView; + if (hintView != null) { + // if an hint has been specified, we accomodate more space for it and + // add a text view in the drop down menu, at the bottom of the list + LinearLayout hintContainer = new LinearLayout(context); + hintContainer.setOrientation(LinearLayout.VERTICAL); + + LinearLayout.LayoutParams hintParams = new LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, 0, 1.0f + ); + + switch (mPromptPosition) { + case POSITION_PROMPT_BELOW: + hintContainer.addView(dropDownView, hintParams); + hintContainer.addView(hintView); + break; + + case POSITION_PROMPT_ABOVE: + hintContainer.addView(hintView); + hintContainer.addView(dropDownView, hintParams); + break; + + default: + break; + } + + // measure the hint's height to find how much more vertical space + // we need to add to the drop down's height + int widthSpec = MeasureSpec.makeMeasureSpec(mDropDownWidth, MeasureSpec.AT_MOST); + int heightSpec = MeasureSpec.UNSPECIFIED; + hintView.measure(widthSpec, heightSpec); + + hintParams = (LinearLayout.LayoutParams) hintView.getLayoutParams(); + otherHeights = hintView.getMeasuredHeight() + hintParams.topMargin + + hintParams.bottomMargin; + + dropDownView = hintContainer; + } + + mPopup.setContentView(dropDownView); + } else { + dropDownView = (ViewGroup) mPopup.getContentView(); + final View view = mPromptView; + if (view != null) { + LinearLayout.LayoutParams hintParams = + (LinearLayout.LayoutParams) view.getLayoutParams(); + otherHeights = view.getMeasuredHeight() + hintParams.topMargin + + hintParams.bottomMargin; + } + } + + // getMaxAvailableHeight() subtracts the padding, so we put it back + // to get the available height for the whole window + int padding = 0; + Drawable background = mPopup.getBackground(); + if (background != null) { + background.getPadding(mTempRect); + padding = mTempRect.top + mTempRect.bottom; + + // If we don't have an explicit vertical offset, determine one from the window + // background so that content will line up. + if (!mDropDownVerticalOffsetSet) { + mDropDownVerticalOffset = -mTempRect.top; + } + } + + // Max height available on the screen for a popup. + boolean ignoreBottomDecorations = + mPopup.getInputMethodMode() == PopupWindow.INPUT_METHOD_NOT_NEEDED; + final int maxHeight = /*mPopup.*/getMaxAvailableHeight( + mDropDownAnchorView, mDropDownVerticalOffset, ignoreBottomDecorations); + + if (mDropDownHeight == ViewGroup.LayoutParams.MATCH_PARENT) { + return maxHeight + padding; + } + + final int listContent = /*mDropDownList.*/measureHeightOfChildren(MeasureSpec.UNSPECIFIED, + 0, -1/*ListView.NO_POSITION*/, maxHeight - otherHeights, -1); + // add padding only if the list has items in it, that way we don't show + // the popup if it is not needed + if (listContent > 0) otherHeights += padding; + + return listContent + otherHeights; + } + + private int getMaxAvailableHeight(View anchor, int yOffset, boolean ignoreBottomDecorations) { + final Rect displayFrame = new Rect(); + anchor.getWindowVisibleDisplayFrame(displayFrame); + + final int[] anchorPos = new int[2]; + anchor.getLocationOnScreen(anchorPos); + + int bottomEdge = displayFrame.bottom; + if (ignoreBottomDecorations) { + Resources res = anchor.getContext().getResources(); + bottomEdge = res.getDisplayMetrics().heightPixels; + } + final int distanceToBottom = bottomEdge - (anchorPos[1] + anchor.getHeight()) - yOffset; + final int distanceToTop = anchorPos[1] - displayFrame.top + yOffset; + + // anchorPos[1] is distance from anchor to top of screen + int returnedHeight = Math.max(distanceToBottom, distanceToTop); + if (mPopup.getBackground() != null) { + mPopup.getBackground().getPadding(mTempRect); + returnedHeight -= mTempRect.top + mTempRect.bottom; + } + + return returnedHeight; + } + + private int measureHeightOfChildren(int widthMeasureSpec, int startPosition, int endPosition, + final int maxHeight, int disallowPartialChildPosition) { + + final ListAdapter adapter = mAdapter; + if (adapter == null) { + return mDropDownList.getListPaddingTop() + mDropDownList.getListPaddingBottom(); + } + + // Include the padding of the list + int returnedHeight = mDropDownList.getListPaddingTop() + mDropDownList.getListPaddingBottom(); + final int dividerHeight = ((mDropDownList.getDividerHeight() > 0) && mDropDownList.getDivider() != null) ? mDropDownList.getDividerHeight() : 0; + // The previous height value that was less than maxHeight and contained + // no partial children + int prevHeightWithoutPartialChild = 0; + int i; + View child; + + // mItemCount - 1 since endPosition parameter is inclusive + endPosition = (endPosition == -1/*NO_POSITION*/) ? adapter.getCount() - 1 : endPosition; + + for (i = startPosition; i <= endPosition; ++i) { + child = mAdapter.getView(i, null, mDropDownList); + if (mDropDownList.getCacheColorHint() != 0) { + child.setDrawingCacheBackgroundColor(mDropDownList.getCacheColorHint()); + } + + measureScrapChild(child, i, widthMeasureSpec); + + if (i > 0) { + // Count the divider for all but one child + returnedHeight += dividerHeight; + } + + returnedHeight += child.getMeasuredHeight(); + + if (returnedHeight >= maxHeight) { + // We went over, figure out which height to return. If returnedHeight > maxHeight, + // then the i'th position did not fit completely. + return (disallowPartialChildPosition >= 0) // Disallowing is enabled (> -1) + && (i > disallowPartialChildPosition) // We've past the min pos + && (prevHeightWithoutPartialChild > 0) // We have a prev height + && (returnedHeight != maxHeight) // i'th child did not fit completely + ? prevHeightWithoutPartialChild + : maxHeight; + } + + if ((disallowPartialChildPosition >= 0) && (i >= disallowPartialChildPosition)) { + prevHeightWithoutPartialChild = returnedHeight; + } + } + + // At this point, we went through the range of children, and they each + // completely fit, so return the returnedHeight + return returnedHeight; + } + private void measureScrapChild(View child, int position, int widthMeasureSpec) { + ListView.LayoutParams p = (ListView.LayoutParams) child.getLayoutParams(); + if (p == null) { + p = new ListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, 0); + child.setLayoutParams(p); + } + //XXX p.viewType = mAdapter.getItemViewType(position); + //XXX p.forceAdd = true; + + int childWidthSpec = ViewGroup.getChildMeasureSpec(widthMeasureSpec, + mDropDownList.getPaddingLeft() + mDropDownList.getPaddingRight(), p.width); + int lpHeight = p.height; + int childHeightSpec; + if (lpHeight > 0) { + childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY); + } else { + childHeightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); + } + child.measure(childWidthSpec, childHeightSpec); + } + + private static class DropDownListView extends ListView { + /* + * WARNING: This is a workaround for a touch mode issue. + * + * Touch mode is propagated lazily to windows. This causes problems in + * the following scenario: + * - Type something in the AutoCompleteTextView and get some results + * - Move down with the d-pad to select an item in the list + * - Move up with the d-pad until the selection disappears + * - Type more text in the AutoCompleteTextView *using the soft keyboard* + * and get new results; you are now in touch mode + * - The selection comes back on the first item in the list, even though + * the list is supposed to be in touch mode + * + * Using the soft keyboard triggers the touch mode change but that change + * is propagated to our window only after the first list layout, therefore + * after the list attempts to resurrect the selection. + * + * The trick to work around this issue is to pretend the list is in touch + * mode when we know that the selection should not appear, that is when + * we know the user moved the selection away from the list. + * + * This boolean is set to true whenever we explicitly hide the list's + * selection and reset to false whenever we know the user moved the + * selection back to the list. + * + * When this boolean is true, isInTouchMode() returns true, otherwise it + * returns super.isInTouchMode(). + */ + private boolean mListSelectionHidden; + + private boolean mHijackFocus; + + public DropDownListView(Context context, boolean hijackFocus) { + super(context, null, /*com.android.internal.*/R.attr.dropDownListViewStyle); + mHijackFocus = hijackFocus; + // TODO: Add an API to control this + setCacheColorHint(0); // Transparent, since the background drawable could be anything. + } + + //XXX @Override + //View obtainView(int position, boolean[] isScrap) { + // View view = super.obtainView(position, isScrap); + + // if (view instanceof TextView) { + // ((TextView) view).setHorizontallyScrolling(true); + // } + + // return view; + //} + + @Override + public boolean isInTouchMode() { + // WARNING: Please read the comment where mListSelectionHidden is declared + return (mHijackFocus && mListSelectionHidden) || super.isInTouchMode(); + } + + @Override + public boolean hasWindowFocus() { + return mHijackFocus || super.hasWindowFocus(); + } + + @Override + public boolean isFocused() { + return mHijackFocus || super.isFocused(); + } + + @Override + public boolean hasFocus() { + return mHijackFocus || super.hasFocus(); + } + } + + private class PopupDataSetObserver extends DataSetObserver { + @Override + public void onChanged() { + if (isShowing()) { + // Resize the popup to fit new content + show(); + } + } + + @Override + public void onInvalidated() { + dismiss(); + } + } + + private class ListSelectorHider implements Runnable { + public void run() { + clearListSelection(); + } + } + + private class ResizePopupRunnable implements Runnable { + public void run() { + if (mDropDownList != null && mDropDownList.getCount() > mDropDownList.getChildCount() && + mDropDownList.getChildCount() <= mListItemExpandMaximum) { + mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED); + show(); + } + } + } + + private class PopupTouchInterceptor implements OnTouchListener { + public boolean onTouch(View v, MotionEvent event) { + final int action = event.getAction(); + final int x = (int) event.getX(); + final int y = (int) event.getY(); + + if (action == MotionEvent.ACTION_DOWN && + mPopup != null && mPopup.isShowing() && + (x >= 0 && x < mPopup.getWidth() && y >= 0 && y < mPopup.getHeight())) { + mHandler.postDelayed(mResizePopupRunnable, EXPAND_LIST_TIMEOUT); + } else if (action == MotionEvent.ACTION_UP) { + mHandler.removeCallbacks(mResizePopupRunnable); + } + return false; + } + } + + private class PopupScrollListener implements ListView.OnScrollListener { + public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, + int totalItemCount) { + + } + + public void onScrollStateChanged(AbsListView view, int scrollState) { + if (scrollState == SCROLL_STATE_TOUCH_SCROLL && + !isInputMethodNotNeeded() && mPopup.getContentView() != null) { + mHandler.removeCallbacks(mResizePopupRunnable); + mResizePopupRunnable.run(); + } + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsProgressBar.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsProgressBar.java new file mode 100644 index 00000000..1c02d4ac --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsProgressBar.java @@ -0,0 +1,1193 @@ +/* + * 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.widget; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.BitmapShader; +import android.graphics.Canvas; +import android.graphics.Rect; +import android.graphics.Shader; +import android.graphics.drawable.Animatable; +import android.graphics.drawable.AnimationDrawable; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.ClipDrawable; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.LayerDrawable; +import android.graphics.drawable.ShapeDrawable; +import android.graphics.drawable.shapes.RoundRectShape; +import android.graphics.drawable.shapes.Shape; +import android.os.Build; +import android.os.Parcel; +import android.os.Parcelable; +import android.os.SystemClock; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.View; +import android.view.ViewDebug; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityManager; +import android.view.animation.AlphaAnimation; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.view.animation.Interpolator; +import android.view.animation.LinearInterpolator; +import android.view.animation.Transformation; +import android.widget.RemoteViews.RemoteView; + + +/** + *

+ * Visual indicator of progress in some operation. Displays a bar to the user + * representing how far the operation has progressed; the application can + * change the amount of progress (modifying the length of the bar) as it moves + * forward. There is also a secondary progress displayable on a progress bar + * which is useful for displaying intermediate progress, such as the buffer + * level during a streaming playback progress bar. + *

+ * + *

+ * A progress bar can also be made indeterminate. In indeterminate mode, the + * progress bar shows a cyclic animation without an indication of progress. This mode is used by + * applications when the length of the task is unknown. The indeterminate progress bar can be either + * a spinning wheel or a horizontal bar. + *

+ * + *

The following code example shows how a progress bar can be used from + * a worker thread to update the user interface to notify the user of progress: + *

+ * + *
+ * public class MyActivity extends Activity {
+ *     private static final int PROGRESS = 0x1;
+ *
+ *     private ProgressBar mProgress;
+ *     private int mProgressStatus = 0;
+ *
+ *     private Handler mHandler = new Handler();
+ *
+ *     protected void onCreate(Bundle icicle) {
+ *         super.onCreate(icicle);
+ *
+ *         setContentView(R.layout.progressbar_activity);
+ *
+ *         mProgress = (ProgressBar) findViewById(R.id.progress_bar);
+ *
+ *         // Start lengthy operation in a background thread
+ *         new Thread(new Runnable() {
+ *             public void run() {
+ *                 while (mProgressStatus < 100) {
+ *                     mProgressStatus = doWork();
+ *
+ *                     // Update the progress bar
+ *                     mHandler.post(new Runnable() {
+ *                         public void run() {
+ *                             mProgress.setProgress(mProgressStatus);
+ *                         }
+ *                     });
+ *                 }
+ *             }
+ *         }).start();
+ *     }
+ * }
+ * + *

To add a progress bar to a layout file, you can use the {@code <ProgressBar>} element. + * By default, the progress bar is a spinning wheel (an indeterminate indicator). To change to a + * horizontal progress bar, apply the {@link android.R.style#Widget_ProgressBar_Horizontal + * Widget.ProgressBar.Horizontal} style, like so:

+ * + *
+ * <ProgressBar
+ *     style="@android:style/Widget.ProgressBar.Horizontal"
+ *     ... />
+ * + *

If you will use the progress bar to show real progress, you must use the horizontal bar. You + * can then increment the progress with {@link #incrementProgressBy incrementProgressBy()} or + * {@link #setProgress setProgress()}. By default, the progress bar is full when it reaches 100. If + * necessary, you can adjust the maximum value (the value for a full bar) using the {@link + * android.R.styleable#ProgressBar_max android:max} attribute. Other attributes available are listed + * below.

+ * + *

Another common style to apply to the progress bar is {@link + * android.R.style#Widget_ProgressBar_Small Widget.ProgressBar.Small}, which shows a smaller + * version of the spinning wheel—useful when waiting for content to load. + * For example, you can insert this kind of progress bar into your default layout for + * a view that will be populated by some content fetched from the Internet—the spinning wheel + * appears immediately and when your application receives the content, it replaces the progress bar + * with the loaded content. For example:

+ * + *
+ * <LinearLayout
+ *     android:orientation="horizontal"
+ *     ... >
+ *     <ProgressBar
+ *         android:layout_width="wrap_content"
+ *         android:layout_height="wrap_content"
+ *         style="@android:style/Widget.ProgressBar.Small"
+ *         android:layout_marginRight="5dp" />
+ *     <TextView
+ *         android:layout_width="wrap_content"
+ *         android:layout_height="wrap_content"
+ *         android:text="@string/loading" />
+ * </LinearLayout>
+ * + *

Other progress bar styles provided by the system include:

+ *
    + *
  • {@link android.R.style#Widget_ProgressBar_Horizontal Widget.ProgressBar.Horizontal}
  • + *
  • {@link android.R.style#Widget_ProgressBar_Small Widget.ProgressBar.Small}
  • + *
  • {@link android.R.style#Widget_ProgressBar_Large Widget.ProgressBar.Large}
  • + *
  • {@link android.R.style#Widget_ProgressBar_Inverse Widget.ProgressBar.Inverse}
  • + *
  • {@link android.R.style#Widget_ProgressBar_Small_Inverse + * Widget.ProgressBar.Small.Inverse}
  • + *
  • {@link android.R.style#Widget_ProgressBar_Large_Inverse + * Widget.ProgressBar.Large.Inverse}
  • + *
+ *

The "inverse" styles provide an inverse color scheme for the spinner, which may be necessary + * if your application uses a light colored theme (a white background).

+ * + *

+ * See {@link android.R.styleable#ProgressBar ProgressBar Attributes}, + * {@link android.R.styleable#View View Attributes} + *

+ * + * @attr ref android.R.styleable#ProgressBar_animationResolution + * @attr ref android.R.styleable#ProgressBar_indeterminate + * @attr ref android.R.styleable#ProgressBar_indeterminateBehavior + * @attr ref android.R.styleable#ProgressBar_indeterminateDrawable + * @attr ref android.R.styleable#ProgressBar_indeterminateDuration + * @attr ref android.R.styleable#ProgressBar_indeterminateOnly + * @attr ref android.R.styleable#ProgressBar_interpolator + * @attr ref android.R.styleable#ProgressBar_max + * @attr ref android.R.styleable#ProgressBar_maxHeight + * @attr ref android.R.styleable#ProgressBar_maxWidth + * @attr ref android.R.styleable#ProgressBar_minHeight + * @attr ref android.R.styleable#ProgressBar_minWidth + * @attr ref android.R.styleable#ProgressBar_progress + * @attr ref android.R.styleable#ProgressBar_progressDrawable + * @attr ref android.R.styleable#ProgressBar_secondaryProgress + */ +@RemoteView +public class IcsProgressBar extends View { + private static final boolean IS_HONEYCOMB = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; + private static final int MAX_LEVEL = 10000; + private static final int ANIMATION_RESOLUTION = 200; + private static final int TIMEOUT_SEND_ACCESSIBILITY_EVENT = 200; + + private static final int[] ProgressBar = new int[] { + android.R.attr.maxWidth, + android.R.attr.maxHeight, + android.R.attr.max, + android.R.attr.progress, + android.R.attr.secondaryProgress, + android.R.attr.indeterminate, + android.R.attr.indeterminateOnly, + android.R.attr.indeterminateDrawable, + android.R.attr.progressDrawable, + android.R.attr.indeterminateDuration, + android.R.attr.indeterminateBehavior, + android.R.attr.minWidth, + android.R.attr.minHeight, + android.R.attr.interpolator, + android.R.attr.animationResolution, + }; + private static final int ProgressBar_maxWidth = 0; + private static final int ProgressBar_maxHeight = 1; + private static final int ProgressBar_max = 2; + private static final int ProgressBar_progress = 3; + private static final int ProgressBar_secondaryProgress = 4; + private static final int ProgressBar_indeterminate = 5; + private static final int ProgressBar_indeterminateOnly = 6; + private static final int ProgressBar_indeterminateDrawable = 7; + private static final int ProgressBar_progressDrawable = 8; + private static final int ProgressBar_indeterminateDuration = 9; + private static final int ProgressBar_indeterminateBehavior = 10; + private static final int ProgressBar_minWidth = 11; + private static final int ProgressBar_minHeight = 12; + private static final int ProgressBar_interpolator = 13; + private static final int ProgressBar_animationResolution = 14; + + int mMinWidth; + int mMaxWidth; + int mMinHeight; + int mMaxHeight; + + private int mProgress; + private int mSecondaryProgress; + private int mMax; + + private int mBehavior; + private int mDuration; + private boolean mIndeterminate; + private boolean mOnlyIndeterminate; + private Transformation mTransformation; + private AlphaAnimation mAnimation; + private Drawable mIndeterminateDrawable; + private int mIndeterminateRealLeft; + private int mIndeterminateRealTop; + private Drawable mProgressDrawable; + private Drawable mCurrentDrawable; + Bitmap mSampleTile; + private boolean mNoInvalidate; + private Interpolator mInterpolator; + private RefreshProgressRunnable mRefreshProgressRunnable; + private long mUiThreadId; + private boolean mShouldStartAnimationDrawable; + private long mLastDrawTime; + + private boolean mInDrawing; + + private int mAnimationResolution; + + private AccessibilityManager mAccessibilityManager; + private AccessibilityEventSender mAccessibilityEventSender; + + /** + * Create a new progress bar with range 0...100 and initial progress of 0. + * @param context the application environment + */ + public IcsProgressBar(Context context) { + this(context, null); + } + + public IcsProgressBar(Context context, AttributeSet attrs) { + this(context, attrs, android.R.attr.progressBarStyle); + } + + public IcsProgressBar(Context context, AttributeSet attrs, int defStyle) { + this(context, attrs, defStyle, 0); + } + + /** + * @hide + */ + public IcsProgressBar(Context context, AttributeSet attrs, int defStyle, int styleRes) { + super(context, attrs, defStyle); + mUiThreadId = Thread.currentThread().getId(); + initProgressBar(); + + TypedArray a = + context.obtainStyledAttributes(attrs, /*R.styleable.*/ProgressBar, defStyle, styleRes); + + mNoInvalidate = true; + + Drawable drawable = a.getDrawable(/*R.styleable.*/ProgressBar_progressDrawable); + if (drawable != null) { + drawable = tileify(drawable, false); + // Calling this method can set mMaxHeight, make sure the corresponding + // XML attribute for mMaxHeight is read after calling this method + setProgressDrawable(drawable); + } + + + mDuration = a.getInt(/*R.styleable.*/ProgressBar_indeterminateDuration, mDuration); + + mMinWidth = a.getDimensionPixelSize(/*R.styleable.*/ProgressBar_minWidth, mMinWidth); + mMaxWidth = a.getDimensionPixelSize(/*R.styleable.*/ProgressBar_maxWidth, mMaxWidth); + mMinHeight = a.getDimensionPixelSize(/*R.styleable.*/ProgressBar_minHeight, mMinHeight); + mMaxHeight = a.getDimensionPixelSize(/*R.styleable.*/ProgressBar_maxHeight, mMaxHeight); + + mBehavior = a.getInt(/*R.styleable.*/ProgressBar_indeterminateBehavior, mBehavior); + + final int resID = a.getResourceId( + /*com.android.internal.R.styleable.*/ProgressBar_interpolator, + android.R.anim.linear_interpolator); // default to linear interpolator + if (resID > 0) { + setInterpolator(context, resID); + } + + setMax(a.getInt(/*R.styleable.*/ProgressBar_max, mMax)); + + setProgress(a.getInt(/*R.styleable.*/ProgressBar_progress, mProgress)); + + setSecondaryProgress( + a.getInt(/*R.styleable.*/ProgressBar_secondaryProgress, mSecondaryProgress)); + + drawable = a.getDrawable(/*R.styleable.*/ProgressBar_indeterminateDrawable); + if (drawable != null) { + drawable = tileifyIndeterminate(drawable); + setIndeterminateDrawable(drawable); + } + + mOnlyIndeterminate = a.getBoolean( + /*R.styleable.*/ProgressBar_indeterminateOnly, mOnlyIndeterminate); + + mNoInvalidate = false; + + setIndeterminate(mOnlyIndeterminate || a.getBoolean( + /*R.styleable.*/ProgressBar_indeterminate, mIndeterminate)); + + mAnimationResolution = a.getInteger(/*R.styleable.*/ProgressBar_animationResolution, + ANIMATION_RESOLUTION); + + a.recycle(); + + mAccessibilityManager = (AccessibilityManager)context.getSystemService(Context.ACCESSIBILITY_SERVICE); + } + + /** + * Converts a drawable to a tiled version of itself. It will recursively + * traverse layer and state list drawables. + */ + private Drawable tileify(Drawable drawable, boolean clip) { + + if (drawable instanceof LayerDrawable) { + LayerDrawable background = (LayerDrawable) drawable; + final int N = background.getNumberOfLayers(); + Drawable[] outDrawables = new Drawable[N]; + + for (int i = 0; i < N; i++) { + int id = background.getId(i); + outDrawables[i] = tileify(background.getDrawable(i), + (id == android.R.id.progress || id == android.R.id.secondaryProgress)); + } + + LayerDrawable newBg = new LayerDrawable(outDrawables); + + for (int i = 0; i < N; i++) { + newBg.setId(i, background.getId(i)); + } + + return newBg; + + }/* else if (drawable instanceof StateListDrawable) { + StateListDrawable in = (StateListDrawable) drawable; + StateListDrawable out = new StateListDrawable(); + int numStates = in.getStateCount(); + for (int i = 0; i < numStates; i++) { + out.addState(in.getStateSet(i), tileify(in.getStateDrawable(i), clip)); + } + return out; + + }*/ else if (drawable instanceof BitmapDrawable) { + final Bitmap tileBitmap = ((BitmapDrawable) drawable).getBitmap(); + if (mSampleTile == null) { + mSampleTile = tileBitmap; + } + + final ShapeDrawable shapeDrawable = new ShapeDrawable(getDrawableShape()); + + final BitmapShader bitmapShader = new BitmapShader(tileBitmap, + Shader.TileMode.REPEAT, Shader.TileMode.CLAMP); + shapeDrawable.getPaint().setShader(bitmapShader); + + return (clip) ? new ClipDrawable(shapeDrawable, Gravity.LEFT, + ClipDrawable.HORIZONTAL) : shapeDrawable; + } + + return drawable; + } + + Shape getDrawableShape() { + final float[] roundedCorners = new float[] { 5, 5, 5, 5, 5, 5, 5, 5 }; + return new RoundRectShape(roundedCorners, null, null); + } + + /** + * Convert a AnimationDrawable for use as a barberpole animation. + * Each frame of the animation is wrapped in a ClipDrawable and + * given a tiling BitmapShader. + */ + private Drawable tileifyIndeterminate(Drawable drawable) { + if (drawable instanceof AnimationDrawable) { + AnimationDrawable background = (AnimationDrawable) drawable; + final int N = background.getNumberOfFrames(); + AnimationDrawable newBg = new AnimationDrawable(); + newBg.setOneShot(background.isOneShot()); + + for (int i = 0; i < N; i++) { + Drawable frame = tileify(background.getFrame(i), true); + frame.setLevel(10000); + newBg.addFrame(frame, background.getDuration(i)); + } + newBg.setLevel(10000); + drawable = newBg; + } + return drawable; + } + + /** + *

+ * Initialize the progress bar's default values: + *

+ *
    + *
  • progress = 0
  • + *
  • max = 100
  • + *
  • animation duration = 4000 ms
  • + *
  • indeterminate = false
  • + *
  • behavior = repeat
  • + *
+ */ + private void initProgressBar() { + mMax = 100; + mProgress = 0; + mSecondaryProgress = 0; + mIndeterminate = false; + mOnlyIndeterminate = false; + mDuration = 4000; + mBehavior = AlphaAnimation.RESTART; + mMinWidth = 24; + mMaxWidth = 48; + mMinHeight = 24; + mMaxHeight = 48; + } + + /** + *

Indicate whether this progress bar is in indeterminate mode.

+ * + * @return true if the progress bar is in indeterminate mode + */ + @ViewDebug.ExportedProperty(category = "progress") + public synchronized boolean isIndeterminate() { + return mIndeterminate; + } + + /** + *

Change the indeterminate mode for this progress bar. In indeterminate + * mode, the progress is ignored and the progress bar shows an infinite + * animation instead.

+ * + * If this progress bar's style only supports indeterminate mode (such as the circular + * progress bars), then this will be ignored. + * + * @param indeterminate true to enable the indeterminate mode + */ + public synchronized void setIndeterminate(boolean indeterminate) { + if ((!mOnlyIndeterminate || !mIndeterminate) && indeterminate != mIndeterminate) { + mIndeterminate = indeterminate; + + if (indeterminate) { + // swap between indeterminate and regular backgrounds + mCurrentDrawable = mIndeterminateDrawable; + startAnimation(); + } else { + mCurrentDrawable = mProgressDrawable; + stopAnimation(); + } + } + } + + /** + *

Get the drawable used to draw the progress bar in + * indeterminate mode.

+ * + * @return a {@link android.graphics.drawable.Drawable} instance + * + * @see #setIndeterminateDrawable(android.graphics.drawable.Drawable) + * @see #setIndeterminate(boolean) + */ + public Drawable getIndeterminateDrawable() { + return mIndeterminateDrawable; + } + + /** + *

Define the drawable used to draw the progress bar in + * indeterminate mode.

+ * + * @param d the new drawable + * + * @see #getIndeterminateDrawable() + * @see #setIndeterminate(boolean) + */ + public void setIndeterminateDrawable(Drawable d) { + if (d != null) { + d.setCallback(this); + } + mIndeterminateDrawable = d; + if (mIndeterminate) { + mCurrentDrawable = d; + postInvalidate(); + } + } + + /** + *

Get the drawable used to draw the progress bar in + * progress mode.

+ * + * @return a {@link android.graphics.drawable.Drawable} instance + * + * @see #setProgressDrawable(android.graphics.drawable.Drawable) + * @see #setIndeterminate(boolean) + */ + public Drawable getProgressDrawable() { + return mProgressDrawable; + } + + /** + *

Define the drawable used to draw the progress bar in + * progress mode.

+ * + * @param d the new drawable + * + * @see #getProgressDrawable() + * @see #setIndeterminate(boolean) + */ + public void setProgressDrawable(Drawable d) { + boolean needUpdate; + if (mProgressDrawable != null && d != mProgressDrawable) { + mProgressDrawable.setCallback(null); + needUpdate = true; + } else { + needUpdate = false; + } + + if (d != null) { + d.setCallback(this); + + // Make sure the ProgressBar is always tall enough + int drawableHeight = d.getMinimumHeight(); + if (mMaxHeight < drawableHeight) { + mMaxHeight = drawableHeight; + requestLayout(); + } + } + mProgressDrawable = d; + if (!mIndeterminate) { + mCurrentDrawable = d; + postInvalidate(); + } + + if (needUpdate) { + updateDrawableBounds(getWidth(), getHeight()); + updateDrawableState(); + doRefreshProgress(android.R.id.progress, mProgress, false, false); + doRefreshProgress(android.R.id.secondaryProgress, mSecondaryProgress, false, false); + } + } + + /** + * @return The drawable currently used to draw the progress bar + */ + Drawable getCurrentDrawable() { + return mCurrentDrawable; + } + + @Override + protected boolean verifyDrawable(Drawable who) { + return who == mProgressDrawable || who == mIndeterminateDrawable + || super.verifyDrawable(who); + } + + @Override + public void jumpDrawablesToCurrentState() { + super.jumpDrawablesToCurrentState(); + if (mProgressDrawable != null) mProgressDrawable.jumpToCurrentState(); + if (mIndeterminateDrawable != null) mIndeterminateDrawable.jumpToCurrentState(); + } + + @Override + public void postInvalidate() { + if (!mNoInvalidate) { + super.postInvalidate(); + } + } + + private class RefreshProgressRunnable implements Runnable { + + private int mId; + private int mProgress; + private boolean mFromUser; + + RefreshProgressRunnable(int id, int progress, boolean fromUser) { + mId = id; + mProgress = progress; + mFromUser = fromUser; + } + + public void run() { + doRefreshProgress(mId, mProgress, mFromUser, true); + // Put ourselves back in the cache when we are done + mRefreshProgressRunnable = this; + } + + public void setup(int id, int progress, boolean fromUser) { + mId = id; + mProgress = progress; + mFromUser = fromUser; + } + + } + + private synchronized void doRefreshProgress(int id, int progress, boolean fromUser, + boolean callBackToApp) { + float scale = mMax > 0 ? (float) progress / (float) mMax : 0; + final Drawable d = mCurrentDrawable; + if (d != null) { + Drawable progressDrawable = null; + + if (d instanceof LayerDrawable) { + progressDrawable = ((LayerDrawable) d).findDrawableByLayerId(id); + } + + final int level = (int) (scale * MAX_LEVEL); + (progressDrawable != null ? progressDrawable : d).setLevel(level); + } else { + invalidate(); + } + + if (callBackToApp && id == android.R.id.progress) { + onProgressRefresh(scale, fromUser); + } + } + + void onProgressRefresh(float scale, boolean fromUser) { + if (mAccessibilityManager.isEnabled()) { + scheduleAccessibilityEventSender(); + } + } + + private synchronized void refreshProgress(int id, int progress, boolean fromUser) { + if (mUiThreadId == Thread.currentThread().getId()) { + doRefreshProgress(id, progress, fromUser, true); + } else { + RefreshProgressRunnable r; + if (mRefreshProgressRunnable != null) { + // Use cached RefreshProgressRunnable if available + r = mRefreshProgressRunnable; + // Uncache it + mRefreshProgressRunnable = null; + r.setup(id, progress, fromUser); + } else { + // Make a new one + r = new RefreshProgressRunnable(id, progress, fromUser); + } + post(r); + } + } + + /** + *

Set the current progress to the specified value. Does not do anything + * if the progress bar is in indeterminate mode.

+ * + * @param progress the new progress, between 0 and {@link #getMax()} + * + * @see #setIndeterminate(boolean) + * @see #isIndeterminate() + * @see #getProgress() + * @see #incrementProgressBy(int) + */ + public synchronized void setProgress(int progress) { + setProgress(progress, false); + } + + synchronized void setProgress(int progress, boolean fromUser) { + if (mIndeterminate) { + return; + } + + if (progress < 0) { + progress = 0; + } + + if (progress > mMax) { + progress = mMax; + } + + if (progress != mProgress) { + mProgress = progress; + refreshProgress(android.R.id.progress, mProgress, fromUser); + } + } + + /** + *

+ * Set the current secondary progress to the specified value. Does not do + * anything if the progress bar is in indeterminate mode. + *

+ * + * @param secondaryProgress the new secondary progress, between 0 and {@link #getMax()} + * @see #setIndeterminate(boolean) + * @see #isIndeterminate() + * @see #getSecondaryProgress() + * @see #incrementSecondaryProgressBy(int) + */ + public synchronized void setSecondaryProgress(int secondaryProgress) { + if (mIndeterminate) { + return; + } + + if (secondaryProgress < 0) { + secondaryProgress = 0; + } + + if (secondaryProgress > mMax) { + secondaryProgress = mMax; + } + + if (secondaryProgress != mSecondaryProgress) { + mSecondaryProgress = secondaryProgress; + refreshProgress(android.R.id.secondaryProgress, mSecondaryProgress, false); + } + } + + /** + *

Get the progress bar's current level of progress. Return 0 when the + * progress bar is in indeterminate mode.

+ * + * @return the current progress, between 0 and {@link #getMax()} + * + * @see #setIndeterminate(boolean) + * @see #isIndeterminate() + * @see #setProgress(int) + * @see #setMax(int) + * @see #getMax() + */ + @ViewDebug.ExportedProperty(category = "progress") + public synchronized int getProgress() { + return mIndeterminate ? 0 : mProgress; + } + + /** + *

Get the progress bar's current level of secondary progress. Return 0 when the + * progress bar is in indeterminate mode.

+ * + * @return the current secondary progress, between 0 and {@link #getMax()} + * + * @see #setIndeterminate(boolean) + * @see #isIndeterminate() + * @see #setSecondaryProgress(int) + * @see #setMax(int) + * @see #getMax() + */ + @ViewDebug.ExportedProperty(category = "progress") + public synchronized int getSecondaryProgress() { + return mIndeterminate ? 0 : mSecondaryProgress; + } + + /** + *

Return the upper limit of this progress bar's range.

+ * + * @return a positive integer + * + * @see #setMax(int) + * @see #getProgress() + * @see #getSecondaryProgress() + */ + @ViewDebug.ExportedProperty(category = "progress") + public synchronized int getMax() { + return mMax; + } + + /** + *

Set the range of the progress bar to 0...max.

+ * + * @param max the upper range of this progress bar + * + * @see #getMax() + * @see #setProgress(int) + * @see #setSecondaryProgress(int) + */ + public synchronized void setMax(int max) { + if (max < 0) { + max = 0; + } + if (max != mMax) { + mMax = max; + postInvalidate(); + + if (mProgress > max) { + mProgress = max; + } + refreshProgress(android.R.id.progress, mProgress, false); + } + } + + /** + *

Increase the progress bar's progress by the specified amount.

+ * + * @param diff the amount by which the progress must be increased + * + * @see #setProgress(int) + */ + public synchronized final void incrementProgressBy(int diff) { + setProgress(mProgress + diff); + } + + /** + *

Increase the progress bar's secondary progress by the specified amount.

+ * + * @param diff the amount by which the secondary progress must be increased + * + * @see #setSecondaryProgress(int) + */ + public synchronized final void incrementSecondaryProgressBy(int diff) { + setSecondaryProgress(mSecondaryProgress + diff); + } + + /** + *

Start the indeterminate progress animation.

+ */ + void startAnimation() { + if (getVisibility() != VISIBLE) { + return; + } + + if (mIndeterminateDrawable instanceof Animatable) { + mShouldStartAnimationDrawable = true; + mAnimation = null; + } else { + if (mInterpolator == null) { + mInterpolator = new LinearInterpolator(); + } + + mTransformation = new Transformation(); + mAnimation = new AlphaAnimation(0.0f, 1.0f); + mAnimation.setRepeatMode(mBehavior); + mAnimation.setRepeatCount(Animation.INFINITE); + mAnimation.setDuration(mDuration); + mAnimation.setInterpolator(mInterpolator); + mAnimation.setStartTime(Animation.START_ON_FIRST_FRAME); + } + postInvalidate(); + } + + /** + *

Stop the indeterminate progress animation.

+ */ + void stopAnimation() { + mAnimation = null; + mTransformation = null; + if (mIndeterminateDrawable instanceof Animatable) { + ((Animatable) mIndeterminateDrawable).stop(); + mShouldStartAnimationDrawable = false; + } + postInvalidate(); + } + + /** + * Sets the acceleration curve for the indeterminate animation. + * The interpolator is loaded as a resource from the specified context. + * + * @param context The application environment + * @param resID The resource identifier of the interpolator to load + */ + public void setInterpolator(Context context, int resID) { + setInterpolator(AnimationUtils.loadInterpolator(context, resID)); + } + + /** + * Sets the acceleration curve for the indeterminate animation. + * Defaults to a linear interpolation. + * + * @param interpolator The interpolator which defines the acceleration curve + */ + public void setInterpolator(Interpolator interpolator) { + mInterpolator = interpolator; + } + + /** + * Gets the acceleration curve type for the indeterminate animation. + * + * @return the {@link Interpolator} associated to this animation + */ + public Interpolator getInterpolator() { + return mInterpolator; + } + + @Override + public void setVisibility(int v) { + if (getVisibility() != v) { + super.setVisibility(v); + + if (mIndeterminate) { + // let's be nice with the UI thread + if (v == GONE || v == INVISIBLE) { + stopAnimation(); + } else { + startAnimation(); + } + } + } + } + + @Override + protected void onVisibilityChanged(View changedView, int visibility) { + super.onVisibilityChanged(changedView, visibility); + + if (mIndeterminate) { + // let's be nice with the UI thread + if (visibility == GONE || visibility == INVISIBLE) { + stopAnimation(); + } else { + startAnimation(); + } + } + } + + @Override + public void invalidateDrawable(Drawable dr) { + if (!mInDrawing) { + if (verifyDrawable(dr)) { + final Rect dirty = dr.getBounds(); + final int scrollX = getScrollX() + getPaddingLeft(); + final int scrollY = getScrollY() + getPaddingTop(); + + invalidate(dirty.left + scrollX, dirty.top + scrollY, + dirty.right + scrollX, dirty.bottom + scrollY); + } else { + super.invalidateDrawable(dr); + } + } + } + + /** + * @hide + * + @Override + public int getResolvedLayoutDirection(Drawable who) { + return (who == mProgressDrawable || who == mIndeterminateDrawable) ? + getResolvedLayoutDirection() : super.getResolvedLayoutDirection(who); + } + */ + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + updateDrawableBounds(w, h); + } + + private void updateDrawableBounds(int w, int h) { + // onDraw will translate the canvas so we draw starting at 0,0 + int right = w - getPaddingRight() - getPaddingLeft(); + int bottom = h - getPaddingBottom() - getPaddingTop(); + int top = 0; + int left = 0; + + if (mIndeterminateDrawable != null) { + // Aspect ratio logic does not apply to AnimationDrawables + if (mOnlyIndeterminate && !(mIndeterminateDrawable instanceof AnimationDrawable)) { + // Maintain aspect ratio. Certain kinds of animated drawables + // get very confused otherwise. + final int intrinsicWidth = mIndeterminateDrawable.getIntrinsicWidth(); + final int intrinsicHeight = mIndeterminateDrawable.getIntrinsicHeight(); + final float intrinsicAspect = (float) intrinsicWidth / intrinsicHeight; + final float boundAspect = (float) w / h; + if (intrinsicAspect != boundAspect) { + if (boundAspect > intrinsicAspect) { + // New width is larger. Make it smaller to match height. + final int width = (int) (h * intrinsicAspect); + left = (w - width) / 2; + right = left + width; + } else { + // New height is larger. Make it smaller to match width. + final int height = (int) (w * (1 / intrinsicAspect)); + top = (h - height) / 2; + bottom = top + height; + } + } + } + mIndeterminateDrawable.setBounds(0, 0, right - left, bottom - top); + mIndeterminateRealLeft = left; + mIndeterminateRealTop = top; + } + + if (mProgressDrawable != null) { + mProgressDrawable.setBounds(0, 0, right, bottom); + } + } + + @Override + protected synchronized void onDraw(Canvas canvas) { + super.onDraw(canvas); + + Drawable d = mCurrentDrawable; + if (d != null) { + // Translate canvas so a indeterminate circular progress bar with padding + // rotates properly in its animation + canvas.save(); + canvas.translate(getPaddingLeft() + mIndeterminateRealLeft, getPaddingTop() + mIndeterminateRealTop); + long time = getDrawingTime(); + if (mAnimation != null) { + mAnimation.getTransformation(time, mTransformation); + float scale = mTransformation.getAlpha(); + try { + mInDrawing = true; + d.setLevel((int) (scale * MAX_LEVEL)); + } finally { + mInDrawing = false; + } + if (SystemClock.uptimeMillis() - mLastDrawTime >= mAnimationResolution) { + mLastDrawTime = SystemClock.uptimeMillis(); + postInvalidateDelayed(mAnimationResolution); + } + } + d.draw(canvas); + canvas.restore(); + if (mShouldStartAnimationDrawable && d instanceof Animatable) { + ((Animatable) d).start(); + mShouldStartAnimationDrawable = false; + } + } + } + + @Override + protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + Drawable d = mCurrentDrawable; + + int dw = 0; + int dh = 0; + if (d != null) { + dw = Math.max(mMinWidth, Math.min(mMaxWidth, d.getIntrinsicWidth())); + dh = Math.max(mMinHeight, Math.min(mMaxHeight, d.getIntrinsicHeight())); + } + updateDrawableState(); + dw += getPaddingLeft() + getPaddingRight(); + dh += getPaddingTop() + getPaddingBottom(); + + if (IS_HONEYCOMB) { + setMeasuredDimension(View.resolveSizeAndState(dw, widthMeasureSpec, 0), + View.resolveSizeAndState(dh, heightMeasureSpec, 0)); + } else { + setMeasuredDimension(View.resolveSize(dw, widthMeasureSpec), + View.resolveSize(dh, heightMeasureSpec)); + } + } + + @Override + protected void drawableStateChanged() { + super.drawableStateChanged(); + updateDrawableState(); + } + + private void updateDrawableState() { + int[] state = getDrawableState(); + + if (mProgressDrawable != null && mProgressDrawable.isStateful()) { + mProgressDrawable.setState(state); + } + + if (mIndeterminateDrawable != null && mIndeterminateDrawable.isStateful()) { + mIndeterminateDrawable.setState(state); + } + } + + static class SavedState extends BaseSavedState { + int progress; + int secondaryProgress; + + /** + * Constructor called from {@link IcsProgressBar#onSaveInstanceState()} + */ + SavedState(Parcelable superState) { + super(superState); + } + + /** + * Constructor called from {@link #CREATOR} + */ + private SavedState(Parcel in) { + super(in); + progress = in.readInt(); + secondaryProgress = in.readInt(); + } + + @Override + public void writeToParcel(Parcel out, int flags) { + super.writeToParcel(out, flags); + out.writeInt(progress); + out.writeInt(secondaryProgress); + } + + public static final Parcelable.Creator CREATOR + = new Parcelable.Creator() { + public SavedState createFromParcel(Parcel in) { + return new SavedState(in); + } + + public SavedState[] newArray(int size) { + return new SavedState[size]; + } + }; + } + + @Override + public Parcelable onSaveInstanceState() { + // Force our ancestor class to save its state + Parcelable superState = super.onSaveInstanceState(); + SavedState ss = new SavedState(superState); + + ss.progress = mProgress; + ss.secondaryProgress = mSecondaryProgress; + + return ss; + } + + @Override + public void onRestoreInstanceState(Parcelable state) { + SavedState ss = (SavedState) state; + super.onRestoreInstanceState(ss.getSuperState()); + + setProgress(ss.progress); + setSecondaryProgress(ss.secondaryProgress); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + if (mIndeterminate) { + startAnimation(); + } + } + + @Override + protected void onDetachedFromWindow() { + if (mIndeterminate) { + stopAnimation(); + } + if(mRefreshProgressRunnable != null) { + removeCallbacks(mRefreshProgressRunnable); + } + if (mAccessibilityEventSender != null) { + removeCallbacks(mAccessibilityEventSender); + } + // This should come after stopAnimation(), otherwise an invalidate message remains in the + // queue, which can prevent the entire view hierarchy from being GC'ed during a rotation + super.onDetachedFromWindow(); + } + + @Override + public void onInitializeAccessibilityEvent(AccessibilityEvent event) { + super.onInitializeAccessibilityEvent(event); + event.setItemCount(mMax); + event.setCurrentItemIndex(mProgress); + } + + /** + * Schedule a command for sending an accessibility event. + *
+ * Note: A command is used to ensure that accessibility events + * are sent at most one in a given time frame to save + * system resources while the progress changes quickly. + */ + private void scheduleAccessibilityEventSender() { + if (mAccessibilityEventSender == null) { + mAccessibilityEventSender = new AccessibilityEventSender(); + } else { + removeCallbacks(mAccessibilityEventSender); + } + postDelayed(mAccessibilityEventSender, TIMEOUT_SEND_ACCESSIBILITY_EVENT); + } + + /** + * Command for sending an accessibility event. + */ + private class AccessibilityEventSender implements Runnable { + public void run() { + sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsSpinner.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsSpinner.java new file mode 100644 index 00000000..038d1e03 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsSpinner.java @@ -0,0 +1,703 @@ +/* + * 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.internal.widget; + +import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; +import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; +import com.actionbarsherlock.R; +import android.content.Context; +import android.content.DialogInterface; +import android.content.DialogInterface.OnClickListener; +import android.content.res.TypedArray; +import android.database.DataSetObserver; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.PopupWindow; +import android.widget.SpinnerAdapter; + + +/** + * A view that displays one child at a time and lets the user pick among them. + * The items in the Spinner come from the {@link Adapter} associated with + * this view. + * + *

See the Spinner + * tutorial.

+ * + * @attr ref android.R.styleable#Spinner_prompt + */ +public class IcsSpinner extends IcsAbsSpinner implements OnClickListener { + //private static final String TAG = "Spinner"; + + // Only measure this many items to get a decent max width. + private static final int MAX_ITEMS_MEASURED = 15; + + /** + * Use a dialog window for selecting spinner options. + */ + //public static final int MODE_DIALOG = 0; + + /** + * Use a dropdown anchored to the Spinner for selecting spinner options. + */ + public static final int MODE_DROPDOWN = 1; + + /** + * Use the theme-supplied value to select the dropdown mode. + */ + //private static final int MODE_THEME = -1; + + private SpinnerPopup mPopup; + private DropDownAdapter mTempAdapter; + int mDropDownWidth; + + private int mGravity; + private boolean mDisableChildrenWhenDisabled; + + private Rect mTempRect = new Rect(); + + public IcsSpinner(Context context, AttributeSet attrs) { + this(context, attrs, R.attr.actionDropDownStyle); + } + + /** + * Construct a new spinner with the given context's theme, the supplied attribute set, + * and default style. + * + * @param context The Context the view is running in, through which it can + * access the current theme, resources, etc. + * @param attrs The attributes of the XML tag that is inflating the view. + * @param defStyle The default style to apply to this view. If 0, no style + * will be applied (beyond what is included in the theme). This may + * either be an attribute resource, whose value will be retrieved + * from the current theme, or an explicit style resource. + */ + public IcsSpinner(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + TypedArray a = context.obtainStyledAttributes(attrs, + R.styleable.SherlockSpinner, defStyle, 0); + + + DropdownPopup popup = new DropdownPopup(context, attrs, defStyle); + + mDropDownWidth = a.getLayoutDimension( + R.styleable.SherlockSpinner_android_dropDownWidth, + ViewGroup.LayoutParams.WRAP_CONTENT); + popup.setBackgroundDrawable(a.getDrawable( + R.styleable.SherlockSpinner_android_popupBackground)); + final int verticalOffset = a.getDimensionPixelOffset( + R.styleable.SherlockSpinner_android_dropDownVerticalOffset, 0); + if (verticalOffset != 0) { + popup.setVerticalOffset(verticalOffset); + } + + final int horizontalOffset = a.getDimensionPixelOffset( + R.styleable.SherlockSpinner_android_dropDownHorizontalOffset, 0); + if (horizontalOffset != 0) { + popup.setHorizontalOffset(horizontalOffset); + } + + mPopup = popup; + + mGravity = a.getInt(R.styleable.SherlockSpinner_android_gravity, Gravity.CENTER); + + mPopup.setPromptText(a.getString(R.styleable.SherlockSpinner_android_prompt)); + + mDisableChildrenWhenDisabled = true; + + a.recycle(); + + // Base constructor can call setAdapter before we initialize mPopup. + // Finish setting things up if this happened. + if (mTempAdapter != null) { + mPopup.setAdapter(mTempAdapter); + mTempAdapter = null; + } + } + + @Override + public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + if (mDisableChildrenWhenDisabled) { + final int count = getChildCount(); + for (int i = 0; i < count; i++) { + getChildAt(i).setEnabled(enabled); + } + } + } + + /** + * Describes how the selected item view is positioned. Currently only the horizontal component + * is used. The default is determined by the current theme. + * + * @param gravity See {@link android.view.Gravity} + * + * @attr ref android.R.styleable#Spinner_gravity + */ + public void setGravity(int gravity) { + if (mGravity != gravity) { + if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) == 0) { + gravity |= Gravity.LEFT; + } + mGravity = gravity; + requestLayout(); + } + } + + @Override + public void setAdapter(SpinnerAdapter adapter) { + super.setAdapter(adapter); + + if (mPopup != null) { + mPopup.setAdapter(new DropDownAdapter(adapter)); + } else { + mTempAdapter = new DropDownAdapter(adapter); + } + } + + @Override + public int getBaseline() { + View child = null; + + if (getChildCount() > 0) { + child = getChildAt(0); + } else if (mAdapter != null && mAdapter.getCount() > 0) { + child = makeAndAddView(0); + mRecycler.put(0, child); + removeAllViewsInLayout(); + } + + if (child != null) { + final int childBaseline = child.getBaseline(); + return childBaseline >= 0 ? child.getTop() + childBaseline : -1; + } else { + return -1; + } + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + + if (mPopup != null && mPopup.isShowing()) { + mPopup.dismiss(); + } + } + + /** + *

A spinner does not support item click events. Calling this method + * will raise an exception.

+ * + * @param l this listener will be ignored + */ + @Override + public void setOnItemClickListener(OnItemClickListener l) { + throw new RuntimeException("setOnItemClickListener cannot be used with a spinner."); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + if (mPopup != null && MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.AT_MOST) { + final int measuredWidth = getMeasuredWidth(); + setMeasuredDimension(Math.min(Math.max(measuredWidth, + measureContentWidth(getAdapter(), getBackground())), + MeasureSpec.getSize(widthMeasureSpec)), + getMeasuredHeight()); + } + } + + /** + * @see android.view.View#onLayout(boolean,int,int,int,int) + * + * Creates and positions all views + * + */ + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + mInLayout = true; + layout(0, false); + mInLayout = false; + } + + /** + * Creates and positions all views for this Spinner. + * + * @param delta Change in the selected position. +1 moves selection is moving to the right, + * so views are scrolling to the left. -1 means selection is moving to the left. + */ + @Override + void layout(int delta, boolean animate) { + int childrenLeft = mSpinnerPadding.left; + int childrenWidth = getRight() - getLeft() - mSpinnerPadding.left - mSpinnerPadding.right; + + if (mDataChanged) { + handleDataChanged(); + } + + // Handle the empty set by removing all views + if (mItemCount == 0) { + resetList(); + return; + } + + if (mNextSelectedPosition >= 0) { + setSelectedPositionInt(mNextSelectedPosition); + } + + recycleAllViews(); + + // Clear out old views + removeAllViewsInLayout(); + + // Make selected view and position it + mFirstPosition = mSelectedPosition; + View sel = makeAndAddView(mSelectedPosition); + int width = sel.getMeasuredWidth(); + int selectedOffset = childrenLeft; + switch (mGravity & Gravity.HORIZONTAL_GRAVITY_MASK) { + case Gravity.CENTER_HORIZONTAL: + selectedOffset = childrenLeft + (childrenWidth / 2) - (width / 2); + break; + case Gravity.RIGHT: + selectedOffset = childrenLeft + childrenWidth - width; + break; + } + sel.offsetLeftAndRight(selectedOffset); + + // Flush any cached views that did not get reused above + mRecycler.clear(); + + invalidate(); + + checkSelectionChanged(); + + mDataChanged = false; + mNeedSync = false; + setNextSelectedPositionInt(mSelectedPosition); + } + + /** + * Obtain a view, either by pulling an existing view from the recycler or + * by getting a new one from the adapter. If we are animating, make sure + * there is enough information in the view's layout parameters to animate + * from the old to new positions. + * + * @param position Position in the spinner for the view to obtain + * @return A view that has been added to the spinner + */ + private View makeAndAddView(int position) { + + View child; + + if (!mDataChanged) { + child = mRecycler.get(position); + if (child != null) { + // Position the view + setUpChild(child); + + return child; + } + } + + // Nothing found in the recycler -- ask the adapter for a view + child = mAdapter.getView(position, null, this); + + // Position the view + setUpChild(child); + + return child; + } + + /** + * Helper for makeAndAddView to set the position of a view + * and fill out its layout paramters. + * + * @param child The view to position + */ + private void setUpChild(View child) { + + // Respect layout params that are already in the view. Otherwise + // make some up... + ViewGroup.LayoutParams lp = child.getLayoutParams(); + if (lp == null) { + lp = generateDefaultLayoutParams(); + } + + addViewInLayout(child, 0, lp); + + child.setSelected(hasFocus()); + if (mDisableChildrenWhenDisabled) { + child.setEnabled(isEnabled()); + } + + // Get measure specs + int childHeightSpec = ViewGroup.getChildMeasureSpec(mHeightMeasureSpec, + mSpinnerPadding.top + mSpinnerPadding.bottom, lp.height); + int childWidthSpec = ViewGroup.getChildMeasureSpec(mWidthMeasureSpec, + mSpinnerPadding.left + mSpinnerPadding.right, lp.width); + + // Measure child + child.measure(childWidthSpec, childHeightSpec); + + int childLeft; + int childRight; + + // Position vertically based on gravity setting + int childTop = mSpinnerPadding.top + + ((getMeasuredHeight() - mSpinnerPadding.bottom - + mSpinnerPadding.top - child.getMeasuredHeight()) / 2); + int childBottom = childTop + child.getMeasuredHeight(); + + int width = child.getMeasuredWidth(); + childLeft = 0; + childRight = childLeft + width; + + child.layout(childLeft, childTop, childRight, childBottom); + } + + @Override + public boolean performClick() { + boolean handled = super.performClick(); + + if (!handled) { + handled = true; + + if (!mPopup.isShowing()) { + mPopup.show(); + } + } + + return handled; + } + + public void onClick(DialogInterface dialog, int which) { + setSelection(which); + dialog.dismiss(); + } + + /** + * Sets the prompt to display when the dialog is shown. + * @param prompt the prompt to set + */ + public void setPrompt(CharSequence prompt) { + mPopup.setPromptText(prompt); + } + + /** + * Sets the prompt to display when the dialog is shown. + * @param promptId the resource ID of the prompt to display when the dialog is shown + */ + public void setPromptId(int promptId) { + setPrompt(getContext().getText(promptId)); + } + + /** + * @return The prompt to display when the dialog is shown + */ + public CharSequence getPrompt() { + return mPopup.getHintText(); + } + + int measureContentWidth(SpinnerAdapter adapter, Drawable background) { + if (adapter == null) { + return 0; + } + + int width = 0; + View itemView = null; + int itemType = 0; + final int widthMeasureSpec = + MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); + final int heightMeasureSpec = + MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); + + // Make sure the number of items we'll measure is capped. If it's a huge data set + // with wildly varying sizes, oh well. + int start = Math.max(0, getSelectedItemPosition()); + final int end = Math.min(adapter.getCount(), start + MAX_ITEMS_MEASURED); + final int count = end - start; + start = Math.max(0, start - (MAX_ITEMS_MEASURED - count)); + for (int i = start; i < end; i++) { + final int positionType = adapter.getItemViewType(i); + if (positionType != itemType) { + itemType = positionType; + itemView = null; + } + itemView = adapter.getView(i, itemView, this); + if (itemView.getLayoutParams() == null) { + itemView.setLayoutParams(new ViewGroup.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT)); + } + itemView.measure(widthMeasureSpec, heightMeasureSpec); + width = Math.max(width, itemView.getMeasuredWidth()); + } + + // Add background padding to measured width + if (background != null) { + background.getPadding(mTempRect); + width += mTempRect.left + mTempRect.right; + } + + return width; + } + + /** + *

Wrapper class for an Adapter. Transforms the embedded Adapter instance + * into a ListAdapter.

+ */ + private static class DropDownAdapter implements ListAdapter, SpinnerAdapter { + private SpinnerAdapter mAdapter; + private ListAdapter mListAdapter; + + /** + *

Creates a new ListAdapter wrapper for the specified adapter.

+ * + * @param adapter the Adapter to transform into a ListAdapter + */ + public DropDownAdapter(SpinnerAdapter adapter) { + this.mAdapter = adapter; + if (adapter instanceof ListAdapter) { + this.mListAdapter = (ListAdapter) adapter; + } + } + + public int getCount() { + return mAdapter == null ? 0 : mAdapter.getCount(); + } + + public Object getItem(int position) { + return mAdapter == null ? null : mAdapter.getItem(position); + } + + public long getItemId(int position) { + return mAdapter == null ? -1 : mAdapter.getItemId(position); + } + + public View getView(int position, View convertView, ViewGroup parent) { + return getDropDownView(position, convertView, parent); + } + + public View getDropDownView(int position, View convertView, ViewGroup parent) { + return mAdapter == null ? null : + mAdapter.getDropDownView(position, convertView, parent); + } + + public boolean hasStableIds() { + return mAdapter != null && mAdapter.hasStableIds(); + } + + public void registerDataSetObserver(DataSetObserver observer) { + if (mAdapter != null) { + mAdapter.registerDataSetObserver(observer); + } + } + + public void unregisterDataSetObserver(DataSetObserver observer) { + if (mAdapter != null) { + mAdapter.unregisterDataSetObserver(observer); + } + } + + /** + * If the wrapped SpinnerAdapter is also a ListAdapter, delegate this call. + * Otherwise, return true. + */ + public boolean areAllItemsEnabled() { + final ListAdapter adapter = mListAdapter; + if (adapter != null) { + return adapter.areAllItemsEnabled(); + } else { + return true; + } + } + + /** + * If the wrapped SpinnerAdapter is also a ListAdapter, delegate this call. + * Otherwise, return true. + */ + public boolean isEnabled(int position) { + final ListAdapter adapter = mListAdapter; + if (adapter != null) { + return adapter.isEnabled(position); + } else { + return true; + } + } + + public int getItemViewType(int position) { + return 0; + } + + public int getViewTypeCount() { + return 1; + } + + public boolean isEmpty() { + return getCount() == 0; + } + } + + /** + * Implements some sort of popup selection interface for selecting a spinner option. + * Allows for different spinner modes. + */ + private interface SpinnerPopup { + public void setAdapter(ListAdapter adapter); + + /** + * Show the popup + */ + public void show(); + + /** + * Dismiss the popup + */ + public void dismiss(); + + /** + * @return true if the popup is showing, false otherwise. + */ + public boolean isShowing(); + + /** + * Set hint text to be displayed to the user. This should provide + * a description of the choice being made. + * @param hintText Hint text to set. + */ + public void setPromptText(CharSequence hintText); + public CharSequence getHintText(); + } + + /* + private class DialogPopup implements SpinnerPopup, DialogInterface.OnClickListener { + private AlertDialog mPopup; + private ListAdapter mListAdapter; + private CharSequence mPrompt; + + public void dismiss() { + mPopup.dismiss(); + mPopup = null; + } + + public boolean isShowing() { + return mPopup != null ? mPopup.isShowing() : false; + } + + public void setAdapter(ListAdapter adapter) { + mListAdapter = adapter; + } + + public void setPromptText(CharSequence hintText) { + mPrompt = hintText; + } + + public CharSequence getHintText() { + return mPrompt; + } + + public void show() { + AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + if (mPrompt != null) { + builder.setTitle(mPrompt); + } + mPopup = builder.setSingleChoiceItems(mListAdapter, + getSelectedItemPosition(), this).show(); + } + + public void onClick(DialogInterface dialog, int which) { + setSelection(which); + dismiss(); + } + } + */ + + private class DropdownPopup extends IcsListPopupWindow implements SpinnerPopup { + private CharSequence mHintText; + private ListAdapter mAdapter; + + public DropdownPopup(Context context, AttributeSet attrs, int defStyleRes) { + super(context, attrs, 0, defStyleRes); + + setAnchorView(IcsSpinner.this); + setModal(true); + setPromptPosition(POSITION_PROMPT_ABOVE); + setOnItemClickListener(new OnItemClickListener() { + @SuppressWarnings("rawtypes") + public void onItemClick(AdapterView parent, View v, int position, long id) { + IcsSpinner.this.setSelection(position); + dismiss(); + } + }); + } + + @Override + public void setAdapter(ListAdapter adapter) { + super.setAdapter(adapter); + mAdapter = adapter; + } + + public CharSequence getHintText() { + return mHintText; + } + + public void setPromptText(CharSequence hintText) { + // Hint text is ignored for dropdowns, but maintain it here. + mHintText = hintText; + } + + @Override + public void show() { + final int spinnerPaddingLeft = IcsSpinner.this.getPaddingLeft(); + if (mDropDownWidth == WRAP_CONTENT) { + final int spinnerWidth = IcsSpinner.this.getWidth(); + final int spinnerPaddingRight = IcsSpinner.this.getPaddingRight(); + setContentWidth(Math.max( + measureContentWidth((SpinnerAdapter) mAdapter, getBackground()), + spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight)); + } else if (mDropDownWidth == MATCH_PARENT) { + final int spinnerWidth = IcsSpinner.this.getWidth(); + final int spinnerPaddingRight = IcsSpinner.this.getPaddingRight(); + setContentWidth(spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight); + } else { + setContentWidth(mDropDownWidth); + } + final Drawable background = getBackground(); + int bgOffset = 0; + if (background != null) { + background.getPadding(mTempRect); + bgOffset = -mTempRect.left; + } + setHorizontalOffset(bgOffset + spinnerPaddingLeft); + setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED); + super.show(); + getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); + setSelection(IcsSpinner.this.getSelectedItemPosition()); + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsView.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsView.java new file mode 100644 index 00000000..a7185d08 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsView.java @@ -0,0 +1,21 @@ +package com.actionbarsherlock.internal.widget; + +import android.view.View; + +final class IcsView { + //No instances + private IcsView() {} + + /** + * Return only the state bits of {@link #getMeasuredWidthAndState()} + * and {@link #getMeasuredHeightAndState()}, combined into one integer. + * The width component is in the regular bits {@link #MEASURED_STATE_MASK} + * and the height component is at the shifted bits + * {@link #MEASURED_HEIGHT_STATE_SHIFT}>>{@link #MEASURED_STATE_MASK}. + */ + public static int getMeasuredStateInt(View child) { + return (child.getMeasuredWidth()&View.MEASURED_STATE_MASK) + | ((child.getMeasuredHeight()>>View.MEASURED_HEIGHT_STATE_SHIFT) + & (View.MEASURED_STATE_MASK>>View.MEASURED_HEIGHT_STATE_SHIFT)); + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ScrollingTabContainerView.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ScrollingTabContainerView.java new file mode 100644 index 00000000..1a532e06 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ScrollingTabContainerView.java @@ -0,0 +1,545 @@ +/* + * 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.internal.widget; + +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.text.TextUtils.TruncateAt; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewParent; +import android.view.animation.DecelerateInterpolator; +import android.view.animation.Interpolator; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import com.actionbarsherlock.R; +import com.actionbarsherlock.app.ActionBar; +import com.actionbarsherlock.internal.nineoldandroids.animation.Animator; +import com.actionbarsherlock.internal.nineoldandroids.animation.ObjectAnimator; +import com.actionbarsherlock.internal.nineoldandroids.widget.NineHorizontalScrollView; + +/** + * This widget implements the dynamic action bar tab behavior that can change + * across different configurations or circumstances. + */ +public class ScrollingTabContainerView extends NineHorizontalScrollView + implements IcsAdapterView.OnItemSelectedListener { + //UNUSED private static final String TAG = "ScrollingTabContainerView"; + Runnable mTabSelector; + private TabClickListener mTabClickListener; + + private IcsLinearLayout mTabLayout; + private IcsSpinner mTabSpinner; + private boolean mAllowCollapse; + + private LayoutInflater mInflater; + + int mMaxTabWidth; + private int mContentHeight; + private int mSelectedTabIndex; + + protected Animator mVisibilityAnim; + protected final VisibilityAnimListener mVisAnimListener = new VisibilityAnimListener(); + + private static final /*Time*/Interpolator sAlphaInterpolator = new DecelerateInterpolator(); + + private static final int FADE_DURATION = 200; + + public ScrollingTabContainerView(Context context) { + super(context); + setHorizontalScrollBarEnabled(false); + + TypedArray a = getContext().obtainStyledAttributes(null, R.styleable.SherlockActionBar, + R.attr.actionBarStyle, 0); + setContentHeight(a.getLayoutDimension(R.styleable.SherlockActionBar_height, 0)); + a.recycle(); + + mInflater = LayoutInflater.from(context); + + mTabLayout = createTabLayout(); + addView(mTabLayout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.MATCH_PARENT)); + } + + @Override + public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + final int widthMode = MeasureSpec.getMode(widthMeasureSpec); + final boolean lockedExpanded = widthMode == MeasureSpec.EXACTLY; + setFillViewport(lockedExpanded); + + final int childCount = mTabLayout.getChildCount(); + if (childCount > 1 && + (widthMode == MeasureSpec.EXACTLY || widthMode == MeasureSpec.AT_MOST)) { + if (childCount > 2) { + mMaxTabWidth = (int) (MeasureSpec.getSize(widthMeasureSpec) * 0.4f); + } else { + mMaxTabWidth = MeasureSpec.getSize(widthMeasureSpec) / 2; + } + } else { + mMaxTabWidth = -1; + } + + heightMeasureSpec = MeasureSpec.makeMeasureSpec(mContentHeight, MeasureSpec.EXACTLY); + + final boolean canCollapse = !lockedExpanded && mAllowCollapse; + + if (canCollapse) { + // See if we should expand + mTabLayout.measure(MeasureSpec.UNSPECIFIED, heightMeasureSpec); + if (mTabLayout.getMeasuredWidth() > MeasureSpec.getSize(widthMeasureSpec)) { + performCollapse(); + } else { + performExpand(); + } + } else { + performExpand(); + } + + final int oldWidth = getMeasuredWidth(); + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + final int newWidth = getMeasuredWidth(); + + if (lockedExpanded && oldWidth != newWidth) { + // Recenter the tab display if we're at a new (scrollable) size. + setTabSelected(mSelectedTabIndex); + } + } + + /** + * Indicates whether this view is collapsed into a dropdown menu instead + * of traditional tabs. + * @return true if showing as a spinner + */ + private boolean isCollapsed() { + return mTabSpinner != null && mTabSpinner.getParent() == this; + } + + public void setAllowCollapse(boolean allowCollapse) { + mAllowCollapse = allowCollapse; + } + + private void performCollapse() { + if (isCollapsed()) return; + + if (mTabSpinner == null) { + mTabSpinner = createSpinner(); + } + removeView(mTabLayout); + addView(mTabSpinner, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.MATCH_PARENT)); + if (mTabSpinner.getAdapter() == null) { + mTabSpinner.setAdapter(new TabAdapter()); + } + if (mTabSelector != null) { + removeCallbacks(mTabSelector); + mTabSelector = null; + } + mTabSpinner.setSelection(mSelectedTabIndex); + } + + private boolean performExpand() { + if (!isCollapsed()) return false; + + removeView(mTabSpinner); + addView(mTabLayout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.MATCH_PARENT)); + setTabSelected(mTabSpinner.getSelectedItemPosition()); + return false; + } + + public void setTabSelected(int position) { + mSelectedTabIndex = position; + final int tabCount = mTabLayout.getChildCount(); + for (int i = 0; i < tabCount; i++) { + final View child = mTabLayout.getChildAt(i); + final boolean isSelected = i == position; + child.setSelected(isSelected); + if (isSelected) { + animateToTab(position); + } + } + } + + public void setContentHeight(int contentHeight) { + mContentHeight = contentHeight; + requestLayout(); + } + + private IcsLinearLayout createTabLayout() { + final IcsLinearLayout tabLayout = (IcsLinearLayout) LayoutInflater.from(getContext()) + .inflate(R.layout.abs__action_bar_tab_bar_view, null); + tabLayout.setLayoutParams(new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT)); + return tabLayout; + } + + private IcsSpinner createSpinner() { + final IcsSpinner spinner = new IcsSpinner(getContext(), null, + R.attr.actionDropDownStyle); + spinner.setLayoutParams(new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT)); + spinner.setOnItemSelectedListener(this); + return spinner; + } + + @Override + protected void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + + // Action bar can change size on configuration changes. + // Reread the desired height from the theme-specified style. + TypedArray a = getContext().obtainStyledAttributes(null, R.styleable.SherlockActionBar, + R.attr.actionBarStyle, 0); + setContentHeight(a.getLayoutDimension(R.styleable.SherlockActionBar_height, 0)); + a.recycle(); + } + + public void animateToVisibility(int visibility) { + if (mVisibilityAnim != null) { + mVisibilityAnim.cancel(); + } + if (visibility == VISIBLE) { + if (getVisibility() != VISIBLE) { + setAlpha(0); + } + ObjectAnimator anim = ObjectAnimator.ofFloat(this, "alpha", 1); + anim.setDuration(FADE_DURATION); + anim.setInterpolator(sAlphaInterpolator); + + anim.addListener(mVisAnimListener.withFinalVisibility(visibility)); + anim.start(); + } else { + ObjectAnimator anim = ObjectAnimator.ofFloat(this, "alpha", 0); + anim.setDuration(FADE_DURATION); + anim.setInterpolator(sAlphaInterpolator); + + anim.addListener(mVisAnimListener.withFinalVisibility(visibility)); + anim.start(); + } + } + + public void animateToTab(final int position) { + final View tabView = mTabLayout.getChildAt(position); + if (mTabSelector != null) { + removeCallbacks(mTabSelector); + } + mTabSelector = new Runnable() { + public void run() { + final int scrollPos = tabView.getLeft() - (getWidth() - tabView.getWidth()) / 2; + smoothScrollTo(scrollPos, 0); + mTabSelector = null; + } + }; + post(mTabSelector); + } + + @Override + public void onAttachedToWindow() { + super.onAttachedToWindow(); + if (mTabSelector != null) { + // Re-post the selector we saved + post(mTabSelector); + } + } + + @Override + public void onDetachedFromWindow() { + super.onDetachedFromWindow(); + if (mTabSelector != null) { + removeCallbacks(mTabSelector); + } + } + + private TabView createTabView(ActionBar.Tab tab, boolean forAdapter) { + //Workaround for not being able to pass a defStyle on pre-3.0 + final TabView tabView = (TabView)mInflater.inflate(R.layout.abs__action_bar_tab, null); + tabView.init(this, tab, forAdapter); + + if (forAdapter) { + tabView.setBackgroundDrawable(null); + tabView.setLayoutParams(new ListView.LayoutParams(ListView.LayoutParams.MATCH_PARENT, + mContentHeight)); + } else { + tabView.setFocusable(true); + + if (mTabClickListener == null) { + mTabClickListener = new TabClickListener(); + } + tabView.setOnClickListener(mTabClickListener); + } + return tabView; + } + + public void addTab(ActionBar.Tab tab, boolean setSelected) { + TabView tabView = createTabView(tab, false); + mTabLayout.addView(tabView, new IcsLinearLayout.LayoutParams(0, + LayoutParams.MATCH_PARENT, 1)); + if (mTabSpinner != null) { + ((TabAdapter) mTabSpinner.getAdapter()).notifyDataSetChanged(); + } + if (setSelected) { + tabView.setSelected(true); + } + if (mAllowCollapse) { + requestLayout(); + } + } + + public void addTab(ActionBar.Tab tab, int position, boolean setSelected) { + final TabView tabView = createTabView(tab, false); + mTabLayout.addView(tabView, position, new IcsLinearLayout.LayoutParams( + 0, LayoutParams.MATCH_PARENT, 1)); + if (mTabSpinner != null) { + ((TabAdapter) mTabSpinner.getAdapter()).notifyDataSetChanged(); + } + if (setSelected) { + tabView.setSelected(true); + } + if (mAllowCollapse) { + requestLayout(); + } + } + + public void updateTab(int position) { + ((TabView) mTabLayout.getChildAt(position)).update(); + if (mTabSpinner != null) { + ((TabAdapter) mTabSpinner.getAdapter()).notifyDataSetChanged(); + } + if (mAllowCollapse) { + requestLayout(); + } + } + + public void removeTabAt(int position) { + mTabLayout.removeViewAt(position); + if (mTabSpinner != null) { + ((TabAdapter) mTabSpinner.getAdapter()).notifyDataSetChanged(); + } + if (mAllowCollapse) { + requestLayout(); + } + } + + public void removeAllTabs() { + mTabLayout.removeAllViews(); + if (mTabSpinner != null) { + ((TabAdapter) mTabSpinner.getAdapter()).notifyDataSetChanged(); + } + if (mAllowCollapse) { + requestLayout(); + } + } + + @Override + public void onItemSelected(IcsAdapterView parent, View view, int position, long id) { + TabView tabView = (TabView) view; + tabView.getTab().select(); + } + + @Override + public void onNothingSelected(IcsAdapterView parent) { + } + + public static class TabView extends LinearLayout { + private ScrollingTabContainerView mParent; + private ActionBar.Tab mTab; + private CapitalizingTextView mTextView; + private ImageView mIconView; + private View mCustomView; + + public TabView(Context context, AttributeSet attrs) { + //TODO super(context, null, R.attr.actionBarTabStyle); + super(context, attrs); + } + + public void init(ScrollingTabContainerView parent, ActionBar.Tab tab, boolean forList) { + mParent = parent; + mTab = tab; + + if (forList) { + setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL); + } + + update(); + } + + public void bindTab(ActionBar.Tab tab) { + mTab = tab; + update(); + } + + @Override + public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + + // Re-measure if we went beyond our maximum size. + if (mParent.mMaxTabWidth > 0 && getMeasuredWidth() > mParent.mMaxTabWidth) { + super.onMeasure(MeasureSpec.makeMeasureSpec(mParent.mMaxTabWidth, MeasureSpec.EXACTLY), + heightMeasureSpec); + } + } + + public void update() { + final ActionBar.Tab tab = mTab; + final View custom = tab.getCustomView(); + if (custom != null) { + final ViewParent customParent = custom.getParent(); + if (customParent != this) { + if (customParent != null) ((ViewGroup) customParent).removeView(custom); + addView(custom); + } + mCustomView = custom; + if (mTextView != null) mTextView.setVisibility(GONE); + if (mIconView != null) { + mIconView.setVisibility(GONE); + mIconView.setImageDrawable(null); + } + } else { + if (mCustomView != null) { + removeView(mCustomView); + mCustomView = null; + } + + final Drawable icon = tab.getIcon(); + final CharSequence text = tab.getText(); + + if (icon != null) { + if (mIconView == null) { + ImageView iconView = new ImageView(getContext()); + LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, + LayoutParams.WRAP_CONTENT); + lp.gravity = Gravity.CENTER_VERTICAL; + iconView.setLayoutParams(lp); + addView(iconView, 0); + mIconView = iconView; + } + mIconView.setImageDrawable(icon); + mIconView.setVisibility(VISIBLE); + } else if (mIconView != null) { + mIconView.setVisibility(GONE); + mIconView.setImageDrawable(null); + } + + if (text != null) { + if (mTextView == null) { + CapitalizingTextView textView = new CapitalizingTextView(getContext(), null, + R.attr.actionBarTabTextStyle); + textView.setEllipsize(TruncateAt.END); + LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, + LayoutParams.WRAP_CONTENT); + lp.gravity = Gravity.CENTER_VERTICAL; + textView.setLayoutParams(lp); + addView(textView); + mTextView = textView; + } + mTextView.setTextCompat(text); + mTextView.setVisibility(VISIBLE); + } else if (mTextView != null) { + mTextView.setVisibility(GONE); + mTextView.setText(null); + } + + if (mIconView != null) { + mIconView.setContentDescription(tab.getContentDescription()); + } + } + } + + public ActionBar.Tab getTab() { + return mTab; + } + } + + private class TabAdapter extends BaseAdapter { + @Override + public int getCount() { + return mTabLayout.getChildCount(); + } + + @Override + public Object getItem(int position) { + return ((TabView) mTabLayout.getChildAt(position)).getTab(); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if (convertView == null) { + convertView = createTabView((ActionBar.Tab) getItem(position), true); + } else { + ((TabView) convertView).bindTab((ActionBar.Tab) getItem(position)); + } + return convertView; + } + } + + private class TabClickListener implements OnClickListener { + public void onClick(View view) { + TabView tabView = (TabView) view; + tabView.getTab().select(); + final int tabCount = mTabLayout.getChildCount(); + for (int i = 0; i < tabCount; i++) { + final View child = mTabLayout.getChildAt(i); + child.setSelected(child == view); + } + } + } + + protected class VisibilityAnimListener implements Animator.AnimatorListener { + private boolean mCanceled = false; + private int mFinalVisibility; + + public VisibilityAnimListener withFinalVisibility(int visibility) { + mFinalVisibility = visibility; + return this; + } + + @Override + public void onAnimationStart(Animator animation) { + setVisibility(VISIBLE); + mVisibilityAnim = animation; + mCanceled = false; + } + + @Override + public void onAnimationEnd(Animator animation) { + if (mCanceled) return; + + mVisibilityAnim = null; + setVisibility(mFinalVisibility); + } + + @Override + public void onAnimationCancel(Animator animation) { + mCanceled = true; + } + + @Override + public void onAnimationRepeat(Animator animation) { + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/ActionMode.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/ActionMode.java new file mode 100644 index 00000000..81b4cd4d --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/ActionMode.java @@ -0,0 +1,224 @@ +/* + * 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.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 { + private Object mTag; + + /** + * Set a tag object associated with this ActionMode. + * + *

Like the tag available to views, this allows applications to associate arbitrary + * data with an ActionMode for later reference. + * + * @param tag Tag to associate with this ActionMode + * + * @see #getTag() + */ + public void setTag(Object tag) { + mTag = tag; + } + + /** + * Retrieve the tag object associated with this ActionMode. + * + *

Like the tag available to views, this allows applications to associate arbitrary + * data with an ActionMode for later reference. + * + * @return Tag associated with this ActionMode + * + * @see #setTag(Object) + */ + public Object getTag() { + return mTag; + } + + /** + * 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); + + /** + * 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 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 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 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); + + /** + * Invalidate the action mode and refresh menu content. The mode's + * {@link ActionMode.Callback} will have its + * {@link 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(); + + /** + * Finish and close this action mode. The action mode's {@link ActionMode.Callback} will + * have its {@link Callback#onDestroyActionMode(ActionMode)} method called. + */ + public abstract void finish(); + + /** + * Returns the menu of actions that this action mode presents. + * @return The action mode's menu. + */ + public abstract Menu getMenu(); + + /** + * Returns the current title of this action mode. + * @return Title text + */ + public abstract CharSequence getTitle(); + + /** + * Returns the current subtitle of this action mode. + * @return Subtitle text + */ + public abstract CharSequence getSubtitle(); + + /** + * Returns the current custom view for this action mode. + * @return The current custom view + */ + public abstract View getCustomView(); + + /** + * Returns a {@link MenuInflater} with the ActionMode's context. + */ + public abstract MenuInflater getMenuInflater(); + + /** + * Returns whether the UI presenting this action mode can take focus or not. + * This is used by internal components within the framework that would otherwise + * present an action mode UI that requires focus, such as an EditText as a custom view. + * + * @return true if the UI used to show this action mode can take focus + * @hide Internal use only + */ + public boolean isUiFocusable() { + return true; + } + + /** + * Callback interface for action modes. Supplied to + * {@link View#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 Callback#onCreateActionMode(ActionMode, Menu)} once on initial + * creation
  • + *
  • {@link Callback#onPrepareActionMode(ActionMode, Menu)} after creation + * and any time the {@link ActionMode} is invalidated
  • + *
  • {@link Callback#onActionItemClicked(ActionMode, MenuItem)} any time a + * contextual action button is clicked
  • + *
  • {@link Callback#onDestroyActionMode(ActionMode)} when the action mode + * is closed
  • + *
+ */ + public interface Callback { + /** + * 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. + */ + public boolean onCreateActionMode(ActionMode mode, Menu menu); + + /** + * 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. + */ + public boolean onPrepareActionMode(ActionMode mode, Menu menu); + + /** + * 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. + */ + public boolean onActionItemClicked(ActionMode mode, MenuItem item); + + /** + * Called when an action mode is about to be exited and destroyed. + * + * @param mode The current ActionMode being destroyed + */ + public void onDestroyActionMode(ActionMode mode); + } +} \ No newline at end of file diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/ActionProvider.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/ActionProvider.java new file mode 100644 index 00000000..ae7cb1fe --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/ActionProvider.java @@ -0,0 +1,170 @@ +/* + * 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.view; + +import android.content.Context; +import android.view.View; + +/** + * This class is a mediator for accomplishing a given task, for example sharing a file. + * It is responsible for creating a view that performs an action that accomplishes the task. + * This class also implements other functions such a performing a default action. + *

+ * An ActionProvider can be optionally specified for a {@link MenuItem} and in such a + * case it will be responsible for creating the action view that appears in the + * {@link android.app.ActionBar} as a substitute for the menu item when the item is + * displayed as an action item. Also the provider is responsible for performing a + * default action if a menu item placed on the overflow menu of the ActionBar is + * selected and none of the menu item callbacks has handled the selection. For this + * case the provider can also optionally provide a sub-menu for accomplishing the + * task at hand. + *

+ *

+ * There are two ways for using an action provider for creating and handling of action views: + *

    + *
  • + * Setting the action provider on a {@link MenuItem} directly by calling + * {@link MenuItem#setActionProvider(ActionProvider)}. + *
  • + *
  • + * Declaring the action provider in the menu XML resource. For example: + *
    + * 
    + *   <item android:id="@+id/my_menu_item"
    + *     android:title="Title"
    + *     android:icon="@drawable/my_menu_item_icon"
    + *     android:showAsAction="ifRoom"
    + *     android:actionProviderClass="foo.bar.SomeActionProvider" />
    + * 
    + * 
    + *
  • + *
+ *

+ * + * @see MenuItem#setActionProvider(ActionProvider) + * @see MenuItem#getActionProvider() + */ +public abstract class ActionProvider { + private SubUiVisibilityListener mSubUiVisibilityListener; + + /** + * Creates a new instance. + * + * @param context Context for accessing resources. + */ + public ActionProvider(Context context) { + } + + /** + * Factory method for creating new action views. + * + * @return A new action view. + */ + public abstract View onCreateActionView(); + + /** + * Performs an optional default action. + *

+ * For the case of an action provider placed in a menu item not shown as an action this + * method is invoked if previous callbacks for processing menu selection has handled + * the event. + *

+ *

+ * A menu item selection is processed in the following order: + *

    + *
  • + * Receiving a call to {@link MenuItem.OnMenuItemClickListener#onMenuItemClick + * MenuItem.OnMenuItemClickListener.onMenuItemClick}. + *
  • + *
  • + * Receiving a call to {@link android.app.Activity#onOptionsItemSelected(MenuItem) + * Activity.onOptionsItemSelected(MenuItem)} + *
  • + *
  • + * Receiving a call to {@link android.app.Fragment#onOptionsItemSelected(MenuItem) + * Fragment.onOptionsItemSelected(MenuItem)} + *
  • + *
  • + * Launching the {@link android.content.Intent} set via + * {@link MenuItem#setIntent(android.content.Intent) MenuItem.setIntent(android.content.Intent)} + *
  • + *
  • + * Invoking this method. + *
  • + *
+ *

+ *

+ * The default implementation does not perform any action and returns false. + *

+ */ + public boolean onPerformDefaultAction() { + return false; + } + + /** + * Determines if this ActionProvider has a submenu associated with it. + * + *

Associated submenus will be shown when an action view is not. This + * provider instance will receive a call to {@link #onPrepareSubMenu(SubMenu)} + * after the call to {@link #onPerformDefaultAction()} and before a submenu is + * displayed to the user. + * + * @return true if the item backed by this provider should have an associated submenu + */ + public boolean hasSubMenu() { + return false; + } + + /** + * Called to prepare an associated submenu for the menu item backed by this ActionProvider. + * + *

if {@link #hasSubMenu()} returns true, this method will be called when the + * menu item is selected to prepare the submenu for presentation to the user. Apps + * may use this to create or alter submenu content right before display. + * + * @param subMenu Submenu that will be displayed + */ + public void onPrepareSubMenu(SubMenu subMenu) { + } + + /** + * Notify the system that the visibility of an action view's sub-UI such as + * an anchored popup has changed. This will affect how other system + * visibility notifications occur. + * + * @hide Pending future API approval + */ + public void subUiVisibilityChanged(boolean isVisible) { + if (mSubUiVisibilityListener != null) { + mSubUiVisibilityListener.onSubUiVisibilityChanged(isVisible); + } + } + + /** + * @hide Internal use only + */ + public void setSubUiVisibilityListener(SubUiVisibilityListener listener) { + mSubUiVisibilityListener = listener; + } + + /** + * @hide Internal use only + */ + public interface SubUiVisibilityListener { + public void onSubUiVisibilityChanged(boolean isVisible); + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/CollapsibleActionView.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/CollapsibleActionView.java new file mode 100644 index 00000000..43281b01 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/CollapsibleActionView.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 com.actionbarsherlock.view; + +/** + * When a {@link View} implements this interface it will receive callbacks + * when expanded or collapsed as an action view alongside the optional, + * app-specified callbacks to {@link OnActionExpandListener}. + * + *

See {@link MenuItem} for more information about action views. + * See {@link android.app.ActionBar} for more information about the action bar. + */ +public interface CollapsibleActionView { + /** + * Called when this view is expanded as an action view. + * See {@link MenuItem#expandActionView()}. + */ + public void onActionViewExpanded(); + + /** + * Called when this view is collapsed as an action view. + * See {@link MenuItem#collapseActionView()}. + */ + public void onActionViewCollapsed(); +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/Menu.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/Menu.java new file mode 100644 index 00000000..951f4cce --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/Menu.java @@ -0,0 +1,447 @@ +/* + * 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.view; + +import android.content.ComponentName; +import android.content.Intent; +import android.view.KeyEvent; + +/** + * Interface for managing the items in a menu. + *

+ * By default, every Activity supports an options menu of actions or options. + * You can add items to this menu and handle clicks on your additions. The + * easiest way of adding menu items is inflating an XML file into the + * {@link Menu} via {@link MenuInflater}. The easiest way of attaching code to + * clicks is via {@link Activity#onOptionsItemSelected(MenuItem)} and + * {@link Activity#onContextItemSelected(MenuItem)}. + *

+ * Different menu types support different features: + *

    + *
  1. Context menus: Do not support item shortcuts and item icons. + *
  2. Options menus: The icon menus do not support item check + * marks and only show the item's + * {@link MenuItem#setTitleCondensed(CharSequence) condensed title}. The + * expanded menus (only available if six or more menu items are visible, + * reached via the 'More' item in the icon menu) do not show item icons, and + * item check marks are discouraged. + *
  3. Sub menus: Do not support item icons, or nested sub menus. + *
+ * + *
+ *

Developer Guides

+ *

For more information about creating menus, read the + * Menus developer guide.

+ *
+ */ +public interface Menu { + + /** + * 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; + + /** + * Value to use for group and item identifier integers when you don't care + * about them. + */ + static final int NONE = 0; + + /** + * First value for group and item identifier integers. + */ + static final int FIRST = 1; + + // Implementation note: Keep these CATEGORY_* in sync with the category enum + // in attrs.xml + + /** + * Category code for the order integer for items/groups that are part of a + * container -- or/add this with your base value. + */ + static final int CATEGORY_CONTAINER = 0x00010000; + + /** + * Category code for the order integer for items/groups that are provided by + * the system -- or/add this with your base value. + */ + static final int CATEGORY_SYSTEM = 0x00020000; + + /** + * Category code for the order integer for items/groups that are + * user-supplied secondary (infrequently used) options -- or/add this with + * your base value. + */ + static final int CATEGORY_SECONDARY = 0x00030000; + + /** + * Category code for the order integer for items/groups that are + * alternative actions on the data that is currently displayed -- or/add + * this with your base value. + */ + static final int CATEGORY_ALTERNATIVE = 0x00040000; + + /** + * Flag for {@link #addIntentOptions}: if set, do not automatically remove + * any existing menu items in the same group. + */ + static final int FLAG_APPEND_TO_GROUP = 0x0001; + + /** + * Flag for {@link #performShortcut}: if set, do not close the menu after + * executing the shortcut. + */ + static final int FLAG_PERFORM_NO_CLOSE = 0x0001; + + /** + * Flag for {@link #performShortcut(int, KeyEvent, int)}: if set, always + * close the menu after executing the shortcut. Closing the menu also resets + * the prepared state. + */ + static final int FLAG_ALWAYS_PERFORM_CLOSE = 0x0002; + + /** + * Add a new item to the menu. This item displays the given title for its + * label. + * + * @param title The text to display for the item. + * @return The newly added menu item. + */ + public MenuItem add(CharSequence title); + + /** + * Add a new item to the menu. This item displays the given title for its + * label. + * + * @param titleRes Resource identifier of title string. + * @return The newly added menu item. + */ + public MenuItem add(int titleRes); + + /** + * Add a new item to the menu. This item displays the given title for its + * label. + * + * @param groupId The group identifier that this item should be part of. + * This can be used to define groups of items for batch state + * changes. Normally use {@link #NONE} if an item should not be in a + * group. + * @param itemId Unique item ID. Use {@link #NONE} if you do not need a + * unique ID. + * @param order The order for the item. Use {@link #NONE} if you do not care + * about the order. See {@link MenuItem#getOrder()}. + * @param title The text to display for the item. + * @return The newly added menu item. + */ + public MenuItem add(int groupId, int itemId, int order, CharSequence title); + + /** + * Variation on {@link #add(int, int, int, CharSequence)} that takes a + * string resource identifier instead of the string itself. + * + * @param groupId The group identifier that this item should be part of. + * This can also be used to define groups of items for batch state + * changes. Normally use {@link #NONE} if an item should not be in a + * group. + * @param itemId Unique item ID. Use {@link #NONE} if you do not need a + * unique ID. + * @param order The order for the item. Use {@link #NONE} if you do not care + * about the order. See {@link MenuItem#getOrder()}. + * @param titleRes Resource identifier of title string. + * @return The newly added menu item. + */ + public MenuItem add(int groupId, int itemId, int order, int titleRes); + + /** + * Add a new sub-menu to the menu. This item displays the given title for + * its label. To modify other attributes on the submenu's menu item, use + * {@link SubMenu#getItem()}. + * + * @param title The text to display for the item. + * @return The newly added sub-menu + */ + SubMenu addSubMenu(final CharSequence title); + + /** + * Add a new sub-menu to the menu. This item displays the given title for + * its label. To modify other attributes on the submenu's menu item, use + * {@link SubMenu#getItem()}. + * + * @param titleRes Resource identifier of title string. + * @return The newly added sub-menu + */ + SubMenu addSubMenu(final int titleRes); + + /** + * Add a new sub-menu to the menu. This item displays the given + * title for its label. To modify other attributes on the + * submenu's menu item, use {@link SubMenu#getItem()}. + *

+ * Note that you can only have one level of sub-menus, i.e. you cannnot add + * a subMenu to a subMenu: An {@link UnsupportedOperationException} will be + * thrown if you try. + * + * @param groupId The group identifier that this item should be part of. + * This can also be used to define groups of items for batch state + * changes. Normally use {@link #NONE} if an item should not be in a + * group. + * @param itemId Unique item ID. Use {@link #NONE} if you do not need a + * unique ID. + * @param order The order for the item. Use {@link #NONE} if you do not care + * about the order. See {@link MenuItem#getOrder()}. + * @param title The text to display for the item. + * @return The newly added sub-menu + */ + SubMenu addSubMenu(final int groupId, final int itemId, int order, final CharSequence title); + + /** + * Variation on {@link #addSubMenu(int, int, int, CharSequence)} that takes + * a string resource identifier for the title instead of the string itself. + * + * @param groupId The group identifier that this item should be part of. + * This can also be used to define groups of items for batch state + * changes. Normally use {@link #NONE} if an item should not be in a group. + * @param itemId Unique item ID. Use {@link #NONE} if you do not need a unique ID. + * @param order The order for the item. Use {@link #NONE} if you do not care about the + * order. See {@link MenuItem#getOrder()}. + * @param titleRes Resource identifier of title string. + * @return The newly added sub-menu + */ + SubMenu addSubMenu(int groupId, int itemId, int order, int titleRes); + + /** + * Add a group of menu items corresponding to actions that can be performed + * for a particular Intent. The Intent is most often configured with a null + * action, the data that the current activity is working with, and includes + * either the {@link Intent#CATEGORY_ALTERNATIVE} or + * {@link Intent#CATEGORY_SELECTED_ALTERNATIVE} to find activities that have + * said they would like to be included as optional action. You can, however, + * use any Intent you want. + * + *

+ * See {@link android.content.pm.PackageManager#queryIntentActivityOptions} + * for more * details on the caller, specifics, and + * intent arguments. The list returned by that function is used + * to populate the resulting menu items. + * + *

+ * All of the menu items of possible options for the intent will be added + * with the given group and id. You can use the group to control ordering of + * the items in relation to other items in the menu. Normally this function + * will automatically remove any existing items in the menu in the same + * group and place a divider above and below the added items; this behavior + * can be modified with the flags parameter. For each of the + * generated items {@link MenuItem#setIntent} is called to associate the + * appropriate Intent with the item; this means the activity will + * automatically be started for you without having to do anything else. + * + * @param groupId The group identifier that the items should be part of. + * This can also be used to define groups of items for batch state + * changes. Normally use {@link #NONE} if the items should not be in + * a group. + * @param itemId Unique item ID. Use {@link #NONE} if you do not need a + * unique ID. + * @param order The order for the items. Use {@link #NONE} if you do not + * care about the order. See {@link MenuItem#getOrder()}. + * @param caller The current activity component name as defined by + * queryIntentActivityOptions(). + * @param specifics Specific items to place first as defined by + * queryIntentActivityOptions(). + * @param intent Intent describing the kinds of items to populate in the + * list as defined by queryIntentActivityOptions(). + * @param flags Additional options controlling how the items are added. + * @param outSpecificItems Optional array in which to place the menu items + * that were generated for each of the specifics that were + * requested. Entries may be null if no activity was found for that + * specific action. + * @return The number of menu items that were added. + * + * @see #FLAG_APPEND_TO_GROUP + * @see MenuItem#setIntent + * @see android.content.pm.PackageManager#queryIntentActivityOptions + */ + public int addIntentOptions(int groupId, int itemId, int order, + ComponentName caller, Intent[] specifics, + Intent intent, int flags, MenuItem[] outSpecificItems); + + /** + * Remove the item with the given identifier. + * + * @param id The item to be removed. If there is no item with this + * identifier, nothing happens. + */ + public void removeItem(int id); + + /** + * Remove all items in the given group. + * + * @param groupId The group to be removed. If there are no items in this + * group, nothing happens. + */ + public void removeGroup(int groupId); + + /** + * Remove all existing items from the menu, leaving it empty as if it had + * just been created. + */ + public void clear(); + + /** + * Control whether a particular group of items can show a check mark. This + * is similar to calling {@link MenuItem#setCheckable} on all of the menu items + * with the given group identifier, but in addition you can control whether + * this group contains a mutually-exclusive set items. This should be called + * after the items of the group have been added to the menu. + * + * @param group The group of items to operate on. + * @param checkable Set to true to allow a check mark, false to + * disallow. The default is false. + * @param exclusive If set to true, only one item in this group can be + * checked at a time; checking an item will automatically + * uncheck all others in the group. If set to false, each + * item can be checked independently of the others. + * + * @see MenuItem#setCheckable + * @see MenuItem#setChecked + */ + public void setGroupCheckable(int group, boolean checkable, boolean exclusive); + + /** + * Show or hide all menu items that are in the given group. + * + * @param group The group of items to operate on. + * @param visible If true the items are visible, else they are hidden. + * + * @see MenuItem#setVisible + */ + public void setGroupVisible(int group, boolean visible); + + /** + * Enable or disable all menu items that are in the given group. + * + * @param group The group of items to operate on. + * @param enabled If true the items will be enabled, else they will be disabled. + * + * @see MenuItem#setEnabled + */ + public void setGroupEnabled(int group, boolean enabled); + + /** + * Return whether the menu currently has item items that are visible. + * + * @return True if there is one or more item visible, + * else false. + */ + public boolean hasVisibleItems(); + + /** + * Return the menu item with a particular identifier. + * + * @param id The identifier to find. + * + * @return The menu item object, or null if there is no item with + * this identifier. + */ + public MenuItem findItem(int id); + + /** + * Get the number of items in the menu. Note that this will change any + * times items are added or removed from the menu. + * + * @return The item count. + */ + public int size(); + + /** + * Gets the menu item at the given index. + * + * @param index The index of the menu item to return. + * @return The menu item. + * @exception IndexOutOfBoundsException + * when {@code index < 0 || >= size()} + */ + public MenuItem getItem(int index); + + /** + * Closes the menu, if open. + */ + public void close(); + + /** + * Execute the menu item action associated with the given shortcut + * character. + * + * @param keyCode The keycode of the shortcut key. + * @param event Key event message. + * @param flags Additional option flags or 0. + * + * @return If the given shortcut exists and is shown, returns + * true; else returns false. + * + * @see #FLAG_PERFORM_NO_CLOSE + */ + public boolean performShortcut(int keyCode, KeyEvent event, int flags); + + /** + * Is a keypress one of the defined shortcut keys for this window. + * @param keyCode the key code from {@link KeyEvent} to check. + * @param event the {@link KeyEvent} to use to help check. + */ + boolean isShortcutKey(int keyCode, KeyEvent event); + + /** + * Execute the menu item action associated with the given menu identifier. + * + * @param id Identifier associated with the menu item. + * @param flags Additional option flags or 0. + * + * @return If the given identifier exists and is shown, returns + * true; else returns false. + * + * @see #FLAG_PERFORM_NO_CLOSE + */ + public boolean performIdentifierAction(int id, int flags); + + + /** + * Control whether the menu should be running in qwerty mode (alphabetic + * shortcuts) or 12-key mode (numeric shortcuts). + * + * @param isQwerty If true the menu will use alphabetic shortcuts; else it + * will use numeric shortcuts. + */ + public void setQwertyMode(boolean isQwerty); +} + diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/MenuInflater.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/MenuInflater.java new file mode 100644 index 00000000..96945974 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/MenuInflater.java @@ -0,0 +1,472 @@ +/* + * 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.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.TypedArray; +import android.content.res.XmlResourceParser; +import android.util.AttributeSet; +import android.util.Log; +import android.util.TypedValue; +import android.util.Xml; +import android.view.InflateException; +import android.view.View; + +import com.actionbarsherlock.R; +import com.actionbarsherlock.internal.view.menu.MenuItemImpl; + +/** + * 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 class MenuInflater { + private static final String LOG_TAG = "MenuInflater"; + + /** 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"; + + private static final int NO_ID = 0; + + private static final Class[] ACTION_VIEW_CONSTRUCTOR_SIGNATURE = new Class[] {Context.class}; + + private static final Class[] ACTION_PROVIDER_CONSTRUCTOR_SIGNATURE = ACTION_VIEW_CONSTRUCTOR_SIGNATURE; + + private final Object[] mActionViewConstructorArguments; + + private final Object[] mActionProviderConstructorArguments; + + private Context mContext; + + /** + * Constructs a menu inflater. + * + * @see Activity#getMenuInflater() + */ + public MenuInflater(Context context) { + mContext = context; + mActionViewConstructorArguments = new Object[] {context}; + mActionProviderConstructorArguments = mActionViewConstructorArguments; + } + + /** + * 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. + */ + public void inflate(int menuRes, Menu menu) { + XmlResourceParser parser = null; + try { + parser = mContext.getResources().getLayout(menuRes); + AttributeSet attrs = Xml.asAttributeSet(parser); + + parseMenu(parser, attrs, menu); + } 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, Menu menu) + throws XmlPullParserException, IOException { + MenuState menuState = new MenuState(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 + SubMenu 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()) { + if (menuState.itemActionProvider != null && + menuState.itemActionProvider.hasSubMenu()) { + menuState.addSubMenuItem(); + } else { + 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(); + } + } + + private static class InflatedOnMenuItemClickListener + implements MenuItem.OnMenuItemClickListener { + private static final Class[] PARAM_TYPES = new Class[] { MenuItem.class }; + + private Context mContext; + private Method mMethod; + + public InflatedOnMenuItemClickListener(Context context, String methodName) { + mContext = context; + Class c = context.getClass(); + try { + mMethod = c.getMethod(methodName, PARAM_TYPES); + } catch (Exception e) { + InflateException ex = new InflateException( + "Couldn't resolve menu item onClick handler " + methodName + + " in class " + c.getName()); + ex.initCause(e); + throw ex; + } + } + + public boolean onMenuItemClick(MenuItem item) { + try { + if (mMethod.getReturnType() == Boolean.TYPE) { + return (Boolean) mMethod.invoke(mContext, item); + } else { + mMethod.invoke(mContext, item); + return true; + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } + + /** + * State for the current menu. + *

+ * Groups can not be nested unless there is another menu (which will have + * its state class). + */ + private class MenuState { + private Menu 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 CharSequence itemTitle; + private CharSequence 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; + + /** + * Sync to attrs.xml enum, values in MenuItem: + * - 0: never + * - 1: ifRoom + * - 2: always + * - -1: Safe sentinel for "no value". + */ + private int itemShowAsAction; + + private int itemActionViewLayout; + private String itemActionViewClassName; + private String itemActionProviderClassName; + + private String itemListenerMethodName; + + private ActionProvider itemActionProvider; + + private static final int defaultGroupId = NO_ID; + private static final int defaultItemId = 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; + + public MenuState(final Menu 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, + R.styleable.SherlockMenuGroup); + + groupId = a.getResourceId(R.styleable.SherlockMenuGroup_android_id, defaultGroupId); + groupCategory = a.getInt(R.styleable.SherlockMenuGroup_android_menuCategory, defaultItemCategory); + groupOrder = a.getInt(R.styleable.SherlockMenuGroup_android_orderInCategory, defaultItemOrder); + groupCheckable = a.getInt(R.styleable.SherlockMenuGroup_android_checkableBehavior, defaultItemCheckable); + groupVisible = a.getBoolean(R.styleable.SherlockMenuGroup_android_visible, defaultItemVisible); + groupEnabled = a.getBoolean(R.styleable.SherlockMenuGroup_android_enabled, defaultItemEnabled); + + a.recycle(); + } + + /** + * Called when the parser is pointing to an item tag. + */ + public void readItem(AttributeSet attrs) { + TypedArray a = mContext.obtainStyledAttributes(attrs, + R.styleable.SherlockMenuItem); + + // Inherit attributes from the group as default value + itemId = a.getResourceId(R.styleable.SherlockMenuItem_android_id, defaultItemId); + final int category = a.getInt(R.styleable.SherlockMenuItem_android_menuCategory, groupCategory); + final int order = a.getInt(R.styleable.SherlockMenuItem_android_orderInCategory, groupOrder); + itemCategoryOrder = (category & Menu.CATEGORY_MASK) | (order & Menu.USER_MASK); + itemTitle = a.getText(R.styleable.SherlockMenuItem_android_title); + itemTitleCondensed = a.getText(R.styleable.SherlockMenuItem_android_titleCondensed); + itemIconResId = a.getResourceId(R.styleable.SherlockMenuItem_android_icon, 0); + itemAlphabeticShortcut = + getShortcut(a.getString(R.styleable.SherlockMenuItem_android_alphabeticShortcut)); + itemNumericShortcut = + getShortcut(a.getString(R.styleable.SherlockMenuItem_android_numericShortcut)); + if (a.hasValue(R.styleable.SherlockMenuItem_android_checkable)) { + // Item has attribute checkable, use it + itemCheckable = a.getBoolean(R.styleable.SherlockMenuItem_android_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(R.styleable.SherlockMenuItem_android_checked, defaultItemChecked); + itemVisible = a.getBoolean(R.styleable.SherlockMenuItem_android_visible, groupVisible); + itemEnabled = a.getBoolean(R.styleable.SherlockMenuItem_android_enabled, groupEnabled); + + TypedValue value = new TypedValue(); + a.getValue(R.styleable.SherlockMenuItem_android_showAsAction, value); + itemShowAsAction = value.type == TypedValue.TYPE_INT_HEX ? value.data : -1; + + itemListenerMethodName = a.getString(R.styleable.SherlockMenuItem_android_onClick); + itemActionViewLayout = a.getResourceId(R.styleable.SherlockMenuItem_android_actionLayout, 0); + itemActionViewClassName = a.getString(R.styleable.SherlockMenuItem_android_actionViewClass); + itemActionProviderClassName = a.getString(R.styleable.SherlockMenuItem_android_actionProviderClass); + + final boolean hasActionProvider = itemActionProviderClassName != null; + if (hasActionProvider && itemActionViewLayout == 0 && itemActionViewClassName == null) { + itemActionProvider = newInstance(itemActionProviderClassName, + ACTION_PROVIDER_CONSTRUCTOR_SIGNATURE, + mActionProviderConstructorArguments); + } else { + if (hasActionProvider) { + Log.w(LOG_TAG, "Ignoring attribute 'actionProviderClass'." + + " Action view already specified."); + } + itemActionProvider = null; + } + + a.recycle(); + + itemAdded = false; + } + + private char getShortcut(String shortcutString) { + if (shortcutString == null) { + return 0; + } else { + return shortcutString.charAt(0); + } + } + + private void setItem(MenuItem 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 (mContext.isRestricted()) { + throw new IllegalStateException("The android:onClick attribute cannot " + + "be used within a restricted context"); + } + item.setOnMenuItemClickListener( + new InflatedOnMenuItemClickListener(mContext, itemListenerMethodName)); + } + + if (itemCheckable >= 2) { + if (item instanceof MenuItemImpl) { + MenuItemImpl impl = (MenuItemImpl) item; + impl.setExclusiveCheckable(true); + } else { + menu.setGroupCheckable(groupId, true, true); + } + } + + boolean actionViewSpecified = false; + if (itemActionViewClassName != null) { + View actionView = (View) newInstance(itemActionViewClassName, + ACTION_VIEW_CONSTRUCTOR_SIGNATURE, mActionViewConstructorArguments); + item.setActionView(actionView); + actionViewSpecified = true; + } + if (itemActionViewLayout > 0) { + if (!actionViewSpecified) { + item.setActionView(itemActionViewLayout); + actionViewSpecified = true; + } else { + Log.w(LOG_TAG, "Ignoring attribute 'itemActionViewLayout'." + + " Action view already specified."); + } + } + if (itemActionProvider != null) { + item.setActionProvider(itemActionProvider); + } + } + + public void addItem() { + itemAdded = true; + setItem(menu.add(groupId, itemId, itemCategoryOrder, itemTitle)); + } + + public SubMenu addSubMenuItem() { + itemAdded = true; + SubMenu subMenu = menu.addSubMenu(groupId, itemId, itemCategoryOrder, itemTitle); + setItem(subMenu.getItem()); + return subMenu; + } + + public boolean hasAddedItem() { + return itemAdded; + } + + @SuppressWarnings("unchecked") + private T newInstance(String className, Class[] constructorSignature, + Object[] arguments) { + try { + Class clazz = mContext.getClassLoader().loadClass(className); + Constructor constructor = clazz.getConstructor(constructorSignature); + return (T) constructor.newInstance(arguments); + } catch (Exception e) { + Log.w(LOG_TAG, "Cannot instantiate class: " + className, e); + } + return null; + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/MenuItem.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/MenuItem.java new file mode 100644 index 00000000..7fc3aa43 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/MenuItem.java @@ -0,0 +1,598 @@ +/* + * Copyright (C) 2008 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.view; + +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.view.ContextMenu.ContextMenuInfo; +import android.view.View; + +/** + * Interface for direct access to a previously created menu item. + *

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

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

+ *

Developer Guides

+ *

For information about creating menus, read the + * Menus developer guide.

+ *
+ */ +public interface MenuItem { + /* + * These should be kept in sync with attrs.xml enum constants for showAsAction + */ + /** 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; + /** 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; + /** + * 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; + + /** + * 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; + + /** + * This item's action view collapses to a normal menu item. + * When expanded, the action view temporarily takes over + * a larger segment of its container. + */ + public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = android.view.MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW; + + /** + * Interface definition for a callback to be invoked when a menu item is + * clicked. + * + * @see Activity#onContextItemSelected(MenuItem) + * @see Activity#onOptionsItemSelected(MenuItem) + */ + public interface 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 boolean onMenuItemClick(MenuItem item); + } + + /** + * Interface definition for a callback to be invoked when a menu item + * marked with {@link MenuItem#SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW} is + * expanded or collapsed. + * + * @see MenuItem#expandActionView() + * @see MenuItem#collapseActionView() + * @see MenuItem#setShowAsActionFlags(int) + */ + public interface OnActionExpandListener { + /** + * Called when a menu item with {@link MenuItem#SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW} + * is expanded. + * @param item Item that was expanded + * @return true if the item should expand, false if expansion should be suppressed. + */ + public boolean onMenuItemActionExpand(MenuItem item); + + /** + * Called when a menu item with {@link MenuItem#SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW} + * is collapsed. + * @param item Item that was collapsed + * @return true if the item should collapse, false if collapsing should be suppressed. + */ + public boolean onMenuItemActionCollapse(MenuItem item); + } + + /** + * Return the identifier for this menu item. The identifier can not + * be changed after the menu is created. + * + * @return The menu item's identifier. + */ + public int getItemId(); + + /** + * Return the group identifier that this menu item is part of. The group + * identifier can not be changed after the menu is created. + * + * @return The menu item's group identifier. + */ + public int getGroupId(); + + /** + * Return the category and order within the category of this item. This + * item will be shown before all items (within its category) that have + * order greater than this value. + *

+ * An order integer contains the item's category (the upper bits of the + * integer; set by or/add the category with the order within the + * category) and the ordering of the item within that category (the + * lower bits). Example categories are {@link Menu#CATEGORY_SYSTEM}, + * {@link Menu#CATEGORY_SECONDARY}, {@link Menu#CATEGORY_ALTERNATIVE}, + * {@link Menu#CATEGORY_CONTAINER}. See {@link Menu} for a full list. + * + * @return The order of this item. + */ + public int getOrder(); + + /** + * Change the title associated with this item. + * + * @param title The new text to be displayed. + * @return This Item so additional setters can be called. + */ + public MenuItem setTitle(CharSequence title); + + /** + * Change the title associated with this item. + *

+ * Some menu types do not sufficient space to show the full title, and + * instead a condensed title is preferred. See {@link Menu} for more + * information. + * + * @param title The resource id of the new text to be displayed. + * @return This Item so additional setters can be called. + * @see #setTitleCondensed(CharSequence) + */ + + public MenuItem setTitle(int title); + + /** + * Retrieve the current title of the item. + * + * @return The title. + */ + public CharSequence getTitle(); + + /** + * Change the condensed title associated with this item. The condensed + * title is used in situations where the normal title may be too long to + * be displayed. + * + * @param title The new text to be displayed as the condensed title. + * @return This Item so additional setters can be called. + */ + public MenuItem setTitleCondensed(CharSequence title); + + /** + * Retrieve the current condensed title of the item. If a condensed + * title was never set, it will return the normal title. + * + * @return The condensed title, if it exists. + * Otherwise the normal title. + */ + public CharSequence getTitleCondensed(); + + /** + * Change the icon associated with this item. This icon will not always be + * shown, so the title should be sufficient in describing this item. See + * {@link Menu} for the menu types that support icons. + * + * @param icon The new icon (as a Drawable) to be displayed. + * @return This Item so additional setters can be called. + */ + public MenuItem setIcon(Drawable icon); + + /** + * Change the icon associated with this item. This icon will not always be + * shown, so the title should be sufficient in describing this item. See + * {@link Menu} for the menu types that support icons. + *

+ * This method will set the resource ID of the icon which will be used to + * lazily get the Drawable when this item is being shown. + * + * @param iconRes The new icon (as a resource ID) to be displayed. + * @return This Item so additional setters can be called. + */ + public MenuItem setIcon(int iconRes); + + /** + * Returns the icon for this item as a Drawable (getting it from resources if it hasn't been + * loaded before). + * + * @return The icon as a Drawable. + */ + public Drawable getIcon(); + + /** + * Change the Intent associated with this item. By default there is no + * Intent associated with a menu item. If you set one, and nothing + * else handles the item, then the default behavior will be to call + * {@link android.content.Context#startActivity} with the given Intent. + * + *

Note that setIntent() can not be used with the versions of + * {@link Menu#add} that take a Runnable, because {@link Runnable#run} + * does not return a value so there is no way to tell if it handled the + * item. In this case it is assumed that the Runnable always handles + * the item, and the intent will never be started. + * + * @see #getIntent + * @param intent The Intent to associated with the item. This Intent + * object is not copied, so be careful not to + * modify it later. + * @return This Item so additional setters can be called. + */ + public MenuItem setIntent(Intent intent); + + /** + * Return the Intent associated with this item. This returns a + * reference to the Intent which you can change as desired to modify + * what the Item is holding. + * + * @see #setIntent + * @return Returns the last value supplied to {@link #setIntent}, or + * null. + */ + public Intent getIntent(); + + /** + * Change both the numeric and alphabetic shortcut associated with this + * item. Note that the shortcut will be triggered when the key that + * generates the given character is pressed alone or along with with the alt + * key. Also note that case is not significant and that alphabetic shortcut + * characters will be displayed in lower case. + *

+ * See {@link Menu} for the menu types that support shortcuts. + * + * @param numericChar The numeric shortcut key. This is the shortcut when + * using a numeric (e.g., 12-key) keyboard. + * @param alphaChar The alphabetic shortcut key. This is the shortcut when + * using a keyboard with alphabetic keys. + * @return This Item so additional setters can be called. + */ + public MenuItem setShortcut(char numericChar, char alphaChar); + + /** + * Change the numeric shortcut associated with this item. + *

+ * See {@link Menu} for the menu types that support shortcuts. + * + * @param numericChar The numeric shortcut key. This is the shortcut when + * using a 12-key (numeric) keyboard. + * @return This Item so additional setters can be called. + */ + public MenuItem setNumericShortcut(char numericChar); + + /** + * Return the char for this menu item's numeric (12-key) shortcut. + * + * @return Numeric character to use as a shortcut. + */ + public char getNumericShortcut(); + + /** + * Change the alphabetic shortcut associated with this item. The shortcut + * will be triggered when the key that generates the given character is + * pressed alone or along with with the alt key. Case is not significant and + * shortcut characters will be displayed in lower case. Note that menu items + * with the characters '\b' or '\n' as shortcuts will get triggered by the + * Delete key or Carriage Return key, respectively. + *

+ * See {@link Menu} for the menu types that support shortcuts. + * + * @param alphaChar The alphabetic shortcut key. This is the shortcut when + * using a keyboard with alphabetic keys. + * @return This Item so additional setters can be called. + */ + public MenuItem setAlphabeticShortcut(char alphaChar); + + /** + * Return the char for this menu item's alphabetic shortcut. + * + * @return Alphabetic character to use as a shortcut. + */ + public char getAlphabeticShortcut(); + + /** + * Control whether this item can display a check mark. Setting this does + * not actually display a check mark (see {@link #setChecked} for that); + * rather, it ensures there is room in the item in which to display a + * check mark. + *

+ * See {@link Menu} for the menu types that support check marks. + * + * @param checkable Set to true to allow a check mark, false to + * disallow. The default is false. + * @see #setChecked + * @see #isCheckable + * @see Menu#setGroupCheckable + * @return This Item so additional setters can be called. + */ + public MenuItem setCheckable(boolean checkable); + + /** + * Return whether the item can currently display a check mark. + * + * @return If a check mark can be displayed, returns true. + * + * @see #setCheckable + */ + public boolean isCheckable(); + + /** + * Control whether this item is shown with a check mark. Note that you + * must first have enabled checking with {@link #setCheckable} or else + * the check mark will not appear. If this item is a member of a group that contains + * mutually-exclusive items (set via {@link Menu#setGroupCheckable(int, boolean, boolean)}, + * the other items in the group will be unchecked. + *

+ * See {@link Menu} for the menu types that support check marks. + * + * @see #setCheckable + * @see #isChecked + * @see Menu#setGroupCheckable + * @param checked Set to true to display a check mark, false to hide + * it. The default value is false. + * @return This Item so additional setters can be called. + */ + public MenuItem setChecked(boolean checked); + + /** + * Return whether the item is currently displaying a check mark. + * + * @return If a check mark is displayed, returns true. + * + * @see #setChecked + */ + public boolean isChecked(); + + /** + * Sets the visibility of the menu item. Even if a menu item is not visible, + * it may still be invoked via its shortcut (to completely disable an item, + * set it to invisible and {@link #setEnabled(boolean) disabled}). + * + * @param visible If true then the item will be visible; if false it is + * hidden. + * @return This Item so additional setters can be called. + */ + public MenuItem setVisible(boolean visible); + + /** + * Return the visibility of the menu item. + * + * @return If true the item is visible; else it is hidden. + */ + public boolean isVisible(); + + /** + * Sets whether the menu item is enabled. Disabling a menu item will not + * allow it to be invoked via its shortcut. The menu item will still be + * visible. + * + * @param enabled If true then the item will be invokable; if false it is + * won't be invokable. + * @return This Item so additional setters can be called. + */ + public MenuItem setEnabled(boolean enabled); + + /** + * Return the enabled state of the menu item. + * + * @return If true the item is enabled and hence invokable; else it is not. + */ + public boolean isEnabled(); + + /** + * Check whether this item has an associated sub-menu. I.e. it is a + * sub-menu of another menu. + * + * @return If true this item has a menu; else it is a + * normal item. + */ + public boolean hasSubMenu(); + + /** + * Get the sub-menu to be invoked when this item is selected, if it has + * one. See {@link #hasSubMenu()}. + * + * @return The associated menu if there is one, else null + */ + public SubMenu getSubMenu(); + + /** + * Set a custom listener for invocation of this menu item. In most + * situations, it is more efficient and easier to use + * {@link Activity#onOptionsItemSelected(MenuItem)} or + * {@link Activity#onContextItemSelected(MenuItem)}. + * + * @param menuItemClickListener The object to receive invokations. + * @return This Item so additional setters can be called. + * @see Activity#onOptionsItemSelected(MenuItem) + * @see Activity#onContextItemSelected(MenuItem) + */ + public MenuItem setOnMenuItemClickListener(MenuItem.OnMenuItemClickListener menuItemClickListener); + + /** + * Gets the extra information linked to this menu item. This extra + * information is set by the View that added this menu item to the + * menu. + * + * @see OnCreateContextMenuListener + * @return The extra information linked to the View that added this + * menu item to the menu. This can be null. + */ + public ContextMenuInfo getMenuInfo(); + + /** + * 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}. + * 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}. SHOW_AS_ACTION_NEVER is the default. + * + * @see android.app.ActionBar + * @see #setActionView(View) + */ + public void setShowAsAction(int actionEnum); + + /** + * 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}. + * SHOW_AS_ACTION_WITH_TEXT requests that when the item is shown as an action, + * it should be shown with a text label. + * + *

Note: This method differs from {@link #setShowAsAction(int)} only in that it + * returns the current MenuItem instance for call chaining. + * + * @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}. SHOW_AS_ACTION_NEVER is the default. + * + * @see android.app.ActionBar + * @see #setActionView(View) + * @return This MenuItem instance for call chaining. + */ + public MenuItem setShowAsActionFlags(int actionEnum); + + /** + * 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. + *

+ * Note: Setting an action view overrides the action provider + * set via {@link #setActionProvider(ActionProvider)}. + *

+ * + * @param view View to use for presenting this item to the user. + * @return This Item so additional setters can be called. + * + * @see #setShowAsAction(int) + */ + public MenuItem setActionView(View view); + + /** + * 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. + *

+ * Note: Setting an action view overrides the action provider + * set via {@link #setActionProvider(ActionProvider)}. + *

+ * + * @param resId Layout resource to use for presenting this item to the user. + * @return This Item so additional setters can be called. + * + * @see #setShowAsAction(int) + */ + public MenuItem setActionView(int resId); + + /** + * Returns the currently set action view for this menu item. + * + * @return This item's action view + * + * @see #setActionView(View) + * @see #setShowAsAction(int) + */ + public View getActionView(); + + /** + * Sets the {@link ActionProvider} responsible for creating an action view if + * the item is placed on the action bar. The provider also provides a default + * action invoked if the item is placed in the overflow menu. + *

+ * Note: Setting an action provider overrides the action view + * set via {@link #setActionView(int)} or {@link #setActionView(View)}. + *

+ * + * @param actionProvider The action provider. + * @return This Item so additional setters can be called. + * + * @see ActionProvider + */ + public MenuItem setActionProvider(ActionProvider actionProvider); + + /** + * Gets the {@link ActionProvider}. + * + * @return The action provider. + * + * @see ActionProvider + * @see #setActionProvider(ActionProvider) + */ + public ActionProvider getActionProvider(); + + /** + * Expand the action view associated with this menu item. + * The menu item must have an action view set, as well as + * the showAsAction flag {@link #SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW}. + * If a listener has been set using {@link #setOnActionExpandListener(OnActionExpandListener)} + * it will have its {@link OnActionExpandListener#onMenuItemActionExpand(MenuItem)} + * method invoked. The listener may return false from this method to prevent expanding + * the action view. + * + * @return true if the action view was expanded, false otherwise. + */ + public boolean expandActionView(); + + /** + * Collapse the action view associated with this menu item. + * The menu item must have an action view set, as well as the showAsAction flag + * {@link #SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW}. If a listener has been set using + * {@link #setOnActionExpandListener(OnActionExpandListener)} it will have its + * {@link OnActionExpandListener#onMenuItemActionCollapse(MenuItem)} method invoked. + * The listener may return false from this method to prevent collapsing the action view. + * + * @return true if the action view was collapsed, false otherwise. + */ + public boolean collapseActionView(); + + /** + * Returns true if this menu item's action view has been expanded. + * + * @return true if the item's action view is expanded, false otherwise. + * + * @see #expandActionView() + * @see #collapseActionView() + * @see #SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW + * @see OnActionExpandListener + */ + public boolean isActionViewExpanded(); + + /** + * Set an {@link OnActionExpandListener} on this menu item to be notified when + * the associated action view is expanded or collapsed. The menu item must + * be configured to expand or collapse its action view using the flag + * {@link #SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW}. + * + * @param listener Listener that will respond to expand/collapse events + * @return This menu item instance for call chaining + */ + public MenuItem setOnActionExpandListener(OnActionExpandListener listener); +} \ No newline at end of file diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/SubMenu.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/SubMenu.java new file mode 100644 index 00000000..397fd1c2 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/SubMenu.java @@ -0,0 +1,110 @@ +/* + * 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.view; + +import android.graphics.drawable.Drawable; +import android.view.View; + +/** + * Subclass of {@link Menu} for sub menus. + *

+ * Sub menus do not support item icons, or nested sub menus. + * + *

+ *

Developer Guides

+ *

For information about creating menus, read the + * Menus developer guide.

+ *
+ */ + +public interface SubMenu extends Menu { + /** + * Sets the submenu header's title to the title given in titleRes + * resource identifier. + * + * @param titleRes The string resource identifier used for the title. + * @return This SubMenu so additional setters can be called. + */ + public SubMenu setHeaderTitle(int titleRes); + + /** + * Sets the submenu header's title to the title given in title. + * + * @param title The character sequence used for the title. + * @return This SubMenu so additional setters can be called. + */ + public SubMenu setHeaderTitle(CharSequence title); + + /** + * Sets the submenu header's icon to the icon given in iconRes + * resource id. + * + * @param iconRes The resource identifier used for the icon. + * @return This SubMenu so additional setters can be called. + */ + public SubMenu setHeaderIcon(int iconRes); + + /** + * Sets the submenu header's icon to the icon given in icon + * {@link Drawable}. + * + * @param icon The {@link Drawable} used for the icon. + * @return This SubMenu so additional setters can be called. + */ + public SubMenu setHeaderIcon(Drawable icon); + + /** + * Sets the header of the submenu to the {@link View} given in + * view. This replaces the header title and icon (and those + * replace this). + * + * @param view The {@link View} used for the header. + * @return This SubMenu so additional setters can be called. + */ + public SubMenu setHeaderView(View view); + + /** + * Clears the header of the submenu. + */ + public void clearHeader(); + + /** + * Change the icon associated with this submenu's item in its parent menu. + * + * @see MenuItem#setIcon(int) + * @param iconRes The new icon (as a resource ID) to be displayed. + * @return This SubMenu so additional setters can be called. + */ + public SubMenu setIcon(int iconRes); + + /** + * Change the icon associated with this submenu's item in its parent menu. + * + * @see MenuItem#setIcon(Drawable) + * @param icon The new icon (as a Drawable) to be displayed. + * @return This SubMenu so additional setters can be called. + */ + public SubMenu setIcon(Drawable icon); + + /** + * Gets the {@link MenuItem} that represents this submenu in the parent + * menu. Use this for setting additional item attributes. + * + * @return The {@link MenuItem} that launches the submenu when invoked. + */ + public MenuItem getItem(); +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/Window.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/Window.java new file mode 100644 index 00000000..a340a429 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/view/Window.java @@ -0,0 +1,65 @@ +/* + * 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.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 { + public static final long FEATURE_ACTION_BAR = android.view.Window.FEATURE_ACTION_BAR; + public static final long FEATURE_ACTION_BAR_OVERLAY = android.view.Window.FEATURE_ACTION_BAR_OVERLAY; + public static final long FEATURE_ACTION_MODE_OVERLAY = android.view.Window.FEATURE_ACTION_MODE_OVERLAY; + public static final long FEATURE_NO_TITLE = android.view.Window.FEATURE_NO_TITLE; + public static final long FEATURE_PROGRESS = android.view.Window.FEATURE_PROGRESS; + public static final long FEATURE_INDETERMINATE_PROGRESS = android.view.Window.FEATURE_INDETERMINATE_PROGRESS; + + /** + * Create a new instance for a context. + * + * @param context Context. + */ + private Window(Context context) { + super(context); + } + + + public interface Callback { + /** + * Called when a panel's menu item has been selected by the user. + * + * @param featureId The panel that the menu is in. + * @param item The menu item that was selected. + * + * @return boolean Return true to finish processing of selection, or + * false to perform the normal menu handling (calling its + * Runnable or sending a Message to its target Handler). + */ + public boolean onMenuItemSelected(int featureId, MenuItem item); + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/ActivityChooserModel.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/ActivityChooserModel.java new file mode 100644 index 00000000..37920747 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/ActivityChooserModel.java @@ -0,0 +1,1131 @@ +/* + * 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.widget; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ResolveInfo; +import android.database.DataSetObservable; +import android.os.Handler; +import android.text.TextUtils; +import android.util.Log; +import android.util.Xml; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; +import org.xmlpull.v1.XmlSerializer; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.Executor; + +/** + *

+ * This class represents a data model for choosing a component for handing a + * given {@link Intent}. The model is responsible for querying the system for + * activities that can handle the given intent and order found activities + * based on historical data of previous choices. The historical data is stored + * in an application private file. If a client does not want to have persistent + * choice history the file can be omitted, thus the activities will be ordered + * based on historical usage for the current session. + *

+ *

+ * For each backing history file there is a singleton instance of this class. Thus, + * several clients that specify the same history file will share the same model. Note + * that if multiple clients are sharing the same model they should implement semantically + * equivalent functionality since setting the model intent will change the found + * activities and they may be inconsistent with the functionality of some of the clients. + * For example, choosing a share activity can be implemented by a single backing + * model and two different views for performing the selection. If however, one of the + * views is used for sharing but the other for importing, for example, then each + * view should be backed by a separate model. + *

+ *

+ * The way clients interact with this class is as follows: + *

+ *

+ *

+ * 
+ *  // Get a model and set it to a couple of clients with semantically similar function.
+ *  ActivityChooserModel dataModel =
+ *      ActivityChooserModel.get(context, "task_specific_history_file_name.xml");
+ *
+ *  ActivityChooserModelClient modelClient1 = getActivityChooserModelClient1();
+ *  modelClient1.setActivityChooserModel(dataModel);
+ *
+ *  ActivityChooserModelClient modelClient2 = getActivityChooserModelClient2();
+ *  modelClient2.setActivityChooserModel(dataModel);
+ *
+ *  // Set an intent to choose a an activity for.
+ *  dataModel.setIntent(intent);
+ * 
+ * 
+ * 

+ *

+ * Note: This class is thread safe. + *

+ * + * @hide + */ +class ActivityChooserModel extends DataSetObservable { + + /** + * Client that utilizes an {@link ActivityChooserModel}. + */ + public interface ActivityChooserModelClient { + + /** + * Sets the {@link ActivityChooserModel}. + * + * @param dataModel The model. + */ + public void setActivityChooserModel(ActivityChooserModel dataModel); + } + + /** + * Defines a sorter that is responsible for sorting the activities + * based on the provided historical choices and an intent. + */ + public interface ActivitySorter { + + /** + * Sorts the activities in descending order of relevance + * based on previous history and an intent. + * + * @param intent The {@link Intent}. + * @param activities Activities to be sorted. + * @param historicalRecords Historical records. + */ + // This cannot be done by a simple comparator since an Activity weight + // is computed from history. Note that Activity implements Comparable. + public void sort(Intent intent, List activities, + List historicalRecords); + } + + /** + * Listener for choosing an activity. + */ + public interface OnChooseActivityListener { + + /** + * Called when an activity has been chosen. The client can decide whether + * an activity can be chosen and if so the caller of + * {@link ActivityChooserModel#chooseActivity(int)} will receive and {@link Intent} + * for launching it. + *

+ * Note: Modifying the intent is not permitted and + * any changes to the latter will be ignored. + *

+ * + * @param host The listener's host model. + * @param intent The intent for launching the chosen activity. + * @return Whether the intent is handled and should not be delivered to clients. + * + * @see ActivityChooserModel#chooseActivity(int) + */ + public boolean onChooseActivity(ActivityChooserModel host, Intent intent); + } + + /** + * Flag for selecting debug mode. + */ + private static final boolean DEBUG = false; + + /** + * Tag used for logging. + */ + private static final String LOG_TAG = ActivityChooserModel.class.getSimpleName(); + + /** + * The root tag in the history file. + */ + private static final String TAG_HISTORICAL_RECORDS = "historical-records"; + + /** + * The tag for a record in the history file. + */ + private static final String TAG_HISTORICAL_RECORD = "historical-record"; + + /** + * Attribute for the activity. + */ + private static final String ATTRIBUTE_ACTIVITY = "activity"; + + /** + * Attribute for the choice time. + */ + private static final String ATTRIBUTE_TIME = "time"; + + /** + * Attribute for the choice weight. + */ + private static final String ATTRIBUTE_WEIGHT = "weight"; + + /** + * The default name of the choice history file. + */ + public static final String DEFAULT_HISTORY_FILE_NAME = + "activity_choser_model_history.xml"; + + /** + * The default maximal length of the choice history. + */ + public static final int DEFAULT_HISTORY_MAX_LENGTH = 50; + + /** + * The amount with which to inflate a chosen activity when set as default. + */ + private static final int DEFAULT_ACTIVITY_INFLATION = 5; + + /** + * Default weight for a choice record. + */ + private static final float DEFAULT_HISTORICAL_RECORD_WEIGHT = 1.0f; + + /** + * The extension of the history file. + */ + private static final String HISTORY_FILE_EXTENSION = ".xml"; + + /** + * An invalid item index. + */ + private static final int INVALID_INDEX = -1; + + /** + * Lock to guard the model registry. + */ + private static final Object sRegistryLock = new Object(); + + /** + * This the registry for data models. + */ + private static final Map sDataModelRegistry = + new HashMap(); + + /** + * Lock for synchronizing on this instance. + */ + private final Object mInstanceLock = new Object(); + + /** + * List of activities that can handle the current intent. + */ + private final List mActivites = new ArrayList(); + + /** + * List with historical choice records. + */ + private final List mHistoricalRecords = new ArrayList(); + + /** + * Context for accessing resources. + */ + private final Context mContext; + + /** + * The name of the history file that backs this model. + */ + private final String mHistoryFileName; + + /** + * The intent for which a activity is being chosen. + */ + private Intent mIntent; + + /** + * The sorter for ordering activities based on intent and past choices. + */ + private ActivitySorter mActivitySorter = new DefaultSorter(); + + /** + * The maximal length of the choice history. + */ + private int mHistoryMaxSize = DEFAULT_HISTORY_MAX_LENGTH; + + /** + * Flag whether choice history can be read. In general many clients can + * share the same data model and {@link #readHistoricalData()} may be called + * by arbitrary of them any number of times. Therefore, this class guarantees + * that the very first read succeeds and subsequent reads can be performed + * only after a call to {@link #persistHistoricalData()} followed by change + * of the share records. + */ + private boolean mCanReadHistoricalData = true; + + /** + * Flag whether the choice history was read. This is used to enforce that + * before calling {@link #persistHistoricalData()} a call to + * {@link #persistHistoricalData()} has been made. This aims to avoid a + * scenario in which a choice history file exits, it is not read yet and + * it is overwritten. Note that always all historical records are read in + * full and the file is rewritten. This is necessary since we need to + * purge old records that are outside of the sliding window of past choices. + */ + private boolean mReadShareHistoryCalled = false; + + /** + * Flag whether the choice records have changed. In general many clients can + * share the same data model and {@link #persistHistoricalData()} may be called + * by arbitrary of them any number of times. Therefore, this class guarantees + * that choice history will be persisted only if it has changed. + */ + private boolean mHistoricalRecordsChanged = true; + + /** + * Hander for scheduling work on client tread. + */ + private final Handler mHandler = new Handler(); + + /** + * Policy for controlling how the model handles chosen activities. + */ + private OnChooseActivityListener mActivityChoserModelPolicy; + + /** + * Gets the data model backed by the contents of the provided file with historical data. + * Note that only one data model is backed by a given file, thus multiple calls with + * the same file name will return the same model instance. If no such instance is present + * it is created. + *

+ * Note: To use the default historical data file clients should explicitly + * pass as file name {@link #DEFAULT_HISTORY_FILE_NAME}. If no persistence of the choice + * history is desired clients should pass null for the file name. In such + * case a new model is returned for each invocation. + *

+ * + *

+ * Always use difference historical data files for semantically different actions. + * For example, sharing is different from importing. + *

+ * + * @param context Context for loading resources. + * @param historyFileName File name with choice history, null + * if the model should not be backed by a file. In this case the activities + * will be ordered only by data from the current session. + * + * @return The model. + */ + public static ActivityChooserModel get(Context context, String historyFileName) { + synchronized (sRegistryLock) { + ActivityChooserModel dataModel = sDataModelRegistry.get(historyFileName); + if (dataModel == null) { + dataModel = new ActivityChooserModel(context, historyFileName); + sDataModelRegistry.put(historyFileName, dataModel); + } + dataModel.readHistoricalData(); + return dataModel; + } + } + + /** + * Creates a new instance. + * + * @param context Context for loading resources. + * @param historyFileName The history XML file. + */ + private ActivityChooserModel(Context context, String historyFileName) { + mContext = context.getApplicationContext(); + if (!TextUtils.isEmpty(historyFileName) + && !historyFileName.endsWith(HISTORY_FILE_EXTENSION)) { + mHistoryFileName = historyFileName + HISTORY_FILE_EXTENSION; + } else { + mHistoryFileName = historyFileName; + } + } + + /** + * Sets an intent for which to choose a activity. + *

+ * Note: Clients must set only semantically similar + * intents for each data model. + *

+ * + * @param intent The intent. + */ + public void setIntent(Intent intent) { + synchronized (mInstanceLock) { + if (mIntent == intent) { + return; + } + mIntent = intent; + loadActivitiesLocked(); + } + } + + /** + * Gets the intent for which a activity is being chosen. + * + * @return The intent. + */ + public Intent getIntent() { + synchronized (mInstanceLock) { + return mIntent; + } + } + + /** + * Gets the number of activities that can handle the intent. + * + * @return The activity count. + * + * @see #setIntent(Intent) + */ + public int getActivityCount() { + synchronized (mInstanceLock) { + return mActivites.size(); + } + } + + /** + * Gets an activity at a given index. + * + * @return The activity. + * + * @see ActivityResolveInfo + * @see #setIntent(Intent) + */ + public ResolveInfo getActivity(int index) { + synchronized (mInstanceLock) { + return mActivites.get(index).resolveInfo; + } + } + + /** + * Gets the index of a the given activity. + * + * @param activity The activity index. + * + * @return The index if found, -1 otherwise. + */ + public int getActivityIndex(ResolveInfo activity) { + List activities = mActivites; + final int activityCount = activities.size(); + for (int i = 0; i < activityCount; i++) { + ActivityResolveInfo currentActivity = activities.get(i); + if (currentActivity.resolveInfo == activity) { + return i; + } + } + return INVALID_INDEX; + } + + /** + * Chooses a activity to handle the current intent. This will result in + * adding a historical record for that action and construct intent with + * its component name set such that it can be immediately started by the + * client. + *

+ * Note: By calling this method the client guarantees + * that the returned intent will be started. This intent is returned to + * the client solely to let additional customization before the start. + *

+ * + * @return An {@link Intent} for launching the activity or null if the + * policy has consumed the intent. + * + * @see HistoricalRecord + * @see OnChooseActivityListener + */ + public Intent chooseActivity(int index) { + ActivityResolveInfo chosenActivity = mActivites.get(index); + + ComponentName chosenName = new ComponentName( + chosenActivity.resolveInfo.activityInfo.packageName, + chosenActivity.resolveInfo.activityInfo.name); + + Intent choiceIntent = new Intent(mIntent); + choiceIntent.setComponent(chosenName); + + if (mActivityChoserModelPolicy != null) { + // Do not allow the policy to change the intent. + Intent choiceIntentCopy = new Intent(choiceIntent); + final boolean handled = mActivityChoserModelPolicy.onChooseActivity(this, + choiceIntentCopy); + if (handled) { + return null; + } + } + + HistoricalRecord historicalRecord = new HistoricalRecord(chosenName, + System.currentTimeMillis(), DEFAULT_HISTORICAL_RECORD_WEIGHT); + addHisoricalRecord(historicalRecord); + + return choiceIntent; + } + + /** + * Sets the listener for choosing an activity. + * + * @param listener The listener. + */ + public void setOnChooseActivityListener(OnChooseActivityListener listener) { + mActivityChoserModelPolicy = listener; + } + + /** + * Gets the default activity, The default activity is defined as the one + * with highest rank i.e. the first one in the list of activities that can + * handle the intent. + * + * @return The default activity, null id not activities. + * + * @see #getActivity(int) + */ + public ResolveInfo getDefaultActivity() { + synchronized (mInstanceLock) { + if (!mActivites.isEmpty()) { + return mActivites.get(0).resolveInfo; + } + } + return null; + } + + /** + * Sets the default activity. The default activity is set by adding a + * historical record with weight high enough that this activity will + * become the highest ranked. Such a strategy guarantees that the default + * will eventually change if not used. Also the weight of the record for + * setting a default is inflated with a constant amount to guarantee that + * it will stay as default for awhile. + * + * @param index The index of the activity to set as default. + */ + public void setDefaultActivity(int index) { + ActivityResolveInfo newDefaultActivity = mActivites.get(index); + ActivityResolveInfo oldDefaultActivity = mActivites.get(0); + + final float weight; + if (oldDefaultActivity != null) { + // Add a record with weight enough to boost the chosen at the top. + weight = oldDefaultActivity.weight - newDefaultActivity.weight + + DEFAULT_ACTIVITY_INFLATION; + } else { + weight = DEFAULT_HISTORICAL_RECORD_WEIGHT; + } + + ComponentName defaultName = new ComponentName( + newDefaultActivity.resolveInfo.activityInfo.packageName, + newDefaultActivity.resolveInfo.activityInfo.name); + HistoricalRecord historicalRecord = new HistoricalRecord(defaultName, + System.currentTimeMillis(), weight); + addHisoricalRecord(historicalRecord); + } + + /** + * Reads the history data from the backing file if the latter + * was provided. Calling this method more than once before a call + * to {@link #persistHistoricalData()} has been made has no effect. + *

+ * Note: Historical data is read asynchronously and + * as soon as the reading is completed any registered + * {@link DataSetObserver}s will be notified. Also no historical + * data is read until this method is invoked. + *

+ */ + private void readHistoricalData() { + synchronized (mInstanceLock) { + if (!mCanReadHistoricalData || !mHistoricalRecordsChanged) { + return; + } + mCanReadHistoricalData = false; + mReadShareHistoryCalled = true; + if (!TextUtils.isEmpty(mHistoryFileName)) { + /*AsyncTask.*/SERIAL_EXECUTOR.execute(new HistoryLoader()); + } + } + } + + private static final SerialExecutor SERIAL_EXECUTOR = new SerialExecutor(); + + private static class SerialExecutor implements Executor { + final LinkedList mTasks = new LinkedList(); + Runnable mActive; + + public synchronized void execute(final Runnable r) { + mTasks.offer(new Runnable() { + public void run() { + try { + r.run(); + } finally { + scheduleNext(); + } + } + }); + if (mActive == null) { + scheduleNext(); + } + } + + protected synchronized void scheduleNext() { + if ((mActive = mTasks.poll()) != null) { + mActive.run(); + } + } + } + + /** + * Persists the history data to the backing file if the latter + * was provided. Calling this method before a call to {@link #readHistoricalData()} + * throws an exception. Calling this method more than one without choosing an + * activity has not effect. + * + * @throws IllegalStateException If this method is called before a call to + * {@link #readHistoricalData()}. + */ + private void persistHistoricalData() { + synchronized (mInstanceLock) { + if (!mReadShareHistoryCalled) { + throw new IllegalStateException("No preceding call to #readHistoricalData"); + } + if (!mHistoricalRecordsChanged) { + return; + } + mHistoricalRecordsChanged = false; + mCanReadHistoricalData = true; + if (!TextUtils.isEmpty(mHistoryFileName)) { + /*AsyncTask.*/SERIAL_EXECUTOR.execute(new HistoryPersister()); + } + } + } + + /** + * Sets the sorter for ordering activities based on historical data and an intent. + * + * @param activitySorter The sorter. + * + * @see ActivitySorter + */ + public void setActivitySorter(ActivitySorter activitySorter) { + synchronized (mInstanceLock) { + if (mActivitySorter == activitySorter) { + return; + } + mActivitySorter = activitySorter; + sortActivities(); + } + } + + /** + * Sorts the activities based on history and an intent. If + * a sorter is not specified this a default implementation is used. + * + * @see #setActivitySorter(ActivitySorter) + */ + private void sortActivities() { + synchronized (mInstanceLock) { + if (mActivitySorter != null && !mActivites.isEmpty()) { + mActivitySorter.sort(mIntent, mActivites, + Collections.unmodifiableList(mHistoricalRecords)); + notifyChanged(); + } + } + } + + /** + * Sets the maximal size of the historical data. Defaults to + * {@link #DEFAULT_HISTORY_MAX_LENGTH} + *

+ * Note: Setting this property will immediately + * enforce the specified max history size by dropping enough old + * historical records to enforce the desired size. Thus, any + * records that exceed the history size will be discarded and + * irreversibly lost. + *

+ * + * @param historyMaxSize The max history size. + */ + public void setHistoryMaxSize(int historyMaxSize) { + synchronized (mInstanceLock) { + if (mHistoryMaxSize == historyMaxSize) { + return; + } + mHistoryMaxSize = historyMaxSize; + pruneExcessiveHistoricalRecordsLocked(); + sortActivities(); + } + } + + /** + * Gets the history max size. + * + * @return The history max size. + */ + public int getHistoryMaxSize() { + synchronized (mInstanceLock) { + return mHistoryMaxSize; + } + } + + /** + * Gets the history size. + * + * @return The history size. + */ + public int getHistorySize() { + synchronized (mInstanceLock) { + return mHistoricalRecords.size(); + } + } + + /** + * Adds a historical record. + * + * @param historicalRecord The record to add. + * @return True if the record was added. + */ + private boolean addHisoricalRecord(HistoricalRecord historicalRecord) { + synchronized (mInstanceLock) { + final boolean added = mHistoricalRecords.add(historicalRecord); + if (added) { + mHistoricalRecordsChanged = true; + pruneExcessiveHistoricalRecordsLocked(); + persistHistoricalData(); + sortActivities(); + } + return added; + } + } + + /** + * Prunes older excessive records to guarantee {@link #mHistoryMaxSize}. + */ + private void pruneExcessiveHistoricalRecordsLocked() { + List choiceRecords = mHistoricalRecords; + final int pruneCount = choiceRecords.size() - mHistoryMaxSize; + if (pruneCount <= 0) { + return; + } + mHistoricalRecordsChanged = true; + for (int i = 0; i < pruneCount; i++) { + HistoricalRecord prunedRecord = choiceRecords.remove(0); + if (DEBUG) { + Log.i(LOG_TAG, "Pruned: " + prunedRecord); + } + } + } + + /** + * Loads the activities. + */ + private void loadActivitiesLocked() { + mActivites.clear(); + if (mIntent != null) { + List resolveInfos = + mContext.getPackageManager().queryIntentActivities(mIntent, 0); + final int resolveInfoCount = resolveInfos.size(); + for (int i = 0; i < resolveInfoCount; i++) { + ResolveInfo resolveInfo = resolveInfos.get(i); + mActivites.add(new ActivityResolveInfo(resolveInfo)); + } + sortActivities(); + } else { + notifyChanged(); + } + } + + /** + * Represents a record in the history. + */ + public final static class HistoricalRecord { + + /** + * The activity name. + */ + public final ComponentName activity; + + /** + * The choice time. + */ + public final long time; + + /** + * The record weight. + */ + public final float weight; + + /** + * Creates a new instance. + * + * @param activityName The activity component name flattened to string. + * @param time The time the activity was chosen. + * @param weight The weight of the record. + */ + public HistoricalRecord(String activityName, long time, float weight) { + this(ComponentName.unflattenFromString(activityName), time, weight); + } + + /** + * Creates a new instance. + * + * @param activityName The activity name. + * @param time The time the activity was chosen. + * @param weight The weight of the record. + */ + public HistoricalRecord(ComponentName activityName, long time, float weight) { + this.activity = activityName; + this.time = time; + this.weight = weight; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((activity == null) ? 0 : activity.hashCode()); + result = prime * result + (int) (time ^ (time >>> 32)); + result = prime * result + Float.floatToIntBits(weight); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + HistoricalRecord other = (HistoricalRecord) obj; + if (activity == null) { + if (other.activity != null) { + return false; + } + } else if (!activity.equals(other.activity)) { + return false; + } + if (time != other.time) { + return false; + } + if (Float.floatToIntBits(weight) != Float.floatToIntBits(other.weight)) { + return false; + } + return true; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("["); + builder.append("; activity:").append(activity); + builder.append("; time:").append(time); + builder.append("; weight:").append(new BigDecimal(weight)); + builder.append("]"); + return builder.toString(); + } + } + + /** + * Represents an activity. + */ + public final class ActivityResolveInfo implements Comparable { + + /** + * The {@link ResolveInfo} of the activity. + */ + public final ResolveInfo resolveInfo; + + /** + * Weight of the activity. Useful for sorting. + */ + public float weight; + + /** + * Creates a new instance. + * + * @param resolveInfo activity {@link ResolveInfo}. + */ + public ActivityResolveInfo(ResolveInfo resolveInfo) { + this.resolveInfo = resolveInfo; + } + + @Override + public int hashCode() { + return 31 + Float.floatToIntBits(weight); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + ActivityResolveInfo other = (ActivityResolveInfo) obj; + if (Float.floatToIntBits(weight) != Float.floatToIntBits(other.weight)) { + return false; + } + return true; + } + + public int compareTo(ActivityResolveInfo another) { + return Float.floatToIntBits(another.weight) - Float.floatToIntBits(weight); + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("["); + builder.append("resolveInfo:").append(resolveInfo.toString()); + builder.append("; weight:").append(new BigDecimal(weight)); + builder.append("]"); + return builder.toString(); + } + } + + /** + * Default activity sorter implementation. + */ + private final class DefaultSorter implements ActivitySorter { + private static final float WEIGHT_DECAY_COEFFICIENT = 0.95f; + + private final Map mPackageNameToActivityMap = + new HashMap(); + + public void sort(Intent intent, List activities, + List historicalRecords) { + Map packageNameToActivityMap = + mPackageNameToActivityMap; + packageNameToActivityMap.clear(); + + final int activityCount = activities.size(); + for (int i = 0; i < activityCount; i++) { + ActivityResolveInfo activity = activities.get(i); + activity.weight = 0.0f; + String packageName = activity.resolveInfo.activityInfo.packageName; + packageNameToActivityMap.put(packageName, activity); + } + + final int lastShareIndex = historicalRecords.size() - 1; + float nextRecordWeight = 1; + for (int i = lastShareIndex; i >= 0; i--) { + HistoricalRecord historicalRecord = historicalRecords.get(i); + String packageName = historicalRecord.activity.getPackageName(); + ActivityResolveInfo activity = packageNameToActivityMap.get(packageName); + if (activity != null) { + activity.weight += historicalRecord.weight * nextRecordWeight; + nextRecordWeight = nextRecordWeight * WEIGHT_DECAY_COEFFICIENT; + } + } + + Collections.sort(activities); + + if (DEBUG) { + for (int i = 0; i < activityCount; i++) { + Log.i(LOG_TAG, "Sorted: " + activities.get(i)); + } + } + } + } + + /** + * Command for reading the historical records from a file off the UI thread. + */ + private final class HistoryLoader implements Runnable { + + public void run() { + FileInputStream fis = null; + try { + fis = mContext.openFileInput(mHistoryFileName); + } catch (FileNotFoundException fnfe) { + if (DEBUG) { + Log.i(LOG_TAG, "Could not open historical records file: " + mHistoryFileName); + } + return; + } + try { + XmlPullParser parser = Xml.newPullParser(); + parser.setInput(fis, null); + + int type = XmlPullParser.START_DOCUMENT; + while (type != XmlPullParser.END_DOCUMENT && type != XmlPullParser.START_TAG) { + type = parser.next(); + } + + if (!TAG_HISTORICAL_RECORDS.equals(parser.getName())) { + throw new XmlPullParserException("Share records file does not start with " + + TAG_HISTORICAL_RECORDS + " tag."); + } + + List readRecords = new ArrayList(); + + while (true) { + type = parser.next(); + if (type == XmlPullParser.END_DOCUMENT) { + break; + } + if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) { + continue; + } + String nodeName = parser.getName(); + if (!TAG_HISTORICAL_RECORD.equals(nodeName)) { + throw new XmlPullParserException("Share records file not well-formed."); + } + + String activity = parser.getAttributeValue(null, ATTRIBUTE_ACTIVITY); + final long time = + Long.parseLong(parser.getAttributeValue(null, ATTRIBUTE_TIME)); + final float weight = + Float.parseFloat(parser.getAttributeValue(null, ATTRIBUTE_WEIGHT)); + + HistoricalRecord readRecord = new HistoricalRecord(activity, time, + weight); + readRecords.add(readRecord); + + if (DEBUG) { + Log.i(LOG_TAG, "Read " + readRecord.toString()); + } + } + + if (DEBUG) { + Log.i(LOG_TAG, "Read " + readRecords.size() + " historical records."); + } + + synchronized (mInstanceLock) { + Set uniqueShareRecords = + new LinkedHashSet(readRecords); + + // Make sure no duplicates. Example: Read a file with + // one record, add one record, persist the two records, + // add a record, read the persisted records - the + // read two records should not be added again. + List historicalRecords = mHistoricalRecords; + final int historicalRecordsCount = historicalRecords.size(); + for (int i = historicalRecordsCount - 1; i >= 0; i--) { + HistoricalRecord historicalRecord = historicalRecords.get(i); + uniqueShareRecords.add(historicalRecord); + } + + if (historicalRecords.size() == uniqueShareRecords.size()) { + return; + } + + // Make sure the oldest records go to the end. + historicalRecords.clear(); + historicalRecords.addAll(uniqueShareRecords); + + mHistoricalRecordsChanged = true; + + // Do this on the client thread since the client may be on the UI + // thread, wait for data changes which happen during sorting, and + // perform UI modification based on the data change. + mHandler.post(new Runnable() { + public void run() { + pruneExcessiveHistoricalRecordsLocked(); + sortActivities(); + } + }); + } + } catch (XmlPullParserException xppe) { + Log.e(LOG_TAG, "Error reading historical recrod file: " + mHistoryFileName, xppe); + } catch (IOException ioe) { + Log.e(LOG_TAG, "Error reading historical recrod file: " + mHistoryFileName, ioe); + } finally { + if (fis != null) { + try { + fis.close(); + } catch (IOException ioe) { + /* ignore */ + } + } + } + } + } + + /** + * Command for persisting the historical records to a file off the UI thread. + */ + private final class HistoryPersister implements Runnable { + + public void run() { + FileOutputStream fos = null; + List records = null; + + synchronized (mInstanceLock) { + records = new ArrayList(mHistoricalRecords); + } + + try { + fos = mContext.openFileOutput(mHistoryFileName, Context.MODE_PRIVATE); + } catch (FileNotFoundException fnfe) { + Log.e(LOG_TAG, "Error writing historical recrod file: " + mHistoryFileName, fnfe); + return; + } + + XmlSerializer serializer = Xml.newSerializer(); + + try { + serializer.setOutput(fos, null); + serializer.startDocument("UTF-8", true); + serializer.startTag(null, TAG_HISTORICAL_RECORDS); + + final int recordCount = records.size(); + for (int i = 0; i < recordCount; i++) { + HistoricalRecord record = records.remove(0); + serializer.startTag(null, TAG_HISTORICAL_RECORD); + serializer.attribute(null, ATTRIBUTE_ACTIVITY, record.activity.flattenToString()); + serializer.attribute(null, ATTRIBUTE_TIME, String.valueOf(record.time)); + serializer.attribute(null, ATTRIBUTE_WEIGHT, String.valueOf(record.weight)); + serializer.endTag(null, TAG_HISTORICAL_RECORD); + if (DEBUG) { + Log.i(LOG_TAG, "Wrote " + record.toString()); + } + } + + serializer.endTag(null, TAG_HISTORICAL_RECORDS); + serializer.endDocument(); + + if (DEBUG) { + Log.i(LOG_TAG, "Wrote " + recordCount + " historical records."); + } + } catch (IllegalArgumentException iae) { + Log.e(LOG_TAG, "Error writing historical recrod file: " + mHistoryFileName, iae); + } catch (IllegalStateException ise) { + Log.e(LOG_TAG, "Error writing historical recrod file: " + mHistoryFileName, ise); + } catch (IOException ioe) { + Log.e(LOG_TAG, "Error writing historical recrod file: " + mHistoryFileName, ioe); + } finally { + if (fos != null) { + try { + fos.close(); + } catch (IOException e) { + /* ignore */ + } + } + } + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/ActivityChooserView.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/ActivityChooserView.java new file mode 100644 index 00000000..da13bc99 --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/ActivityChooserView.java @@ -0,0 +1,818 @@ +/* + * 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.widget; + +import android.os.Build; +import com.actionbarsherlock.R; +import com.actionbarsherlock.internal.widget.IcsLinearLayout; +import com.actionbarsherlock.internal.widget.IcsListPopupWindow; +import com.actionbarsherlock.view.ActionProvider; +import com.actionbarsherlock.widget.ActivityChooserModel.ActivityChooserModelClient; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.database.DataSetObserver; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.view.ViewTreeObserver.OnGlobalLayoutListener; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.PopupWindow; +import android.widget.TextView; + +/** + * This class is a view for choosing an activity for handling a given {@link Intent}. + *

+ * The view is composed of two adjacent buttons: + *

    + *
  • + * The left button is an immediate action and allows one click activity choosing. + * Tapping this button immediately executes the intent without requiring any further + * user input. Long press on this button shows a popup for changing the default + * activity. + *
  • + *
  • + * The right button is an overflow action and provides an optimized menu + * of additional activities. Tapping this button shows a popup anchored to this + * view, listing the most frequently used activities. This list is initially + * limited to a small number of items in frequency used order. The last item, + * "Show all..." serves as an affordance to display all available activities. + *
  • + *
+ *

+ * + * @hide + */ +class ActivityChooserView extends ViewGroup implements ActivityChooserModelClient { + + /** + * An adapter for displaying the activities in an {@link AdapterView}. + */ + private final ActivityChooserViewAdapter mAdapter; + + /** + * Implementation of various interfaces to avoid publishing them in the APIs. + */ + private final Callbacks mCallbacks; + + /** + * The content of this view. + */ + private final IcsLinearLayout mActivityChooserContent; + + /** + * Stores the background drawable to allow hiding and latter showing. + */ + private final Drawable mActivityChooserContentBackground; + + /** + * The expand activities action button; + */ + private final FrameLayout mExpandActivityOverflowButton; + + /** + * The image for the expand activities action button; + */ + private final ImageView mExpandActivityOverflowButtonImage; + + /** + * The default activities action button; + */ + private final FrameLayout mDefaultActivityButton; + + /** + * The image for the default activities action button; + */ + private final ImageView mDefaultActivityButtonImage; + + /** + * The maximal width of the list popup. + */ + private final int mListPopupMaxWidth; + + /** + * The ActionProvider hosting this view, if applicable. + */ + ActionProvider mProvider; + + /** + * Observer for the model data. + */ + private final DataSetObserver mModelDataSetOberver = new DataSetObserver() { + + @Override + public void onChanged() { + super.onChanged(); + mAdapter.notifyDataSetChanged(); + } + @Override + public void onInvalidated() { + super.onInvalidated(); + mAdapter.notifyDataSetInvalidated(); + } + }; + + private final OnGlobalLayoutListener mOnGlobalLayoutListener = new OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + if (isShowingPopup()) { + if (!isShown()) { + getListPopupWindow().dismiss(); + } else { + getListPopupWindow().show(); + if (mProvider != null) { + mProvider.subUiVisibilityChanged(true); + } + } + } + } + }; + + /** + * Popup window for showing the activity overflow list. + */ + private IcsListPopupWindow mListPopupWindow; + + /** + * Listener for the dismissal of the popup/alert. + */ + private PopupWindow.OnDismissListener mOnDismissListener; + + /** + * Flag whether a default activity currently being selected. + */ + private boolean mIsSelectingDefaultActivity; + + /** + * The count of activities in the popup. + */ + private int mInitialActivityCount = ActivityChooserViewAdapter.MAX_ACTIVITY_COUNT_DEFAULT; + + /** + * Flag whether this view is attached to a window. + */ + private boolean mIsAttachedToWindow; + + /** + * String resource for formatting content description of the default target. + */ + private int mDefaultActionButtonContentDescription; + + private final Context mContext; + + /** + * Create a new instance. + * + * @param context The application environment. + */ + public ActivityChooserView(Context context) { + this(context, null); + } + + /** + * Create a new instance. + * + * @param context The application environment. + * @param attrs A collection of attributes. + */ + public ActivityChooserView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + /** + * Create a new instance. + * + * @param context The application environment. + * @param attrs A collection of attributes. + * @param defStyle The default style to apply to this view. + */ + public ActivityChooserView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + mContext = context; + + TypedArray attributesArray = context.obtainStyledAttributes(attrs, + R.styleable.SherlockActivityChooserView, defStyle, 0); + + mInitialActivityCount = attributesArray.getInt( + R.styleable.SherlockActivityChooserView_initialActivityCount, + ActivityChooserViewAdapter.MAX_ACTIVITY_COUNT_DEFAULT); + + Drawable expandActivityOverflowButtonDrawable = attributesArray.getDrawable( + R.styleable.SherlockActivityChooserView_expandActivityOverflowButtonDrawable); + + attributesArray.recycle(); + + LayoutInflater inflater = LayoutInflater.from(mContext); + inflater.inflate(R.layout.abs__activity_chooser_view, this, true); + + mCallbacks = new Callbacks(); + + mActivityChooserContent = (IcsLinearLayout) findViewById(R.id.abs__activity_chooser_view_content); + mActivityChooserContentBackground = mActivityChooserContent.getBackground(); + + mDefaultActivityButton = (FrameLayout) findViewById(R.id.abs__default_activity_button); + mDefaultActivityButton.setOnClickListener(mCallbacks); + mDefaultActivityButton.setOnLongClickListener(mCallbacks); + mDefaultActivityButtonImage = (ImageView) mDefaultActivityButton.findViewById(R.id.abs__image); + + mExpandActivityOverflowButton = (FrameLayout) findViewById(R.id.abs__expand_activities_button); + mExpandActivityOverflowButton.setOnClickListener(mCallbacks); + mExpandActivityOverflowButtonImage = + (ImageView) mExpandActivityOverflowButton.findViewById(R.id.abs__image); + mExpandActivityOverflowButtonImage.setImageDrawable(expandActivityOverflowButtonDrawable); + + mAdapter = new ActivityChooserViewAdapter(); + mAdapter.registerDataSetObserver(new DataSetObserver() { + @Override + public void onChanged() { + super.onChanged(); + updateAppearance(); + } + }); + + Resources resources = context.getResources(); + mListPopupMaxWidth = Math.max(resources.getDisplayMetrics().widthPixels / 2, + resources.getDimensionPixelSize(R.dimen.abs__config_prefDialogWidth)); + } + + /** + * {@inheritDoc} + */ + public void setActivityChooserModel(ActivityChooserModel dataModel) { + mAdapter.setDataModel(dataModel); + if (isShowingPopup()) { + dismissPopup(); + showPopup(); + } + } + + /** + * Sets the background for the button that expands the activity + * overflow list. + * + * Note: Clients would like to set this drawable + * as a clue about the action the chosen activity will perform. For + * example, if a share activity is to be chosen the drawable should + * give a clue that sharing is to be performed. + * + * @param drawable The drawable. + */ + public void setExpandActivityOverflowButtonDrawable(Drawable drawable) { + mExpandActivityOverflowButtonImage.setImageDrawable(drawable); + } + + /** + * Sets the content description for the button that expands the activity + * overflow list. + * + * description as a clue about the action performed by the button. + * For example, if a share activity is to be chosen the content + * description should be something like "Share with". + * + * @param resourceId The content description resource id. + */ + public void setExpandActivityOverflowButtonContentDescription(int resourceId) { + CharSequence contentDescription = mContext.getString(resourceId); + mExpandActivityOverflowButtonImage.setContentDescription(contentDescription); + } + + /** + * Set the provider hosting this view, if applicable. + * @hide Internal use only + */ + public void setProvider(ActionProvider provider) { + mProvider = provider; + } + + /** + * Shows the popup window with activities. + * + * @return True if the popup was shown, false if already showing. + */ + public boolean showPopup() { + if (isShowingPopup() || !mIsAttachedToWindow) { + return false; + } + mIsSelectingDefaultActivity = false; + showPopupUnchecked(mInitialActivityCount); + return true; + } + + /** + * Shows the popup no matter if it was already showing. + * + * @param maxActivityCount The max number of activities to display. + */ + private void showPopupUnchecked(int maxActivityCount) { + if (mAdapter.getDataModel() == null) { + throw new IllegalStateException("No data model. Did you call #setDataModel?"); + } + + getViewTreeObserver().addOnGlobalLayoutListener(mOnGlobalLayoutListener); + + final boolean defaultActivityButtonShown = + mDefaultActivityButton.getVisibility() == VISIBLE; + + final int activityCount = mAdapter.getActivityCount(); + final int maxActivityCountOffset = defaultActivityButtonShown ? 1 : 0; + if (maxActivityCount != ActivityChooserViewAdapter.MAX_ACTIVITY_COUNT_UNLIMITED + && activityCount > maxActivityCount + maxActivityCountOffset) { + mAdapter.setShowFooterView(true); + mAdapter.setMaxActivityCount(maxActivityCount - 1); + } else { + mAdapter.setShowFooterView(false); + mAdapter.setMaxActivityCount(maxActivityCount); + } + + IcsListPopupWindow popupWindow = getListPopupWindow(); + if (!popupWindow.isShowing()) { + if (mIsSelectingDefaultActivity || !defaultActivityButtonShown) { + mAdapter.setShowDefaultActivity(true, defaultActivityButtonShown); + } else { + mAdapter.setShowDefaultActivity(false, false); + } + final int contentWidth = Math.min(mAdapter.measureContentWidth(), mListPopupMaxWidth); + popupWindow.setContentWidth(contentWidth); + popupWindow.show(); + if (mProvider != null) { + mProvider.subUiVisibilityChanged(true); + } + popupWindow.getListView().setContentDescription(mContext.getString( + R.string.abs__activitychooserview_choose_application)); + } + } + + /** + * Dismisses the popup window with activities. + * + * @return True if dismissed, false if already dismissed. + */ + public boolean dismissPopup() { + if (isShowingPopup()) { + getListPopupWindow().dismiss(); + ViewTreeObserver viewTreeObserver = getViewTreeObserver(); + if (viewTreeObserver.isAlive()) { + viewTreeObserver.removeGlobalOnLayoutListener(mOnGlobalLayoutListener); + } + } + return true; + } + + /** + * Gets whether the popup window with activities is shown. + * + * @return True if the popup is shown. + */ + public boolean isShowingPopup() { + return getListPopupWindow().isShowing(); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + ActivityChooserModel dataModel = mAdapter.getDataModel(); + if (dataModel != null) { + dataModel.registerObserver(mModelDataSetOberver); + } + mIsAttachedToWindow = true; + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + ActivityChooserModel dataModel = mAdapter.getDataModel(); + if (dataModel != null) { + dataModel.unregisterObserver(mModelDataSetOberver); + } + ViewTreeObserver viewTreeObserver = getViewTreeObserver(); + if (viewTreeObserver.isAlive()) { + viewTreeObserver.removeGlobalOnLayoutListener(mOnGlobalLayoutListener); + } + mIsAttachedToWindow = false; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + View child = mActivityChooserContent; + // If the default action is not visible we want to be as tall as the + // ActionBar so if this widget is used in the latter it will look as + // a normal action button. + if (mDefaultActivityButton.getVisibility() != VISIBLE) { + heightMeasureSpec = MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(heightMeasureSpec), + MeasureSpec.EXACTLY); + } + measureChild(child, widthMeasureSpec, heightMeasureSpec); + setMeasuredDimension(child.getMeasuredWidth(), child.getMeasuredHeight()); + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + mActivityChooserContent.layout(0, 0, right - left, bottom - top); + if (getListPopupWindow().isShowing()) { + showPopupUnchecked(mAdapter.getMaxActivityCount()); + } else { + dismissPopup(); + } + } + + public ActivityChooserModel getDataModel() { + return mAdapter.getDataModel(); + } + + /** + * Sets a listener to receive a callback when the popup is dismissed. + * + * @param listener The listener to be notified. + */ + public void setOnDismissListener(PopupWindow.OnDismissListener listener) { + mOnDismissListener = listener; + } + + /** + * Sets the initial count of items shown in the activities popup + * i.e. the items before the popup is expanded. This is an upper + * bound since it is not guaranteed that such number of intent + * handlers exist. + * + * @param itemCount The initial popup item count. + */ + public void setInitialActivityCount(int itemCount) { + mInitialActivityCount = itemCount; + } + + /** + * Sets a content description of the default action button. This + * resource should be a string taking one formatting argument and + * will be used for formatting the content description of the button + * dynamically as the default target changes. For example, a resource + * pointing to the string "share with %1$s" will result in a content + * description "share with Bluetooth" for the Bluetooth activity. + * + * @param resourceId The resource id. + */ + public void setDefaultActionButtonContentDescription(int resourceId) { + mDefaultActionButtonContentDescription = resourceId; + } + + /** + * Gets the list popup window which is lazily initialized. + * + * @return The popup. + */ + private IcsListPopupWindow getListPopupWindow() { + if (mListPopupWindow == null) { + mListPopupWindow = new IcsListPopupWindow(getContext()); + mListPopupWindow.setAdapter(mAdapter); + mListPopupWindow.setAnchorView(ActivityChooserView.this); + mListPopupWindow.setModal(true); + mListPopupWindow.setOnItemClickListener(mCallbacks); + mListPopupWindow.setOnDismissListener(mCallbacks); + } + return mListPopupWindow; + } + + /** + * Updates the buttons state. + */ + private void updateAppearance() { + // Expand overflow button. + if (mAdapter.getCount() > 0) { + mExpandActivityOverflowButton.setEnabled(true); + } else { + mExpandActivityOverflowButton.setEnabled(false); + } + // Default activity button. + final int activityCount = mAdapter.getActivityCount(); + final int historySize = mAdapter.getHistorySize(); + if (activityCount > 0 && historySize > 0) { + mDefaultActivityButton.setVisibility(VISIBLE); + ResolveInfo activity = mAdapter.getDefaultActivity(); + PackageManager packageManager = mContext.getPackageManager(); + mDefaultActivityButtonImage.setImageDrawable(activity.loadIcon(packageManager)); + if (mDefaultActionButtonContentDescription != 0) { + CharSequence label = activity.loadLabel(packageManager); + String contentDescription = mContext.getString( + mDefaultActionButtonContentDescription, label); + mDefaultActivityButton.setContentDescription(contentDescription); + } + } else { + mDefaultActivityButton.setVisibility(View.GONE); + } + // Activity chooser content. + if (mDefaultActivityButton.getVisibility() == VISIBLE) { + mActivityChooserContent.setBackgroundDrawable(mActivityChooserContentBackground); + } else { + mActivityChooserContent.setBackgroundDrawable(null); + } + } + + /** + * Interface implementation to avoid publishing them in the APIs. + */ + private class Callbacks implements AdapterView.OnItemClickListener, + View.OnClickListener, View.OnLongClickListener, PopupWindow.OnDismissListener { + + // AdapterView#OnItemClickListener + public void onItemClick(AdapterView parent, View view, int position, long id) { + ActivityChooserViewAdapter adapter = (ActivityChooserViewAdapter) parent.getAdapter(); + final int itemViewType = adapter.getItemViewType(position); + switch (itemViewType) { + case ActivityChooserViewAdapter.ITEM_VIEW_TYPE_FOOTER: { + showPopupUnchecked(ActivityChooserViewAdapter.MAX_ACTIVITY_COUNT_UNLIMITED); + } break; + case ActivityChooserViewAdapter.ITEM_VIEW_TYPE_ACTIVITY: { + dismissPopup(); + if (mIsSelectingDefaultActivity) { + // The item at position zero is the default already. + if (position > 0) { + mAdapter.getDataModel().setDefaultActivity(position); + } + } else { + // If the default target is not shown in the list, the first + // item in the model is default action => adjust index + position = mAdapter.getShowDefaultActivity() ? position : position + 1; + Intent launchIntent = mAdapter.getDataModel().chooseActivity(position); + if (launchIntent != null) { + mContext.startActivity(launchIntent); + } + } + } break; + default: + throw new IllegalArgumentException(); + } + } + + // View.OnClickListener + public void onClick(View view) { + if (view == mDefaultActivityButton) { + dismissPopup(); + ResolveInfo defaultActivity = mAdapter.getDefaultActivity(); + final int index = mAdapter.getDataModel().getActivityIndex(defaultActivity); + Intent launchIntent = mAdapter.getDataModel().chooseActivity(index); + if (launchIntent != null) { + mContext.startActivity(launchIntent); + } + } else if (view == mExpandActivityOverflowButton) { + mIsSelectingDefaultActivity = false; + showPopupUnchecked(mInitialActivityCount); + } else { + throw new IllegalArgumentException(); + } + } + + // OnLongClickListener#onLongClick + @Override + public boolean onLongClick(View view) { + if (view == mDefaultActivityButton) { + if (mAdapter.getCount() > 0) { + mIsSelectingDefaultActivity = true; + showPopupUnchecked(mInitialActivityCount); + } + } else { + throw new IllegalArgumentException(); + } + return true; + } + + // PopUpWindow.OnDismissListener#onDismiss + public void onDismiss() { + notifyOnDismissListener(); + if (mProvider != null) { + mProvider.subUiVisibilityChanged(false); + } + } + + private void notifyOnDismissListener() { + if (mOnDismissListener != null) { + mOnDismissListener.onDismiss(); + } + } + } + + private static class SetActivated { + public static void invoke(View view, boolean activated) { + view.setActivated(activated); + } + } + + private static final boolean IS_HONEYCOMB = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; + + /** + * Adapter for backing the list of activities shown in the popup. + */ + private class ActivityChooserViewAdapter extends BaseAdapter { + + public static final int MAX_ACTIVITY_COUNT_UNLIMITED = Integer.MAX_VALUE; + + public static final int MAX_ACTIVITY_COUNT_DEFAULT = 4; + + private static final int ITEM_VIEW_TYPE_ACTIVITY = 0; + + private static final int ITEM_VIEW_TYPE_FOOTER = 1; + + private static final int ITEM_VIEW_TYPE_COUNT = 3; + + private ActivityChooserModel mDataModel; + + private int mMaxActivityCount = MAX_ACTIVITY_COUNT_DEFAULT; + + private boolean mShowDefaultActivity; + + private boolean mHighlightDefaultActivity; + + private boolean mShowFooterView; + + public void setDataModel(ActivityChooserModel dataModel) { + ActivityChooserModel oldDataModel = mAdapter.getDataModel(); + if (oldDataModel != null && isShown()) { + oldDataModel.unregisterObserver(mModelDataSetOberver); + } + mDataModel = dataModel; + if (dataModel != null && isShown()) { + dataModel.registerObserver(mModelDataSetOberver); + } + notifyDataSetChanged(); + } + + @Override + public int getItemViewType(int position) { + if (mShowFooterView && position == getCount() - 1) { + return ITEM_VIEW_TYPE_FOOTER; + } else { + return ITEM_VIEW_TYPE_ACTIVITY; + } + } + + @Override + public int getViewTypeCount() { + return ITEM_VIEW_TYPE_COUNT; + } + + public int getCount() { + int count = 0; + int activityCount = mDataModel.getActivityCount(); + if (!mShowDefaultActivity && mDataModel.getDefaultActivity() != null) { + activityCount--; + } + count = Math.min(activityCount, mMaxActivityCount); + if (mShowFooterView) { + count++; + } + return count; + } + + public Object getItem(int position) { + final int itemViewType = getItemViewType(position); + switch (itemViewType) { + case ITEM_VIEW_TYPE_FOOTER: + return null; + case ITEM_VIEW_TYPE_ACTIVITY: + if (!mShowDefaultActivity && mDataModel.getDefaultActivity() != null) { + position++; + } + return mDataModel.getActivity(position); + default: + throw new IllegalArgumentException(); + } + } + + public long getItemId(int position) { + return position; + } + + public View getView(int position, View convertView, ViewGroup parent) { + final int itemViewType = getItemViewType(position); + switch (itemViewType) { + case ITEM_VIEW_TYPE_FOOTER: + if (convertView == null || convertView.getId() != ITEM_VIEW_TYPE_FOOTER) { + convertView = LayoutInflater.from(getContext()).inflate( + R.layout.abs__activity_chooser_view_list_item, parent, false); + convertView.setId(ITEM_VIEW_TYPE_FOOTER); + TextView titleView = (TextView) convertView.findViewById(R.id.abs__title); + titleView.setText(mContext.getString( + R.string.abs__activity_chooser_view_see_all)); + } + return convertView; + case ITEM_VIEW_TYPE_ACTIVITY: + if (convertView == null || convertView.getId() != R.id.abs__list_item) { + convertView = LayoutInflater.from(getContext()).inflate( + R.layout.abs__activity_chooser_view_list_item, parent, false); + } + PackageManager packageManager = mContext.getPackageManager(); + // Set the icon + ImageView iconView = (ImageView) convertView.findViewById(R.id.abs__icon); + ResolveInfo activity = (ResolveInfo) getItem(position); + iconView.setImageDrawable(activity.loadIcon(packageManager)); + // Set the title. + TextView titleView = (TextView) convertView.findViewById(R.id.abs__title); + titleView.setText(activity.loadLabel(packageManager)); + if (IS_HONEYCOMB) { + // Highlight the default. + if (mShowDefaultActivity && position == 0 && mHighlightDefaultActivity) { + SetActivated.invoke(convertView, true); + } else { + SetActivated.invoke(convertView, false); + } + } + return convertView; + default: + throw new IllegalArgumentException(); + } + } + + public int measureContentWidth() { + // The user may have specified some of the target not to be shown but we + // want to measure all of them since after expansion they should fit. + final int oldMaxActivityCount = mMaxActivityCount; + mMaxActivityCount = MAX_ACTIVITY_COUNT_UNLIMITED; + + int contentWidth = 0; + View itemView = null; + + final int widthMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); + final int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); + final int count = getCount(); + + for (int i = 0; i < count; i++) { + itemView = getView(i, itemView, null); + itemView.measure(widthMeasureSpec, heightMeasureSpec); + contentWidth = Math.max(contentWidth, itemView.getMeasuredWidth()); + } + + mMaxActivityCount = oldMaxActivityCount; + + return contentWidth; + } + + public void setMaxActivityCount(int maxActivityCount) { + if (mMaxActivityCount != maxActivityCount) { + mMaxActivityCount = maxActivityCount; + notifyDataSetChanged(); + } + } + + public ResolveInfo getDefaultActivity() { + return mDataModel.getDefaultActivity(); + } + + public void setShowFooterView(boolean showFooterView) { + if (mShowFooterView != showFooterView) { + mShowFooterView = showFooterView; + notifyDataSetChanged(); + } + } + + public int getActivityCount() { + return mDataModel.getActivityCount(); + } + + public int getHistorySize() { + return mDataModel.getHistorySize(); + } + + public int getMaxActivityCount() { + return mMaxActivityCount; + } + + public ActivityChooserModel getDataModel() { + return mDataModel; + } + + public void setShowDefaultActivity(boolean showDefaultActivity, + boolean highlightDefaultActivity) { + if (mShowDefaultActivity != showDefaultActivity + || mHighlightDefaultActivity != highlightDefaultActivity) { + mShowDefaultActivity = showDefaultActivity; + mHighlightDefaultActivity = highlightDefaultActivity; + notifyDataSetChanged(); + } + } + + public boolean getShowDefaultActivity() { + return mShowDefaultActivity; + } + } +} diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/ShareActionProvider.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/ShareActionProvider.java new file mode 100644 index 00000000..83e9f0ca --- /dev/null +++ b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/ShareActionProvider.java @@ -0,0 +1,316 @@ +/* + * 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.widget; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.graphics.drawable.Drawable; +import android.util.TypedValue; +import android.view.View; + +import com.actionbarsherlock.R; +import com.actionbarsherlock.view.ActionProvider; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuItem; +import com.actionbarsherlock.view.MenuItem.OnMenuItemClickListener; +import com.actionbarsherlock.view.SubMenu; +import com.actionbarsherlock.widget.ActivityChooserModel.OnChooseActivityListener; + +/** + * This is a provider for a share action. It is responsible for creating views + * that enable data sharing and also to show a sub menu with sharing activities + * if the hosting item is placed on the overflow menu. + *

+ * Here is how to use the action provider with custom backing file in a {@link MenuItem}: + *

+ *

+ *

+ * 
+ *  // In Activity#onCreateOptionsMenu
+ *  public boolean onCreateOptionsMenu(Menu menu) {
+ *      // Get the menu item.
+ *      MenuItem menuItem = menu.findItem(R.id.my_menu_item);
+ *      // Get the provider and hold onto it to set/change the share intent.
+ *      mShareActionProvider = (ShareActionProvider) menuItem.getActionProvider();
+ *      // Set history different from the default before getting the action
+ *      // view since a call to {@link MenuItem#getActionView() MenuItem.getActionView()} calls
+ *      // {@link ActionProvider#onCreateActionView()} which uses the backing file name. Omit this
+ *      // line if using the default share history file is desired.
+ *      mShareActionProvider.setShareHistoryFileName("custom_share_history.xml");
+ *      . . .
+ *  }
+ *
+ *  // Somewhere in the application.
+ *  public void doShare(Intent shareIntent) {
+ *      // When you want to share set the share intent.
+ *      mShareActionProvider.setShareIntent(shareIntent);
+ *  }
+ * 
+ * + *

+ *

+ * Note: While the sample snippet demonstrates how to use this provider + * in the context of a menu item, the use of the provider is not limited to menu items. + *

+ * + * @see ActionProvider + */ +public class ShareActionProvider extends ActionProvider { + + /** + * Listener for the event of selecting a share target. + */ + public interface OnShareTargetSelectedListener { + + /** + * Called when a share target has been selected. The client can + * decide whether to handle the intent or rely on the default + * behavior which is launching it. + *

+ * Note: Modifying the intent is not permitted and + * any changes to the latter will be ignored. + *

+ * + * @param source The source of the notification. + * @param intent The intent for launching the chosen share target. + * @return Whether the client has handled the intent. + */ + public boolean onShareTargetSelected(ShareActionProvider source, Intent intent); + } + + /** + * The default for the maximal number of activities shown in the sub-menu. + */ + private static final int DEFAULT_INITIAL_ACTIVITY_COUNT = 4; + + /** + * The the maximum number activities shown in the sub-menu. + */ + private int mMaxShownActivityCount = DEFAULT_INITIAL_ACTIVITY_COUNT; + + /** + * Listener for handling menu item clicks. + */ + private final ShareMenuItemOnMenuItemClickListener mOnMenuItemClickListener = + new ShareMenuItemOnMenuItemClickListener(); + + /** + * The default name for storing share history. + */ + public static final String DEFAULT_SHARE_HISTORY_FILE_NAME = "share_history.xml"; + + /** + * Context for accessing resources. + */ + private final Context mContext; + + /** + * The name of the file with share history data. + */ + private String mShareHistoryFileName = DEFAULT_SHARE_HISTORY_FILE_NAME; + + private OnShareTargetSelectedListener mOnShareTargetSelectedListener; + + private OnChooseActivityListener mOnChooseActivityListener; + + /** + * Creates a new instance. + * + * @param context Context for accessing resources. + */ + public ShareActionProvider(Context context) { + super(context); + mContext = context; + } + + /** + * Sets a listener to be notified when a share target has been selected. + * The listener can optionally decide to handle the selection and + * not rely on the default behavior which is to launch the activity. + *

+ * Note: If you choose the backing share history file + * you will still be notified in this callback. + *

+ * @param listener The listener. + */ + public void setOnShareTargetSelectedListener(OnShareTargetSelectedListener listener) { + mOnShareTargetSelectedListener = listener; + setActivityChooserPolicyIfNeeded(); + } + + /** + * {@inheritDoc} + */ + @Override + public View onCreateActionView() { + // Create the view and set its data model. + ActivityChooserModel dataModel = ActivityChooserModel.get(mContext, mShareHistoryFileName); + ActivityChooserView activityChooserView = new ActivityChooserView(mContext); + activityChooserView.setActivityChooserModel(dataModel); + + // Lookup and set the expand action icon. + TypedValue outTypedValue = new TypedValue(); + mContext.getTheme().resolveAttribute(R.attr.actionModeShareDrawable, outTypedValue, true); + Drawable drawable = mContext.getResources().getDrawable(outTypedValue.resourceId); + activityChooserView.setExpandActivityOverflowButtonDrawable(drawable); + activityChooserView.setProvider(this); + + // Set content description. + activityChooserView.setDefaultActionButtonContentDescription( + R.string.abs__shareactionprovider_share_with_application); + activityChooserView.setExpandActivityOverflowButtonContentDescription( + R.string.abs__shareactionprovider_share_with); + + return activityChooserView; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean hasSubMenu() { + return true; + } + + /** + * {@inheritDoc} + */ + @Override + public void onPrepareSubMenu(SubMenu subMenu) { + // Clear since the order of items may change. + subMenu.clear(); + + ActivityChooserModel dataModel = ActivityChooserModel.get(mContext, mShareHistoryFileName); + PackageManager packageManager = mContext.getPackageManager(); + + final int expandedActivityCount = dataModel.getActivityCount(); + final int collapsedActivityCount = Math.min(expandedActivityCount, mMaxShownActivityCount); + + // Populate the sub-menu with a sub set of the activities. + for (int i = 0; i < collapsedActivityCount; i++) { + ResolveInfo activity = dataModel.getActivity(i); + subMenu.add(0, i, i, activity.loadLabel(packageManager)) + .setIcon(activity.loadIcon(packageManager)) + .setOnMenuItemClickListener(mOnMenuItemClickListener); + } + + if (collapsedActivityCount < expandedActivityCount) { + // Add a sub-menu for showing all activities as a list item. + SubMenu expandedSubMenu = subMenu.addSubMenu(Menu.NONE, collapsedActivityCount, + collapsedActivityCount, + mContext.getString(R.string.abs__activity_chooser_view_see_all)); + for (int i = 0; i < expandedActivityCount; i++) { + ResolveInfo activity = dataModel.getActivity(i); + expandedSubMenu.add(0, i, i, activity.loadLabel(packageManager)) + .setIcon(activity.loadIcon(packageManager)) + .setOnMenuItemClickListener(mOnMenuItemClickListener); + } + } + } + + /** + * Sets the file name of a file for persisting the share history which + * history will be used for ordering share targets. This file will be used + * for all view created by {@link #onCreateActionView()}. Defaults to + * {@link #DEFAULT_SHARE_HISTORY_FILE_NAME}. Set to null + * if share history should not be persisted between sessions. + *

+ * Note: The history file name can be set any time, however + * only the action views created by {@link #onCreateActionView()} after setting + * the file name will be backed by the provided file. + *

+ * + * @param shareHistoryFile The share history file name. + */ + public void setShareHistoryFileName(String shareHistoryFile) { + mShareHistoryFileName = shareHistoryFile; + setActivityChooserPolicyIfNeeded(); + } + + /** + * Sets an intent with information about the share action. Here is a + * sample for constructing a share intent: + *

+ *

+     * 
+     *  Intent shareIntent = new Intent(Intent.ACTION_SEND);
+     *  shareIntent.setType("image/*");
+     *  Uri uri = Uri.fromFile(new File(getFilesDir(), "foo.jpg"));
+     *  shareIntent.putExtra(Intent.EXTRA_STREAM, uri.toString());
+     * 
+ * + *

+ * + * @param shareIntent The share intent. + * + * @see Intent#ACTION_SEND + * @see Intent#ACTION_SEND_MULTIPLE + */ + public void setShareIntent(Intent shareIntent) { + ActivityChooserModel dataModel = ActivityChooserModel.get(mContext, + mShareHistoryFileName); + dataModel.setIntent(shareIntent); + } + + /** + * Reusable listener for handling share item clicks. + */ + private class ShareMenuItemOnMenuItemClickListener implements OnMenuItemClickListener { + @Override + public boolean onMenuItemClick(MenuItem item) { + ActivityChooserModel dataModel = ActivityChooserModel.get(mContext, + mShareHistoryFileName); + final int itemId = item.getItemId(); + Intent launchIntent = dataModel.chooseActivity(itemId); + if (launchIntent != null) { + mContext.startActivity(launchIntent); + } + return true; + } + } + + /** + * Set the activity chooser policy of the model backed by the current + * share history file if needed which is if there is a registered callback. + */ + private void setActivityChooserPolicyIfNeeded() { + if (mOnShareTargetSelectedListener == null) { + return; + } + if (mOnChooseActivityListener == null) { + mOnChooseActivityListener = new ShareAcitivityChooserModelPolicy(); + } + ActivityChooserModel dataModel = ActivityChooserModel.get(mContext, mShareHistoryFileName); + dataModel.setOnChooseActivityListener(mOnChooseActivityListener); + } + + /** + * Policy that delegates to the {@link OnShareTargetSelectedListener}, if such. + */ + private class ShareAcitivityChooserModelPolicy implements OnChooseActivityListener { + @Override + public boolean onChooseActivity(ActivityChooserModel host, Intent intent) { + if (mOnShareTargetSelectedListener != null) { + return mOnShareTargetSelectedListener.onShareTargetSelected( + ShareActionProvider.this, intent); + } + return false; + } + } +} -- 2.30.2

XML attributes + *