From 5209ae8db6409ef954de97ea43b7870cc443605a Mon Sep 17 00:00:00 2001 From: Mariotaku Lee Date: Wed, 24 Dec 2014 12:39:21 +0800 Subject: [PATCH] moved nyan sakamoto to library module improved direct message bug fixes --- settings.gradle | 2 +- twidere.donate.nyanwp.wear/.gitignore | 1 + twidere.donate.nyanwp.wear/build.gradle | 80 +++ twidere.donate.nyanwp.wear/proguard-rules.pro | 17 + .../src/main/AndroidManifest.xml | 43 ++ .../twidere/donate/nyanwp/NyanActivity.java | 44 ++ .../main/res/drawable-hdpi/ic_launcher.png | Bin 0 -> 3661 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 0 -> 2341 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 4960 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 8409 bytes .../main/res/drawable-xxxhdpi/ic_launcher.png | Bin 0 -> 11259 bytes .../src/main/res/layout/activity_nyan.xml | 32 ++ .../main/res/layout/rect_activity_nyan.xml | 29 ++ .../main/res/layout/round_activity_nyan.xml | 28 + .../src/main/res/values/strings.xml | 27 + twidere.donate.nyanwp.wear/web_hi_res_512.png | Bin 0 -> 25781 bytes twidere.donate.nyanwp/.gitignore | 1 + twidere.donate.nyanwp/build.gradle | 79 +++ twidere.donate.nyanwp/ic_launcher-web.png | Bin 0 -> 53433 bytes twidere.donate.nyanwp/proguard-rules.pro | 17 + .../donate/nyanwp/ApplicationTest.java | 32 ++ .../src/main/AndroidManifest.xml | 34 ++ .../main/res/drawable-hdpi/ic_launcher.png | Bin 0 -> 9397 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 0 -> 5237 bytes .../nyan_sakamoto_thumbnail_bitmap.png | Bin 0 -> 892 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 14383 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 19388 bytes .../res/drawable/nyan_sakamoto_thumbnail.xml | 6 + .../src/main/res/values-land/integers.xml | 6 + .../main/res/values-large-land/integers.xml | 6 + .../src/main/res/values-large/integers.xml | 7 + .../main/res/values-xlarge-land/integers.xml | 6 + .../src/main/res/values-xlarge/integers.xml | 7 + .../src/main/res/values/colors.xml | 5 + .../src/main/res/values/integers.xml | 7 + .../src/main/res/values/strings.xml | 7 + .../src/main/res/values/styles.xml | 21 + .../src/main/res/xml/nyan_wallpaper.xml | 3 + twidere.nyan/.gitignore | 1 + twidere.nyan/build.gradle | 42 ++ twidere.nyan/proguard-rules.pro | 17 + .../twidere/nyan/ApplicationTest.java | 32 ++ twidere.nyan/src/main/AndroidManifest.xml | 25 + .../mariotaku/twidere/nyan/NyanConstants.java | 30 ++ .../twidere/nyan/NyanDaydreamService.java | 83 +++ .../twidere/nyan/NyanDaydreamView.java | 116 +++++ .../twidere/nyan}/NyanDrawingHelper.java | 37 +- .../twidere/nyan/NyanSurfaceHelper.java | 126 +++++ .../twidere/nyan/NyanWallpaperService.java | 133 +++++ .../nyan_rainbow_frame00_tile.png | Bin .../nyan_rainbow_frame01_tile.png | Bin .../nyan_rainbow_frame02_tile.png | Bin .../nyan_rainbow_frame03_tile.png | Bin .../nyan_rainbow_frame04_tile.png | Bin .../nyan_rainbow_frame05_tile.png | Bin .../nyan_rainbow_frame06_tile.png | Bin .../nyan_rainbow_frame07_tile.png | Bin .../nyan_rainbow_frame08_tile.png | Bin .../nyan_rainbow_frame09_tile.png | Bin .../nyan_rainbow_frame10_tile.png | Bin .../nyan_rainbow_frame11_tile.png | Bin .../drawable-nodpi/nyan_sakamoto_frame00.png | Bin .../drawable-nodpi/nyan_sakamoto_frame01.png | Bin .../drawable-nodpi/nyan_sakamoto_frame02.png | Bin .../drawable-nodpi/nyan_sakamoto_frame03.png | Bin .../drawable-nodpi/nyan_sakamoto_frame04.png | Bin .../drawable-nodpi/nyan_sakamoto_frame05.png | Bin .../drawable-nodpi/nyan_sakamoto_frame06.png | Bin .../drawable-nodpi/nyan_sakamoto_frame07.png | Bin .../drawable-nodpi/nyan_sakamoto_frame08.png | Bin .../drawable-nodpi/nyan_sakamoto_frame09.png | Bin .../drawable-nodpi/nyan_sakamoto_frame10.png | Bin .../drawable-nodpi/nyan_sakamoto_frame11.png | Bin .../nyan_sakamoto_santa_frame00.png | Bin .../nyan_sakamoto_santa_frame01.png | Bin .../nyan_sakamoto_santa_frame02.png | Bin .../nyan_sakamoto_santa_frame03.png | Bin .../nyan_sakamoto_santa_frame04.png | Bin .../nyan_sakamoto_santa_frame05.png | Bin .../nyan_sakamoto_santa_frame06.png | Bin .../nyan_sakamoto_santa_frame07.png | Bin .../nyan_sakamoto_santa_frame08.png | Bin .../nyan_sakamoto_santa_frame09.png | Bin .../nyan_sakamoto_santa_frame10.png | Bin .../nyan_sakamoto_santa_frame11.png | Bin .../src/main/res/drawable/nyan_sakamoto.xml | 78 +++ .../main/res/drawable/nyan_sakamoto_santa.xml | 97 ++++ .../src/main/res/layout/nyan_daydream.xml | 26 + .../src/main/res/values-land/integers.xml | 6 + .../main/res/values-large-land/integers.xml | 6 + .../src/main/res/values-large/integers.xml | 7 + .../main/res/values-xlarge-land/integers.xml | 6 + .../src/main/res/values-xlarge/integers.xml | 7 + twidere.nyan/src/main/res/values/colors.xml | 5 + twidere.nyan/src/main/res/values/integers.xml | 7 + twidere.nyan/src/main/res/values/strings.xml | 7 + twidere.wear/build.gradle | 36 +- twidere/build.gradle | 22 +- twidere/src/fdroid/AndroidManifest.xml | 19 + .../fdroid/res/layout/activity_osm_viewer.xml | 19 + .../src/fdroid/res/menu/menu_osm_viewer.xml | 19 + .../res/menu/menu_google_maps_viewer.xml | 19 + twidere/src/main/AndroidManifest.xml | 4 +- .../mariotaku/querybuilder/Expression.java | 9 +- .../twidere/activity/NyanActivity.java | 6 +- .../support/BaseSupportThemedActivity.java | 13 +- .../activity/support/ComposeActivity.java | 5 + .../twidere/adapter/AbsStatusesAdapter.java | 21 +- .../twidere/adapter/AccountsAdapter.java | 10 - .../twidere/adapter/BaseArrayAdapter.java | 13 +- .../twidere/adapter/BaseCursorAdapter.java | 17 +- .../ParcelableActivitiesAboutMeAdapter.java | 8 - .../UserHashtagAutoCompleteAdapter.java | 48 +- .../twidere/adapter/iface/IBaseAdapter.java | 8 +- .../adapter/iface/IStatusesAdapter.java | 2 + .../iface/IBasePullToRefreshFragment.java | 10 +- .../support/BaseActivitiesListFragment.java | 10 +- .../BasePullToRefreshListFragment.java | 169 +----- .../support/BaseUserListsListFragment.java | 12 +- .../support/BaseUsersListFragment.java | 12 +- .../DirectMessagesConversationFragment.java | 105 +++- .../support/DirectMessagesFragment.java | 12 +- .../support/SavedSearchesListFragment.java | 9 +- .../fragment/support/SearchFragment.java | 6 + .../fragment/support/StatusFragment.java | 23 +- .../support/TrendsSuggectionsFragment.java | 7 +- .../fragment/support/UserFragment.java | 439 ++++++++-------- .../loader/support/ParcelableUserLoader.java | 1 - .../loader/support/UserSearchLoader.java | 40 +- .../twidere/menu/StatusShareProvider.java | 12 +- .../twidere/model/ParcelableUser.java | 222 ++++---- .../preference/CardPreviewPreference.java | 50 +- .../preference/ThemeBackgroundPreference.java | 3 +- .../twidere/provider/TweetStore.java | 3 + .../twidere/service/NyanDaydreamService.java | 87 ---- .../twidere/service/NyanWallpaperService.java | 137 ----- .../twidere/text/TwidereURLSpan.java | 73 ++- .../twidere/util/AsyncTwitterWrapper.java | 6 +- .../twidere/util/NyanSurfaceHelper.java | 126 ----- .../mariotaku/twidere/util/StringUtils.java | 43 ++ .../mariotaku/twidere/util/ThemeUtils.java | 77 ++- .../twidere/util/TwidereLinkify.java | 481 +++++++++--------- .../twidere/util/TwitterWrapper.java | 26 +- .../org/mariotaku/twidere/util/Utils.java | 103 ++-- .../twidere/util/WindowAccessor.java | 2 +- .../twidere/util/accessor/ViewAccessor.java | 52 +- .../twidere/view/CardMediaContainer.java | 211 ++++++++ .../view/ComposeSelectAccountButton.java | 7 +- .../twidere/view/ForegroundColorView.java | 2 +- .../twidere/view/HeaderDrawerLayout.java | 3 +- .../twidere/view/NyanDaydreamView.java | 118 ----- ...ileImageView.java => ShapedImageView.java} | 104 ++-- .../mariotaku/twidere/view/ShortTimeView.java | 148 +++--- .../twidere/view/SquareCircularImageView.java | 2 +- .../twidere/view/TabPagerIndicator.java | 4 +- .../twidere/view/TwidereMenuBar.java | 2 +- .../twidere/view/holder/StatusViewHolder.java | 64 +-- .../twidere/view/iface/IThemedView.java | 31 ++ .../themed/ThemedAutoCompleteTextView.java | 27 +- .../twidere/view/themed/ThemedEditText.java | 9 +- .../ThemedMultiAutoCompleteTextView.java | 27 +- .../twidere/view/themed/ThemedTextView.java | 26 +- .../src/main/java/twitter4j/TwitterImpl.java | 11 +- .../main/res/anim/activity_close_enter.xml | 36 +- .../src/main/res/anim/activity_close_exit.xml | 14 +- .../src/main/res/anim/activity_open_enter.xml | 14 +- .../src/main/res/anim/activity_open_exit.xml | 36 +- .../res/drawable-hdpi/ic_action_twitter.png | Bin 592 -> 933 bytes .../drawable-hdpi/ic_follow_bidirectional.png | Bin 0 -> 3392 bytes .../res/drawable-hdpi/ic_follow_blocked.png | Bin 0 -> 3914 bytes .../res/drawable-hdpi/ic_follow_incoming.png | Bin 0 -> 3189 bytes .../main/res/drawable-hdpi/ic_follow_none.png | Bin 0 -> 2924 bytes .../res/drawable-hdpi/ic_follow_outgoing.png | Bin 0 -> 3205 bytes .../res/drawable-hdpi/ic_follow_requested.png | Bin 0 -> 4326 bytes .../res/drawable-mdpi/ic_action_twitter.png | Bin 396 -> 587 bytes .../drawable-mdpi/ic_follow_bidirectional.png | Bin 0 -> 3225 bytes .../res/drawable-mdpi/ic_follow_incoming.png | Bin 0 -> 2999 bytes .../main/res/drawable-mdpi/ic_follow_none.png | Bin 0 -> 2849 bytes .../res/drawable-mdpi/ic_follow_outgoing.png | Bin 0 -> 2972 bytes .../res/drawable-mdpi/ic_follow_requested.png | Bin 0 -> 3606 bytes .../profile_image_nyan_sakamoto.jpg | Bin 0 -> 19814 bytes .../profile_image_nyan_sakamoto_santa.jpg | Bin 0 -> 20796 bytes .../res/drawable-xhdpi/ic_action_twitter.png | Bin 760 -> 1265 bytes .../ic_follow_bidirectional.png | Bin 0 -> 3727 bytes .../res/drawable-xhdpi/ic_follow_blocked.png | Bin 0 -> 4460 bytes .../res/drawable-xhdpi/ic_follow_incoming.png | Bin 0 -> 3477 bytes .../res/drawable-xhdpi/ic_follow_none.png | Bin 0 -> 3096 bytes .../res/drawable-xhdpi/ic_follow_outgoing.png | Bin 0 -> 3467 bytes .../drawable-xhdpi/ic_follow_requested.png | Bin 0 -> 5045 bytes .../res/drawable-xxhdpi/ic_action_twitter.png | Bin 1220 -> 2001 bytes .../ic_follow_bidirectional.png | Bin 0 -> 4316 bytes .../res/drawable-xxhdpi/ic_follow_blocked.png | Bin 0 -> 5330 bytes .../drawable-xxhdpi/ic_follow_incoming.png | Bin 0 -> 3919 bytes .../res/drawable-xxhdpi/ic_follow_none.png | Bin 0 -> 3448 bytes .../drawable-xxhdpi/ic_follow_outgoing.png | Bin 0 -> 3926 bytes .../drawable-xxhdpi/ic_follow_requested.png | Bin 0 -> 6266 bytes .../ic_follow_bidirectional.png | Bin 0 -> 5270 bytes .../drawable-xxxhdpi/ic_follow_blocked.png | Bin 0 -> 6651 bytes .../drawable-xxxhdpi/ic_follow_incoming.png | Bin 0 -> 4486 bytes .../res/drawable-xxxhdpi/ic_follow_none.png | Bin 0 -> 3826 bytes .../drawable-xxxhdpi/ic_follow_outgoing.png | Bin 0 -> 4383 bytes .../drawable-xxxhdpi/ic_follow_requested.png | Bin 0 -> 7831 bytes .../drawable/ab_twidere_solid_color_holo.xml | 6 +- .../drawable/ab_twidere_solid_dark_holo.xml | 8 +- .../drawable/ab_twidere_solid_light_holo.xml | 8 +- twidere/src/main/res/drawable/bg_map.xml | 10 +- .../main/res/drawable/bg_tab_indicator.xml | 4 +- .../main/res/drawable/image_preview_error.xml | 10 +- .../main/res/drawable/image_preview_nsfw.xml | 10 +- .../res/drawable/image_preview_refresh.xml | 10 +- .../src/main/res/drawable/nyan_sakamoto.xml | 78 --- .../main/res/drawable/nyan_sakamoto_santa.xml | 97 ---- .../res/drawable/nyan_sakamoto_thumbnail.xml | 8 +- .../res/drawable/nyan_stars_background.xml | 8 +- .../src/main/res/drawable/shadow_bottom.xml | 8 +- twidere/src/main/res/drawable/shadow_left.xml | 8 +- .../src/main/res/drawable/shadow_right.xml | 8 +- twidere/src/main/res/drawable/shadow_top.xml | 10 +- .../shadow_user_banner_action_bar.xml | 4 +- .../res/drawable/shadow_user_banner_image.xml | 2 +- .../layout-v21/layout_home_actions_button.xml | 19 + .../list_item_preference_header_space.xml | 7 +- .../layout/action_item_compose_account.xml | 19 + .../res/layout/action_item_compose_send.xml | 19 + .../res/layout/action_item_home_actions.xml | 19 + .../action_item_home_actions_compat.xml | 19 + .../action_item_home_progress_smartbar.xml | 38 +- ...em_messages_conversation_profile_image.xml | 2 + .../main/res/layout/action_item_switch.xml | 40 +- .../actionbar_custom_view_done_cancel.xml | 11 +- .../res/layout/activity_account_selector.xml | 84 +-- .../res/layout/activity_activity_picker.xml | 36 +- .../main/res/layout/activity_api_editor.xml | 64 ++- .../res/layout/activity_browser_sign_in.xml | 56 +- .../src/main/res/layout/activity_compose.xml | 38 +- .../res/layout/activity_compose_actionbar.xml | 19 + .../res/layout/activity_compose_bottombar.xml | 23 +- .../res/layout/activity_content_fragment.xml | 19 + .../res/layout/activity_custom_tab_editor.xml | 266 +++++----- .../src/main/res/layout/activity_drafts.xml | 19 + .../src/main/res/layout/activity_filters.xml | 31 +- twidere/src/main/res/layout/activity_home.xml | 19 + .../main/res/layout/activity_home_content.xml | 19 + .../activity_image_viewer_bottombar.xml | 28 +- .../res/layout/activity_settings_wizard.xml | 51 +- .../src/main/res/layout/activity_sign_in.xml | 19 + twidere/src/main/res/layout/activity_test.xml | 19 + .../layout/activity_user_list_selector.xml | 190 +++---- .../layout/activity_user_profile_editor.xml | 19 + .../layout/adapter_item_compose_account.xml | 2 +- .../layout/adapter_item_dashboard_account.xml | 2 +- .../res/layout/adapter_item_media_status.xml | 22 +- .../res/layout/auto_complete_textview.xml | 40 +- .../res/layout/base_multi_column_list.xml | 6 - .../main/res/layout/card_item_activity.xml | 29 +- .../res/layout/card_item_activity_compact.xml | 49 +- .../src/main/res/layout/card_item_draft.xml | 19 + .../res/layout/card_item_load_indicator.xml | 23 +- .../layout/card_item_message_conversation.xml | 19 + .../src/main/res/layout/card_item_status.xml | 19 + .../res/layout/card_item_status_common.xml | 33 +- .../res/layout/card_item_status_compat.xml | 48 +- .../src/main/res/layout/card_item_user.xml | 21 +- .../res/layout/card_item_user_compact.xml | 23 +- .../main/res/layout/card_item_user_list.xml | 21 +- .../layout/card_item_user_list_compact.xml | 25 +- .../main/res/layout/dialog_color_picker.xml | 54 +- .../main/res/layout/dialog_host_mapping.xml | 19 + .../res/layout/dialog_scrollable_status.xml | 21 +- .../dialog_theme_background_preference.xml | 27 +- .../res/layout/dialog_translate_status.xml | 72 ++- .../main/res/layout/drawer_home_accounts.xml | 42 +- .../res/layout/drawer_home_quick_menu.xml | 36 +- .../main/res/layout/edit_user_list_detail.xml | 86 ++-- .../src/main/res/layout/empty_tab_hint.xml | 39 +- .../res/layout/fragment_accounts_drawer.xml | 32 +- .../res/layout/fragment_accounts_manager.xml | 58 ++- .../res/layout/fragment_characters_grid.xml | 36 +- .../res/layout/fragment_content_pages.xml | 2 +- .../main/res/layout/fragment_custom_tabs.xml | 58 ++- .../fragment_data_profiling_settings.xml | 136 ++--- .../res/layout/fragment_details_bottombar.xml | 19 +- .../fragment_details_page_with_menubar.xml | 116 +++-- .../src/main/res/layout/fragment_donate.xml | 156 +++--- .../layout/fragment_messages_conversation.xml | 24 +- ...gment_messages_conversation_input_send.xml | 19 + .../main/res/layout/fragment_quick_menu.xml | 30 +- .../res/layout/fragment_recycler_view.xml | 19 + .../src/main/res/layout/fragment_status.xml | 4 +- twidere/src/main/res/layout/fragment_user.xml | 4 +- .../src/main/res/layout/fragment_webview.xml | 28 +- .../layout/fragment_wizard_page_finished.xml | 126 +++-- .../gallery_item_color_picker_preset.xml | 46 +- .../res/layout/gallery_item_image_preview.xml | 60 ++- twidere/src/main/res/layout/gl_root_group.xml | 18 +- .../res/layout/grid_item_media_editor.xml | 30 +- .../res/layout/grid_item_media_preview.xml | 19 + .../layout/header_drawer_account_selector.xml | 23 +- .../res/layout/header_hidden_settings.xml | 19 + twidere/src/main/res/layout/header_status.xml | 25 +- twidere/src/main/res/layout/header_user.xml | 21 +- .../res/layout/header_user_list_details.xml | 23 +- .../main/res/layout/header_wizard_page.xml | 76 ++- .../src/main/res/layout/image_viewer_gl.xml | 55 +- .../main/res/layout/include_cancel_button.xml | 7 +- .../main/res/layout/include_done_button.xml | 7 +- twidere/src/main/res/layout/invalid_tab.xml | 38 +- .../src/main/res/layout/layout_api_editor.xml | 23 +- .../layout_api_editor_advanced_fields.xml | 21 +- .../res/layout/layout_card_media_preview.xml | 83 +++ .../layout/layout_card_media_preview_item.xml | 39 ++ .../res/layout/layout_home_actions_button.xml | 19 + .../main/res/layout/layout_media_preview.xml | 33 +- .../src/main/res/layout/layout_tab_item.xml | 19 + .../res/layout/link_handler_actionbar.xml | 58 ++- .../src/main/res/layout/list_action_item.xml | 47 +- .../layout/list_footer_user_profile_uucky.xml | 23 +- .../src/main/res/layout/list_item_account.xml | 2 +- .../main/res/layout/list_item_custom_tab.xml | 19 + .../res/layout/list_item_drawer_account.xml | 25 +- .../res/layout/list_item_extra_config.xml | 76 ++- .../src/main/res/layout/list_item_menu.xml | 86 ++-- .../res/layout/list_item_message_entry.xml | 21 +- .../list_item_preference_header_space.xml | 18 + .../res/layout/list_item_section_header.xml | 43 +- .../main/res/layout/list_item_separator.xml | 30 +- .../main/res/layout/list_item_two_line.xml | 84 +-- .../res/layout/list_item_two_line_checked.xml | 110 ++-- .../res/layout/list_item_two_line_small.xml | 84 +-- .../src/main/res/layout/list_item_user.xml | 3 +- twidere/src/main/res/layout/nyan_daydream.xml | 6 - .../main/res/layout/phishing_link_warning.xml | 64 ++- .../res/layout/preference_seek_bar_dialog.xml | 74 ++- ...ference_widget_account_preference_item.xml | 19 + .../layout/preference_widget_color_picker.xml | 25 +- .../main/res/layout/request_permissions.xml | 190 +++---- .../settings_layout_click_to_config.xml | 44 +- .../settings_layout_wizard_page_nav.xml | 50 +- .../res/layout/spinner_item_account_icon.xml | 6 +- .../layout/spinner_item_custom_tab_icon.xml | 38 +- twidere/src/main/res/layout/surface_view.xml | 28 +- twidere/src/main/res/layout/tab_item_ab.xml | 54 +- twidere/src/main/res/layout/theme_preview.xml | 19 + .../main/res/layout/theme_preview_content.xml | 19 + .../layout/theme_preview_status_content.xml | 58 ++- .../main/res/menu/action_direct_message.xml | 36 +- .../src/main/res/menu/action_extension.xml | 24 +- .../res/menu/action_incoming_friendship.xml | 16 +- .../res/menu/action_multi_select_contents.xml | 112 ++-- .../res/menu/action_multi_select_drafts.xml | 20 +- .../res/menu/action_profile_banner_image.xml | 44 +- .../main/res/menu/action_profile_image.xml | 16 +- twidere/src/main/res/menu/action_status.xml | 82 +-- .../res/menu/action_status_text_selection.xml | 10 +- .../src/main/res/menu/action_user_list.xml | 16 +- .../main/res/menu/action_user_list_member.xml | 8 +- .../src/main/res/menu/menu_custom_tabs.xml | 14 +- .../main/res/menu/menu_edit_user_profile.xml | 10 +- .../src/main/res/menu/menu_file_picker.xml | 10 +- twidere/src/main/res/menu/menu_filters.xml | 46 +- twidere/src/main/res/menu/menu_home.xml | 20 +- .../src/main/res/menu/menu_host_mapping.xml | 10 +- .../src/main/res/menu/menu_image_viewer.xml | 34 +- .../res/menu/menu_image_viewer_action_bar.xml | 10 +- twidere/src/main/res/menu/menu_search.xml | 10 +- twidere/src/main/res/menu/menu_sign_in.xml | 6 +- twidere/src/main/res/menu/menu_status.xml | 2 +- .../main/res/menu/menu_switch_preference.xml | 10 +- twidere/src/main/res/menu/menu_user_list.xml | 44 +- .../main/res/menu/menu_user_list_created.xml | 12 +- .../src/main/res/menu/menu_user_profile.xml | 8 + twidere/src/main/res/values-hdpi/defaults.xml | 2 +- twidere/src/main/res/values-land/bools.xml | 6 +- twidere/src/main/res/values-land/dimens.xml | 4 +- twidere/src/main/res/values-land/integers.xml | 6 +- .../src/main/res/values-large-land/bools.xml | 2 +- .../src/main/res/values-large-land/dimens.xml | 4 +- .../main/res/values-large-land/integers.xml | 6 +- twidere/src/main/res/values-large/bools.xml | 4 +- .../src/main/res/values-large/defaults.xml | 2 +- twidere/src/main/res/values-large/dimens.xml | 34 +- .../src/main/res/values-large/integers.xml | 24 +- twidere/src/main/res/values-sw600dp/bools.xml | 4 +- twidere/src/main/res/values-v16/bools.xml | 4 +- twidere/src/main/res/values-v21/styles.xml | 10 +- .../src/main/res/values-v21/themes_base.xml | 42 +- .../src/main/res/values-xhdpi/defaults.xml | 2 +- .../main/res/values-xlarge-land/dimens.xml | 4 +- .../main/res/values-xlarge-land/integers.xml | 6 +- twidere/src/main/res/values-xlarge/dimens.xml | 26 +- .../src/main/res/values-xlarge/integers.xml | 18 +- twidere/src/main/res/values/attrs.xml | 19 +- twidere/src/main/res/values/bools.xml | 14 +- twidere/src/main/res/values/defaults.xml | 2 +- twidere/src/main/res/values/fractions.xml | 4 +- twidere/src/main/res/values/gallery_attrs.xml | 2 +- twidere/src/main/res/values/integers.xml | 36 +- twidere/src/main/res/values/plurals.xml | 74 +-- twidere/src/main/res/values/strings.xml | 2 + .../main/res/values/strings_http_errors.xml | 4 +- .../res/values/strings_twitter_errors.xml | 56 +- twidere/src/main/res/values/styles.xml | 20 +- .../src/main/res/values/swipeback_attrs.xml | 32 +- twidere/src/main/res/values/vpi__defaults.xml | 12 +- twidere/src/main/res/xml/about.xml | 228 ++++----- twidere/src/main/res/xml/nyan_wallpaper.xml | 2 +- twidere/src/main/res/xml/searchable.xml | 16 +- .../xml/settings_account_notifications.xml | 7 +- .../main/res/xml/settings_account_refresh.xml | 45 +- twidere/src/main/res/xml/settings_cards.xml | 15 +- twidere/src/main/res/xml/settings_hidden.xml | 35 +- twidere/src/main/res/xml/settings_network.xml | 155 +++--- .../main/res/xml/settings_notifications.xml | 43 +- twidere/src/main/res/xml/settings_other.xml | 8 +- twidere/src/main/res/xml/settings_refresh.xml | 73 +-- .../res/xml/settings_wizard_page_hints.xml | 46 +- .../main/res/xml/settings_wizard_page_tab.xml | 21 +- .../res/xml/settings_wizard_page_welcome.xml | 29 +- 418 files changed, 7717 insertions(+), 4416 deletions(-) create mode 100644 twidere.donate.nyanwp.wear/.gitignore create mode 100644 twidere.donate.nyanwp.wear/build.gradle create mode 100644 twidere.donate.nyanwp.wear/proguard-rules.pro create mode 100644 twidere.donate.nyanwp.wear/src/main/AndroidManifest.xml create mode 100644 twidere.donate.nyanwp.wear/src/main/java/org/mariotaku/twidere/donate/nyanwp/NyanActivity.java create mode 100755 twidere.donate.nyanwp.wear/src/main/res/drawable-hdpi/ic_launcher.png create mode 100755 twidere.donate.nyanwp.wear/src/main/res/drawable-mdpi/ic_launcher.png create mode 100755 twidere.donate.nyanwp.wear/src/main/res/drawable-xhdpi/ic_launcher.png create mode 100755 twidere.donate.nyanwp.wear/src/main/res/drawable-xxhdpi/ic_launcher.png create mode 100755 twidere.donate.nyanwp.wear/src/main/res/drawable-xxxhdpi/ic_launcher.png create mode 100644 twidere.donate.nyanwp.wear/src/main/res/layout/activity_nyan.xml create mode 100644 twidere.donate.nyanwp.wear/src/main/res/layout/rect_activity_nyan.xml create mode 100644 twidere.donate.nyanwp.wear/src/main/res/layout/round_activity_nyan.xml create mode 100644 twidere.donate.nyanwp.wear/src/main/res/values/strings.xml create mode 100755 twidere.donate.nyanwp.wear/web_hi_res_512.png create mode 100644 twidere.donate.nyanwp/.gitignore create mode 100644 twidere.donate.nyanwp/build.gradle create mode 100644 twidere.donate.nyanwp/ic_launcher-web.png create mode 100644 twidere.donate.nyanwp/proguard-rules.pro create mode 100644 twidere.donate.nyanwp/src/androidTest/java/org/mariotaku/twidere/donate/nyanwp/ApplicationTest.java create mode 100644 twidere.donate.nyanwp/src/main/AndroidManifest.xml create mode 100644 twidere.donate.nyanwp/src/main/res/drawable-hdpi/ic_launcher.png create mode 100644 twidere.donate.nyanwp/src/main/res/drawable-mdpi/ic_launcher.png create mode 100644 twidere.donate.nyanwp/src/main/res/drawable-nodpi/nyan_sakamoto_thumbnail_bitmap.png create mode 100644 twidere.donate.nyanwp/src/main/res/drawable-xhdpi/ic_launcher.png create mode 100644 twidere.donate.nyanwp/src/main/res/drawable-xxhdpi/ic_launcher.png create mode 100644 twidere.donate.nyanwp/src/main/res/drawable/nyan_sakamoto_thumbnail.xml create mode 100644 twidere.donate.nyanwp/src/main/res/values-land/integers.xml create mode 100644 twidere.donate.nyanwp/src/main/res/values-large-land/integers.xml create mode 100644 twidere.donate.nyanwp/src/main/res/values-large/integers.xml create mode 100644 twidere.donate.nyanwp/src/main/res/values-xlarge-land/integers.xml create mode 100644 twidere.donate.nyanwp/src/main/res/values-xlarge/integers.xml create mode 100644 twidere.donate.nyanwp/src/main/res/values/colors.xml create mode 100644 twidere.donate.nyanwp/src/main/res/values/integers.xml create mode 100644 twidere.donate.nyanwp/src/main/res/values/strings.xml create mode 100644 twidere.donate.nyanwp/src/main/res/values/styles.xml create mode 100644 twidere.donate.nyanwp/src/main/res/xml/nyan_wallpaper.xml create mode 100644 twidere.nyan/.gitignore create mode 100644 twidere.nyan/build.gradle create mode 100644 twidere.nyan/proguard-rules.pro create mode 100644 twidere.nyan/src/androidTest/java/org/mariotaku/twidere/nyan/ApplicationTest.java create mode 100644 twidere.nyan/src/main/AndroidManifest.xml create mode 100644 twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanConstants.java create mode 100644 twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanDaydreamService.java create mode 100644 twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanDaydreamView.java rename {twidere/src/main/java/org/mariotaku/twidere/util => twidere.nyan/src/main/java/org/mariotaku/twidere/nyan}/NyanDrawingHelper.java (96%) create mode 100644 twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanSurfaceHelper.java create mode 100644 twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanWallpaperService.java rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_rainbow_frame00_tile.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_rainbow_frame01_tile.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_rainbow_frame02_tile.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_rainbow_frame03_tile.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_rainbow_frame04_tile.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_rainbow_frame05_tile.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_rainbow_frame06_tile.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_rainbow_frame07_tile.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_rainbow_frame08_tile.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_rainbow_frame09_tile.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_rainbow_frame10_tile.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_rainbow_frame11_tile.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_frame00.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_frame01.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_frame02.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_frame03.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_frame04.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_frame05.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_frame06.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_frame07.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_frame08.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_frame09.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_frame10.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_frame11.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame00.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame01.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame02.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame03.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame04.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame05.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame06.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame07.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame08.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame09.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame10.png (100%) rename {twidere => twidere.nyan}/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame11.png (100%) create mode 100644 twidere.nyan/src/main/res/drawable/nyan_sakamoto.xml create mode 100644 twidere.nyan/src/main/res/drawable/nyan_sakamoto_santa.xml create mode 100644 twidere.nyan/src/main/res/layout/nyan_daydream.xml create mode 100644 twidere.nyan/src/main/res/values-land/integers.xml create mode 100644 twidere.nyan/src/main/res/values-large-land/integers.xml create mode 100644 twidere.nyan/src/main/res/values-large/integers.xml create mode 100644 twidere.nyan/src/main/res/values-xlarge-land/integers.xml create mode 100644 twidere.nyan/src/main/res/values-xlarge/integers.xml create mode 100644 twidere.nyan/src/main/res/values/colors.xml create mode 100644 twidere.nyan/src/main/res/values/integers.xml create mode 100644 twidere.nyan/src/main/res/values/strings.xml delete mode 100644 twidere/src/main/java/org/mariotaku/twidere/service/NyanDaydreamService.java delete mode 100644 twidere/src/main/java/org/mariotaku/twidere/service/NyanWallpaperService.java delete mode 100644 twidere/src/main/java/org/mariotaku/twidere/util/NyanSurfaceHelper.java create mode 100644 twidere/src/main/java/org/mariotaku/twidere/util/StringUtils.java create mode 100644 twidere/src/main/java/org/mariotaku/twidere/view/CardMediaContainer.java delete mode 100644 twidere/src/main/java/org/mariotaku/twidere/view/NyanDaydreamView.java rename twidere/src/main/java/org/mariotaku/twidere/view/{ProfileImageView.java => ShapedImageView.java} (80%) create mode 100644 twidere/src/main/java/org/mariotaku/twidere/view/iface/IThemedView.java mode change 100644 => 100755 twidere/src/main/res/drawable-hdpi/ic_action_twitter.png create mode 100644 twidere/src/main/res/drawable-hdpi/ic_follow_bidirectional.png create mode 100644 twidere/src/main/res/drawable-hdpi/ic_follow_blocked.png create mode 100644 twidere/src/main/res/drawable-hdpi/ic_follow_incoming.png create mode 100644 twidere/src/main/res/drawable-hdpi/ic_follow_none.png create mode 100644 twidere/src/main/res/drawable-hdpi/ic_follow_outgoing.png create mode 100644 twidere/src/main/res/drawable-hdpi/ic_follow_requested.png mode change 100644 => 100755 twidere/src/main/res/drawable-mdpi/ic_action_twitter.png create mode 100644 twidere/src/main/res/drawable-mdpi/ic_follow_bidirectional.png create mode 100644 twidere/src/main/res/drawable-mdpi/ic_follow_incoming.png create mode 100644 twidere/src/main/res/drawable-mdpi/ic_follow_none.png create mode 100644 twidere/src/main/res/drawable-mdpi/ic_follow_outgoing.png create mode 100644 twidere/src/main/res/drawable-mdpi/ic_follow_requested.png create mode 100644 twidere/src/main/res/drawable-nodpi/profile_image_nyan_sakamoto.jpg create mode 100644 twidere/src/main/res/drawable-nodpi/profile_image_nyan_sakamoto_santa.jpg mode change 100644 => 100755 twidere/src/main/res/drawable-xhdpi/ic_action_twitter.png create mode 100644 twidere/src/main/res/drawable-xhdpi/ic_follow_bidirectional.png create mode 100644 twidere/src/main/res/drawable-xhdpi/ic_follow_blocked.png create mode 100644 twidere/src/main/res/drawable-xhdpi/ic_follow_incoming.png create mode 100644 twidere/src/main/res/drawable-xhdpi/ic_follow_none.png create mode 100644 twidere/src/main/res/drawable-xhdpi/ic_follow_outgoing.png create mode 100644 twidere/src/main/res/drawable-xhdpi/ic_follow_requested.png mode change 100644 => 100755 twidere/src/main/res/drawable-xxhdpi/ic_action_twitter.png create mode 100644 twidere/src/main/res/drawable-xxhdpi/ic_follow_bidirectional.png create mode 100644 twidere/src/main/res/drawable-xxhdpi/ic_follow_blocked.png create mode 100644 twidere/src/main/res/drawable-xxhdpi/ic_follow_incoming.png create mode 100644 twidere/src/main/res/drawable-xxhdpi/ic_follow_none.png create mode 100644 twidere/src/main/res/drawable-xxhdpi/ic_follow_outgoing.png create mode 100644 twidere/src/main/res/drawable-xxhdpi/ic_follow_requested.png create mode 100644 twidere/src/main/res/drawable-xxxhdpi/ic_follow_bidirectional.png create mode 100644 twidere/src/main/res/drawable-xxxhdpi/ic_follow_blocked.png create mode 100644 twidere/src/main/res/drawable-xxxhdpi/ic_follow_incoming.png create mode 100644 twidere/src/main/res/drawable-xxxhdpi/ic_follow_none.png create mode 100644 twidere/src/main/res/drawable-xxxhdpi/ic_follow_outgoing.png create mode 100644 twidere/src/main/res/drawable-xxxhdpi/ic_follow_requested.png delete mode 100644 twidere/src/main/res/drawable/nyan_sakamoto.xml delete mode 100644 twidere/src/main/res/drawable/nyan_sakamoto_santa.xml delete mode 100644 twidere/src/main/res/layout/base_multi_column_list.xml create mode 100644 twidere/src/main/res/layout/layout_card_media_preview.xml create mode 100644 twidere/src/main/res/layout/layout_card_media_preview_item.xml delete mode 100644 twidere/src/main/res/layout/nyan_daydream.xml diff --git a/settings.gradle b/settings.gradle index 8a9edf394..c7290ea6f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,4 @@ -include ':twidere', ':twidere.wear' +include ':twidere', ':twidere.wear', ':twidere.donate.nyanwp', ':twidere.nyan', ':twidere.donate.nyanwp.wear' include ':SlidingMenu', ':DragSortListView', ':MenuComponent', ':RefreshNow', ':PullToRefresh', ':MessageBubbleView' project(':SlidingMenu').projectDir = file('libraries/SlidingMenu/library') diff --git a/twidere.donate.nyanwp.wear/.gitignore b/twidere.donate.nyanwp.wear/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/twidere.donate.nyanwp.wear/.gitignore @@ -0,0 +1 @@ +/build diff --git a/twidere.donate.nyanwp.wear/build.gradle b/twidere.donate.nyanwp.wear/build.gradle new file mode 100644 index 000000000..6b62cddf7 --- /dev/null +++ b/twidere.donate.nyanwp.wear/build.gradle @@ -0,0 +1,80 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2014 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +apply plugin: 'com.android.application' + + +android { + compileSdkVersion 21 + buildToolsVersion "21.1.2" + + defaultConfig { + applicationId "org.mariotaku.twidere.donate.nyanwp" + minSdkVersion 20 + targetSdkVersion 21 + versionCode 1 + versionName "1.0" + } + signingConfigs { + debug { + File signingPropFile = project.rootProject.file('signing.properties') + if (signingPropFile.exists()) { + Properties signingProp = new Properties() + signingProp.load(signingPropFile.newDataInputStream()) + storeFile file(signingProp.get("twidere.debug.storeFile")) + storePassword signingProp.get("twidere.debug.storePassword") + keyAlias signingProp.get("twidere.debug.keyAlias") + keyPassword signingProp.get("twidere.debug.keyPassword") + } + } + release { + File signingPropFile = project.rootProject.file('signing.properties') + if (signingPropFile.exists()) { + Properties signingProp = new Properties() + signingProp.load(signingPropFile.newDataInputStream()) + storeFile file(signingProp.get("twidere.release.storeFile")) + storePassword signingProp.get("twidere.release.storePassword") + keyAlias signingProp.get("twidere.release.keyAlias") + keyPassword signingProp.get("twidere.release.keyPassword") + } + } + } + buildTypes { + debug { + File signingPropFile = project.rootProject.file('signing.properties') + if (signingPropFile.exists()) { + signingConfig signingConfigs.debug + } + } + release { + File signingPropFile = project.rootProject.file('signing.properties') + if (signingPropFile.exists()) { + signingConfig signingConfigs.release + } + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile project(':twidere.nyan') + compile fileTree(dir: 'libs', include: ['*.jar']) + compile 'com.google.android.support:wearable:1.1.0' +} diff --git a/twidere.donate.nyanwp.wear/proguard-rules.pro b/twidere.donate.nyanwp.wear/proguard-rules.pro new file mode 100644 index 000000000..ee5b46f04 --- /dev/null +++ b/twidere.donate.nyanwp.wear/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /Users/mariotaku/Tools/android-sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# 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/twidere.donate.nyanwp.wear/src/main/AndroidManifest.xml b/twidere.donate.nyanwp.wear/src/main/AndroidManifest.xml new file mode 100644 index 000000000..dde69e977 --- /dev/null +++ b/twidere.donate.nyanwp.wear/src/main/AndroidManifest.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + diff --git a/twidere.donate.nyanwp.wear/src/main/java/org/mariotaku/twidere/donate/nyanwp/NyanActivity.java b/twidere.donate.nyanwp.wear/src/main/java/org/mariotaku/twidere/donate/nyanwp/NyanActivity.java new file mode 100644 index 000000000..55d39318f --- /dev/null +++ b/twidere.donate.nyanwp.wear/src/main/java/org/mariotaku/twidere/donate/nyanwp/NyanActivity.java @@ -0,0 +1,44 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2014 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.donate.nyanwp; + +import android.app.Activity; +import android.os.Bundle; +import android.support.wearable.view.WatchViewStub; +import android.support.wearable.view.WatchViewStub.OnLayoutInflatedListener; + +import org.mariotaku.twidere.nyan.NyanDaydreamView; + +public class NyanActivity extends Activity implements OnLayoutInflatedListener { + + @Override + public void onLayoutInflated(WatchViewStub watchViewStub) { + final NyanDaydreamView nyanView = (NyanDaydreamView) watchViewStub.findViewById(R.id.nyan_view); + nyanView.setScale(getResources().getInteger(R.integer.default_live_wallpaper_scale)); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_nyan); + final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub); + stub.setOnLayoutInflatedListener(this); + } +} diff --git a/twidere.donate.nyanwp.wear/src/main/res/drawable-hdpi/ic_launcher.png b/twidere.donate.nyanwp.wear/src/main/res/drawable-hdpi/ic_launcher.png new file mode 100755 index 0000000000000000000000000000000000000000..09b2de4b24c152b4918f462aacec07ffa5d24db3 GIT binary patch literal 3661 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 AP5=M^ literal 0 HcmV?d00001 diff --git a/twidere.donate.nyanwp.wear/src/main/res/drawable-xxhdpi/ic_launcher.png b/twidere.donate.nyanwp.wear/src/main/res/drawable-xxhdpi/ic_launcher.png new file mode 100755 index 0000000000000000000000000000000000000000..7079aa91d8d6281e8bc10e8214418b37bab421b1 GIT binary patch literal 8409 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 Cw5DGG literal 0 HcmV?d00001 diff --git a/twidere.donate.nyanwp.wear/src/main/res/drawable-xxxhdpi/ic_launcher.png b/twidere.donate.nyanwp.wear/src/main/res/drawable-xxxhdpi/ic_launcher.png new file mode 100755 index 0000000000000000000000000000000000000000..b4d69c78ae7d4cd866aac085e4d870e722ba81c0 GIT binary patch literal 11259 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 JDUmYu`+uxsynX-x literal 0 HcmV?d00001 diff --git a/twidere.donate.nyanwp.wear/src/main/res/layout/activity_nyan.xml b/twidere.donate.nyanwp.wear/src/main/res/layout/activity_nyan.xml new file mode 100644 index 000000000..1c23a9281 --- /dev/null +++ b/twidere.donate.nyanwp.wear/src/main/res/layout/activity_nyan.xml @@ -0,0 +1,32 @@ + + + + + diff --git a/twidere.donate.nyanwp.wear/src/main/res/layout/rect_activity_nyan.xml b/twidere.donate.nyanwp.wear/src/main/res/layout/rect_activity_nyan.xml new file mode 100644 index 000000000..571a5cccf --- /dev/null +++ b/twidere.donate.nyanwp.wear/src/main/res/layout/rect_activity_nyan.xml @@ -0,0 +1,29 @@ + + + + \ No newline at end of file diff --git a/twidere.donate.nyanwp.wear/src/main/res/layout/round_activity_nyan.xml b/twidere.donate.nyanwp.wear/src/main/res/layout/round_activity_nyan.xml new file mode 100644 index 000000000..78cc70d0e --- /dev/null +++ b/twidere.donate.nyanwp.wear/src/main/res/layout/round_activity_nyan.xml @@ -0,0 +1,28 @@ + + + + \ No newline at end of file diff --git a/twidere.donate.nyanwp.wear/src/main/res/values/strings.xml b/twidere.donate.nyanwp.wear/src/main/res/values/strings.xml new file mode 100644 index 000000000..90708bd82 --- /dev/null +++ b/twidere.donate.nyanwp.wear/src/main/res/values/strings.xml @@ -0,0 +1,27 @@ + + + + + + twidere.donate.nyanwp.wear + Hello Round World! + Hello Square World! + + diff --git a/twidere.donate.nyanwp.wear/web_hi_res_512.png b/twidere.donate.nyanwp.wear/web_hi_res_512.png new file mode 100755 index 0000000000000000000000000000000000000000..ccc62926c9f4dfd7e0a5cc30d5724d46bf4a7590 GIT binary patch literal 25781 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 w|C{CyKG5**w-yfk0`e*U{dC0t@k + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +apply plugin: 'com.android.application' + +android { + compileSdkVersion 21 + buildToolsVersion "21.1.2" + + defaultConfig { + applicationId "org.mariotaku.twidere.donate.nyanwp" + minSdkVersion 14 + targetSdkVersion 21 + versionCode 3 + versionName "1.2" + } + signingConfigs { + debug { + File signingPropFile = project.rootProject.file('signing.properties') + if (signingPropFile.exists()) { + Properties signingProp = new Properties() + signingProp.load(signingPropFile.newDataInputStream()) + storeFile file(signingProp.get("twidere.debug.storeFile")) + storePassword signingProp.get("twidere.debug.storePassword") + keyAlias signingProp.get("twidere.debug.keyAlias") + keyPassword signingProp.get("twidere.debug.keyPassword") + } + } + release { + File signingPropFile = project.rootProject.file('signing.properties') + if (signingPropFile.exists()) { + Properties signingProp = new Properties() + signingProp.load(signingPropFile.newDataInputStream()) + storeFile file(signingProp.get("twidere.release.storeFile")) + storePassword signingProp.get("twidere.release.storePassword") + keyAlias signingProp.get("twidere.release.keyAlias") + keyPassword signingProp.get("twidere.release.keyPassword") + } + } + } + buildTypes { + debug { + File signingPropFile = project.rootProject.file('signing.properties') + if (signingPropFile.exists()) { + signingConfig signingConfigs.debug + } + } + release { + File signingPropFile = project.rootProject.file('signing.properties') + if (signingPropFile.exists()) { + signingConfig signingConfigs.release + } + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + wearApp project(':twidere.donate.nyanwp.wear') + compile project(':twidere.nyan') + compile fileTree(dir: 'libs', include: ['*.jar']) +} diff --git a/twidere.donate.nyanwp/ic_launcher-web.png b/twidere.donate.nyanwp/ic_launcher-web.png new file mode 100644 index 0000000000000000000000000000000000000000..a9b0a840fffe39ecdab61cd63cbbb79c026529bb GIT binary patch literal 53433 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 V%1&Pg?U3Nld0nHk`De&s{~t^vJcj@P literal 0 HcmV?d00001 diff --git a/twidere.donate.nyanwp/proguard-rules.pro b/twidere.donate.nyanwp/proguard-rules.pro new file mode 100644 index 000000000..ee5b46f04 --- /dev/null +++ b/twidere.donate.nyanwp/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /Users/mariotaku/Tools/android-sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# 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/twidere.donate.nyanwp/src/androidTest/java/org/mariotaku/twidere/donate/nyanwp/ApplicationTest.java b/twidere.donate.nyanwp/src/androidTest/java/org/mariotaku/twidere/donate/nyanwp/ApplicationTest.java new file mode 100644 index 000000000..b56626471 --- /dev/null +++ b/twidere.donate.nyanwp/src/androidTest/java/org/mariotaku/twidere/donate/nyanwp/ApplicationTest.java @@ -0,0 +1,32 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2014 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.donate.nyanwp; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * Testing Fundamentals + */ +public class ApplicationTest extends ApplicationTestCase { + public ApplicationTest() { + super(Application.class); + } +} \ No newline at end of file diff --git a/twidere.donate.nyanwp/src/main/AndroidManifest.xml b/twidere.donate.nyanwp/src/main/AndroidManifest.xml new file mode 100644 index 000000000..43d37a567 --- /dev/null +++ b/twidere.donate.nyanwp/src/main/AndroidManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/twidere.donate.nyanwp/src/main/res/drawable-hdpi/ic_launcher.png b/twidere.donate.nyanwp/src/main/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..96a442e5b8e9394ccf50bab9988cb2316026245d GIT binary patch literal 9397 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 literal 0 HcmV?d00001 diff --git a/twidere.donate.nyanwp/src/main/res/drawable-nodpi/nyan_sakamoto_thumbnail_bitmap.png b/twidere.donate.nyanwp/src/main/res/drawable-nodpi/nyan_sakamoto_thumbnail_bitmap.png new file mode 100644 index 0000000000000000000000000000000000000000..37dae3fe4a01fc311cd99a74e19747c5b2db7e61 GIT binary patch literal 892 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 literal 0 HcmV?d00001 diff --git a/twidere.donate.nyanwp/src/main/res/drawable-xxhdpi/ic_launcher.png b/twidere.donate.nyanwp/src/main/res/drawable-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4df18946442ed763bd52cf3adca31617848656fa GIT binary patch literal 19388 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 literal 0 HcmV?d00001 diff --git a/twidere.donate.nyanwp/src/main/res/drawable/nyan_sakamoto_thumbnail.xml b/twidere.donate.nyanwp/src/main/res/drawable/nyan_sakamoto_thumbnail.xml new file mode 100644 index 000000000..0b89d80a6 --- /dev/null +++ b/twidere.donate.nyanwp/src/main/res/drawable/nyan_sakamoto_thumbnail.xml @@ -0,0 +1,6 @@ + + diff --git a/twidere.donate.nyanwp/src/main/res/values-land/integers.xml b/twidere.donate.nyanwp/src/main/res/values-land/integers.xml new file mode 100644 index 000000000..36fa42641 --- /dev/null +++ b/twidere.donate.nyanwp/src/main/res/values-land/integers.xml @@ -0,0 +1,6 @@ + + + 5 + 17 + + \ No newline at end of file diff --git a/twidere.donate.nyanwp/src/main/res/values-large-land/integers.xml b/twidere.donate.nyanwp/src/main/res/values-large-land/integers.xml new file mode 100644 index 000000000..ae7d093b6 --- /dev/null +++ b/twidere.donate.nyanwp/src/main/res/values-large-land/integers.xml @@ -0,0 +1,6 @@ + + + 8 + 23 + + \ No newline at end of file diff --git a/twidere.donate.nyanwp/src/main/res/values-large/integers.xml b/twidere.donate.nyanwp/src/main/res/values-large/integers.xml new file mode 100644 index 000000000..2f9e84b85 --- /dev/null +++ b/twidere.donate.nyanwp/src/main/res/values-large/integers.xml @@ -0,0 +1,7 @@ + + + 10 + 13 + 2 + + \ No newline at end of file diff --git a/twidere.donate.nyanwp/src/main/res/values-xlarge-land/integers.xml b/twidere.donate.nyanwp/src/main/res/values-xlarge-land/integers.xml new file mode 100644 index 000000000..3dd392f11 --- /dev/null +++ b/twidere.donate.nyanwp/src/main/res/values-xlarge-land/integers.xml @@ -0,0 +1,6 @@ + + + 13 + 31 + + \ No newline at end of file diff --git a/twidere.donate.nyanwp/src/main/res/values-xlarge/integers.xml b/twidere.donate.nyanwp/src/main/res/values-xlarge/integers.xml new file mode 100644 index 000000000..f30cdcfdc --- /dev/null +++ b/twidere.donate.nyanwp/src/main/res/values-xlarge/integers.xml @@ -0,0 +1,7 @@ + + + 15 + 19 + 3 + + \ No newline at end of file diff --git a/twidere.donate.nyanwp/src/main/res/values/colors.xml b/twidere.donate.nyanwp/src/main/res/values/colors.xml new file mode 100644 index 000000000..ce34fda39 --- /dev/null +++ b/twidere.donate.nyanwp/src/main/res/values/colors.xml @@ -0,0 +1,5 @@ + + + #003366 + + \ No newline at end of file diff --git a/twidere.donate.nyanwp/src/main/res/values/integers.xml b/twidere.donate.nyanwp/src/main/res/values/integers.xml new file mode 100644 index 000000000..2d89b6636 --- /dev/null +++ b/twidere.donate.nyanwp/src/main/res/values/integers.xml @@ -0,0 +1,7 @@ + + + 8 + 11 + 1 + + \ No newline at end of file diff --git a/twidere.donate.nyanwp/src/main/res/values/strings.xml b/twidere.donate.nyanwp/src/main/res/values/strings.xml new file mode 100644 index 000000000..2075de25b --- /dev/null +++ b/twidere.donate.nyanwp/src/main/res/values/strings.xml @@ -0,0 +1,7 @@ + + + Twidere Donate Live Wallpaper + Twidere Donate Wallpaper + Twidere Donate Daydream + + diff --git a/twidere.donate.nyanwp/src/main/res/values/styles.xml b/twidere.donate.nyanwp/src/main/res/values/styles.xml new file mode 100644 index 000000000..d98a53a8a --- /dev/null +++ b/twidere.donate.nyanwp/src/main/res/values/styles.xml @@ -0,0 +1,21 @@ + + + + diff --git a/twidere.donate.nyanwp/src/main/res/xml/nyan_wallpaper.xml b/twidere.donate.nyanwp/src/main/res/xml/nyan_wallpaper.xml new file mode 100644 index 000000000..58df3aab3 --- /dev/null +++ b/twidere.donate.nyanwp/src/main/res/xml/nyan_wallpaper.xml @@ -0,0 +1,3 @@ + + diff --git a/twidere.nyan/.gitignore b/twidere.nyan/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/twidere.nyan/.gitignore @@ -0,0 +1 @@ +/build diff --git a/twidere.nyan/build.gradle b/twidere.nyan/build.gradle new file mode 100644 index 000000000..c0806b0a6 --- /dev/null +++ b/twidere.nyan/build.gradle @@ -0,0 +1,42 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2014 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +apply plugin: 'com.android.library' + +android { + compileSdkVersion 21 + buildToolsVersion "21.1.2" + + defaultConfig { + minSdkVersion 14 + targetSdkVersion 21 + versionCode 1 + versionName "1.0" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) +} diff --git a/twidere.nyan/proguard-rules.pro b/twidere.nyan/proguard-rules.pro new file mode 100644 index 000000000..ee5b46f04 --- /dev/null +++ b/twidere.nyan/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /Users/mariotaku/Tools/android-sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# 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/twidere.nyan/src/androidTest/java/org/mariotaku/twidere/nyan/ApplicationTest.java b/twidere.nyan/src/androidTest/java/org/mariotaku/twidere/nyan/ApplicationTest.java new file mode 100644 index 000000000..4aa0ea779 --- /dev/null +++ b/twidere.nyan/src/androidTest/java/org/mariotaku/twidere/nyan/ApplicationTest.java @@ -0,0 +1,32 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2014 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.nyan; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * Testing Fundamentals + */ +public class ApplicationTest extends ApplicationTestCase { + public ApplicationTest() { + super(Application.class); + } +} \ No newline at end of file diff --git a/twidere.nyan/src/main/AndroidManifest.xml b/twidere.nyan/src/main/AndroidManifest.xml new file mode 100644 index 000000000..744fe74da --- /dev/null +++ b/twidere.nyan/src/main/AndroidManifest.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanConstants.java b/twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanConstants.java new file mode 100644 index 000000000..ac8930969 --- /dev/null +++ b/twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanConstants.java @@ -0,0 +1,30 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2014 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.nyan; + +/** + * Created by mariotaku on 14/12/19. + */ +public interface NyanConstants { + + public static final String SHARED_PREFERENCES_NAME = "nyan_preferences"; + + public static final String KEY_LIVE_WALLPAPER_SCALE = "live_wallpaper_scale"; +} diff --git a/twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanDaydreamService.java b/twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanDaydreamService.java new file mode 100644 index 000000000..c9c9b1c1d --- /dev/null +++ b/twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanDaydreamService.java @@ -0,0 +1,83 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2014 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.nyan; + +import android.annotation.TargetApi; +import android.content.SharedPreferences; +import android.content.SharedPreferences.OnSharedPreferenceChangeListener; +import android.content.res.Resources; +import android.os.Build; +import android.service.dreams.DreamService; +import android.view.View; +import android.view.View.OnSystemUiVisibilityChangeListener; + +@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) +public class NyanDaydreamService extends DreamService implements NyanConstants, + OnSharedPreferenceChangeListener, OnSystemUiVisibilityChangeListener { + + private NyanDaydreamView mNyanDaydreamView; + private SharedPreferences mPreferences; + + @Override + public void onAttachedToWindow() { + super.onAttachedToWindow(); + setContentView(R.layout.nyan_daydream); + mNyanDaydreamView.setOnSystemUiVisibilityChangeListener(this); + updateView(); + } + + @Override + public void onContentChanged() { + super.onContentChanged(); + mNyanDaydreamView = (NyanDaydreamView) findViewById(R.id.nyan); + } + + @Override + public void onCreate() { + super.onCreate(); + mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, MODE_PRIVATE); + mPreferences.registerOnSharedPreferenceChangeListener(this); + setInteractive(false); + setFullscreen(true); + setScreenBright(false); + } + + @Override + public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) { + if (KEY_LIVE_WALLPAPER_SCALE.equals(key)) { + updateView(); + } + } + + @Override + public void onSystemUiVisibilityChange(final int visibility) { + if ((visibility & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0) { + finish(); + } + } + + private void updateView() { + if (mPreferences == null) return; + final Resources res = getResources(); + final int def = res.getInteger(R.integer.default_live_wallpaper_scale); + mNyanDaydreamView.setScale(mPreferences.getInt(KEY_LIVE_WALLPAPER_SCALE, def)); + } + +} diff --git a/twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanDaydreamView.java b/twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanDaydreamView.java new file mode 100644 index 000000000..bd38bbc5e --- /dev/null +++ b/twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanDaydreamView.java @@ -0,0 +1,116 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2014 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.nyan; + +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Canvas; +import android.util.AttributeSet; +import android.util.DisplayMetrics; +import android.view.View; + +public class NyanDaydreamView extends View { + + private final InvalidateRunnable mInvalidateRunnable; + + private final NyanDrawingHelper mNyanDrawingHelper; + + public NyanDaydreamView(final Context context) { + this(context, null); + } + + public NyanDaydreamView(final Context context, final AttributeSet attrs) { + this(context, attrs, 0); + } + + public NyanDaydreamView(final Context context, final AttributeSet attrs, final int defStyleAttr) { + super(context, attrs, defStyleAttr); + setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); + mNyanDrawingHelper = new DreamViewNyanDrawingHelper(this); + mInvalidateRunnable = new InvalidateRunnable(this); + } + + public void setScale(final float scale) { + mNyanDrawingHelper.setScale(scale); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + post(mInvalidateRunnable); + } + + @Override + protected void onDetachedFromWindow() { + removeCallbacks(mInvalidateRunnable); + super.onDetachedFromWindow(); + } + + @Override + protected void onDraw(final Canvas canvas) { + super.onDraw(canvas); + mNyanDrawingHelper.dispatchDraw(canvas); + } + + @Override + protected void onSizeChanged(final int w, final int h, final int oldw, final int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + mNyanDrawingHelper.dispatchSizeChanged(w, h); + } + + private static final class DreamViewNyanDrawingHelper extends NyanDrawingHelper { + + private final int mDisplayHeight; + private final NyanDaydreamView mView; + + public DreamViewNyanDrawingHelper(final NyanDaydreamView view) { + super(view.getContext()); + mView = view; + final Resources res = getResources(); + final DisplayMetrics dm = res.getDisplayMetrics(); + mDisplayHeight = dm.heightPixels; + } + + @Override + protected int getRainbowYOffset() { + final int visibility = mView.getSystemUiVisibility(); + if ((visibility & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) != 0) return 0; + return mDisplayHeight - getHeight(); + } + + } + + private static final class InvalidateRunnable implements Runnable { + + private final View mView; + + InvalidateRunnable(final View view) { + mView = view; + } + + @Override + public void run() { + mView.invalidate(); + mView.postDelayed(this, 66); + } + + } + +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/NyanDrawingHelper.java b/twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanDrawingHelper.java similarity index 96% rename from twidere/src/main/java/org/mariotaku/twidere/util/NyanDrawingHelper.java rename to twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanDrawingHelper.java index 07fc87c9a..3339c71b9 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/NyanDrawingHelper.java +++ b/twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanDrawingHelper.java @@ -1,23 +1,23 @@ /* - * Twidere - Twitter client for Android - * + * Twidere - Twitter client for Android + * * Copyright (C) 2012-2014 Mariotaku Lee - * + * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.mariotaku.twidere.util; +package org.mariotaku.twidere.nyan; import android.content.Context; import android.content.res.Resources; @@ -34,8 +34,6 @@ import android.graphics.drawable.AnimationDrawable; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; -import org.mariotaku.twidere.R; - import java.util.ArrayList; import java.util.Calendar; import java.util.Random; @@ -95,9 +93,9 @@ public class NyanDrawingHelper { public final void dispatchSizeChanged(final int width, final int height) { mWidth = width; mHeight = height; - mStarsHelper.dispatchSizeChanged(width, height); - mRainbowHelper.dispatchSizeChanged(width, height); - mSakamotoHelper.dispatchSizeChanged(width, height); + for (final IDrawingHelper h : mDrawingHelpers) { + h.dispatchSizeChanged(width, height); + } setupSpirtes(); } @@ -159,7 +157,9 @@ public class NyanDrawingHelper { } private void setupSpirtes() { - final int centerX = mWidth / 2, centerY = mHeight / 2; + final int width = mWidth, height = mHeight; + if (width == 0 || height == 0) return; + final int centerX = width / 2, centerY = height / 2; final int sakamotoDotScale = Math.round(SAKAMOTO_DOT_SIZE * mDensity * mScale); final int sakamotoW = mSakamotoHelper.getIntrinsicWidth() * sakamotoDotScale; final int sakamotoH = mSakamotoHelper.getIntrinsicHeight() * sakamotoDotScale; @@ -184,6 +184,7 @@ public class NyanDrawingHelper { setDrawable(drawable); } + @Override public void dispatchOnDraw(final Canvas canvas) { if (mDrawable == null) return; @@ -226,6 +227,7 @@ public class NyanDrawingHelper { public void setBounds(final int left, final int top, final int right, final int bottom) { if (mDrawable == null) return; if (mAnimationFrames > 0) { + mDrawable.setBounds(left, top, right, bottom); for (int i = 0; i < mAnimationFrames; i++) { final Drawable frame = ((AnimationDrawable) mDrawable).getFrame(i); frame.setBounds(left, top, right, bottom); @@ -273,12 +275,11 @@ public class NyanDrawingHelper { } final Rect bounds = getBounds(); - final int height = bounds.bottom - bounds.top; // Translate down by the remainder - mMatrix.setTranslate(0, bounds.top); + mMatrix.setTranslate(bounds.left, bounds.top); canvas.save(); canvas.setMatrix(mMatrix); - canvas.drawRect(bounds.left, 0, bounds.right, height, mPaint); + canvas.drawRect(0, 0, bounds.width(), bounds.height(), mPaint); canvas.restore(); } @@ -453,9 +454,6 @@ public class NyanDrawingHelper { } private static interface StarAnimFrames { - /* - * @formatter:off - */ static final byte[][] FRAME1 = { { 0, 0, 0, 0, 0, 0, 0 @@ -595,9 +593,6 @@ public class NyanDrawingHelper { } }; - /* - * @formatter:on - */ } } } diff --git a/twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanSurfaceHelper.java b/twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanSurfaceHelper.java new file mode 100644 index 000000000..2d1057d5b --- /dev/null +++ b/twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanSurfaceHelper.java @@ -0,0 +1,126 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2014 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.nyan; + +import android.content.Context; +import android.graphics.Canvas; +import android.view.SurfaceHolder; + +public final class NyanSurfaceHelper implements SurfaceHolder.Callback { + + private SurfaceHolder mHolder; + private DrawingThread mThread; + private final NyanDrawingHelper mNyanDrawingHelper; + + public NyanSurfaceHelper(final Context context) { + mNyanDrawingHelper = new NyanDrawingHelper(context); + } + + public SurfaceHolder getHolder() { + return mHolder; + } + + public void setScale(final float scale) { + mNyanDrawingHelper.setScale(scale); + } + + public void setSkipDrawing(final boolean skipDrawing) { + if (mThread != null) { + mThread.setSkipDrawing(skipDrawing); + } + } + + public void start() { + if (mThread != null) return; + mThread = new DrawingThread(this, mNyanDrawingHelper); + mThread.start(); + } + + public void stop() { + if (mThread != null) { + mThread.cancel(); + } + mThread = null; + } + + @Override + public void surfaceChanged(final SurfaceHolder holder, final int format, final int width, final int height) { + mNyanDrawingHelper.dispatchSizeChanged(width, height); + } + + @Override + public void surfaceCreated(final SurfaceHolder holder) { + mHolder = holder; + start(); + } + + @Override + public void surfaceDestroyed(final SurfaceHolder holder) { + stop(); + mHolder = null; + } + + private static class DrawingThread extends Thread { + + private final NyanSurfaceHelper mSurfaceHelper; + private final NyanDrawingHelper mDrawingHelper; + private boolean mCancelled; + private boolean mSkipDrawing; + + DrawingThread(final NyanSurfaceHelper surfaceHelper, final NyanDrawingHelper drawingHelper) { + mSurfaceHelper = surfaceHelper; + mDrawingHelper = drawingHelper; + } + + public void cancel() { + mCancelled = true; + } + + @Override + public void run() { + while (!mCancelled) { + final long startTime = System.currentTimeMillis(); + drawFrame(); + final long endTime = System.currentTimeMillis(); + try { + Thread.sleep(Math.max(0, 66 - (endTime - startTime))); + } catch (final InterruptedException ignored) { + + } + } + } + + public void setSkipDrawing(final boolean skipDrawing) { + mSkipDrawing = skipDrawing; + } + + private void drawFrame() { + final SurfaceHolder holder = mSurfaceHelper.getHolder(); + if (mSkipDrawing || holder == null || holder.isCreating()) return; + final Canvas c = holder.lockCanvas(); + if (c == null) return; + if (mDrawingHelper != null) { + mDrawingHelper.dispatchDraw(c); + } + holder.unlockCanvasAndPost(c); + } + + } +} diff --git a/twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanWallpaperService.java b/twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanWallpaperService.java new file mode 100644 index 000000000..5a0c0775f --- /dev/null +++ b/twidere.nyan/src/main/java/org/mariotaku/twidere/nyan/NyanWallpaperService.java @@ -0,0 +1,133 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2014 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.nyan; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.SharedPreferences; +import android.content.SharedPreferences.OnSharedPreferenceChangeListener; +import android.content.res.Resources; +import android.os.PowerManager; +import android.service.wallpaper.WallpaperService; +import android.view.SurfaceHolder; + +public class NyanWallpaperService extends WallpaperService implements NyanConstants { + + @Override + public Engine onCreateEngine() { + return new NyanWallpaperEngine(); + } + + private Context getContext() { + return this; + } + + private final class NyanWallpaperEngine extends Engine implements OnSharedPreferenceChangeListener { + + private SharedPreferences mPreferences; + private final BroadcastReceiver mScreenReceiver = new BroadcastReceiver() { + + @Override + public void onReceive(final Context context, final Intent intent) { + final String action = intent.getAction(); + if (Intent.ACTION_SCREEN_ON.equals(action)) { + if (mHelper == null) return; + mHelper.start(); + } else if (Intent.ACTION_SCREEN_OFF.equals(action)) { + if (mHelper == null) return; + mHelper.stop(); + } + + } + }; + + private NyanSurfaceHelper mHelper; + + @Override + public void onCreate(final SurfaceHolder surfaceHolder) { + super.onCreate(surfaceHolder); + mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, MODE_PRIVATE); + mPreferences.registerOnSharedPreferenceChangeListener(this); + mHelper = new NyanSurfaceHelper(getContext()); + final IntentFilter filter = new IntentFilter(); + filter.addAction(Intent.ACTION_SCREEN_ON); + filter.addAction(Intent.ACTION_SCREEN_OFF); + registerReceiver(mScreenReceiver, filter); + } + + @Override + public void onDestroy() { + mPreferences.unregisterOnSharedPreferenceChangeListener(this); + unregisterReceiver(mScreenReceiver); + super.onDestroy(); + } + + @Override + public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) { + if (KEY_LIVE_WALLPAPER_SCALE.equals(key)) { + updateSurface(); + } + } + + @Override + public void onSurfaceCreated(final SurfaceHolder holder) { + super.onSurfaceCreated(holder); + holder.addCallback(mHelper); + updateSurface(); + updateHelperState(); + } + + @Override + public void onSurfaceDestroyed(final SurfaceHolder holder) { + mHelper.stop(); + holder.removeCallback(mHelper); + super.onSurfaceDestroyed(holder); + } + + @Override + public void onVisibilityChanged(final boolean visible) { + super.onVisibilityChanged(visible); + if (mHelper != null) { + mHelper.setSkipDrawing(!visible); + } + } + + private void updateHelperState() { + final PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE); + if (pm.isScreenOn()) { + mHelper.start(); + } else { + mHelper.stop(); + } + } + + private void updateSurface() { + if (mPreferences == null) return; + final Resources res = getResources(); + final int def = res.getInteger(R.integer.default_live_wallpaper_scale); + mHelper.setScale(mPreferences.getInt(KEY_LIVE_WALLPAPER_SCALE, def)); + updateHelperState(); + } + + } + +} diff --git a/twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame00_tile.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame00_tile.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame00_tile.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame00_tile.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame01_tile.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame01_tile.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame01_tile.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame01_tile.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame02_tile.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame02_tile.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame02_tile.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame02_tile.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame03_tile.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame03_tile.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame03_tile.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame03_tile.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame04_tile.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame04_tile.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame04_tile.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame04_tile.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame05_tile.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame05_tile.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame05_tile.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame05_tile.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame06_tile.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame06_tile.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame06_tile.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame06_tile.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame07_tile.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame07_tile.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame07_tile.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame07_tile.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame08_tile.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame08_tile.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame08_tile.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame08_tile.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame09_tile.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame09_tile.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame09_tile.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame09_tile.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame10_tile.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame10_tile.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame10_tile.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame10_tile.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame11_tile.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame11_tile.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_rainbow_frame11_tile.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_rainbow_frame11_tile.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame00.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame00.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame00.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame00.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame01.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame01.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame01.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame01.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame02.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame02.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame02.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame02.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame03.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame03.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame03.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame03.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame04.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame04.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame04.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame04.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame05.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame05.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame05.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame05.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame06.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame06.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame06.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame06.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame07.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame07.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame07.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame07.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame08.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame08.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame08.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame08.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame09.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame09.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame09.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame09.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame10.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame10.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame10.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame10.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame11.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame11.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_frame11.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_frame11.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame00.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame00.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame00.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame00.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame01.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame01.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame01.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame01.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame02.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame02.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame02.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame02.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame03.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame03.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame03.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame03.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame04.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame04.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame04.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame04.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame05.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame05.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame05.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame05.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame06.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame06.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame06.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame06.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame07.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame07.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame07.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame07.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame08.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame08.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame08.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame08.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame09.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame09.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame09.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame09.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame10.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame10.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame10.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame10.png diff --git a/twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame11.png b/twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame11.png similarity index 100% rename from twidere/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame11.png rename to twidere.nyan/src/main/res/drawable-nodpi/nyan_sakamoto_santa_frame11.png diff --git a/twidere.nyan/src/main/res/drawable/nyan_sakamoto.xml b/twidere.nyan/src/main/res/drawable/nyan_sakamoto.xml new file mode 100644 index 000000000..86054ddcf --- /dev/null +++ b/twidere.nyan/src/main/res/drawable/nyan_sakamoto.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/twidere.nyan/src/main/res/drawable/nyan_sakamoto_santa.xml b/twidere.nyan/src/main/res/drawable/nyan_sakamoto_santa.xml new file mode 100644 index 000000000..e1ab6c0d6 --- /dev/null +++ b/twidere.nyan/src/main/res/drawable/nyan_sakamoto_santa.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/twidere.nyan/src/main/res/layout/nyan_daydream.xml b/twidere.nyan/src/main/res/layout/nyan_daydream.xml new file mode 100644 index 000000000..b8c240809 --- /dev/null +++ b/twidere.nyan/src/main/res/layout/nyan_daydream.xml @@ -0,0 +1,26 @@ + + + + + \ No newline at end of file diff --git a/twidere.nyan/src/main/res/values-land/integers.xml b/twidere.nyan/src/main/res/values-land/integers.xml new file mode 100644 index 000000000..36fa42641 --- /dev/null +++ b/twidere.nyan/src/main/res/values-land/integers.xml @@ -0,0 +1,6 @@ + + + 5 + 17 + + \ No newline at end of file diff --git a/twidere.nyan/src/main/res/values-large-land/integers.xml b/twidere.nyan/src/main/res/values-large-land/integers.xml new file mode 100644 index 000000000..ae7d093b6 --- /dev/null +++ b/twidere.nyan/src/main/res/values-large-land/integers.xml @@ -0,0 +1,6 @@ + + + 8 + 23 + + \ No newline at end of file diff --git a/twidere.nyan/src/main/res/values-large/integers.xml b/twidere.nyan/src/main/res/values-large/integers.xml new file mode 100644 index 000000000..2f9e84b85 --- /dev/null +++ b/twidere.nyan/src/main/res/values-large/integers.xml @@ -0,0 +1,7 @@ + + + 10 + 13 + 2 + + \ No newline at end of file diff --git a/twidere.nyan/src/main/res/values-xlarge-land/integers.xml b/twidere.nyan/src/main/res/values-xlarge-land/integers.xml new file mode 100644 index 000000000..3dd392f11 --- /dev/null +++ b/twidere.nyan/src/main/res/values-xlarge-land/integers.xml @@ -0,0 +1,6 @@ + + + 13 + 31 + + \ No newline at end of file diff --git a/twidere.nyan/src/main/res/values-xlarge/integers.xml b/twidere.nyan/src/main/res/values-xlarge/integers.xml new file mode 100644 index 000000000..f30cdcfdc --- /dev/null +++ b/twidere.nyan/src/main/res/values-xlarge/integers.xml @@ -0,0 +1,7 @@ + + + 15 + 19 + 3 + + \ No newline at end of file diff --git a/twidere.nyan/src/main/res/values/colors.xml b/twidere.nyan/src/main/res/values/colors.xml new file mode 100644 index 000000000..ce34fda39 --- /dev/null +++ b/twidere.nyan/src/main/res/values/colors.xml @@ -0,0 +1,5 @@ + + + #003366 + + \ No newline at end of file diff --git a/twidere.nyan/src/main/res/values/integers.xml b/twidere.nyan/src/main/res/values/integers.xml new file mode 100644 index 000000000..2d89b6636 --- /dev/null +++ b/twidere.nyan/src/main/res/values/integers.xml @@ -0,0 +1,7 @@ + + + 8 + 11 + 1 + + \ No newline at end of file diff --git a/twidere.nyan/src/main/res/values/strings.xml b/twidere.nyan/src/main/res/values/strings.xml new file mode 100644 index 000000000..2075de25b --- /dev/null +++ b/twidere.nyan/src/main/res/values/strings.xml @@ -0,0 +1,7 @@ + + + Twidere Donate Live Wallpaper + Twidere Donate Wallpaper + Twidere Donate Daydream + + diff --git a/twidere.wear/build.gradle b/twidere.wear/build.gradle index 37e5c2563..a1aac29b1 100644 --- a/twidere.wear/build.gradle +++ b/twidere.wear/build.gradle @@ -17,8 +17,42 @@ android { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } - buildTypes { + signingConfigs { + debug { + File signingPropFile = project.rootProject.file('signing.properties') + if (signingPropFile.exists()) { + Properties signingProp = new Properties() + signingProp.load(signingPropFile.newDataInputStream()) + storeFile file(signingProp.get("twidere.debug.storeFile")) + storePassword signingProp.get("twidere.debug.storePassword") + keyAlias signingProp.get("twidere.debug.keyAlias") + keyPassword signingProp.get("twidere.debug.keyPassword") + } + } release { + File signingPropFile = project.rootProject.file('signing.properties') + if (signingPropFile.exists()) { + Properties signingProp = new Properties() + signingProp.load(signingPropFile.newDataInputStream()) + storeFile file(signingProp.get("twidere.release.storeFile")) + storePassword signingProp.get("twidere.release.storePassword") + keyAlias signingProp.get("twidere.release.keyAlias") + keyPassword signingProp.get("twidere.release.keyPassword") + } + } + } + buildTypes { + debug { + File signingPropFile = project.rootProject.file('signing.properties') + if (signingPropFile.exists()) { + signingConfig signingConfigs.debug + } + } + release { + File signingPropFile = project.rootProject.file('signing.properties') + if (signingPropFile.exists()) { + signingConfig signingConfigs.release + } minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } diff --git a/twidere/build.gradle b/twidere/build.gradle index c30cfac09..ca53c1ae3 100644 --- a/twidere/build.gradle +++ b/twidere/build.gradle @@ -16,6 +16,16 @@ android { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } + packagingOptions { + exclude 'META-INF/DEPENDENCIES' + exclude 'META-INF/LICENSE' + exclude 'META-INF/LICENSE.txt' + exclude 'META-INF/license.txt' + exclude 'META-INF/NOTICE' + exclude 'META-INF/NOTICE.txt' + exclude 'META-INF/notice.txt' + exclude 'META-INF/ASL2.0' + } signingConfigs { debug { File signingPropFile = project.rootProject.file('signing.properties') @@ -40,16 +50,6 @@ android { } } } - packagingOptions { - exclude 'META-INF/DEPENDENCIES' - exclude 'META-INF/LICENSE' - exclude 'META-INF/LICENSE.txt' - exclude 'META-INF/license.txt' - exclude 'META-INF/NOTICE' - exclude 'META-INF/NOTICE.txt' - exclude 'META-INF/notice.txt' - exclude 'META-INF/ASL2.0' - } buildTypes { debug { File signingPropFile = project.rootProject.file('signing.properties') @@ -99,7 +99,7 @@ dependencies { compile project(':SlidingMenu') compile project(':DragSortListView') compile project(':MenuComponent') - compile project(':RefreshNow') compile project(':MessageBubbleView') + compile project(':twidere.nyan') compile fileTree(dir: 'libs', include: ['*.jar']) } diff --git a/twidere/src/fdroid/AndroidManifest.xml b/twidere/src/fdroid/AndroidManifest.xml index 3c79f6944..1a3e32559 100644 --- a/twidere/src/fdroid/AndroidManifest.xml +++ b/twidere/src/fdroid/AndroidManifest.xml @@ -1,4 +1,23 @@ + + diff --git a/twidere/src/fdroid/res/layout/activity_osm_viewer.xml b/twidere/src/fdroid/res/layout/activity_osm_viewer.xml index f2d047f6d..8785bd06c 100644 --- a/twidere/src/fdroid/res/layout/activity_osm_viewer.xml +++ b/twidere/src/fdroid/res/layout/activity_osm_viewer.xml @@ -1,4 +1,23 @@ + + diff --git a/twidere/src/fdroid/res/menu/menu_osm_viewer.xml b/twidere/src/fdroid/res/menu/menu_osm_viewer.xml index 512e86301..3273d4861 100644 --- a/twidere/src/fdroid/res/menu/menu_osm_viewer.xml +++ b/twidere/src/fdroid/res/menu/menu_osm_viewer.xml @@ -1,4 +1,23 @@ + + + + %s", column1.getSQL(), column2.getSQL())); } - public static Expression like(final Column l, final String r) { - return new Expression(String.format(Locale.US, "%s LIKE '%s'", l.getSQL(), r)); + public static Expression likeRaw(final Column column, final String pattern, final String escape) { + return new Expression(String.format(Locale.US, "%s LIKE %s ESCAPE '%s'", column.getSQL(), pattern, escape)); + } + + + public static Expression likeRaw(final Column column, final String pattern) { + return new Expression(String.format(Locale.US, "%s LIKE %s", column.getSQL(), pattern)); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/NyanActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/NyanActivity.java index caf97aad3..02c40193b 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/NyanActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/NyanActivity.java @@ -35,9 +35,9 @@ import android.widget.Toast; import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.R; -import org.mariotaku.twidere.service.NyanDaydreamService; -import org.mariotaku.twidere.service.NyanWallpaperService; -import org.mariotaku.twidere.util.NyanSurfaceHelper; +import org.mariotaku.twidere.nyan.NyanDaydreamService; +import org.mariotaku.twidere.nyan.NyanWallpaperService; +import org.mariotaku.twidere.nyan.NyanSurfaceHelper; public class NyanActivity extends Activity implements Constants, OnLongClickListener, OnSharedPreferenceChangeListener { diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportThemedActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportThemedActivity.java index b998e7734..ddd3bf312 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportThemedActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportThemedActivity.java @@ -19,13 +19,17 @@ package org.mariotaku.twidere.activity.support; +import android.content.Context; import android.content.res.Resources; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.v4.app.FragmentActivity; import android.support.v4.app.NavUtils; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.style.ForegroundColorSpan; +import android.util.AttributeSet; +import android.view.View; import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.activity.iface.IThemedActivity; @@ -105,6 +109,13 @@ public abstract class BaseSupportThemedActivity extends FragmentActivity impleme super.onTitleChanged(title, color); } + @Override + public View onCreateView(String name, @NonNull Context context, @NonNull AttributeSet attrs) { + final View view = ThemeUtils.createView(name, context, attrs, mCurrentThemeColor); + if (view != null) return view; + return super.onCreateView(name, context, attrs); + } + @Override protected void onResume() { super.onResume(); @@ -114,7 +125,7 @@ public abstract class BaseSupportThemedActivity extends FragmentActivity impleme return true; } - private final void setTheme() { + private void setTheme() { mCurrentThemeResource = getThemeResourceId(); mCurrentThemeColor = getThemeColor(); mCurrentThemeBackgroundAlpha = getThemeBackgroundAlpha(); diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java index b241af5e9..1309a112d 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java @@ -78,6 +78,7 @@ import com.nostra13.universalimageloader.utils.IoUtils; import com.twitter.Extractor; import org.mariotaku.dynamicgridview.DraggableArrayAdapter; +import org.mariotaku.menucomponent.internal.menu.MenuUtils; import org.mariotaku.menucomponent.internal.widget.IListPopupWindow; import org.mariotaku.twidere.R; import org.mariotaku.twidere.adapter.BaseArrayAdapter; @@ -106,6 +107,7 @@ import org.mariotaku.twidere.util.ThemeUtils; import org.mariotaku.twidere.util.TwidereValidator; import org.mariotaku.twidere.util.Utils; import org.mariotaku.twidere.util.accessor.ViewAccessor; +import org.mariotaku.twidere.util.menu.TwidereMenuInfo; import org.mariotaku.twidere.view.ComposeSelectAccountButton; import org.mariotaku.twidere.view.StatusTextCountView; import org.mariotaku.twidere.view.TwidereMenuBar; @@ -964,12 +966,15 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa final MenuItem itemAttachLocation = menu.findItem(MENU_ADD_LOCATION); if (itemAttachLocation != null) { final boolean attachLocation = mPreferences.getBoolean(KEY_ATTACH_LOCATION, false); + final int menuHighlight = ThemeUtils.getUserAccentColor(this); if (attachLocation && getLocation()) { itemAttachLocation.setChecked(true); + MenuUtils.setMenuInfo(itemAttachLocation, new TwidereMenuInfo(true, menuHighlight)); } else { setProgressVisibility(false); mPreferences.edit().putBoolean(KEY_ATTACH_LOCATION, false).apply(); itemAttachLocation.setChecked(false); + MenuUtils.setMenuInfo(itemAttachLocation, new TwidereMenuInfo(false, menuHighlight)); } } final MenuItem viewItem = menu.findItem(MENU_VIEW); diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/AbsStatusesAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/AbsStatusesAdapter.java index 2626c7041..f0cb6b578 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/AbsStatusesAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/AbsStatusesAdapter.java @@ -4,6 +4,7 @@ import android.content.Context; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.util.Pair; +import android.support.v7.widget.CardView; import android.support.v7.widget.RecyclerView.Adapter; import android.support.v7.widget.RecyclerView.ViewHolder; import android.view.LayoutInflater; @@ -19,6 +20,8 @@ import org.mariotaku.twidere.model.ParcelableStatus; import org.mariotaku.twidere.util.AsyncTwitterWrapper; import org.mariotaku.twidere.util.ImageLoaderWrapper; import org.mariotaku.twidere.util.ImageLoadingHandler; +import org.mariotaku.twidere.util.SharedPreferencesWrapper; +import org.mariotaku.twidere.util.ThemeUtils; import org.mariotaku.twidere.util.Utils; import org.mariotaku.twidere.view.holder.GapViewHolder; import org.mariotaku.twidere.view.holder.LoadIndicatorViewHolder; @@ -40,17 +43,21 @@ public abstract class AbsStatusesAdapter extends Adapter implemen private final ImageLoadingHandler mLoadingHandler; private final int mCardLayoutResource; private final AsyncTwitterWrapper mTwitterWrapper; + private final int mCardBackgroundColor; + private final int mTextSize; private boolean mLoadMoreIndicatorEnabled; - private StatusAdapterListener mStatusAdapterListener; public AbsStatusesAdapter(Context context, boolean compact) { mContext = context; final TwidereApplication app = TwidereApplication.getInstance(context); + mCardBackgroundColor = ThemeUtils.getCardBackgroundColor(context); mInflater = LayoutInflater.from(context); mImageLoader = app.getImageLoaderWrapper(); mLoadingHandler = new ImageLoadingHandler(R.id.media_preview_progress); mTwitterWrapper = app.getTwitterWrapper(); + final SharedPreferencesWrapper preferences = SharedPreferencesWrapper.getInstance(context, SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); + mTextSize = preferences.getInt(KEY_TEXT_SIZE, context.getResources().getInteger(R.integer.default_text_size)); if (compact) { mCardLayoutResource = R.layout.card_item_status_compat; } else { @@ -67,6 +74,11 @@ public abstract class AbsStatusesAdapter extends Adapter implemen return mTwitterWrapper; } + @Override + public float getTextSize() { + return mTextSize; + } + @Override public ImageLoaderWrapper getImageLoader() { return mImageLoader; @@ -114,8 +126,13 @@ public abstract class AbsStatusesAdapter extends Adapter implemen switch (viewType) { case ITEM_VIEW_TYPE_STATUS: { final View view = mInflater.inflate(mCardLayoutResource, parent, false); + final CardView cardView = (CardView) view.findViewById(R.id.card); + if (cardView != null) { + cardView.setCardBackgroundColor(mCardBackgroundColor); + } final StatusViewHolder holder = new StatusViewHolder(this, view); - holder.setupViews(); + holder.setupViewListeners(); + holder.setupViewOptions(); return holder; } case ITEM_VIEW_TYPE_GAP: { diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/AccountsAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/AccountsAdapter.java index c2f343ad7..e7bf15a62 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/AccountsAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/AccountsAdapter.java @@ -97,11 +97,6 @@ public class AccountsAdapter extends SimpleDragSortCursorAdapter implements Cons return mImageLoader; } - @Override - public int getLinkHighlightColor() { - return 0; - } - @Override public int getLinkHighlightOption() { return 0; @@ -155,11 +150,6 @@ public class AccountsAdapter extends SimpleDragSortCursorAdapter implements Cons notifyDataSetChanged(); } - @Override - public void setLinkHighlightColor(int color) { - - } - @Override public void setLinkHighlightOption(String option) { diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseArrayAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseArrayAdapter.java index a5a9a2a7d..7a9b2e0f2 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseArrayAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseArrayAdapter.java @@ -38,7 +38,7 @@ public class BaseArrayAdapter extends ArrayAdapter implements IBaseAdapter private final TwidereLinkify mLinkify; private float mTextSize; - private int mLinkHighlightOption, mLinkHighlightColor; + private int mLinkHighlightOption; private boolean mDisplayProfileImage, mNicknameOnly, mDisplayNameFirst, mShowAccountColor; @@ -65,11 +65,6 @@ public class BaseArrayAdapter extends ArrayAdapter implements IBaseAdapter return mImageLoader; } - @Override - public final int getLinkHighlightColor() { - return mLinkHighlightColor; - } - @Override public final int getLinkHighlightOption() { return mLinkHighlightOption; @@ -122,12 +117,6 @@ public class BaseArrayAdapter extends ArrayAdapter implements IBaseAdapter mDisplayProfileImage = display; } - @Override - public final void setLinkHighlightColor(final int color) { - mLinkify.setLinkTextColor(color); - mLinkHighlightColor = color; - } - @Override public final void setLinkHighlightOption(final String option) { final int optionInt = getLinkHighlightOptionInt(option); diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseCursorAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseCursorAdapter.java index 8ad13a995..9c2fd89c8 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseCursorAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseCursorAdapter.java @@ -68,12 +68,7 @@ public class BaseCursorAdapter extends SimpleCursorAdapter implements IBaseAdapt return mImageLoader; } - @Override - public final int getLinkHighlightColor() { - return mLinkHighlightColor; - } - - @Override + @Override public final int getLinkHighlightOption() { return mLinkHighlightOption; } @@ -126,15 +121,7 @@ public class BaseCursorAdapter extends SimpleCursorAdapter implements IBaseAdapt notifyDataSetChanged(); } - @Override - public final void setLinkHighlightColor(final int color) { - if (color == mLinkHighlightColor) return; - mLinkHighlightColor = color; - mLinkify.setLinkTextColor(color); - notifyDataSetChanged(); - } - - @Override + @Override public final void setLinkHighlightOption(final String option) { final int option_int = getLinkHighlightOptionInt(option); if (option_int == mLinkHighlightOption) return; diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/ParcelableActivitiesAboutMeAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/ParcelableActivitiesAboutMeAdapter.java index 25cf2824c..fee041d54 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/ParcelableActivitiesAboutMeAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/ParcelableActivitiesAboutMeAdapter.java @@ -252,14 +252,6 @@ public class ParcelableActivitiesAboutMeAdapter extends BaseParcelableActivities holder.name.setText(TextUtils.isEmpty(nick) ? status.user_name : isNicknameOnly() ? nick : context .getString(R.string.name_with_nickname, status.user_name, nick)); holder.screen_name.setText("@" + status.user_screen_name); - if (highlightOption != VALUE_LINK_HIGHLIGHT_OPTION_CODE_NONE) { - linkify.applyUserProfileLinkNoHighlight(holder.name, status.account_id, status.user_id, - status.user_screen_name); - linkify.applyUserProfileLinkNoHighlight(holder.screen_name, status.account_id, status.user_id, - status.user_screen_name); - holder.name.setMovementMethod(null); - holder.screen_name.setMovementMethod(null); - } holder.time.setTime(status.timestamp); holder.setStatusType(!mFavoritesHighlightDisabled && status.is_favorite, ParcelableLocation.isValidLocation(status.location), hasMedia, status.is_possibly_sensitive); diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/UserHashtagAutoCompleteAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/UserHashtagAutoCompleteAdapter.java index c1df67277..ac2e73f23 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/UserHashtagAutoCompleteAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/UserHashtagAutoCompleteAdapter.java @@ -34,6 +34,7 @@ import android.widget.TextView; import org.mariotaku.querybuilder.Columns.Column; import org.mariotaku.querybuilder.Expression; +import org.mariotaku.querybuilder.OrderBy; import org.mariotaku.querybuilder.RawItemArray; import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.R; @@ -41,14 +42,9 @@ import org.mariotaku.twidere.app.TwidereApplication; import org.mariotaku.twidere.provider.TweetStore.CachedHashtags; import org.mariotaku.twidere.provider.TweetStore.CachedUsers; import org.mariotaku.twidere.provider.TweetStore.CachedValues; -import org.mariotaku.twidere.util.ArrayUtils; import org.mariotaku.twidere.util.ImageLoaderWrapper; import org.mariotaku.twidere.util.ParseUtils; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.Map.Entry; +import org.mariotaku.twidere.util.Utils; import static org.mariotaku.twidere.util.UserColorNicknameUtils.getUserNickname; @@ -56,9 +52,6 @@ public class UserHashtagAutoCompleteAdapter extends SimpleCursorAdapter implemen private static final String[] FROM = new String[0]; private static final int[] TO = new int[0]; - private static final String[] CACHED_USERS_COLUMNS = new String[]{CachedUsers._ID, CachedUsers.USER_ID, - CachedUsers.NAME, CachedUsers.SCREEN_NAME, CachedUsers.PROFILE_IMAGE_URL}; - private final Locale mLocale; private final ContentResolver mResolver; private final SQLiteDatabase mDatabase; @@ -87,7 +80,6 @@ public class UserHashtagAutoCompleteAdapter extends SimpleCursorAdapter implemen mDatabase = app != null ? app.getSQLiteDatabase() : null; mDisplayProfileImage = mPreferences != null && mPreferences.getBoolean(KEY_DISPLAY_PROFILE_IMAGE, true); mNicknameOnly = mPreferences != null && mPreferences.getBoolean(KEY_NICKNAME_ONLY, false); - mLocale = context.getResources().getConfiguration().locale; } public UserHashtagAutoCompleteAdapter(final EditText view) { @@ -164,12 +156,21 @@ public class UserHashtagAutoCompleteAdapter extends SimpleCursorAdapter implemen mToken = token; final String constraintEscaped = constraint != null ? constraint.toString().replaceAll("_", "^_") : null; if (isAtSymbol(token)) { - final String selection = constraintEscaped != null ? (CachedUsers.SCREEN_NAME + " LIKE ?||'%' ESCAPE '^'") + " OR " + CachedUsers.NAME + " LIKE ?||'%' ESCAPE '^'" + " OR " + Expression.in(new Column(CachedUsers.USER_ID), - new RawItemArray(getMatchedNicknameIds(ParseUtils.parseString(constraint)))).getSQL() : null; - final String[] selectionArgs = constraintEscaped != null ? new String[]{constraintEscaped, - constraintEscaped} : null; - final String orderBy = CachedUsers.SCREEN_NAME + ", " + CachedUsers.NAME; - return mResolver.query(CachedUsers.CONTENT_URI, CACHED_USERS_COLUMNS, selection, selectionArgs, orderBy); + final Expression selection; + final String[] selectionArgs; + if (constraintEscaped != null) { + final long[] nicknameIds = Utils.getMatchedNicknameIds(ParseUtils.parseString(constraint), mUserNicknamePreferences); + selection = Expression.or(Expression.likeRaw(new Column(CachedUsers.SCREEN_NAME), "?||'%'", "^"), + Expression.likeRaw(new Column(CachedUsers.NAME), "?||'%'", "^"), + Expression.in(new Column(CachedUsers.USER_ID), new RawItemArray(nicknameIds))); + selectionArgs = new String[]{constraintEscaped, constraintEscaped}; + } else { + selection = null; + selectionArgs = null; + } + final OrderBy orderBy = new OrderBy(CachedUsers.SCREEN_NAME, CachedUsers.NAME); + return mResolver.query(CachedUsers.CONTENT_URI, CachedUsers.BASIC_COLUMNS, + selection != null ? selection.getSQL() : null, selectionArgs, orderBy.getSQL()); } else { final String selection = constraintEscaped != null ? CachedHashtags.NAME + " LIKE ?||'%' ESCAPE '^'" : null; @@ -190,21 +191,6 @@ public class UserHashtagAutoCompleteAdapter extends SimpleCursorAdapter implemen return super.swapCursor(cursor); } - private long[] getMatchedNicknameIds(final String str) { - if (TextUtils.isEmpty(str)) return new long[0]; - final List list = new ArrayList(); - for (final Entry entry : mUserNicknamePreferences.getAll().entrySet()) { - final String value = ParseUtils.parseString(entry.getValue()); - final long key = ParseUtils.parseLong(entry.getKey(), -1); - if (key == -1 || TextUtils.isEmpty(value)) { - continue; - } - if (value.toLowerCase(mLocale).startsWith(str.toLowerCase(mLocale))) { - list.add(key); - } - } - return ArrayUtils.fromList(list); - } private static boolean isAtSymbol(final char character) { switch (character) { diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/iface/IBaseAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/iface/IBaseAdapter.java index 6dc3af0ef..7988b24da 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/iface/IBaseAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/iface/IBaseAdapter.java @@ -28,9 +28,7 @@ public interface IBaseAdapter extends Constants, ListAdapter { public ImageLoaderWrapper getImageLoader(); - public int getLinkHighlightColor(); - - public int getLinkHighlightOption(); + public int getLinkHighlightOption(); public float getTextSize(); @@ -48,9 +46,7 @@ public interface IBaseAdapter extends Constants, ListAdapter { public void setDisplayProfileImage(boolean display); - public void setLinkHighlightColor(int color); - - public void setLinkHighlightOption(String option); + public void setLinkHighlightOption(String option); public void setNicknameOnly(boolean nicknameOnly); diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/iface/IStatusesAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/iface/IStatusesAdapter.java index a9ae87540..6561a4023 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/iface/IStatusesAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/iface/IStatusesAdapter.java @@ -30,4 +30,6 @@ public interface IStatusesAdapter extends IGapSupportedAdapter, ICardSuppo void setData(Data data); AsyncTwitterWrapper getTwitterWrapper(); + + float getTextSize(); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/iface/IBasePullToRefreshFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/iface/IBasePullToRefreshFragment.java index 5f7f8a68f..fe8698203 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/iface/IBasePullToRefreshFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/iface/IBasePullToRefreshFragment.java @@ -19,13 +19,11 @@ package org.mariotaku.twidere.fragment.iface; -import org.mariotaku.refreshnow.widget.OnRefreshListener; -import org.mariotaku.refreshnow.widget.iface.IRefreshNowView; +public interface IBasePullToRefreshFragment { -public interface IBasePullToRefreshFragment extends IRefreshNowView, OnRefreshListener { + public void onRefresh(); - public void onRefreshFromEnd(); - - public void onRefreshFromStart(); + public boolean isRefreshing(); + void setRefreshing(boolean refresh); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseActivitiesListFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseActivitiesListFragment.java index 3b4f02475..269f99095 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseActivitiesListFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseActivitiesListFragment.java @@ -79,24 +79,18 @@ public abstract class BaseActivitiesListFragment extends BasePullToRefreshListFr @Override public void onLoadFinished(final Loader> loader, final List data) { setProgressBarIndeterminateVisibility(false); - setRefreshComplete(); mData = data; mAdapter.setData(data); if (loader instanceof Twitter4JActivitiesLoader) { final boolean multipleAccounts = ((Twitter4JActivitiesLoader) loader).getAccountIds().length > 1; mAdapter.setShowAccountColor(multipleAccounts); } - setRefreshComplete(); + setRefreshing(false); setListShown(true); } @Override - public void onRefreshFromEnd() { - - } - - @Override - public void onRefreshFromStart() { + public void onRefresh() { if (isRefreshing()) return; getLoaderManager().restartLoader(0, getArguments(), this); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BasePullToRefreshListFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BasePullToRefreshListFragment.java index 0e2aba204..870cf18e5 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BasePullToRefreshListFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BasePullToRefreshListFragment.java @@ -20,53 +20,20 @@ package org.mariotaku.twidere.fragment.support; import android.app.Activity; -import android.content.Context; import android.graphics.Rect; -import android.os.Bundle; import android.support.v4.app.FragmentActivity; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.ViewGroup.LayoutParams; -import android.view.ViewGroup.MarginLayoutParams; -import android.widget.FrameLayout; -import android.widget.LinearLayout; -import android.widget.ProgressBar; -import android.widget.TextView; -import org.mariotaku.refreshnow.widget.OnRefreshListener; -import org.mariotaku.refreshnow.widget.RefreshMode; -import org.mariotaku.refreshnow.widget.RefreshNowConfig; -import org.mariotaku.refreshnow.widget.RefreshNowListView; -import org.mariotaku.refreshnow.widget.RefreshNowProgressIndicator; import org.mariotaku.twidere.activity.iface.IControlBarActivity; import org.mariotaku.twidere.activity.iface.IControlBarActivity.ControlBarOffsetListener; import org.mariotaku.twidere.fragment.iface.IBasePullToRefreshFragment; -import org.mariotaku.twidere.util.ThemeUtils; - -import static android.support.v4.app.ListFragmentTrojan.INTERNAL_EMPTY_ID; -import static android.support.v4.app.ListFragmentTrojan.INTERNAL_LIST_CONTAINER_ID; -import static android.support.v4.app.ListFragmentTrojan.INTERNAL_PROGRESS_CONTAINER_ID; public abstract class BasePullToRefreshListFragment extends BaseSupportListFragment implements IBasePullToRefreshFragment, ControlBarOffsetListener { - @Override - public RefreshNowListView getListView() { - return (RefreshNowListView) super.getListView(); - } - - @Override - public RefreshMode getRefreshMode() { - if (getView() == null) return RefreshMode.NONE; - return getListView().getRefreshMode(); - } @Override public boolean isRefreshing() { - if (getView() == null) return false; - return getListView().isRefreshing(); + return false; } @Override @@ -86,156 +53,24 @@ public abstract class BasePullToRefreshListFragment extends BaseSupportListFragm } } - /** - * Provide default implementation to return a simple list view. Subclasses - * can override to replace with their own layout. If doing so, the returned - * view hierarchy must have a ListView whose id is - * {@link android.R.id#list android.R.id.list} and can optionally have a - * sibling view id {@link android.R.id#empty android.R.id.empty} that is to - * be shown when the list is empty. - *

- * If you are overriding this method with your own custom content, consider - * including the standard layout {@link android.R.layout#list_content} in - * your layout file, so that you continue to retain all of the standard - * behavior of ListFragment. In particular, this is currently the only way - * to have the built-in indeterminant progress state be shown. - */ - @Override - public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { - final Context context = getActivity(); - - final FrameLayout root = new FrameLayout(context); - - // ------------------------------------------------------------------ - - final LinearLayout pframe = new LinearLayout(context); - pframe.setId(INTERNAL_PROGRESS_CONTAINER_ID); - pframe.setOrientation(LinearLayout.VERTICAL); - pframe.setVisibility(View.GONE); - pframe.setGravity(Gravity.CENTER); - - final ProgressBar progress = new ProgressBar(context, null, android.R.attr.progressBarStyleLarge); - pframe.addView(progress, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, - ViewGroup.LayoutParams.WRAP_CONTENT)); - - root.addView(pframe, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT)); - - // ------------------------------------------------------------------ - - final FrameLayout lframe = new FrameLayout(context); - lframe.setId(INTERNAL_LIST_CONTAINER_ID); - - final TextView tv = new TextView(getActivity()); - tv.setId(INTERNAL_EMPTY_ID); - tv.setGravity(Gravity.CENTER); - lframe.addView(tv, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT)); - - final RefreshNowListView lv = new RefreshNowListView(getActivity()); - lv.setId(android.R.id.list); - lv.setOverScrollMode(View.OVER_SCROLL_NEVER); - lv.setDrawSelectorOnTop(false); - lv.setOnRefreshListener(this); - lv.setConfig(ThemeUtils.buildRefreshNowConfig(context)); - lframe.addView(lv, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT)); - - final RefreshNowProgressIndicator indicator = new RefreshNowProgressIndicator(context); - indicator.setConfig(ThemeUtils.buildRefreshIndicatorConfig(context)); - final int indicatorHeight = Math.round(3 * getResources().getDisplayMetrics().density); - lframe.addView(indicator, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, indicatorHeight, - Gravity.TOP)); - - lv.setRefreshIndicatorView(indicator); - - root.addView(lframe, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT)); - - // ------------------------------------------------------------------ - - root.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT)); - - return root; - } - - @Override - public void onRefreshComplete() { - - } - - @Override - public final void onRefreshStart(final RefreshMode mode) { - if (mode.hasStart()) { - onRefreshFromStart(); - } else if (mode.hasEnd()) { - onRefreshFromEnd(); - } - } - - @Override - public void setConfig(final RefreshNowConfig config) { - if (getView() == null) return; - getListView().setConfig(config); - } - - @Override - public void setOnRefreshListener(final OnRefreshListener listener) { - - } - - @Override - public void setRefreshComplete() { - if (getView() == null) return; - getListView().setRefreshComplete(); - } - - @Override - public void setRefreshIndicatorView(final View view) { - if (getView() == null) return; - getListView().setRefreshIndicatorView(view); - } - @Override public void setRefreshing(final boolean refresh) { - if (getView() == null) return; - getListView().setRefreshing(refresh); - } - - @Override - public void setRefreshMode(final RefreshMode mode) { - if (getView() == null) return; - getListView().setRefreshMode(mode); } @Override public boolean triggerRefresh() { - onRefreshFromStart(); + onRefresh(); setRefreshing(true); return true; } - public View getRefreshIndicatorView() { - return getListView().getRefreshIndicatorView(); - } - @Override protected void fitSystemWindows(Rect insets) { super.fitSystemWindows(insets); - final View indicator = getRefreshIndicatorView(); - final LayoutParams lp = indicator.getLayoutParams(); - if (lp instanceof MarginLayoutParams) { - ((MarginLayoutParams) lp).topMargin = insets.top; - indicator.setLayoutParams(lp); - } } @Override public void onControlBarOffsetChanged(IControlBarActivity activity, float offset) { - final View indicator = getRefreshIndicatorView(); - if (indicator == null) return; - indicator.setTranslationY(activity.getControlBarHeight() * (offset - 1)); } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseUserListsListFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseUserListsListFragment.java index f316903a3..13f6217ea 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseUserListsListFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseUserListsListFragment.java @@ -33,7 +33,6 @@ import android.view.View; import android.widget.AbsListView; import android.widget.ListView; -import org.mariotaku.refreshnow.widget.RefreshMode; import org.mariotaku.twidere.adapter.ParcelableUserListsAdapter; import org.mariotaku.twidere.adapter.iface.IBaseCardAdapter.MenuButtonClickListener; import org.mariotaku.twidere.loader.support.BaseUserListsLoader; @@ -131,7 +130,6 @@ abstract class BaseUserListsListFragment extends BasePullToRefreshListFragment i setListAdapter(mAdapter); getLoaderManager().initLoader(0, getArguments(), this); setListShown(false); - setRefreshMode(RefreshMode.NONE); } @Override @@ -163,7 +161,7 @@ abstract class BaseUserListsListFragment extends BasePullToRefreshListFragment i mCursor = cursor; } } - setRefreshComplete(); + setRefreshing(false); setListShown(true); } @@ -203,13 +201,7 @@ abstract class BaseUserListsListFragment extends BasePullToRefreshListFragment i } @Override - public void onRefreshFromEnd() { - if (mLoadMoreAutomatically) return; - loadMoreUserLists(); - } - - @Override - public void onRefreshFromStart() { + public void onRefresh() { if (isRefreshing()) return; getLoaderManager().restartLoader(0, getArguments(), this); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseUsersListFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseUsersListFragment.java index f2038a077..e3383e15e 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseUsersListFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseUsersListFragment.java @@ -59,7 +59,6 @@ abstract class BaseUsersListFragment extends BasePullToRefreshListFragment imple private ParcelableUsersAdapter mAdapter; - private boolean mLoadMoreAutomatically; private ListView mListView; private long mAccountId; @@ -177,7 +176,7 @@ abstract class BaseUsersListFragment extends BasePullToRefreshListFragment imple setProgressBarIndeterminateVisibility(false); mAdapter.setData(data); mAdapter.setShowAccountColor(shouldShowAccountColor()); - setRefreshComplete(); + setRefreshing(false); setListShown(true); } @@ -209,18 +208,12 @@ abstract class BaseUsersListFragment extends BasePullToRefreshListFragment imple @Override public void onReachedBottom() { - if (!mLoadMoreAutomatically) return; loadMoreUsers(); } - @Override - public void onRefreshFromEnd() { - if (mLoadMoreAutomatically) return; - loadMoreUsers(); - } @Override - public void onRefreshFromStart() { + public void onRefresh() { if (isRefreshing()) return; getLoaderManager().restartLoader(0, getArguments(), this); } @@ -228,7 +221,6 @@ abstract class BaseUsersListFragment extends BasePullToRefreshListFragment imple @Override public void onResume() { super.onResume(); - mLoadMoreAutomatically = mPreferences.getBoolean(KEY_LOAD_MORE_AUTOMATICALLY, false); configBaseCardAdapter(getActivity(), mAdapter); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DirectMessagesConversationFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DirectMessagesConversationFragment.java index 634ef81b7..e0d257638 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DirectMessagesConversationFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DirectMessagesConversationFragment.java @@ -34,6 +34,7 @@ import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.text.Editable; +import android.text.TextUtils; import android.text.TextWatcher; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -60,6 +61,10 @@ import com.squareup.otto.Bus; import com.squareup.otto.Subscribe; import org.mariotaku.menucomponent.widget.PopupMenu; +import org.mariotaku.querybuilder.Columns.Column; +import org.mariotaku.querybuilder.Expression; +import org.mariotaku.querybuilder.OrderBy; +import org.mariotaku.querybuilder.RawItemArray; import org.mariotaku.twidere.R; import org.mariotaku.twidere.activity.support.ImagePickerActivity; import org.mariotaku.twidere.adapter.AccountsSpinnerAdapter; @@ -69,9 +74,9 @@ import org.mariotaku.twidere.adapter.iface.IBaseCardAdapter.MenuButtonClickListe import org.mariotaku.twidere.app.TwidereApplication; import org.mariotaku.twidere.loader.support.UserSearchLoader; import org.mariotaku.twidere.model.ParcelableAccount; -import org.mariotaku.twidere.model.ParcelableAccount.ParcelableCredentials; import org.mariotaku.twidere.model.ParcelableDirectMessage; import org.mariotaku.twidere.model.ParcelableUser; +import org.mariotaku.twidere.model.ParcelableUser.CachedIndices; import org.mariotaku.twidere.provider.TweetStore; import org.mariotaku.twidere.provider.TweetStore.CachedUsers; import org.mariotaku.twidere.provider.TweetStore.DirectMessages; @@ -86,6 +91,8 @@ import org.mariotaku.twidere.util.message.TaskStateChangedEvent; import org.mariotaku.twidere.view.StatusTextCountView; import org.mariotaku.twidere.view.iface.IColorLabelView; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Locale; @@ -99,6 +106,8 @@ public class DirectMessagesConversationFragment extends BaseSupportFragment impl private static final int LOADER_ID_SEARCH_USERS = 1; + private static final String EXTRA_FROM_CACHE = "from_cache"; + private TwidereValidator mValidator; private AsyncTwitterWrapper mTwitterWrapper; private SharedPreferences mPreferences; @@ -128,7 +137,7 @@ public class DirectMessagesConversationFragment extends BaseSupportFragment impl private DirectMessagesConversationAdapter mAdapter; private SimpleParcelableUsersAdapter mUsersSearchAdapter; - private ParcelableCredentials mAccount; + private ParcelableAccount mAccount; private ParcelableUser mRecipient; private ImageLoaderWrapper mImageLoader; @@ -141,7 +150,8 @@ public class DirectMessagesConversationFragment extends BaseSupportFragment impl mUsersSearchProgress.setVisibility(View.VISIBLE); final long accountId = args.getLong(EXTRA_ACCOUNT_ID); final String query = args.getString(EXTRA_QUERY); - return new UserSearchLoader(getActivity(), accountId, query, 0, null); + final boolean fromCache = args.getBoolean(EXTRA_FROM_CACHE); + return new MyUserSearchLoader(getActivity(), accountId, query, fromCache); } @Override @@ -187,12 +197,29 @@ public class DirectMessagesConversationFragment extends BaseSupportFragment impl mAccountSpinner = (Spinner) actionBarView.findViewById(R.id.account_spinner); mUserQuery = (EditText) actionBarView.findViewById(R.id.user_query); mQueryButton = actionBarView.findViewById(R.id.query_button); - final List accounts = ParcelableCredentials.getCredentialsList(activity, false); + final List accounts = ParcelableAccount.getAccountsList(activity, false); final AccountsSpinnerAdapter accountsSpinnerAdapter = new AccountsSpinnerAdapter(actionBar.getThemedContext(), R.layout.spinner_item_account_icon); accountsSpinnerAdapter.setDropDownViewResource(R.layout.list_item_user); accountsSpinnerAdapter.addAll(accounts); mAccountSpinner.setAdapter(accountsSpinnerAdapter); mAccountSpinner.setOnItemSelectedListener(this); + mUserQuery.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + final ParcelableAccount account = (ParcelableAccount) mAccountSpinner.getSelectedItem(); + searchUsers(account.account_id, ParseUtils.parseString(s), true); + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); mQueryButton.setOnClickListener(this); mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); mMessageDrafts = getSharedPreferences(MESSAGE_DRAFTS_PREFERENCES_NAME, Context.MODE_PRIVATE); @@ -213,7 +240,7 @@ public class DirectMessagesConversationFragment extends BaseSupportFragment impl mUsersSearchList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { - final ParcelableCredentials account = (ParcelableCredentials) mAccountSpinner.getSelectedItem(); + final ParcelableAccount account = (ParcelableAccount) mAccountSpinner.getSelectedItem(); showConversation(account, mUsersSearchAdapter.getItem(position)); updateProfileImage(); } @@ -229,14 +256,14 @@ public class DirectMessagesConversationFragment extends BaseSupportFragment impl mAddImageButton.setOnClickListener(this); mSendButton.setEnabled(false); if (savedInstanceState != null) { - final ParcelableCredentials account = savedInstanceState.getParcelable(EXTRA_ACCOUNT); + final ParcelableAccount account = savedInstanceState.getParcelable(EXTRA_ACCOUNT); final ParcelableUser recipient = savedInstanceState.getParcelable(EXTRA_USER); showConversation(account, recipient); mEditText.setText(savedInstanceState.getString(EXTRA_TEXT)); mImageUri = savedInstanceState.getString(EXTRA_IMAGE_URI); } else { final Bundle args = getArguments(); - final ParcelableCredentials account; + final ParcelableAccount account; final ParcelableUser recipient; if (args != null) { if (args.containsKey(EXTRA_ACCOUNT)) { @@ -247,7 +274,7 @@ public class DirectMessagesConversationFragment extends BaseSupportFragment impl final long userId = args.getLong(EXTRA_RECIPIENT_ID, -1); final int accountPos = accountsSpinnerAdapter.findItemPosition(accountId); account = accountPos < 0 ? ParcelableAccount.getCredentials(activity, accountId) - : (ParcelableCredentials) accountsSpinnerAdapter.getItem(accountPos); + : accountsSpinnerAdapter.getItem(accountPos); recipient = Utils.getUserForConversation(activity, accountId, userId); } else { account = null; @@ -260,6 +287,7 @@ public class DirectMessagesConversationFragment extends BaseSupportFragment impl } } } + mEditText.setSelection(mEditText.length()); final boolean isValid = mAccount != null && mRecipient != null; mConversationContainer.setVisibility(isValid ? View.VISIBLE : View.GONE); mRecipientSelectorContainer.setVisibility(isValid ? View.GONE : View.VISIBLE); @@ -354,7 +382,7 @@ public class DirectMessagesConversationFragment extends BaseSupportFragment impl } case R.id.query_button: { final ParcelableAccount account = (ParcelableAccount) mAccountSpinner.getSelectedItem(); - searchUsers(account.account_id, ParseUtils.parseString(mUserQuery.getText())); + searchUsers(account.account_id, ParseUtils.parseString(mUserQuery.getText()), false); break; } } @@ -362,10 +390,11 @@ public class DirectMessagesConversationFragment extends BaseSupportFragment impl private boolean mSearchUsersLoaderInitialized; - private void searchUsers(long accountId, String query) { + private void searchUsers(long accountId, String query, boolean fromCache) { final Bundle args = new Bundle(); args.putLong(EXTRA_ACCOUNT_ID, accountId); args.putString(EXTRA_QUERY, query); + args.putBoolean(EXTRA_FROM_CACHE, fromCache); final LoaderManager lm = getLoaderManager(); if (mSearchUsersLoaderInitialized) { lm.restartLoader(LOADER_ID_SEARCH_USERS, args, mSearchLoadersCallback); @@ -416,7 +445,7 @@ public class DirectMessagesConversationFragment extends BaseSupportFragment impl @Override public void onItemSelected(final AdapterView parent, final View view, final int pos, final long id) { - final ParcelableCredentials account = (ParcelableCredentials) mAccountSpinner.getSelectedItem(); + final ParcelableAccount account = (ParcelableAccount) mAccountSpinner.getSelectedItem(); if (account != null) { mAccount = account; updateProfileImage(); @@ -491,7 +520,7 @@ public class DirectMessagesConversationFragment extends BaseSupportFragment impl // } // // @Override -// public void onRefreshFromStart() { +// public void onRefresh() { // loadMoreMessages(); // } @@ -536,7 +565,7 @@ public class DirectMessagesConversationFragment extends BaseSupportFragment impl mPopupMenu.dismiss(); } - final ParcelableCredentials account = mAccount; + final ParcelableAccount account = mAccount; final ParcelableUser recipient = mRecipient; if (account != null && recipient != null) { final String key = getDraftsTextKey(account.account_id, recipient.id); @@ -577,7 +606,7 @@ public class DirectMessagesConversationFragment extends BaseSupportFragment impl // return true; // } - public void showConversation(final ParcelableCredentials account, final ParcelableUser recipient) { + public void showConversation(final ParcelableAccount account, final ParcelableUser recipient) { mAccount = account; mRecipient = recipient; if (account == null || recipient == null) return; @@ -643,7 +672,7 @@ public class DirectMessagesConversationFragment extends BaseSupportFragment impl // } private void sendDirectMessage() { - final ParcelableCredentials account = mAccount; + final ParcelableAccount account = mAccount; final ParcelableUser recipient = mRecipient; if (mAccount == null || mRecipient == null) return; final String message = mEditText.getText().toString(); @@ -760,4 +789,50 @@ public class DirectMessagesConversationFragment extends BaseSupportFragment impl } } + + private static class MyUserSearchLoader extends UserSearchLoader { + private final boolean mFromCache; + + public MyUserSearchLoader(Context context, long accountId, String query, boolean fromCache) { + super(context, accountId, query, 0, null); + mFromCache = fromCache; + } + + @Override + public List loadInBackground() { + final String query = getQuery(); + if (TextUtils.isEmpty(query)) return Collections.emptyList(); + if (mFromCache) { + final Context context = getContext(); + final ArrayList cachedList = new ArrayList<>(); + final String queryEscaped = query.replace("_", "^_"); + final Expression selection; + final String[] selectionArgs; + if (queryEscaped != null) { + final SharedPreferences nicknamePrefs = context.getSharedPreferences(USER_NICKNAME_PREFERENCES_NAME, Context.MODE_PRIVATE); + final long[] nicknameIds = Utils.getMatchedNicknameIds(ParseUtils.parseString(query), nicknamePrefs); + selection = Expression.or(Expression.likeRaw(new Column(CachedUsers.SCREEN_NAME), "?||'%'", "^"), + Expression.likeRaw(new Column(CachedUsers.NAME), "?||'%'", "^"), + Expression.in(new Column(CachedUsers.USER_ID), new RawItemArray(nicknameIds))); + selectionArgs = new String[]{queryEscaped, queryEscaped}; + } else { + selection = null; + selectionArgs = null; + } + final OrderBy orderBy = new OrderBy(CachedUsers.SCREEN_NAME, CachedUsers.NAME); + final Cursor c = context.getContentResolver().query(CachedUsers.CONTENT_URI, + CachedUsers.BASIC_COLUMNS, selection != null ? selection.getSQL() : null, + selectionArgs, orderBy.getSQL()); + final CachedIndices i = new CachedIndices(c); + c.moveToFirst(); + while (!c.isAfterLast()) { + cachedList.add(new ParcelableUser(c, i, -1)); + c.moveToNext(); + } + c.close(); + return cachedList; + } + return super.loadInBackground(); + } + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DirectMessagesFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DirectMessagesFragment.java index 5a9a68cd4..99ab26d35 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DirectMessagesFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DirectMessagesFragment.java @@ -72,8 +72,6 @@ public class DirectMessagesFragment extends BasePullToRefreshListFragment implem private SharedPreferences mPreferences; private ListView mListView; - private boolean mLoadMoreAutomatically; - private DirectMessageEntriesAdapter mAdapter; private int mFirstVisibleItem; @@ -158,13 +156,7 @@ public class DirectMessagesFragment extends BasePullToRefreshListFragment implem } @Override - public void onRefreshFromEnd() { - if (mLoadMoreAutomatically) return; - loadMoreMessages(); - } - - @Override - public void onRefreshFromStart() { + public void onRefresh() { if (isRefreshing()) return; new TwidereAsyncTask() { @@ -192,7 +184,6 @@ public class DirectMessagesFragment extends BasePullToRefreshListFragment implem super.onResume(); mListView.setFastScrollEnabled(mPreferences.getBoolean(KEY_FAST_SCROLL_THUMB, false)); configBaseCardAdapter(getActivity(), mAdapter); - mLoadMoreAutomatically = mPreferences.getBoolean(KEY_LOAD_MORE_AUTOMATICALLY, false); } @Override @@ -276,7 +267,6 @@ public class DirectMessagesFragment extends BasePullToRefreshListFragment implem @Override protected void onReachedBottom() { - if (!mLoadMoreAutomatically) return; loadMoreMessages(); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/SavedSearchesListFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/SavedSearchesListFragment.java index 17661c588..120622f0b 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/SavedSearchesListFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/SavedSearchesListFragment.java @@ -103,16 +103,11 @@ public class SavedSearchesListFragment extends BasePullToRefreshListFragment imp } mAdapter.setData(data); setListShown(true); - setRefreshComplete(); + setRefreshing(false); } @Override - public void onRefreshFromEnd() { - - } - - @Override - public void onRefreshFromStart() { + public void onRefresh() { if (isRefreshing()) return; getLoaderManager().restartLoader(0, null, this); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/SearchFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/SearchFragment.java index ced03f645..e9720f7bd 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/SearchFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/SearchFragment.java @@ -34,6 +34,7 @@ import android.view.View; import android.view.ViewGroup; import org.mariotaku.twidere.R; +import org.mariotaku.twidere.activity.iface.IThemedActivity; import org.mariotaku.twidere.activity.support.LinkHandlerActivity; import org.mariotaku.twidere.adapter.support.SupportTabsAdapter; import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowsInsetsCallback; @@ -83,6 +84,11 @@ public class SearchFragment extends BaseSupportFragment implements RefreshScroll mViewPager.setAdapter(mAdapter); mViewPager.setOffscreenPageLimit(2); mPagerIndicator.setViewPager(mViewPager); + if (activity instanceof IThemedActivity) { + mPagerIndicator.setStripColor(((IThemedActivity) activity).getCurrentThemeColor()); + } else { + + } if (savedInstanceState == null && args != null && args.containsKey(EXTRA_QUERY)) { final String query = args.getString(EXTRA_QUERY); final SearchRecentSuggestions suggestions = new SearchRecentSuggestions(getActivity(), diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusFragment.java index 39effa80f..6137260dd 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusFragment.java @@ -83,7 +83,7 @@ import org.mariotaku.twidere.util.OnLinkClickHandler; import org.mariotaku.twidere.util.ThemeUtils; import org.mariotaku.twidere.util.TwidereLinkify; import org.mariotaku.twidere.util.Utils; -import org.mariotaku.twidere.view.ProfileImageView; +import org.mariotaku.twidere.view.ShapedImageView; import org.mariotaku.twidere.view.StatusTextView; import org.mariotaku.twidere.view.TwidereMenuBar; import org.mariotaku.twidere.view.holder.LoadIndicatorViewHolder; @@ -346,6 +346,7 @@ public class StatusFragment extends BaseSupportFragment private final boolean mNameFirst, mNicknameOnly; private final int mCardLayoutResource; private final int mTextSize; + private final int mCardBackgroundColor; private ParcelableStatus mStatus; private ParcelableCredentials mStatusAccount; @@ -362,6 +363,7 @@ public class StatusFragment extends BaseSupportFragment mInflater = LayoutInflater.from(context); mImageLoader = TwidereApplication.getInstance(context).getImageLoaderWrapper(); mImageLoadingHandler = new ImageLoadingHandler(R.id.media_preview_progress); + mCardBackgroundColor = ThemeUtils.getCardBackgroundColor(context); mNameFirst = preferences.getBoolean(KEY_NAME_FIRST, true); mNicknameOnly = preferences.getBoolean(KEY_NICKNAME_ONLY, true); mTextSize = preferences.getInt(KEY_TEXT_SIZE, res.getInteger(R.integer.default_text_size)); @@ -419,7 +421,7 @@ public class StatusFragment extends BaseSupportFragment return getConversationCount() + 1 + getRepliesCount() + 1; } - public int getTextSize() { + public float getTextSize() { return mTextSize; } @@ -491,12 +493,20 @@ public class StatusFragment extends BaseSupportFragment switch (viewType) { case VIEW_TYPE_DETAIL_STATUS: { final View view = mInflater.inflate(R.layout.header_status, parent, false); + final CardView cardView = (CardView) view.findViewById(R.id.card); + if (cardView != null) { + cardView.setCardBackgroundColor(mCardBackgroundColor); + } return new DetailStatusViewHolder(this, view); } case VIEW_TYPE_LIST_STATUS: { final View view = mInflater.inflate(mCardLayoutResource, parent, false); + final CardView cardView = (CardView) view.findViewById(R.id.card); + if (cardView != null) { + cardView.setCardBackgroundColor(mCardBackgroundColor); + } final StatusViewHolder holder = new StatusViewHolder(this, view); - holder.setupViews(); + holder.setupViewListeners(); return holder; } case VIEW_TYPE_CONVERSATION_LOAD_INDICATOR: @@ -657,7 +667,7 @@ public class StatusFragment extends BaseSupportFragment private final TwidereMenuBar menuBar; private final TextView nameView, screenNameView; private final StatusTextView textView; - private final ProfileImageView profileImageView; + private final ShapedImageView profileImageView; private final ImageView profileTypeView; private final TextView timeSourceView; private final TextView replyRetweetStatusView; @@ -679,7 +689,7 @@ public class StatusFragment extends BaseSupportFragment nameView = (TextView) itemView.findViewById(R.id.name); screenNameView = (TextView) itemView.findViewById(R.id.screen_name); textView = (StatusTextView) itemView.findViewById(R.id.text); - profileImageView = (ProfileImageView) itemView.findViewById(R.id.profile_image); + profileImageView = (ShapedImageView) itemView.findViewById(R.id.profile_image); profileTypeView = (ImageView) itemView.findViewById(R.id.profile_type); timeSourceView = (TextView) itemView.findViewById(R.id.time_source); replyRetweetStatusView = (TextView) itemView.findViewById(R.id.reply_retweet_status); @@ -847,7 +857,6 @@ public class StatusFragment extends BaseSupportFragment textView.setText(Html.fromHtml(status.text_html)); final TwidereLinkify linkify = new TwidereLinkify(new OnLinkClickHandler(context, null)); - linkify.setLinkTextColor(ThemeUtils.getUserLinkTextColor(context)); linkify.applyAllLinks(textView, status.account_id, status.is_possibly_sensitive); ThemeUtils.applyParagraphSpacing(textView, 1.1f); @@ -913,7 +922,7 @@ public class StatusFragment extends BaseSupportFragment mediaPreviewLoad.setOnClickListener(this); profileContainer.setOnClickListener(this); - final int defaultTextSize = adapter.getTextSize(); + final float defaultTextSize = adapter.getTextSize(); nameView.setTextSize(defaultTextSize * 1.25f); textView.setTextSize(defaultTextSize * 1.25f); screenNameView.setTextSize(defaultTextSize * 0.85f); diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/TrendsSuggectionsFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/TrendsSuggectionsFragment.java index 7307398df..06f5aa0c9 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/TrendsSuggectionsFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/TrendsSuggectionsFragment.java @@ -92,12 +92,7 @@ public class TrendsSuggectionsFragment extends BasePullToRefreshListFragment imp } @Override - public void onRefreshFromEnd() { - - } - - @Override - public void onRefreshFromStart() { + public void onRefresh() { if (isRefreshing()) return; final AsyncTwitterWrapper twitter = getTwitterWrapper(); if (twitter == null) return; diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserFragment.java index de3dbac30..105cb0b69 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserFragment.java @@ -36,6 +36,7 @@ import android.graphics.ColorFilter; import android.graphics.Outline; import android.graphics.Paint; import android.graphics.PixelFormat; +import android.graphics.PorterDuff.Mode; import android.graphics.Rect; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; @@ -62,7 +63,6 @@ import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; -import android.view.MenuItem.OnMenuItemClickListener; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; @@ -91,6 +91,7 @@ import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowsInsetsCal import org.mariotaku.twidere.fragment.iface.SupportFragmentCallback; import org.mariotaku.twidere.graphic.ActionBarColorDrawable; import org.mariotaku.twidere.loader.support.ParcelableUserLoader; +import org.mariotaku.twidere.model.ParcelableAccount.ParcelableCredentials; import org.mariotaku.twidere.model.ParcelableUser; import org.mariotaku.twidere.model.ParcelableUserList; import org.mariotaku.twidere.model.SingleResponse; @@ -105,6 +106,7 @@ import org.mariotaku.twidere.util.ParseUtils; import org.mariotaku.twidere.util.ThemeUtils; import org.mariotaku.twidere.util.TwidereLinkify; import org.mariotaku.twidere.util.TwidereLinkify.OnLinkClickListener; +import org.mariotaku.twidere.util.UserColorNicknameUtils; import org.mariotaku.twidere.util.Utils; import org.mariotaku.twidere.util.menu.TwidereMenuInfo; import org.mariotaku.twidere.util.message.FriendshipUpdatedEvent; @@ -113,7 +115,7 @@ import org.mariotaku.twidere.util.message.TaskStateChangedEvent; import org.mariotaku.twidere.view.HeaderDrawerLayout; import org.mariotaku.twidere.view.HeaderDrawerLayout.DrawerCallback; import org.mariotaku.twidere.view.ProfileBannerImageView; -import org.mariotaku.twidere.view.ProfileImageView; +import org.mariotaku.twidere.view.ShapedImageView; import org.mariotaku.twidere.view.TabPagerIndicator; import org.mariotaku.twidere.view.TintedStatusFrameLayout; import org.mariotaku.twidere.view.iface.IColorLabelView; @@ -131,7 +133,6 @@ import static org.mariotaku.twidere.util.UserColorNicknameUtils.clearUserColor; import static org.mariotaku.twidere.util.UserColorNicknameUtils.clearUserNickname; import static org.mariotaku.twidere.util.UserColorNicknameUtils.getUserColor; import static org.mariotaku.twidere.util.UserColorNicknameUtils.getUserNickname; -import static org.mariotaku.twidere.util.UserColorNicknameUtils.setUserColor; import static org.mariotaku.twidere.util.Utils.addIntentToMenu; import static org.mariotaku.twidere.util.Utils.formatToLongTimeString; import static org.mariotaku.twidere.util.Utils.getAccountColor; @@ -143,8 +144,10 @@ import static org.mariotaku.twidere.util.Utils.getOriginalTwitterProfileImage; import static org.mariotaku.twidere.util.Utils.getTwitterInstance; import static org.mariotaku.twidere.util.Utils.getUserTypeIconRes; import static org.mariotaku.twidere.util.Utils.openImage; +import static org.mariotaku.twidere.util.Utils.openMutesUsers; import static org.mariotaku.twidere.util.Utils.openStatus; import static org.mariotaku.twidere.util.Utils.openTweetSearch; +import static org.mariotaku.twidere.util.Utils.openUserBlocks; import static org.mariotaku.twidere.util.Utils.openUserFollowers; import static org.mariotaku.twidere.util.Utils.openUserFriends; import static org.mariotaku.twidere.util.Utils.openUserLists; @@ -153,9 +156,8 @@ import static org.mariotaku.twidere.util.Utils.setMenuItemAvailability; import static org.mariotaku.twidere.util.Utils.showInfoMessage; public class UserFragment extends BaseSupportFragment implements OnClickListener, - OnMenuItemClickListener, OnLinkClickListener, OnSizeChangedListener, - OnSharedPreferenceChangeListener, OnTouchListener, DrawerCallback, SupportFragmentCallback, - SystemWindowsInsetsCallback { + OnLinkClickListener, OnSizeChangedListener, OnSharedPreferenceChangeListener, + OnTouchListener, DrawerCallback, SupportFragmentCallback, SystemWindowsInsetsCallback { public static final String TRANSITION_NAME_PROFILE_IMAGE = "profile_image"; public static final String TRANSITION_NAME_PROFILE_TYPE = "profile_type"; @@ -166,7 +168,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener private ImageLoaderWrapper mProfileImageLoader; - private ProfileImageView mProfileImageView; + private ShapedImageView mProfileImageView; private ImageView mProfileTypeView; private ProfileBannerImageView mProfileBannerView; private TextView mNameView, mScreenNameView, mDescriptionView, mLocationView, mURLView, mCreatedAtView, @@ -254,7 +256,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener public void onLoadFinished(final Loader> loader, final SingleResponse data) { if (getActivity() == null) return; - if (data.getData() != null && data.getData().id > 0) { + if (data.hasData()) { final ParcelableUser user = data.getData(); mCardContent.setVisibility(View.VISIBLE); mErrorRetryContainer.setVisibility(View.GONE); @@ -319,13 +321,39 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener mFollowButton.setText(R.string.edit); mFollowButton.setVisibility(View.VISIBLE); } else if (relationship != null) { + final int drawableRes; if (relationship.isSourceBlockingTarget()) { mFollowButton.setText(R.string.unblock); + drawableRes = R.drawable.ic_follow_blocked; } else if (relationship.isSourceFollowingTarget()) { mFollowButton.setText(R.string.unfollow); + if (relationship.isTargetFollowingSource()) { + drawableRes = R.drawable.ic_follow_bidirectional; + } else { + drawableRes = R.drawable.ic_follow_outgoing; + } + } else if (user.is_follow_request_sent) { + mFollowButton.setText(R.string.requested); + if (relationship.isTargetFollowingSource()) { + drawableRes = R.drawable.ic_follow_incoming; + } else { + drawableRes = R.drawable.ic_follow_requested; + } } else { mFollowButton.setText(R.string.follow); + if (relationship.isTargetFollowingSource()) { + drawableRes = R.drawable.ic_follow_incoming; + } else { + drawableRes = R.drawable.ic_follow_none; + } } + final Drawable icon = getResources().getDrawable(drawableRes); + final int iconSize = Math.round(mFollowButton.getTextSize() * 1.4f); + icon.setBounds(0, 0, iconSize, iconSize); + icon.setColorFilter(mFollowButton.getCurrentTextColor(), Mode.SRC_ATOP); + mFollowButton.setCompoundDrawables(icon, null, null, null); + mFollowButton.setCompoundDrawablePadding(Math.round(mFollowButton.getTextSize() * 0.25f)); + final ContentResolver resolver = getContentResolver(); final String where = Expression.equals(CachedUsers.USER_ID, user.id).getSQL(); resolver.delete(CachedUsers.CONTENT_URI, where, null); @@ -378,7 +406,6 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener mDescriptionContainer.setVisibility(userIsMe || !isEmpty(user.description_html) ? View.VISIBLE : View.GONE); mDescriptionView.setText(user.description_html != null ? Html.fromHtml(user.description_html) : null); final TwidereLinkify linkify = new TwidereLinkify(this); - linkify.setLinkTextColor(user.link_color); linkify.applyAllLinks(mDescriptionView, user.account_id, false); mDescriptionView.setMovementMethod(null); mLocationContainer.setVisibility(userIsMe || !isEmpty(user.location) ? View.VISIBLE : View.GONE); @@ -386,7 +413,6 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener mURLContainer.setVisibility(userIsMe || !isEmpty(user.url) || !isEmpty(user.url_expanded) ? View.VISIBLE : View.GONE); mURLView.setText(isEmpty(user.url_expanded) ? user.url : user.url_expanded); - mURLView.setLinkTextColor(user.link_color); mURLView.setMovementMethod(null); final String createdAt = formatToLongTimeString(activity, user.created_at); final float daysSinceCreated = (System.currentTimeMillis() - user.created_at) / 1000 / 60 / 60 / 24; @@ -399,11 +425,11 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener if (userColor != 0) { mProfileImageLoader.displayProfileImage(mProfileImageView, getOriginalTwitterProfileImage(user.profile_image_url)); - setupUserColorActionBar(userColor); + setUserColor(userColor); } else { mProfileImageLoader.displayProfileImage(mProfileImageView, getOriginalTwitterProfileImage(user.profile_image_url)); - setupUserColorActionBar(user.link_color); + setUserColor(user.link_color); } final int defWidth = res.getDisplayMetrics().widthPixels; final int width = mBannerWidth > 0 ? mBannerWidth : defWidth; @@ -534,7 +560,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener if (resultCode == Activity.RESULT_OK) { if (data == null) return; final int color = data.getIntExtra(EXTRA_COLOR, Color.TRANSPARENT); - setUserColor(getActivity(), mUser.id, color); + UserColorNicknameUtils.setUserColor(getActivity(), mUser.id, color); } else if (resultCode == ColorPickerDialogActivity.RESULT_CLEARED) { clearUserColor(getActivity(), mUser.id); } @@ -619,6 +645,9 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener mProfileBannerView.setOnSizeChangedListener(this); mProfileBannerSpace.setOnTouchListener(this); + + mCardView.setCardBackgroundColor(ThemeUtils.getCardBackgroundColor(getActivity())); + getUserInfo(accountId, userId, screenName, false); setupBaseActionBar(); @@ -673,12 +702,198 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener @Override public void onPrepareOptionsMenu(final Menu menu) { if (!shouldUseNativeMenu() || !menu.hasVisibleItems()) return; - setMenu(menu); + final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final ParcelableUser user = mUser; + final Relationship relationship = mRelationship; + if (twitter == null || user == null) return; + final boolean isMyself = user.account_id == user.id; + final MenuItem mentionItem = menu.findItem(MENU_MENTION); + if (mentionItem != null) { + mentionItem.setTitle(getString(R.string.mention_user_name, getDisplayName(getActivity(), user))); + } + Utils.setMenuItemAvailability(menu, MENU_MENTION, !isMyself); +// final MenuItem followItem = menu.findItem(MENU_FOLLOW); +// followItem.setVisible(!isMyself); +// final boolean shouldShowFollowItem = !creatingFriendship && !destroyingFriendship && !isMyself +// && relationship != null; +// followItem.setEnabled(shouldShowFollowItem); +// if (shouldShowFollowItem) { +// followItem.setTitle(isFollowing ? R.string.unfollow : isProtected ? R.string.send_follow_request +// : R.string.follow); +// followItem.setIcon(isFollowing ? R.drawable.ic_action_cancel : R.drawable.ic_action_add); +// } else { +// followItem.setTitle(null); +// followItem.setIcon(null); +// } + if (!isMyself && relationship != null) { + setMenuItemAvailability(menu, MENU_SEND_DIRECT_MESSAGE, relationship.canSourceDMTarget()); + setMenuItemAvailability(menu, MENU_BLOCK, true); + setMenuItemAvailability(menu, MENU_MUTE_USER, true); + final MenuItem blockItem = menu.findItem(MENU_BLOCK); + if (blockItem != null) { + final boolean blocking = relationship.isSourceBlockingTarget(); + MenuUtils.setMenuInfo(blockItem, new TwidereMenuInfo(blocking)); + blockItem.setTitle(blocking ? R.string.unblock : R.string.block); + } + final MenuItem muteItem = menu.findItem(MENU_MUTE_USER); + if (muteItem != null) { + final boolean muting = relationship.isSourceMutingTarget(); + MenuUtils.setMenuInfo(muteItem, new TwidereMenuInfo(muting)); + muteItem.setTitle(muting ? R.string.unmute : R.string.mute); + } + final MenuItem filterItem = menu.findItem(MENU_ADD_TO_FILTER); + if (filterItem != null) { + final boolean filtering = Utils.isFilteringUser(getActivity(), user.id); + MenuUtils.setMenuInfo(filterItem, new TwidereMenuInfo(filtering)); + filterItem.setTitle(filtering ? R.string.remove_from_filter : R.string.add_to_filter); + } + } else { + setMenuItemAvailability(menu, MENU_SEND_DIRECT_MESSAGE, false); + setMenuItemAvailability(menu, MENU_BLOCK, false); + setMenuItemAvailability(menu, MENU_MUTE_USER, false); + setMenuItemAvailability(menu, MENU_REPORT_SPAM, false); + } + setMenuItemAvailability(menu, R.id.muted_users, isMyself); + setMenuItemAvailability(menu, R.id.blocked_users, isMyself); + final Intent intent = new Intent(INTENT_ACTION_EXTENSION_OPEN_USER); + final Bundle extras = new Bundle(); + extras.putParcelable(EXTRA_USER, user); + intent.putExtras(extras); + menu.removeGroup(MENU_GROUP_USER_EXTENSION); + addIntentToMenu(getActivity(), menu, intent, MENU_GROUP_USER_EXTENSION); } @Override public boolean onOptionsItemSelected(final MenuItem item) { - return handleMenuItemClick(item); + final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final ParcelableUser user = mUser; + final Relationship relationship = mRelationship; + if (user == null || twitter == null) return false; + switch (item.getItemId()) { + case MENU_BLOCK: { + if (mRelationship != null) { + if (mRelationship.isSourceBlockingTarget()) { + twitter.destroyBlockAsync(user.account_id, user.id); + } else { + CreateUserBlockDialogFragment.show(getFragmentManager(), user); + } + } + break; + } + case MENU_REPORT_SPAM: { + ReportSpamDialogFragment.show(getFragmentManager(), user); + break; + } + case MENU_ADD_TO_FILTER: { + final boolean filtering = Utils.isFilteringUser(getActivity(), user.id); + final ContentResolver cr = getContentResolver(); + if (filtering) { + final Expression where = Expression.equals(Filters.Users.USER_ID, user.id); + cr.delete(Filters.Users.CONTENT_URI, where.getSQL(), null); + showInfoMessage(getActivity(), R.string.message_user_unmuted, false); + } else { + cr.insert(Filters.Users.CONTENT_URI, ContentValuesCreator.makeFilteredUserContentValues(user)); + showInfoMessage(getActivity(), R.string.message_user_muted, false); + } + break; + } + case MENU_MUTE_USER: { + if (mRelationship != null) { + if (mRelationship.isSourceMutingTarget()) { + twitter.destroyMuteAsync(user.account_id, user.id); + } else { + CreateUserMuteDialogFragment.show(getFragmentManager(), user); + } + } + break; + } + case MENU_MENTION: { + final Intent intent = new Intent(INTENT_ACTION_MENTION); + final Bundle bundle = new Bundle(); + bundle.putParcelable(EXTRA_USER, user); + intent.putExtras(bundle); + startActivity(intent); + break; + } + case MENU_SEND_DIRECT_MESSAGE: { + final Uri.Builder builder = new Uri.Builder(); + builder.scheme(SCHEME_TWIDERE); + builder.authority(AUTHORITY_DIRECT_MESSAGES_CONVERSATION); + builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_ID, String.valueOf(user.account_id)); + builder.appendQueryParameter(QUERY_PARAM_USER_ID, String.valueOf(user.id)); + final Intent intent = new Intent(Intent.ACTION_VIEW, builder.build()); + intent.putExtra(EXTRA_ACCOUNT, ParcelableCredentials.getAccount(getActivity(), user.account_id)); + intent.putExtra(EXTRA_USER, user); + startActivity(intent); + break; + } + case MENU_SET_COLOR: { + final Intent intent = new Intent(getActivity(), ColorPickerDialogActivity.class); + intent.putExtra(EXTRA_COLOR, getUserColor(getActivity(), user.id, true)); + intent.putExtra(EXTRA_ALPHA_SLIDER, false); + intent.putExtra(EXTRA_CLEAR_BUTTON, true); + startActivityForResult(intent, REQUEST_SET_COLOR); + break; + } + case MENU_CLEAR_NICKNAME: { + clearUserNickname(getActivity(), user.id); + break; + } + case MENU_SET_NICKNAME: { + final String nick = getUserNickname(getActivity(), user.id, true); + SetUserNicknameDialogFragment.show(getFragmentManager(), user.id, nick); + break; + } + case MENU_ADD_TO_LIST: { + final Intent intent = new Intent(INTENT_ACTION_SELECT_USER_LIST); + intent.setClass(getActivity(), UserListSelectorActivity.class); + intent.putExtra(EXTRA_ACCOUNT_ID, user.account_id); + intent.putExtra(EXTRA_SCREEN_NAME, getAccountScreenName(getActivity(), user.account_id)); + startActivityForResult(intent, REQUEST_ADD_TO_LIST); + break; + } + case MENU_OPEN_WITH_ACCOUNT: { + final Intent intent = new Intent(INTENT_ACTION_SELECT_ACCOUNT); + intent.setClass(getActivity(), AccountSelectorActivity.class); + intent.putExtra(EXTRA_SINGLE_SELECTION, true); + startActivityForResult(intent, REQUEST_SELECT_ACCOUNT); + break; + } + case MENU_FOLLOW: { + if (relationship == null) return false; + final boolean isFollowing = relationship.isSourceFollowingTarget(); + final boolean isCreatingFriendship = twitter.isCreatingFriendship(user.account_id, user.id); + final boolean isDestroyingFriendship = twitter.isDestroyingFriendship(user.account_id, user.id); + if (!isCreatingFriendship && !isDestroyingFriendship) { + if (isFollowing) { + DestroyFriendshipDialogFragment.show(getFragmentManager(), user); + } else { + twitter.createFriendshipAsync(user.account_id, user.id); + } + } + return true; + } + case R.id.muted_users: { + openMutesUsers(getActivity(), user.account_id); + return true; + } + case R.id.blocked_users: { + openUserBlocks(getActivity(), user.account_id); + return true; + } + default: { + if (item.getIntent() != null) { + try { + startActivity(item.getIntent()); + } catch (final ActivityNotFoundException e) { + Log.w(LOGTAG, e); + return false; + } + } + break; + } + } + return true; } @Override @@ -785,12 +1000,6 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener } } - @Override - public boolean onMenuItemClick(final MenuItem item) { - return handleMenuItemClick(item); - - } - @Override public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) { if (mUser == null || !ParseUtils.parseString(mUser.id).equals(key)) return; @@ -837,7 +1046,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener mFriendsContainer = headerView.findViewById(R.id.friends_container); mFriendsCount = (TextView) headerView.findViewById(R.id.friends_count); mProfileNameContainer = (IColorLabelView) headerView.findViewById(R.id.profile_name_container); - mProfileImageView = (ProfileImageView) headerView.findViewById(R.id.profile_image); + mProfileImageView = (ShapedImageView) headerView.findViewById(R.id.profile_image); mProfileTypeView = (ImageView) headerView.findViewById(R.id.profile_type); mDescriptionContainer = headerView.findViewById(R.id.description_container); mLocationContainer = headerView.findViewById(R.id.location_container); @@ -897,127 +1106,6 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener getUserInfo(user.account_id, user.id, user.screen_name, omitIntentExtra); } - private boolean handleMenuItemClick(final MenuItem item) { - final AsyncTwitterWrapper twitter = getTwitterWrapper(); - final ParcelableUser user = mUser; - final Relationship relationship = mRelationship; - if (user == null || twitter == null) return false; - switch (item.getItemId()) { - case MENU_BLOCK: { - if (mRelationship != null) { - if (mRelationship.isSourceBlockingTarget()) { - twitter.destroyBlockAsync(user.account_id, user.id); - } else { - CreateUserBlockDialogFragment.show(getFragmentManager(), user); - } - } - break; - } - case MENU_REPORT_SPAM: { - ReportSpamDialogFragment.show(getFragmentManager(), user); - break; - } - case MENU_ADD_TO_FILTER: { - final boolean filtering = Utils.isFilteringUser(getActivity(), user.id); - final ContentResolver cr = getContentResolver(); - if (filtering) { - final Expression where = Expression.equals(Filters.Users.USER_ID, user.id); - cr.delete(Filters.Users.CONTENT_URI, where.getSQL(), null); - showInfoMessage(getActivity(), R.string.message_user_unmuted, false); - } else { - cr.insert(Filters.Users.CONTENT_URI, ContentValuesCreator.makeFilteredUserContentValues(user)); - showInfoMessage(getActivity(), R.string.message_user_muted, false); - } - break; - } - case MENU_MUTE_USER: { - if (mRelationship != null) { - if (mRelationship.isSourceMutingTarget()) { - twitter.destroyMuteAsync(user.account_id, user.id); - } else { - CreateUserMuteDialogFragment.show(getFragmentManager(), user); - } - } - break; - } - case MENU_MENTION: { - final Intent intent = new Intent(INTENT_ACTION_MENTION); - final Bundle bundle = new Bundle(); - bundle.putParcelable(EXTRA_USER, user); - intent.putExtras(bundle); - startActivity(intent); - break; - } - case MENU_SEND_DIRECT_MESSAGE: { - final Uri.Builder builder = new Uri.Builder(); - builder.scheme(SCHEME_TWIDERE); - builder.authority(AUTHORITY_DIRECT_MESSAGES_CONVERSATION); - builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_ID, String.valueOf(user.account_id)); - builder.appendQueryParameter(QUERY_PARAM_RECIPIENT_ID, String.valueOf(user.id)); - startActivity(new Intent(Intent.ACTION_VIEW, builder.build())); - break; - } - case MENU_SET_COLOR: { - final Intent intent = new Intent(getActivity(), ColorPickerDialogActivity.class); - intent.putExtra(EXTRA_COLOR, getUserColor(getActivity(), user.id, true)); - intent.putExtra(EXTRA_ALPHA_SLIDER, false); - intent.putExtra(EXTRA_CLEAR_BUTTON, true); - startActivityForResult(intent, REQUEST_SET_COLOR); - break; - } - case MENU_CLEAR_NICKNAME: { - clearUserNickname(getActivity(), user.id); - break; - } - case MENU_SET_NICKNAME: { - final String nick = getUserNickname(getActivity(), user.id, true); - SetUserNicknameDialogFragment.show(getFragmentManager(), user.id, nick); - break; - } - case MENU_ADD_TO_LIST: { - final Intent intent = new Intent(INTENT_ACTION_SELECT_USER_LIST); - intent.setClass(getActivity(), UserListSelectorActivity.class); - intent.putExtra(EXTRA_ACCOUNT_ID, user.account_id); - intent.putExtra(EXTRA_SCREEN_NAME, getAccountScreenName(getActivity(), user.account_id)); - startActivityForResult(intent, REQUEST_ADD_TO_LIST); - break; - } - case MENU_OPEN_WITH_ACCOUNT: { - final Intent intent = new Intent(INTENT_ACTION_SELECT_ACCOUNT); - intent.setClass(getActivity(), AccountSelectorActivity.class); - intent.putExtra(EXTRA_SINGLE_SELECTION, true); - startActivityForResult(intent, REQUEST_SELECT_ACCOUNT); - break; - } - case MENU_FOLLOW: { - if (relationship == null) return false; - final boolean isFollowing = relationship.isSourceFollowingTarget(); - final boolean isCreatingFriendship = twitter.isCreatingFriendship(user.account_id, user.id); - final boolean isDestroyingFriendship = twitter.isDestroyingFriendship(user.account_id, user.id); - if (!isCreatingFriendship && !isDestroyingFriendship) { - if (isFollowing) { - DestroyFriendshipDialogFragment.show(getFragmentManager(), user); - } else { - twitter.createFriendshipAsync(user.account_id, user.id); - } - } - return true; - } - default: { - if (item.getIntent() != null) { - try { - startActivity(item.getIntent()); - } catch (final ActivityNotFoundException e) { - Log.w(LOGTAG, e); - return false; - } - } - break; - } - } - return true; - } - private boolean isUucky(long userId, String screenName, Parcelable parcelable) { if (userId == UUCKY_ID || UUCKY_SCREEN_NAME.equalsIgnoreCase(screenName)) return true; if (parcelable instanceof ParcelableUser) { @@ -1053,66 +1141,6 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener } } - private void setMenu(final Menu menu) { - final AsyncTwitterWrapper twitter = getTwitterWrapper(); - final ParcelableUser user = mUser; - final Relationship relationship = mRelationship; - if (twitter == null || user == null) return; - final boolean isMyself = user.account_id == user.id; - final MenuItem mentionItem = menu.findItem(MENU_MENTION); - if (mentionItem != null) { - mentionItem.setTitle(getString(R.string.mention_user_name, getDisplayName(getActivity(), user))); - } - Utils.setMenuItemAvailability(menu, MENU_MENTION, !isMyself); -// final MenuItem followItem = menu.findItem(MENU_FOLLOW); -// followItem.setVisible(!isMyself); -// final boolean shouldShowFollowItem = !creatingFriendship && !destroyingFriendship && !isMyself -// && relationship != null; -// followItem.setEnabled(shouldShowFollowItem); -// if (shouldShowFollowItem) { -// followItem.setTitle(isFollowing ? R.string.unfollow : isProtected ? R.string.send_follow_request -// : R.string.follow); -// followItem.setIcon(isFollowing ? R.drawable.ic_action_cancel : R.drawable.ic_action_add); -// } else { -// followItem.setTitle(null); -// followItem.setIcon(null); -// } - if (!isMyself && relationship != null) { - setMenuItemAvailability(menu, MENU_SEND_DIRECT_MESSAGE, relationship.canSourceDMTarget()); - setMenuItemAvailability(menu, MENU_BLOCK, true); - setMenuItemAvailability(menu, MENU_MUTE_USER, true); - final MenuItem blockItem = menu.findItem(MENU_BLOCK); - if (blockItem != null) { - final boolean blocking = relationship.isSourceBlockingTarget(); - MenuUtils.setMenuInfo(blockItem, new TwidereMenuInfo(blocking)); - blockItem.setTitle(blocking ? R.string.unblock : R.string.block); - } - final MenuItem muteItem = menu.findItem(MENU_MUTE_USER); - if (muteItem != null) { - final boolean muting = relationship.isSourceMutingTarget(); - MenuUtils.setMenuInfo(muteItem, new TwidereMenuInfo(muting)); - muteItem.setTitle(muting ? R.string.unmute : R.string.mute); - } - final MenuItem filterItem = menu.findItem(MENU_ADD_TO_FILTER); - if (filterItem != null) { - final boolean filtering = Utils.isFilteringUser(getActivity(), user.id); - MenuUtils.setMenuInfo(filterItem, new TwidereMenuInfo(filtering)); - filterItem.setTitle(filtering ? R.string.remove_from_filter : R.string.add_to_filter); - } - } else { - setMenuItemAvailability(menu, MENU_SEND_DIRECT_MESSAGE, false); - setMenuItemAvailability(menu, MENU_BLOCK, false); - setMenuItemAvailability(menu, MENU_MUTE_USER, false); - setMenuItemAvailability(menu, MENU_REPORT_SPAM, false); - } - final Intent intent = new Intent(INTENT_ACTION_EXTENSION_OPEN_USER); - final Bundle extras = new Bundle(); - extras.putParcelable(EXTRA_USER, user); - intent.putExtras(extras); - menu.removeGroup(MENU_GROUP_USER_EXTENSION); - addIntentToMenu(getActivity(), menu, intent, MENU_GROUP_USER_EXTENSION); - } - private void setupBaseActionBar() { final FragmentActivity activity = getActivity(); if (!(activity instanceof LinkHandlerActivity)) return; @@ -1128,13 +1156,16 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener actionBar.setBackgroundDrawable(mActionBarBackground); } - private void setupUserColorActionBar(int color) { + private void setUserColor(int color) { if (mActionBarBackground == null) { setupBaseActionBar(); } mActionBarBackground.setColor(color); mTintedStatusContent.setColor(color, ThemeUtils.getThemeAlpha(getActivity())); mPagerIndicator.setStripColor(color); + mDescriptionView.setLinkTextColor(color); + mLocationView.setLinkTextColor(color); + mURLView.setLinkTextColor(color); } private void setupUserPages() { diff --git a/twidere/src/main/java/org/mariotaku/twidere/loader/support/ParcelableUserLoader.java b/twidere/src/main/java/org/mariotaku/twidere/loader/support/ParcelableUserLoader.java index bbebf3dd9..ead46058b 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/loader/support/ParcelableUserLoader.java +++ b/twidere/src/main/java/org/mariotaku/twidere/loader/support/ParcelableUserLoader.java @@ -92,7 +92,6 @@ public final class ParcelableUserLoader extends AsyncTaskLoader data) { - super(context, account_id, data); - mQuery = query; - mPage = page; - } + public UserSearchLoader(final Context context, final long account_id, final String query, final int page, + final List data) { + super(context, account_id, data); + mQuery = query; + mPage = page; + } - @Override - public List getUsers(final Twitter twitter) throws TwitterException { - if (twitter == null) return null; - return twitter.searchUsers(mQuery, mPage); - } + public String getQuery() { + return mQuery; + } - protected long getUserPosition(final User user, final int index) { - return (mPage + 1) * 20 + index; - } + @Override + public List getUsers(final Twitter twitter) throws TwitterException { + if (twitter == null) return null; + return twitter.searchUsers(mQuery, mPage); + } + + protected long getUserPosition(final User user, final int index) { + return (mPage + 1) * 20 + index; + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/menu/StatusShareProvider.java b/twidere/src/main/java/org/mariotaku/twidere/menu/StatusShareProvider.java index d16e8c627..c196bdfd1 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/menu/StatusShareProvider.java +++ b/twidere/src/main/java/org/mariotaku/twidere/menu/StatusShareProvider.java @@ -46,12 +46,12 @@ public class StatusShareProvider extends ActionProvider implements Constants { } @Override - public View onCreateActionView(MenuItem forItem) { + public View onCreateActionView() { return null; } @Override - public View onCreateActionView() { + public View onCreateActionView(MenuItem forItem) { return null; } @@ -60,10 +60,6 @@ public class StatusShareProvider extends ActionProvider implements Constants { return true; } - public void setStatus(ParcelableStatus status) { - mStatus = status; - } - @Override public void onPrepareSubMenu(SubMenu subMenu) { final Intent shareIntent = createStatusShareIntent(mContext, mStatus); @@ -72,4 +68,8 @@ public class StatusShareProvider extends ActionProvider implements Constants { addIntentToMenu(mContext, subMenu, shareIntent, MENU_GROUP_STATUS_SHARE); } } + + public void setStatus(ParcelableStatus status) { + mStatus = status; + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/model/ParcelableUser.java b/twidere/src/main/java/org/mariotaku/twidere/model/ParcelableUser.java index 8ba217287..8b3785d00 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/model/ParcelableUser.java +++ b/twidere/src/main/java/org/mariotaku/twidere/model/ParcelableUser.java @@ -109,44 +109,40 @@ public class ParcelableUser implements TwidereParcelable, Comparable - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.mariotaku.twidere.service; - -import android.annotation.TargetApi; -import android.content.SharedPreferences; -import android.content.SharedPreferences.OnSharedPreferenceChangeListener; -import android.content.res.Resources; -import android.os.Build; -import android.service.dreams.DreamService; -import android.view.View; -import android.view.View.OnSystemUiVisibilityChangeListener; - -import org.mariotaku.twidere.Constants; -import org.mariotaku.twidere.R; -import org.mariotaku.twidere.view.NyanDaydreamView; - -@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) -public class NyanDaydreamService extends DreamService implements Constants, OnSharedPreferenceChangeListener, - OnSystemUiVisibilityChangeListener { - - private NyanDaydreamView mNyanDaydreamView; - private SharedPreferences mPreferences; - - @Override - public void onAttachedToWindow() { - super.onAttachedToWindow(); - setContentView(R.layout.nyan_daydream); - mNyanDaydreamView.setOnSystemUiVisibilityChangeListener(this); - updateView(); - } - - @Override - public void onContentChanged() { - super.onContentChanged(); - mNyanDaydreamView = (NyanDaydreamView) findViewById(R.id.nyan); - } - - @Override - public void onCreate() { - super.onCreate(); - mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, MODE_PRIVATE); - mPreferences.registerOnSharedPreferenceChangeListener(this); - setInteractive(false); - setFullscreen(true); - setScreenBright(false); - } - - @Override - public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) { - if (KEY_LIVE_WALLPAPER_SCALE.equals(key)) { - updateView(); - } - } - - @Override - public void onSystemUiVisibilityChange(final int visibility) { - if ((visibility & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0) { - finish(); - } - } - - private void updateView() { - if (mPreferences == null) return; - final Resources res = getResources(); - final int def = res.getInteger(R.integer.default_live_wallpaper_scale); - mNyanDaydreamView.setScale(mPreferences.getInt(KEY_LIVE_WALLPAPER_SCALE, def)); - } - -} diff --git a/twidere/src/main/java/org/mariotaku/twidere/service/NyanWallpaperService.java b/twidere/src/main/java/org/mariotaku/twidere/service/NyanWallpaperService.java deleted file mode 100644 index f2d234082..000000000 --- a/twidere/src/main/java/org/mariotaku/twidere/service/NyanWallpaperService.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Twidere - Twitter client for Android - * - * Copyright (C) 2012-2014 Mariotaku Lee - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.mariotaku.twidere.service; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.SharedPreferences; -import android.content.SharedPreferences.OnSharedPreferenceChangeListener; -import android.content.res.Resources; -import android.os.PowerManager; -import android.service.wallpaper.WallpaperService; -import android.view.SurfaceHolder; - -import org.mariotaku.twidere.Constants; -import org.mariotaku.twidere.R; -import org.mariotaku.twidere.util.NyanSurfaceHelper; - -public class NyanWallpaperService extends WallpaperService implements Constants { - - @Override - public Engine onCreateEngine() { - return new NyanWallpaperEngine(); - } - - private Context getContext() { - return this; - } - - private final class NyanWallpaperEngine extends Engine implements OnSharedPreferenceChangeListener { - - private SharedPreferences mPreferences; - private final BroadcastReceiver mScreenReceiver = new BroadcastReceiver() { - - @Override - public void onReceive(final Context context, final Intent intent) { - final String action = intent.getAction(); - if (Intent.ACTION_SCREEN_ON.equals(action)) { - if (mHelper == null) return; - mHelper.start(); - } else if (Intent.ACTION_SCREEN_OFF.equals(action)) { - if (mHelper == null) return; - mHelper.stop(); - } - - } - }; - - private NyanSurfaceHelper mHelper; - - @Override - public void onCreate(final SurfaceHolder surfaceHolder) { - super.onCreate(surfaceHolder); - mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, MODE_PRIVATE); - mPreferences.registerOnSharedPreferenceChangeListener(this); - mHelper = new NyanSurfaceHelper(getContext()); - final IntentFilter filter = new IntentFilter(); - filter.addAction(Intent.ACTION_SCREEN_ON); - filter.addAction(Intent.ACTION_SCREEN_OFF); - registerReceiver(mScreenReceiver, filter); - } - - @Override - public void onDestroy() { - mPreferences.unregisterOnSharedPreferenceChangeListener(this); - unregisterReceiver(mScreenReceiver); - super.onDestroy(); - } - - @Override - public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) { - if (KEY_LIVE_WALLPAPER_SCALE.equals(key)) { - updateSurface(); - } - } - - @Override - public void onSurfaceCreated(final SurfaceHolder holder) { - super.onSurfaceCreated(holder); - holder.addCallback(mHelper); - updateSurface(); - updateHelperState(); - } - - @Override - public void onSurfaceDestroyed(final SurfaceHolder holder) { - mHelper.stop(); - holder.removeCallback(mHelper); - super.onSurfaceDestroyed(holder); - } - - @Override - public void onVisibilityChanged(final boolean visible) { - super.onVisibilityChanged(visible); - if (mHelper != null) { - mHelper.setSkipDrawing(!visible); - } - } - - private void updateHelperState() { - final PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE); - if (pm.isScreenOn()) { - mHelper.start(); - } else { - mHelper.stop(); - } - } - - private void updateSurface() { - if (mPreferences == null) return; - final Resources res = getResources(); - final int def = res.getInteger(R.integer.default_live_wallpaper_scale); - mHelper.setScale(mPreferences.getInt(KEY_LIVE_WALLPAPER_SCALE, def)); - updateHelperState(); - } - - } - -} diff --git a/twidere/src/main/java/org/mariotaku/twidere/text/TwidereURLSpan.java b/twidere/src/main/java/org/mariotaku/twidere/text/TwidereURLSpan.java index 5cc4a88b3..81d84b9ed 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/text/TwidereURLSpan.java +++ b/twidere/src/main/java/org/mariotaku/twidere/text/TwidereURLSpan.java @@ -19,6 +19,7 @@ package org.mariotaku.twidere.text; +import android.support.annotation.NonNull; import android.text.TextPaint; import android.text.style.URLSpan; import android.view.View; @@ -28,45 +29,43 @@ import org.mariotaku.twidere.util.TwidereLinkify.OnLinkClickListener; public class TwidereURLSpan extends URLSpan implements Constants { - private final int type, highlightStyle, highlightColor; - private final long accountId; - private final String url, orig; - private final boolean sensitive; - private final OnLinkClickListener listener; + private final int type, highlightStyle; + private final long accountId; + private final String url, orig; + private final boolean sensitive; + private final OnLinkClickListener listener; - public TwidereURLSpan(final String url, final long accountId, final int type, final boolean sensitive, - final OnLinkClickListener listener, final int highlightStyle, final int highlightColor) { - this(url, null, accountId, type, sensitive, listener, highlightStyle, highlightColor); - } + public TwidereURLSpan(final String url, final long accountId, final int type, final boolean sensitive, + final OnLinkClickListener listener, final int highlightStyle) { + this(url, null, accountId, type, sensitive, listener, highlightStyle); + } - public TwidereURLSpan(final String url, final String orig, final long accountId, final int type, - final boolean sensitive, final OnLinkClickListener listener, final int highlightStyle, - final int highlightColor) { - super(url); - this.url = url; - this.orig = orig; - this.accountId = accountId; - this.type = type; - this.sensitive = sensitive; - this.listener = listener; - this.highlightStyle = highlightStyle; - this.highlightColor = highlightColor; - } + public TwidereURLSpan(final String url, final String orig, final long accountId, final int type, + final boolean sensitive, final OnLinkClickListener listener, final int highlightStyle) { + super(url); + this.url = url; + this.orig = orig; + this.accountId = accountId; + this.type = type; + this.sensitive = sensitive; + this.listener = listener; + this.highlightStyle = highlightStyle; + } - @Override - public void onClick(final View widget) { - if (listener != null) { - listener.onLinkClick(url, orig, accountId, type, sensitive); - } - } + @Override + public void onClick(@NonNull final View widget) { + if (listener != null) { + listener.onLinkClick(url, orig, accountId, type, sensitive); + } + } - @Override - public void updateDrawState(final TextPaint ds) { - if ((highlightStyle & VALUE_LINK_HIGHLIGHT_OPTION_CODE_UNDERLINE) != 0) { - ds.setUnderlineText(true); - } - if ((highlightStyle & VALUE_LINK_HIGHLIGHT_OPTION_CODE_HIGHLIGHT) != 0) { - ds.setColor(highlightColor != 0 ? highlightColor : ds.linkColor); - } - } + @Override + public void updateDrawState(@NonNull final TextPaint ds) { + if ((highlightStyle & VALUE_LINK_HIGHLIGHT_OPTION_CODE_UNDERLINE) != 0) { + ds.setUnderlineText(true); + } + if ((highlightStyle & VALUE_LINK_HIGHLIGHT_OPTION_CODE_HIGHLIGHT) != 0) { + ds.setColor(ds.linkColor); + } + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/AsyncTwitterWrapper.java b/twidere/src/main/java/org/mariotaku/twidere/util/AsyncTwitterWrapper.java index bb07b7fc5..643d73b3a 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/AsyncTwitterWrapper.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/AsyncTwitterWrapper.java @@ -96,7 +96,7 @@ import static org.mariotaku.twidere.util.Utils.getActivatedAccountIds; import static org.mariotaku.twidere.util.Utils.getDefaultAccountId; import static org.mariotaku.twidere.util.Utils.getNewestMessageIdsFromDatabase; import static org.mariotaku.twidere.util.Utils.getNewestStatusIdsFromDatabase; -import static org.mariotaku.twidere.util.Utils.getStatusIdsInDatabase; +import static org.mariotaku.twidere.util.Utils.getStatusCountInDatabase; import static org.mariotaku.twidere.util.Utils.getTwitterInstance; import static org.mariotaku.twidere.util.Utils.getUserName; import static org.mariotaku.twidere.util.Utils.truncateMessages; @@ -149,6 +149,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper { public boolean isDestroyingFavorite(final long accountId, final long statusId) { return mDestroyingFavoriteIds.has(accountId, statusId); } + public boolean isCreatingRetweet(final long accountId, final long statusId) { return mCreatingRetweetIds.has(accountId, statusId); } @@ -2297,8 +2298,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper { if (statuses == null || statuses.isEmpty()) { continue; } - final ArrayList ids_in_db = getStatusIdsInDatabase(mContext, uri, accountId); - final boolean noItemsBefore = ids_in_db.isEmpty(); + final boolean noItemsBefore = getStatusCountInDatabase(mContext, uri, accountId) <= 0; final ContentValues[] values = new ContentValues[statuses.size()]; final long[] statusIds = new long[statuses.size()]; for (int i = 0, j = statuses.size(); i < j; i++) { diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/NyanSurfaceHelper.java b/twidere/src/main/java/org/mariotaku/twidere/util/NyanSurfaceHelper.java deleted file mode 100644 index 94874394f..000000000 --- a/twidere/src/main/java/org/mariotaku/twidere/util/NyanSurfaceHelper.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Twidere - Twitter client for Android - * - * Copyright (C) 2012-2014 Mariotaku Lee - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.mariotaku.twidere.util; - -import android.content.Context; -import android.graphics.Canvas; -import android.view.SurfaceHolder; - -public final class NyanSurfaceHelper implements SurfaceHolder.Callback { - - private SurfaceHolder mHolder; - private DrawingThread mThread; - private final NyanDrawingHelper mNyanDrawingHelper; - - public NyanSurfaceHelper(final Context context) { - mNyanDrawingHelper = new NyanDrawingHelper(context); - } - - public SurfaceHolder getHolder() { - return mHolder; - } - - public void setScale(final float scale) { - mNyanDrawingHelper.setScale(scale); - } - - public void setSkipDrawing(final boolean skipDrawing) { - if (mThread != null) { - mThread.setSkipDrawing(skipDrawing); - } - } - - public void start() { - if (mThread != null) return; - mThread = new DrawingThread(this, mNyanDrawingHelper); - mThread.start(); - } - - public void stop() { - if (mThread != null) { - mThread.cancel(); - } - mThread = null; - } - - @Override - public void surfaceChanged(final SurfaceHolder holder, final int format, final int width, final int height) { - mNyanDrawingHelper.dispatchSizeChanged(width, height); - } - - @Override - public void surfaceCreated(final SurfaceHolder holder) { - mHolder = holder; - start(); - } - - @Override - public void surfaceDestroyed(final SurfaceHolder holder) { - stop(); - mHolder = null; - } - - private static class DrawingThread extends Thread { - - private final NyanSurfaceHelper mSurfaceHelper; - private final NyanDrawingHelper mDrawingHelper; - private boolean mCancelled; - private boolean mSkipDrawing; - - DrawingThread(final NyanSurfaceHelper surfaceHelper, final NyanDrawingHelper drawingHelper) { - mSurfaceHelper = surfaceHelper; - mDrawingHelper = drawingHelper; - } - - public void cancel() { - mCancelled = true; - } - - @Override - public void run() { - while (!mCancelled) { - final long startTime = System.currentTimeMillis(); - drawFrame(); - final long endTime = System.currentTimeMillis(); - try { - Thread.sleep(Math.max(0, 66 - (endTime - startTime))); - } catch (final InterruptedException e) { - - } - } - } - - public void setSkipDrawing(final boolean skipDrawing) { - mSkipDrawing = skipDrawing; - } - - private void drawFrame() { - final SurfaceHolder holder = mSurfaceHelper.getHolder(); - if (mSkipDrawing || holder == null || holder.isCreating()) return; - final Canvas c = holder.lockCanvas(); - if (c == null) return; - if (mDrawingHelper != null) { - mDrawingHelper.dispatchDraw(c); - } - holder.unlockCanvasAndPost(c); - } - - } -} diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/StringUtils.java b/twidere/src/main/java/org/mariotaku/twidere/util/StringUtils.java new file mode 100644 index 000000000..ebbf2cfee --- /dev/null +++ b/twidere/src/main/java/org/mariotaku/twidere/util/StringUtils.java @@ -0,0 +1,43 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2014 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.util; + +import android.support.annotation.NonNull; + +/** + * Created by mariotaku on 14/12/23. + */ +public class StringUtils { + public static boolean regionMatchesIgnoreCase(@NonNull final String string, final int thisStart, + @NonNull final String match, final int start, + final int length) { + return string.substring(thisStart, thisStart + length).equalsIgnoreCase(match.substring(start, start + length)); + } + + + public static boolean startsWithIgnoreCase(@NonNull String string, @NonNull String prefix) { + return startsWithIgnoreCase(string, prefix, 0); + } + + public static boolean startsWithIgnoreCase(@NonNull String string, @NonNull String prefix, + int start) { + return regionMatchesIgnoreCase(string, start, prefix, 0, prefix.length()); + } +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java b/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java index 231f6d2ca..7a01763b2 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java @@ -23,6 +23,7 @@ import android.app.ActionBar; import android.app.Activity; import android.content.Context; import android.content.Intent; +import android.content.res.ColorStateList; import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Color; @@ -34,6 +35,7 @@ import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.os.Build; import android.support.annotation.NonNull; +import android.support.v4.graphics.drawable.DrawableCompat; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.TextPaint; @@ -44,18 +46,21 @@ import android.view.ContextThemeWrapper; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.widget.CompoundButton; +import android.widget.ProgressBar; +import android.widget.Switch; import android.widget.TextView; import org.mariotaku.menucomponent.internal.Utils; import org.mariotaku.menucomponent.widget.MenuBar.MenuBarMenuInfo; -import org.mariotaku.refreshnow.widget.RefreshNowConfig; -import org.mariotaku.refreshnow.widget.RefreshNowProgressIndicator.IndicatorConfig; import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.R; import org.mariotaku.twidere.activity.iface.IThemedActivity; import org.mariotaku.twidere.graphic.ActionBarColorDrawable; import org.mariotaku.twidere.text.ParagraphSpacingSpan; +import org.mariotaku.twidere.util.accessor.ViewAccessor; import org.mariotaku.twidere.util.menu.TwidereMenuInfo; +import org.mariotaku.twidere.view.iface.IThemedView; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; @@ -182,42 +187,58 @@ public class ThemeUtils implements Constants { } } - public static IndicatorConfig buildRefreshIndicatorConfig(final Context context) { - final IndicatorConfig.Builder builder = new IndicatorConfig.Builder(context); - final Resources res = context.getResources(); - final float width = 3 * res.getDisplayMetrics().density; - final int themeColor = getUserAccentColor(context); - builder.progressColor(themeColor); - builder.indeterminateColor(themeColor); - builder.progressStrokeWidth(width); - builder.indeterminateStrokeWidth(width); - return builder.build(); + public static View createView(final String name, final Context context, + final AttributeSet attrs) { + return createView(name, context, attrs, 0); } - public static RefreshNowConfig buildRefreshNowConfig(final Context context) { - final RefreshNowConfig.Builder builder = new RefreshNowConfig.Builder(context); - builder.minPullDivisor(2); - builder.extraPullDivisor(1); - builder.maxOverScrollDistance(72); - return builder.build(); - } - - public static View createView(final String name, final Context context, final AttributeSet attrs) { + public static View createView(final String name, final Context context, + final AttributeSet attrs, final int tintColor) { + View view = null; try { - return newViewInstance(name, context, attrs); + view = newViewInstance(name, context, attrs); } catch (final Exception e) { // In this case we want to let the base class take a crack // at it. } for (final String prefix : sClassPrefixList) { try { - return newViewInstance(prefix + name, context, attrs); + view = newViewInstance(prefix + name, context, attrs); } catch (final Exception e) { // In this case we want to let the base class take a crack // at it. } } - return null; + if (view != null) { + applyColorTintForView(view, tintColor); + } + return view; + } + + private static void applyColorTintForView(View view, int tintColor) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; + if (view instanceof IThemedView) { + final ColorStateList tintList = ColorStateList.valueOf(tintColor); + ((IThemedView) view).setThemeTintColor(tintList); + } else if (view instanceof ProgressBar) { + final ColorStateList tintList = ColorStateList.valueOf(tintColor); + final ProgressBar progressBar = (ProgressBar) view; + ViewAccessor.setProgressTintList(progressBar, tintList); + ViewAccessor.setProgressBackgroundTintList(progressBar, tintList); + ViewAccessor.setIndeterminateTintList(progressBar, tintList); + } else if (view instanceof Switch) { + final ColorStateList tintList = ColorStateList.valueOf(tintColor); + final Switch switchView = (Switch) view; + DrawableCompat.setTintList(switchView.getThumbDrawable(), tintList); + DrawableCompat.setTintList(switchView.getTrackDrawable(), tintList); + } else if (view instanceof CompoundButton) { + final ColorStateList tintList = ColorStateList.valueOf(tintColor); + final CompoundButton compoundButton = (CompoundButton) view; + ViewAccessor.setButtonTintList(compoundButton, tintList); + } else if (view instanceof TextView) { + final TextView textView = (TextView) view; + textView.setLinkTextColor(tintColor); + } } @@ -326,6 +347,14 @@ public class ThemeUtils implements Constants { return color; } + public static int getCardBackgroundColor(final Context context) { + final TypedArray a = context.obtainStyledAttributes(new int[]{R.attr.cardItemBackgroundColor}); + final int color = a.getColor(0, Color.TRANSPARENT); + a.recycle(); + final int themeAlpha = getThemeAlpha(context); + return themeAlpha << 24 | (0x00FFFFFF & color); + } + public static int getComposeThemeResource(final Context context) { return getComposeThemeResource(getThemeNameOption(context), getDarkActionBarOption(context)); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/TwidereLinkify.java b/twidere/src/main/java/org/mariotaku/twidere/util/TwidereLinkify.java index fe6f1b52e..83cb6fdca 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/TwidereLinkify.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/TwidereLinkify.java @@ -19,11 +19,6 @@ package org.mariotaku.twidere.util; -import static org.mariotaku.twidere.util.MediaPreviewUtils.AVAILABLE_IMAGE_SHUFFIX; -import static org.mariotaku.twidere.util.Utils.matcherEnd; -import static org.mariotaku.twidere.util.Utils.matcherGroup; -import static org.mariotaku.twidere.util.Utils.matcherStart; - import android.text.Spannable; import android.text.SpannableString; import android.text.Spanned; @@ -43,6 +38,11 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import static org.mariotaku.twidere.util.MediaPreviewUtils.AVAILABLE_IMAGE_SHUFFIX; +import static org.mariotaku.twidere.util.Utils.matcherEnd; +import static org.mariotaku.twidere.util.Utils.matcherGroup; +import static org.mariotaku.twidere.util.Utils.matcherStart; + /** * Linkify take a piece of text and a regular expression and turns all of the * regex matches in the text into clickable links. This is particularly useful @@ -59,275 +59,252 @@ import java.util.regex.Pattern; public final class TwidereLinkify implements Constants { - public static final int LINK_TYPE_MENTION = 1; - public static final int LINK_TYPE_HASHTAG = 2; - public static final int LINK_TYPE_LINK = 4; - public static final int LINK_TYPE_LIST = 6; - public static final int LINK_TYPE_CASHTAG = 7; - public static final int LINK_TYPE_USER_ID = 8; - public static final int LINK_TYPE_STATUS = 9; + public static final int LINK_TYPE_MENTION = 1; + public static final int LINK_TYPE_HASHTAG = 2; + public static final int LINK_TYPE_LINK = 4; + public static final int LINK_TYPE_LIST = 6; + public static final int LINK_TYPE_CASHTAG = 7; + public static final int LINK_TYPE_USER_ID = 8; + public static final int LINK_TYPE_STATUS = 9; - public static final int[] ALL_LINK_TYPES = new int[] { LINK_TYPE_LINK, LINK_TYPE_MENTION, LINK_TYPE_HASHTAG, - LINK_TYPE_STATUS, LINK_TYPE_CASHTAG }; + public static final int[] ALL_LINK_TYPES = new int[]{LINK_TYPE_LINK, LINK_TYPE_MENTION, LINK_TYPE_HASHTAG, + LINK_TYPE_STATUS, LINK_TYPE_CASHTAG}; - public static final String AVAILABLE_URL_SCHEME_PREFIX = "(https?:\\/\\/)?"; + public static final String AVAILABLE_URL_SCHEME_PREFIX = "(https?:\\/\\/)?"; - public static final String TWITTER_PROFILE_IMAGES_AVAILABLE_SIZES = "(bigger|normal|mini|reasonably_small)"; - private static final String STRING_PATTERN_TWITTER_PROFILE_IMAGES_NO_SCHEME = "(twimg[\\d\\w\\-]+\\.akamaihd\\.net|[\\w\\d]+\\.twimg\\.com)\\/profile_images\\/([\\d\\w\\-_]+)\\/([\\d\\w\\-_]+)_" - + TWITTER_PROFILE_IMAGES_AVAILABLE_SIZES + "(\\.?" + AVAILABLE_IMAGE_SHUFFIX + ")?"; - private static final String STRING_PATTERN_TWITTER_PROFILE_IMAGES = AVAILABLE_URL_SCHEME_PREFIX - + STRING_PATTERN_TWITTER_PROFILE_IMAGES_NO_SCHEME; + public static final String TWITTER_PROFILE_IMAGES_AVAILABLE_SIZES = "(bigger|normal|mini|reasonably_small)"; + private static final String STRING_PATTERN_TWITTER_PROFILE_IMAGES_NO_SCHEME = "(twimg[\\d\\w\\-]+\\.akamaihd\\.net|[\\w\\d]+\\.twimg\\.com)\\/profile_images\\/([\\d\\w\\-_]+)\\/([\\d\\w\\-_]+)_" + + TWITTER_PROFILE_IMAGES_AVAILABLE_SIZES + "(\\.?" + AVAILABLE_IMAGE_SHUFFIX + ")?"; + private static final String STRING_PATTERN_TWITTER_PROFILE_IMAGES = AVAILABLE_URL_SCHEME_PREFIX + + STRING_PATTERN_TWITTER_PROFILE_IMAGES_NO_SCHEME; - public static final Pattern PATTERN_TWITTER_PROFILE_IMAGES = Pattern.compile(STRING_PATTERN_TWITTER_PROFILE_IMAGES, - Pattern.CASE_INSENSITIVE); + public static final Pattern PATTERN_TWITTER_PROFILE_IMAGES = Pattern.compile(STRING_PATTERN_TWITTER_PROFILE_IMAGES, + Pattern.CASE_INSENSITIVE); - private static final String STRING_PATTERN_TWITTER_STATUS_NO_SCHEME = "((mobile|www)\\.)?twitter\\.com\\/(?:#!\\/)?(\\w+)\\/status(es)?\\/(\\d+)(\\/photo\\/\\d)?\\/?"; - private static final String STRING_PATTERN_TWITTER_STATUS = AVAILABLE_URL_SCHEME_PREFIX - + STRING_PATTERN_TWITTER_STATUS_NO_SCHEME; - public static final Pattern PATTERN_TWITTER_STATUS = Pattern.compile(STRING_PATTERN_TWITTER_STATUS, - Pattern.CASE_INSENSITIVE); - public static final int GROUP_ID_TWITTER_STATUS_SCREEN_NAME = 4; - public static final int GROUP_ID_TWITTER_STATUS_STATUS_ID = 6; + private static final String STRING_PATTERN_TWITTER_STATUS_NO_SCHEME = "((mobile|www)\\.)?twitter\\.com\\/(?:#!\\/)?(\\w+)\\/status(es)?\\/(\\d+)(\\/photo\\/\\d)?\\/?"; + private static final String STRING_PATTERN_TWITTER_STATUS = AVAILABLE_URL_SCHEME_PREFIX + + STRING_PATTERN_TWITTER_STATUS_NO_SCHEME; + public static final Pattern PATTERN_TWITTER_STATUS = Pattern.compile(STRING_PATTERN_TWITTER_STATUS, + Pattern.CASE_INSENSITIVE); + public static final int GROUP_ID_TWITTER_STATUS_SCREEN_NAME = 4; + public static final int GROUP_ID_TWITTER_STATUS_STATUS_ID = 6; - private static final String STRING_PATTERN_TWITTER_LIST_NO_SCHEME = "((mobile|www)\\.)?twitter\\.com\\/(?:#!\\/)?(\\w+)\\/lists\\/(.+)\\/?"; - private static final String STRING_PATTERN_TWITTER_LIST = AVAILABLE_URL_SCHEME_PREFIX - + STRING_PATTERN_TWITTER_LIST_NO_SCHEME; - public static final Pattern PATTERN_TWITTER_LIST = Pattern.compile(STRING_PATTERN_TWITTER_LIST, - Pattern.CASE_INSENSITIVE); + private static final String STRING_PATTERN_TWITTER_LIST_NO_SCHEME = "((mobile|www)\\.)?twitter\\.com\\/(?:#!\\/)?(\\w+)\\/lists\\/(.+)\\/?"; + private static final String STRING_PATTERN_TWITTER_LIST = AVAILABLE_URL_SCHEME_PREFIX + + STRING_PATTERN_TWITTER_LIST_NO_SCHEME; + public static final Pattern PATTERN_TWITTER_LIST = Pattern.compile(STRING_PATTERN_TWITTER_LIST, + Pattern.CASE_INSENSITIVE); - public static final int GROUP_ID_TWITTER_LIST_SCREEN_NAME = 4; - public static final int GROUP_ID_TWITTER_LIST_LIST_NAME = 5; + public static final int GROUP_ID_TWITTER_LIST_SCREEN_NAME = 4; + public static final int GROUP_ID_TWITTER_LIST_LIST_NAME = 5; - private final OnLinkClickListener mOnLinkClickListener; - private final Extractor mExtractor = new Extractor(); - private int mHighlightOption, mHighlightColor; + private final OnLinkClickListener mOnLinkClickListener; + private final Extractor mExtractor = new Extractor(); + private int mHighlightOption; - public TwidereLinkify(final OnLinkClickListener listener) { - this(listener, VALUE_LINK_HIGHLIGHT_OPTION_CODE_BOTH, 0); - } + public TwidereLinkify(final OnLinkClickListener listener) { + this(listener, VALUE_LINK_HIGHLIGHT_OPTION_CODE_BOTH); + } - public TwidereLinkify(final OnLinkClickListener listener, final int highlightOption, final int highlightColor) { - mOnLinkClickListener = listener; - setHighlightOption(highlightOption); - setLinkTextColor(highlightColor); - } + public TwidereLinkify(final OnLinkClickListener listener, final int highlightOption) { + mOnLinkClickListener = listener; + setHighlightOption(highlightOption); + } - public final void applyAllLinks(final TextView view, final long account_id, final boolean sensitive) { - applyAllLinks(view, account_id, sensitive, mOnLinkClickListener, mHighlightOption, mHighlightColor); - } + public final void applyAllLinks(final TextView view, final long account_id, final boolean sensitive) { + applyAllLinks(view, account_id, sensitive, mOnLinkClickListener, mHighlightOption); + } - public final void applyAllLinks(final TextView view, final long account_id, final boolean sensitive, - final OnLinkClickListener listener, final int highlightOption, final int highlightColor) { - view.setMovementMethod(LinkMovementMethod.getInstance()); - final SpannableString string = SpannableString.valueOf(view.getText()); - for (final int type : ALL_LINK_TYPES) { - addLinks(string, account_id, type, sensitive, listener, highlightOption, highlightColor); - } - view.setText(string); - addLinkMovementMethod(view); - } + public final void applyAllLinks(final TextView view, final long account_id, final boolean sensitive, + final OnLinkClickListener listener, final int highlightOption) { + view.setMovementMethod(LinkMovementMethod.getInstance()); + final SpannableString string = SpannableString.valueOf(view.getText()); + for (final int type : ALL_LINK_TYPES) { + addLinks(string, account_id, type, sensitive, listener, highlightOption); + } + view.setText(string); + addLinkMovementMethod(view); + } - public final void applyUserProfileLink(final TextView view, final long account_id, final long user_id, - final String screen_name) { - applyUserProfileLink(view, account_id, user_id, screen_name, mOnLinkClickListener, mHighlightOption, - mHighlightColor); - } + public final void applyUserProfileLink(final TextView view, final long accountId, final long userId, + final String screenName) { + applyUserProfileLink(view, accountId, userId, screenName, mOnLinkClickListener); + } - public final void applyUserProfileLink(final TextView view, final long account_id, final long user_id, - final String screen_name, final OnLinkClickListener listener, final int highlightOption, - final int highlightColor) { - view.setMovementMethod(LinkMovementMethod.getInstance()); - final SpannableString string = SpannableString.valueOf(view.getText()); - final URLSpan[] spans = string.getSpans(0, string.length(), URLSpan.class); - for (final URLSpan span : spans) { - string.removeSpan(span); - } - if (user_id > 0) { - applyLink(String.valueOf(user_id), 0, string.length(), string, account_id, LINK_TYPE_USER_ID, false, - listener, highlightOption, highlightColor); - } else if (screen_name != null) { - applyLink(screen_name, 0, string.length(), string, account_id, LINK_TYPE_MENTION, false, listener, - highlightOption, highlightColor); - } - view.setText(string); - addLinkMovementMethod(view); - } + public final void applyUserProfileLink(final TextView view, final long accountId, final long userId, + final String screenName, final OnLinkClickListener listener) { + view.setMovementMethod(LinkMovementMethod.getInstance()); + final SpannableString string = SpannableString.valueOf(view.getText()); + final URLSpan[] spans = string.getSpans(0, string.length(), URLSpan.class); + for (final URLSpan span : spans) { + string.removeSpan(span); + } + if (userId > 0) { + applyLink(String.valueOf(userId), 0, string.length(), string, accountId, LINK_TYPE_USER_ID, false, + listener); + } else if (screenName != null) { + applyLink(screenName, 0, string.length(), string, accountId, LINK_TYPE_MENTION, false, listener); + } + view.setText(string); + addLinkMovementMethod(view); + } - public final void applyUserProfileLinkNoHighlight(final TextView view, final long account_id, final long user_id, - final String screen_name) { - applyUserProfileLink(view, account_id, user_id, screen_name, mOnLinkClickListener, - VALUE_LINK_HIGHLIGHT_OPTION_CODE_NONE, mHighlightColor); - } + public void setHighlightOption(final int style) { + mHighlightOption = style; + } - public void setHighlightOption(final int style) { - mHighlightOption = style; - } + private boolean addCashtagLinks(final Spannable spannable, final long account_id, + final OnLinkClickListener listener, final int highlightOption) { + boolean hasMatches = false; + for (final Entity entity : mExtractor.extractCashtagsWithIndices(spannable.toString())) { + final int start = entity.getStart(); + final int end = entity.getEnd(); + applyLink(entity.getValue(), start, end, spannable, account_id, LINK_TYPE_CASHTAG, false, listener); + hasMatches = true; + } + return hasMatches; + } - public void setLinkTextColor(final int color) { - mHighlightColor = color; - } + private boolean addHashtagLinks(final Spannable spannable, final long account_id, + final OnLinkClickListener listener, final int highlightOption) { + boolean hasMatches = false; + for (final Entity entity : mExtractor.extractHashtagsWithIndices(spannable.toString())) { + final int start = entity.getStart(); + final int end = entity.getEnd(); + applyLink(entity.getValue(), start, end, spannable, account_id, LINK_TYPE_HASHTAG, false, listener); + hasMatches = true; + } + return hasMatches; + } - private final boolean addCashtagLinks(final Spannable spannable, final long account_id, - final OnLinkClickListener listener, final int highlightOption, final int highlightColor) { - boolean hasMatches = false; - for (final Entity entity : mExtractor.extractCashtagsWithIndices(spannable.toString())) { - final int start = entity.getStart(); - final int end = entity.getEnd(); - applyLink(entity.getValue(), start, end, spannable, account_id, LINK_TYPE_CASHTAG, false, listener, - highlightOption, highlightColor); - hasMatches = true; - } - return hasMatches; - } + /** + * Applies a regex to the text of a TextView turning the matches into links. + * If links are found then UrlSpans are applied to the link text match + * areas, and the movement method for the text is changed to + * LinkMovementMethod. + * + * @param highlightOption + * @param listener + */ + private void addLinks(final SpannableString string, final long accountId, final int type, + final boolean sensitive, final OnLinkClickListener listener, final int highlightOption) { + switch (type) { + case LINK_TYPE_MENTION: { + addMentionOrListLinks(string, accountId, listener); + break; + } + case LINK_TYPE_HASHTAG: { + addHashtagLinks(string, accountId, listener, highlightOption); + break; + } + case LINK_TYPE_LINK: { + final URLSpan[] spans = string.getSpans(0, string.length(), URLSpan.class); + for (final URLSpan span : spans) { + final int start = string.getSpanStart(span); + final int end = string.getSpanEnd(span); + if (start < 0 || end > string.length() || start > end) { + continue; + } + string.removeSpan(span); + applyLink(span.getURL(), start, end, string, accountId, LINK_TYPE_LINK, sensitive, listener); + } + final List urls = mExtractor.extractURLsWithIndices(ParseUtils.parseString(string)); + for (final Extractor.Entity entity : urls) { + final int start = entity.getStart(), end = entity.getEnd(); + if (entity.getType() != Extractor.Entity.Type.URL + || string.getSpans(start, end, URLSpan.class).length > 0) { + continue; + } + applyLink(entity.getValue(), start, end, string, accountId, LINK_TYPE_LINK, sensitive, listener); + } + break; + } + case LINK_TYPE_STATUS: { + final URLSpan[] spans = string.getSpans(0, string.length(), URLSpan.class); + for (final URLSpan span : spans) { + final Matcher matcher = PATTERN_TWITTER_STATUS.matcher(span.getURL()); + if (matcher.matches()) { + final int start = string.getSpanStart(span); + final int end = string.getSpanEnd(span); + final String url = matcherGroup(matcher, GROUP_ID_TWITTER_STATUS_STATUS_ID); + string.removeSpan(span); + applyLink(url, start, end, string, accountId, LINK_TYPE_STATUS, sensitive, listener); + } + } + break; + } + case LINK_TYPE_CASHTAG: { + addCashtagLinks(string, accountId, listener, highlightOption); + break; + } + default: { + return; + } - private final boolean addHashtagLinks(final Spannable spannable, final long account_id, - final OnLinkClickListener listener, final int highlightOption, final int highlightColor) { - boolean hasMatches = false; - for (final Entity entity : mExtractor.extractHashtagsWithIndices(spannable.toString())) { - final int start = entity.getStart(); - final int end = entity.getEnd(); - applyLink(entity.getValue(), start, end, spannable, account_id, LINK_TYPE_HASHTAG, false, listener, - highlightOption, highlightColor); - hasMatches = true; - } - return hasMatches; - } + } + } - /** - * Applies a regex to the text of a TextView turning the matches into links. - * If links are found then UrlSpans are applied to the link text match - * areas, and the movement method for the text is changed to - * LinkMovementMethod. - * - * @param highlightColor - * @param highlightOption - * @param listener - * - */ - private final void addLinks(final SpannableString string, final long accountId, final int type, - final boolean sensitive, final OnLinkClickListener listener, final int highlightOption, - final int highlightColor) { - switch (type) { - case LINK_TYPE_MENTION: { - addMentionOrListLinks(string, accountId, listener, highlightOption, highlightColor); - break; - } - case LINK_TYPE_HASHTAG: { - addHashtagLinks(string, accountId, listener, highlightOption, highlightColor); - break; - } - case LINK_TYPE_LINK: { - final URLSpan[] spans = string.getSpans(0, string.length(), URLSpan.class); - for (final URLSpan span : spans) { - final int start = string.getSpanStart(span); - final int end = string.getSpanEnd(span); - if (start < 0 || end > string.length() || start > end) { - continue; - } - string.removeSpan(span); - applyLink(span.getURL(), start, end, string, accountId, LINK_TYPE_LINK, sensitive, listener, - highlightOption, highlightColor); - } - final List urls = mExtractor.extractURLsWithIndices(ParseUtils.parseString(string)); - for (final Extractor.Entity entity : urls) { - final int start = entity.getStart(), end = entity.getEnd(); - if (entity.getType() != Extractor.Entity.Type.URL - || string.getSpans(start, end, URLSpan.class).length > 0) { - continue; - } - applyLink(entity.getValue(), start, end, string, accountId, LINK_TYPE_LINK, sensitive, listener, - highlightOption, highlightColor); - } - break; - } - case LINK_TYPE_STATUS: { - final URLSpan[] spans = string.getSpans(0, string.length(), URLSpan.class); - for (final URLSpan span : spans) { - final Matcher matcher = PATTERN_TWITTER_STATUS.matcher(span.getURL()); - if (matcher.matches()) { - final int start = string.getSpanStart(span); - final int end = string.getSpanEnd(span); - final String url = matcherGroup(matcher, GROUP_ID_TWITTER_STATUS_STATUS_ID); - string.removeSpan(span); - applyLink(url, start, end, string, accountId, LINK_TYPE_STATUS, sensitive, listener, - highlightOption, highlightColor); - } - } - break; - } - case LINK_TYPE_CASHTAG: { - addCashtagLinks(string, accountId, listener, highlightOption, highlightColor); - break; - } - default: { - return; - } + private boolean addMentionOrListLinks(final Spannable spannable, final long accountId, + final OnLinkClickListener listener) { + boolean hasMatches = false; + // Extract lists from status text + final Matcher matcher = Regex.VALID_MENTION_OR_LIST.matcher(spannable); + while (matcher.find()) { + final int start = matcherStart(matcher, Regex.VALID_MENTION_OR_LIST_GROUP_AT); + final int username_end = matcherEnd(matcher, Regex.VALID_MENTION_OR_LIST_GROUP_USERNAME); + final int listStart = matcherStart(matcher, Regex.VALID_MENTION_OR_LIST_GROUP_LIST); + final int listEnd = matcherEnd(matcher, Regex.VALID_MENTION_OR_LIST_GROUP_LIST); + final String username = matcherGroup(matcher, Regex.VALID_MENTION_OR_LIST_GROUP_USERNAME); + final String list = matcherGroup(matcher, Regex.VALID_MENTION_OR_LIST_GROUP_LIST); + applyLink(username, start, username_end, spannable, accountId, LINK_TYPE_MENTION, false, listener); + if (listStart >= 0 && listEnd >= 0) { + applyLink(String.format("%s/%s", username, list.substring(list.startsWith("/") ? 1 : 0)), listStart, + listEnd, spannable, accountId, LINK_TYPE_LIST, false, listener); + } + hasMatches = true; + } + // Extract lists from twitter.com links. + final URLSpan[] spans = spannable.getSpans(0, spannable.length(), URLSpan.class); + for (final URLSpan span : spans) { + final Matcher m = PATTERN_TWITTER_LIST.matcher(span.getURL()); + if (m.matches()) { + final int start = spannable.getSpanStart(span); + final int end = spannable.getSpanEnd(span); + final String screenName = matcherGroup(m, GROUP_ID_TWITTER_LIST_SCREEN_NAME); + final String listName = matcherGroup(m, GROUP_ID_TWITTER_LIST_LIST_NAME); + spannable.removeSpan(span); + applyLink(screenName + "/" + listName, start, end, spannable, accountId, LINK_TYPE_LIST, false, + listener); + hasMatches = true; + } + } + return hasMatches; + } - } - } + private void applyLink(final String url, final int start, final int end, final Spannable text, + final long accountId, final int type, final boolean sensitive, + final OnLinkClickListener listener) { + applyLink(url, null, start, end, text, accountId, type, sensitive, listener); + } - private final boolean addMentionOrListLinks(final Spannable spannable, final long accountId, - final OnLinkClickListener listener, final int highlightOption, final int highlightColor) { - boolean hasMatches = false; - // Extract lists from status text - final Matcher matcher = Regex.VALID_MENTION_OR_LIST.matcher(spannable); - while (matcher.find()) { - final int start = matcherStart(matcher, Regex.VALID_MENTION_OR_LIST_GROUP_AT); - final int username_end = matcherEnd(matcher, Regex.VALID_MENTION_OR_LIST_GROUP_USERNAME); - final int listStart = matcherStart(matcher, Regex.VALID_MENTION_OR_LIST_GROUP_LIST); - final int listEnd = matcherEnd(matcher, Regex.VALID_MENTION_OR_LIST_GROUP_LIST); - final String username = matcherGroup(matcher, Regex.VALID_MENTION_OR_LIST_GROUP_USERNAME); - final String list = matcherGroup(matcher, Regex.VALID_MENTION_OR_LIST_GROUP_LIST); - applyLink(username, start, username_end, spannable, accountId, LINK_TYPE_MENTION, false, listener, - highlightOption, highlightColor); - if (listStart >= 0 && listEnd >= 0) { - applyLink(String.format("%s/%s", username, list.substring(list.startsWith("/") ? 1 : 0)), listStart, - listEnd, spannable, accountId, LINK_TYPE_LIST, false, listener, highlightOption, highlightColor); - } - hasMatches = true; - } - // Extract lists from twitter.com links. - final URLSpan[] spans = spannable.getSpans(0, spannable.length(), URLSpan.class); - for (final URLSpan span : spans) { - final Matcher m = PATTERN_TWITTER_LIST.matcher(span.getURL()); - if (m.matches()) { - final int start = spannable.getSpanStart(span); - final int end = spannable.getSpanEnd(span); - final String screenName = matcherGroup(m, GROUP_ID_TWITTER_LIST_SCREEN_NAME); - final String listName = matcherGroup(m, GROUP_ID_TWITTER_LIST_LIST_NAME); - spannable.removeSpan(span); - applyLink(screenName + "/" + listName, start, end, spannable, accountId, LINK_TYPE_LIST, false, - listener, highlightOption, highlightColor); - hasMatches = true; - } - } - return hasMatches; - } + private void applyLink(final String url, final String orig, final int start, final int end, + final Spannable text, final long accountId, final int type, final boolean sensitive, + final OnLinkClickListener listener) { + final TwidereURLSpan span = new TwidereURLSpan(url, orig, accountId, type, sensitive, listener, + mHighlightOption); + text.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } - private final void applyLink(final String url, final int start, final int end, final Spannable text, - final long accountId, final int type, final boolean sensitive, final OnLinkClickListener listener, - final int highlightOption, final int highlightColor) { - applyLink(url, null, start, end, text, accountId, type, sensitive, listener, highlightOption, highlightColor); - } + private static void addLinkMovementMethod(final TextView t) { + final MovementMethod m = t.getMovementMethod(); + if (m == null || !(m instanceof LinkMovementMethod)) { + if (t.getLinksClickable()) { + t.setMovementMethod(LinkMovementMethod.getInstance()); + } + } + } - private final void applyLink(final String url, final String orig, final int start, final int end, - final Spannable text, final long accountId, final int type, final boolean sensitive, - final OnLinkClickListener listener, final int highlightOption, final int highlightColor) { - final TwidereURLSpan span = new TwidereURLSpan(url, orig, accountId, type, sensitive, listener, - highlightOption, highlightColor); - text.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - } - - private static final void addLinkMovementMethod(final TextView t) { - final MovementMethod m = t.getMovementMethod(); - if (m == null || !(m instanceof LinkMovementMethod)) { - if (t.getLinksClickable()) { - t.setMovementMethod(LinkMovementMethod.getInstance()); - } - } - } - - public interface OnLinkClickListener { - public void onLinkClick(String link, String orig, long account_id, int type, boolean sensitive); - } + public interface OnLinkClickListener { + public void onLinkClick(String link, String orig, long account_id, int type, boolean sensitive); + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/TwitterWrapper.java b/twidere/src/main/java/org/mariotaku/twidere/util/TwitterWrapper.java index b86d53652..19997fdd2 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/TwitterWrapper.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/TwitterWrapper.java @@ -40,6 +40,8 @@ import java.util.List; import java.util.Set; import twitter4j.DirectMessage; +import twitter4j.Paging; +import twitter4j.ResponseList; import twitter4j.Status; import twitter4j.Twitter; import twitter4j.TwitterException; @@ -111,6 +113,7 @@ public class TwitterWrapper implements Constants { throw new IllegalArgumentException(); } + @NonNull public static User showUserAlternative(final Twitter twitter, final long id, final String screenName) throws TwitterException { final String searchScreenName; @@ -120,12 +123,29 @@ public class TwitterWrapper implements Constants { searchScreenName = twitter.showFriendship(twitter.getId(), id).getTargetUserScreenName(); } else throw new IllegalArgumentException(); - for (final User user : twitter.searchUsers(searchScreenName, 1)) { - if (user.getId() == id || searchScreenName.equals(user.getScreenName())) return user; + final Paging paging = new Paging(); + paging.count(1); + if (id != -1) { + final ResponseList timeline = twitter.getUserTimeline(id, paging); + for (final Status status : timeline) { + final User user = status.getUser(); + if (user.getId() == id) return user; + } + } else { + final ResponseList timeline = twitter.getUserTimeline(screenName, paging); + for (final Status status : timeline) { + final User user = status.getUser(); + if (searchScreenName.equalsIgnoreCase(user.getScreenName())) + return user; + } } - return null; + for (final User user : twitter.searchUsers(searchScreenName, 1)) { + if (user.getId() == id || searchScreenName.equalsIgnoreCase(user.getScreenName())) return user; + } + throw new TwitterException("can't find user"); } + @NonNull public static User tryShowUser(final Twitter twitter, final long id, final String screenName) throws TwitterException { try { diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java b/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java index f440040a3..c0dfdf5a3 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java @@ -91,8 +91,6 @@ import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.View.MeasureSpec; -import android.view.ViewGroup.LayoutParams; -import android.view.ViewGroup.MarginLayoutParams; import android.view.Window; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; @@ -114,12 +112,12 @@ import org.mariotaku.querybuilder.Columns.Column; import org.mariotaku.querybuilder.Expression; import org.mariotaku.querybuilder.OrderBy; import org.mariotaku.querybuilder.RawItemArray; +import org.mariotaku.querybuilder.SQLFunctions; import org.mariotaku.querybuilder.SQLQueryBuilder; import org.mariotaku.querybuilder.Selectable; import org.mariotaku.querybuilder.Table; import org.mariotaku.querybuilder.Tables; import org.mariotaku.querybuilder.query.SQLSelectQuery; -import org.mariotaku.refreshnow.widget.RefreshNowListView; import org.mariotaku.twidere.BuildConfig; import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.R; @@ -212,10 +210,10 @@ import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Locale; +import java.util.Map.Entry; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.CRC32; -import java.util.zip.Checksum; import javax.net.ssl.SSLException; @@ -516,18 +514,18 @@ public final class Utils implements Constants, TwitterConstants { .union() .select(true, new Columns(new Column(new Table(table), Statuses._ID))) .from(new Tables(table, Filters.Sources.TABLE_NAME)) - .where(Expression.like(new Column(new Table(table), Statuses.SOURCE), - "%>'||" + Filters.Sources.TABLE_NAME + "." + Filters.Sources.VALUE + "||'%")) + .where(Expression.likeRaw(new Column(new Table(table), Statuses.SOURCE), + "'%>'||" + Filters.Sources.TABLE_NAME + "." + Filters.Sources.VALUE + "||'%'")) .union() .select(true, new Columns(new Column(new Table(table), Statuses._ID))) .from(new Tables(table, Filters.Keywords.TABLE_NAME)) - .where(Expression.like(new Column(new Table(table), Statuses.TEXT_PLAIN), - "%'||" + Filters.Keywords.TABLE_NAME + "." + Filters.Keywords.VALUE + "||'%")) + .where(Expression.likeRaw(new Column(new Table(table), Statuses.TEXT_PLAIN), + "'%'||" + Filters.Keywords.TABLE_NAME + "." + Filters.Keywords.VALUE + "||'%'")) .union() .select(true, new Columns(new Column(new Table(table), Statuses._ID))) .from(new Tables(table, Filters.Links.TABLE_NAME)) - .where(Expression.like(new Column(new Table(table), Statuses.SOURCE), - "%>%'||" + Filters.Links.TABLE_NAME + "." + Filters.Links.VALUE + "||'%%")); + .where(Expression.likeRaw(new Column(new Table(table), Statuses.SOURCE), + "'%>%'||" + Filters.Links.TABLE_NAME + "." + Filters.Links.VALUE + "||'%%'")); final Expression filterExpression = Expression.or( Expression.notIn(new Column(new Table(table), Statuses._ID), filteredIdsQueryBuilder.build()), Expression.equals(new Column(new Table(table), Statuses.IS_GAP), 1) @@ -642,7 +640,6 @@ public final class Utils implements Constants, TwitterConstants { adapter.setDisplayProfileImage(pref.getBoolean(KEY_DISPLAY_PROFILE_IMAGE, true)); adapter.setDisplayNameFirst(pref.getBoolean(KEY_NAME_FIRST, true)); adapter.setLinkHighlightOption(pref.getString(KEY_LINK_HIGHLIGHT_OPTION, VALUE_LINK_HIGHLIGHT_OPTION_NONE)); - adapter.setLinkHighlightColor(ThemeUtils.getUserLinkTextColor(context)); adapter.setNicknameOnly(pref.getBoolean(KEY_NICKNAME_ONLY, false)); adapter.setTextSize(pref.getInt(KEY_TEXT_SIZE, getDefaultTextSize(context))); adapter.notifyDataSetChanged(); @@ -1919,6 +1916,22 @@ public final class Utils implements Constants, TwitterConstants { .getConfiguration().locale); } + public static long[] getMatchedNicknameIds(final String str, SharedPreferences nicknamePrefs) { + if (isEmpty(str)) return new long[0]; + final List list = new ArrayList<>(); + for (final Entry entry : nicknamePrefs.getAll().entrySet()) { + final String value = ParseUtils.parseString(entry.getValue()); + final long key = ParseUtils.parseLong(entry.getKey(), -1); + if (key == -1 || isEmpty(value)) { + continue; + } + if (StringUtils.startsWithIgnoreCase(value, str)) { + list.add(key); + } + } + return ArrayUtils.fromList(list); + } + public static long[] getNewestMessageIdsFromDatabase(final Context context, final Uri uri) { final long[] account_ids = getActivatedAccountIds(context); return getNewestMessageIdsFromDatabase(context, uri, account_ids); @@ -2156,23 +2169,21 @@ public final class Utils implements Constants, TwitterConstants { return share_format.replace(FORMAT_PATTERN_TITLE, title).replace(FORMAT_PATTERN_TEXT, text != null ? text : ""); } - public static ArrayList getStatusIdsInDatabase(final Context context, final Uri uri, final long account_id) { - final ArrayList list = new ArrayList(); - if (context == null) return list; + public static int getStatusCountInDatabase(final Context context, final Uri uri, final long account_id) { + if (context == null) return -1; final ContentResolver resolver = context.getContentResolver(); final String where = Statuses.ACCOUNT_ID + " = " + account_id; - final String[] projection = new String[]{Statuses.STATUS_ID}; + final String[] projection = new String[]{SQLFunctions.COUNT(Statuses.STATUS_ID)}; final Cursor cur = ContentResolverUtils.query(resolver, uri, projection, where, null, null); - if (cur != null) { - final int idx = cur.getColumnIndexOrThrow(Statuses.STATUS_ID); - cur.moveToFirst(); - while (!cur.isAfterLast()) { - list.add(cur.getLong(idx)); - cur.moveToNext(); + if (cur == null) return -1; + try { + if (cur.moveToFirst()) { + return cur.getInt(0); } + return -1; + } finally { cur.close(); } - return list; } public static int getStatusTypeIconRes(final boolean is_favorite, final boolean has_location, @@ -2612,14 +2623,6 @@ public final class Utils implements Constants, TwitterConstants { return false; } - public static int inferStatusBarHeight(final Activity activity) { - final Window w = activity.getWindow(); - final View decorView = w.getDecorView(); - final Rect rect = new Rect(); - decorView.getWindowVisibleDisplayFrame(rect); - return rect.top; - } - public static void initAccountColor(final Context context) { if (context == null) return; final Cursor cur = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI, new String[]{ @@ -2777,14 +2780,6 @@ public final class Utils implements Constants, TwitterConstants { return retweeted_by_id == account_id || my_retweet_id > 0; } - public static boolean isMyUserName(final Context context, final String screen_name) { - if (context == null) return false; - for (final String account_screen_name : getAccountScreenNames(context)) { - if (account_screen_name.equalsIgnoreCase(screen_name)) return true; - } - return false; - } - public static boolean isNetworkAvailable(final Context context) { final ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); final NetworkInfo info = cm.getActiveNetworkInfo(); @@ -2858,16 +2853,6 @@ public final class Utils implements Constants, TwitterConstants { // SCREENLAYOUT_LAYOUTDIR_RTL; } - public static boolean isSameAccount(final Context context, final long accountId, final long userId) { - if (context == null || accountId <= 0 || userId <= 0) return false; - return accountId == userId; - } - - public static boolean isSameAccount(final Context context, final long accountId, final String screenName) { - if (context == null || accountId <= 0 || screenName == null) return false; - return screenName.equalsIgnoreCase(getAccountScreenName(context, accountId)); - } - public static boolean isUserLoggedIn(final Context context, final long accountId) { if (context == null) return false; final long[] ids = getAccountIds(context); @@ -2878,7 +2863,7 @@ public final class Utils implements Constants, TwitterConstants { return false; } - public static final int matcherEnd(final Matcher matcher, final int group) { + public static int matcherEnd(final Matcher matcher, final int group) { try { return matcher.end(group); } catch (final IllegalStateException e) { @@ -2887,7 +2872,7 @@ public final class Utils implements Constants, TwitterConstants { return -1; } - public static final String matcherGroup(final Matcher matcher, final int group) { + public static String matcherGroup(final Matcher matcher, final int group) { try { return matcher.group(group); } catch (final IllegalStateException e) { @@ -2896,7 +2881,7 @@ public final class Utils implements Constants, TwitterConstants { return null; } - public static final int matcherStart(final Matcher matcher, final int group) { + public static int matcherStart(final Matcher matcher, final int group) { try { return matcher.start(group); } catch (final IllegalStateException e) { @@ -3966,14 +3951,14 @@ public final class Utils implements Constants, TwitterConstants { final ListView listView = fragment.getListView(); listView.setPadding(insets.left, insets.top, insets.right, insets.bottom); listView.setClipToPadding(false); - if (listView instanceof RefreshNowListView) { - final View indicatorView = ((RefreshNowListView) listView).getRefreshIndicatorView(); - final LayoutParams lp = indicatorView.getLayoutParams(); - if (lp instanceof MarginLayoutParams) { - ((MarginLayoutParams) lp).topMargin = insets.top; - indicatorView.setLayoutParams(lp); - } - } +// if (listView instanceof RefreshNowListView) { +// final View indicatorView = ((RefreshNowListView) listView).getRefreshIndicatorView(); +// final LayoutParams lp = indicatorView.getLayoutParams(); +// if (lp instanceof MarginLayoutParams) { +// ((MarginLayoutParams) lp).topMargin = insets.top; +// indicatorView.setLayoutParams(lp); +// } +// } } public static boolean isFilteringUser(Context context, long userId) { diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/WindowAccessor.java b/twidere/src/main/java/org/mariotaku/twidere/util/WindowAccessor.java index ed3e9dd47..f3676f8ac 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/WindowAccessor.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/WindowAccessor.java @@ -13,7 +13,7 @@ public class WindowAccessor { WindowAccessorL.setStatusBarColor(window, color); } - @TargetApi(Build.VERSION_CODES.L) + @TargetApi(Build.VERSION_CODES.LOLLIPOP) private static class WindowAccessorL { public static void setStatusBarColor(Window window, int color) { window.setStatusBarColor(color); diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/accessor/ViewAccessor.java b/twidere/src/main/java/org/mariotaku/twidere/util/accessor/ViewAccessor.java index 59b120c25..9b857c922 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/accessor/ViewAccessor.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/accessor/ViewAccessor.java @@ -25,6 +25,8 @@ import android.graphics.drawable.Drawable; import android.os.Build; import android.support.v4.view.ViewCompat; import android.view.View; +import android.widget.CompoundButton; +import android.widget.ProgressBar; public final class ViewAccessor { @@ -34,11 +36,6 @@ public final class ViewAccessor { } } - public static void setBackgroundTintList(final View view, final ColorStateList list) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; - ViewAccessorL.setBackgroundTintList(view, list); - } - @SuppressWarnings("deprecation") public static void setBackground(final View view, final Drawable background) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { @@ -48,6 +45,31 @@ public final class ViewAccessor { } } + public static void setBackgroundTintList(final View view, final ColorStateList list) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; + ViewAccessorL.setBackgroundTintList(view, list); + } + + public static void setButtonTintList(CompoundButton view, ColorStateList list) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; + ViewAccessorL.setButtonTintList(view, list); + } + + public static void setIndeterminateTintList(ProgressBar view, ColorStateList list) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; + ViewAccessorL.setIndeterminateTintList(view, list); + } + + public static void setProgressBackgroundTintList(ProgressBar view, ColorStateList list) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; + ViewAccessorL.setProgressBackgroundTintList(view, list); + } + + public static void setProgressTintList(ProgressBar view, ColorStateList list) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; + ViewAccessorL.setProgressTintList(view, list); + } + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) static class ViewAccessorJB { static void setBackground(final View view, final Drawable background) { @@ -62,5 +84,25 @@ public final class ViewAccessor { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; view.setBackgroundTintList(list); } + + static void setButtonTintList(final CompoundButton view, final ColorStateList list) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; + view.setButtonTintList(list); + } + + static void setIndeterminateTintList(final ProgressBar view, final ColorStateList list) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; + view.setIndeterminateTintList(list); + } + + static void setProgressBackgroundTintList(final ProgressBar view, final ColorStateList list) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; + view.setProgressBackgroundTintList(list); + } + + static void setProgressTintList(final ProgressBar view, final ColorStateList list) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; + view.setProgressTintList(list); + } } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/CardMediaContainer.java b/twidere/src/main/java/org/mariotaku/twidere/view/CardMediaContainer.java new file mode 100644 index 000000000..369c7f164 --- /dev/null +++ b/twidere/src/main/java/org/mariotaku/twidere/view/CardMediaContainer.java @@ -0,0 +1,211 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2014 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import org.mariotaku.twidere.R; +import org.mariotaku.twidere.model.ParcelableMedia; +import org.mariotaku.twidere.util.ImageLoaderWrapper; +import org.mariotaku.twidere.util.ImageLoadingHandler; +import org.mariotaku.twidere.util.MediaPreviewUtils.OnMediaClickListener; + +/** + * Created by mariotaku on 14/12/17. + */ +public class CardMediaContainer extends ViewGroup { + + private final int mMaxColumns; + private final int mHorizontalSpacing, mVerticalSpacing; + private int[] mTempIndices; + + public CardMediaContainer(Context context) { + this(context, null); + } + + public CardMediaContainer(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public CardMediaContainer(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + mMaxColumns = 3; + final TypedArray a = context.obtainStyledAttributes(attrs, new int[]{ + android.R.attr.horizontalSpacing, android.R.attr.verticalSpacing}); + mHorizontalSpacing = a.getDimensionPixelSize(0, 0); + mVerticalSpacing = a.getDimensionPixelSize(1, 0); + a.recycle(); + } + + + public void displayMedia(@NonNull final int... imageRes) { + for (int i = 0, j = getChildCount(), k = imageRes.length; i < j; i++) { + final View child = getChildAt(i); + final ImageView imageView = (ImageView) child.findViewById(R.id.media_preview); + final View progress = child.findViewById(R.id.media_preview_progress); + progress.setVisibility(GONE); + if (i < k) { + imageView.setImageResource(imageRes[i]); + } else { + imageView.setImageDrawable(null); + child.setVisibility(GONE); + } + } + } + + public void displayMedia(@Nullable final ParcelableMedia[] mediaArray, + @NonNull final ImageLoaderWrapper loader, + final long accountId, + final OnMediaClickListener mediaClickListener, + final ImageLoadingHandler loadingHandler) { + if (mediaArray == null) { + for (int i = 0, j = getChildCount(); i < j; i++) { + final View child = getChildAt(i); + child.setVisibility(GONE); + } + return; + } + final View.OnClickListener clickListener = new ImageGridClickListener(mediaClickListener, accountId); + for (int i = 0, j = getChildCount(), k = mediaArray.length; i < j; i++) { + final View child = getChildAt(i); + child.setOnClickListener(clickListener); + final ImageView imageView = (ImageView) child.findViewById(R.id.media_preview); + if (i < k) { + final ParcelableMedia media = mediaArray[i]; + loader.displayPreviewImage(imageView, media.url, loadingHandler); + child.setVisibility(VISIBLE); + if (i == j - 1) { + final TextView moreIndicator = (TextView) child.findViewById(R.id.more_media); + moreIndicator.setVisibility(j < k ? VISIBLE : GONE); + if (k > j) { + final int extraMediaCount = k - j; + moreIndicator.setText(getResources().getQuantityString(R.plurals.N_media, + extraMediaCount, extraMediaCount)); + } else { + moreIndicator.setText(null); + } + } + } else { + loader.cancelDisplayTask(imageView); + child.setVisibility(GONE); + } + } + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + final int[] childIndices = createChildIndices(); + final int childCount = getChildIndicesInLayout(this, childIndices); + if (childCount > 0) { + final double childSqrt = Math.sqrt(childCount); + final int columnCount = (int) (childSqrt % 1 == 0 ? Math.ceil(childSqrt) : Math.min(childCount, mMaxColumns)); + final int rowCount = (int) Math.ceil(childCount / (double) columnCount); + final int firstRowColumnCount = childCount - (columnCount * (rowCount - 1)); + for (int i = 0; i < rowCount; i++) { + final int currColumnCount = i == 0 ? firstRowColumnCount : columnCount; + final int childT; + if (i == 0) { + childT = getPaddingTop(); + } else if (i == 1) { + childT = getChildAt(childIndices[0]).getBottom() + mVerticalSpacing; + } else { + childT = getChildAt(childIndices[firstRowColumnCount + columnCount * (i - 1)]).getBottom() + mVerticalSpacing; + } + for (int j = 0; j < currColumnCount; j++) { + final int childIdx = i == 0 ? j : firstRowColumnCount + columnCount * (i - 1) + j; + final View child = getChildAt(childIndices[childIdx]); + final int childL = j == 0 ? getPaddingLeft() : (getChildAt(childIndices[childIdx - 1]).getRight() + mHorizontalSpacing); + child.layout(childL, childT, childL + child.getMeasuredWidth(), childT + child.getMeasuredHeight()); + } + } + } + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + final int measuredWidth = resolveSize(getSuggestedMinimumWidth(), widthMeasureSpec); + final int contentWidth = measuredWidth - getPaddingLeft() - getPaddingRight(); + final int[] childIndices = createChildIndices(); + final int childCount = getChildIndicesInLayout(this, childIndices); + int heightSum = 0; + if (childCount > 0) { + final double childSqrt = Math.sqrt(childCount); + final int columnCount = (int) (childSqrt % 1 == 0 ? Math.ceil(childSqrt) : Math.min(childCount, mMaxColumns)); + final int rowCount = (int) Math.ceil(childCount / (double) columnCount); + final int firstRowColumnCount = childCount - (columnCount * (rowCount - 1)); + for (int i = 0; i < rowCount; i++) { + final int currColumnCount = i == 0 ? firstRowColumnCount : columnCount; + final int columnWidth = (contentWidth - (mHorizontalSpacing * (currColumnCount - 1))) / currColumnCount; + heightSum = heightSum + columnWidth; + final int childMeasureSpec = MeasureSpec.makeMeasureSpec(columnWidth, MeasureSpec.EXACTLY); + for (int j = 0; j < currColumnCount; j++) { + final int childIdx = i == 0 ? j : firstRowColumnCount + columnCount * (i - 1) + j; + getChildAt(childIndices[childIdx]).measure(childMeasureSpec, childMeasureSpec); + } + } + heightSum = heightSum + (mVerticalSpacing * rowCount - 1); + } + heightSum = heightSum + getPaddingTop() + getPaddingBottom(); + setMeasuredDimension(widthMeasureSpec, MeasureSpec.makeMeasureSpec(heightSum, MeasureSpec.EXACTLY)); + } + + private int[] createChildIndices() { + if (mTempIndices == null || mTempIndices.length < getChildCount()) { + return mTempIndices = new int[getChildCount()]; + } + return mTempIndices; + } + + private static int getChildIndicesInLayout(ViewGroup viewGroup, int[] indices) { + final int childCount = viewGroup.getChildCount(); + int indicesCount = 0; + for (int i = 0; i < childCount; i++) { + if (viewGroup.getChildAt(i).getVisibility() != GONE) { + indices[indicesCount++] = i; + } + } + return indicesCount; + } + + private static class ImageGridClickListener implements View.OnClickListener { + private final OnMediaClickListener mListener; + private final long mAccountId; + + ImageGridClickListener(final OnMediaClickListener listener, final long accountId) { + mListener = listener; + mAccountId = accountId; + } + + @Override + public void onClick(final View v) { + if (mListener == null) return; + mListener.onMediaClick(v, (ParcelableMedia) v.getTag(), mAccountId); + } + + } +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/ComposeSelectAccountButton.java b/twidere/src/main/java/org/mariotaku/twidere/view/ComposeSelectAccountButton.java index 4cb842af1..b615dd333 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/ComposeSelectAccountButton.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/ComposeSelectAccountButton.java @@ -225,10 +225,11 @@ public class ComposeSelectAccountButton extends ViewGroup { @Override public void onMeasure(Recycler recycler, State state, int widthSpec, int heightSpec) { final int height = MeasureSpec.getSize(heightSpec), width; - if (getItemCount() > 1) { + final int itemCount = getItemCount(); + if (itemCount > 1) { width = Math.round(height * 1.5f); - } else if (getChildCount() > 0) { - final View firstChild = getChildAt(0); + } else if (itemCount > 0 && state.getItemCount() > 0) { + final View firstChild = recycler.getViewForPosition(0); width = height + firstChild.getPaddingLeft() + firstChild.getPaddingRight(); } else { width = height; diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/ForegroundColorView.java b/twidere/src/main/java/org/mariotaku/twidere/view/ForegroundColorView.java index bae2df4ad..8ad37e680 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/ForegroundColorView.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/ForegroundColorView.java @@ -62,7 +62,7 @@ public class ForegroundColorView extends View implements IForegroundView { mAlphaPatternSize = Math.round(getResources().getDisplayMetrics().density * 4); mAlphaRect = new Rect(); mColorRect = new Rect(); - mPaint = new Paint(); + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); final TypedArray a = context.obtainStyledAttributes(attrs, new int[]{android.R.attr.color}); setColor(a.getColor(0, Color.TRANSPARENT)); a.recycle(); diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/HeaderDrawerLayout.java b/twidere/src/main/java/org/mariotaku/twidere/view/HeaderDrawerLayout.java index b53438f78..f625edfec 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/HeaderDrawerLayout.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/HeaderDrawerLayout.java @@ -271,7 +271,8 @@ public class HeaderDrawerLayout extends ViewGroup { } private void scrollByCallback(float dy) { - setScrollingContentCallback(true); + final int top = getHeaderTop(); + setScrollingContentCallback(top > getHeaderTopMinimum() && top < getHeaderTopMaximum()); mDrawerCallback.scrollBy(dy); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/NyanDaydreamView.java b/twidere/src/main/java/org/mariotaku/twidere/view/NyanDaydreamView.java deleted file mode 100644 index 8916a291e..000000000 --- a/twidere/src/main/java/org/mariotaku/twidere/view/NyanDaydreamView.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Twidere - Twitter client for Android - * - * Copyright (C) 2012-2014 Mariotaku Lee - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.mariotaku.twidere.view; - -import android.content.Context; -import android.content.res.Resources; -import android.graphics.Canvas; -import android.util.AttributeSet; -import android.util.DisplayMetrics; -import android.view.View; - -import org.mariotaku.twidere.util.NyanDrawingHelper; - -public class NyanDaydreamView extends View { - - private final InvalidateRunnable mInvalidateRunnable; - - private final NyanDrawingHelper mNyanDrawingHelper; - - public NyanDaydreamView(final Context context) { - this(context, null); - } - - public NyanDaydreamView(final Context context, final AttributeSet attrs) { - this(context, attrs, 0); - } - - public NyanDaydreamView(final Context context, final AttributeSet attrs, final int defStyleAttr) { - super(context, attrs, defStyleAttr); - setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); - mNyanDrawingHelper = new DreamViewNyanDrawingHelper(this); - mInvalidateRunnable = new InvalidateRunnable(this); - } - - public void setScale(final float scale) { - mNyanDrawingHelper.setScale(scale); - } - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - post(mInvalidateRunnable); - } - - @Override - protected void onDetachedFromWindow() { - removeCallbacks(mInvalidateRunnable); - super.onDetachedFromWindow(); - } - - @Override - protected void onDraw(final Canvas canvas) { - super.onDraw(canvas); - mNyanDrawingHelper.dispatchDraw(canvas); - } - - @Override - protected void onSizeChanged(final int w, final int h, final int oldw, final int oldh) { - super.onSizeChanged(w, h, oldw, oldh); - mNyanDrawingHelper.dispatchSizeChanged(w, h); - } - - private static final class DreamViewNyanDrawingHelper extends NyanDrawingHelper { - - private final int mDisplayHeight; - private final NyanDaydreamView mView; - - public DreamViewNyanDrawingHelper(final NyanDaydreamView view) { - super(view.getContext()); - mView = view; - final Resources res = getResources(); - final DisplayMetrics dm = res.getDisplayMetrics(); - mDisplayHeight = dm.heightPixels; - } - - @Override - protected int getRainbowYOffset() { - final int visibility = mView.getSystemUiVisibility(); - if ((visibility & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) != 0) return 0; - return mDisplayHeight - getHeight(); - } - - } - - private static final class InvalidateRunnable implements Runnable { - - private final View mView; - - InvalidateRunnable(final View view) { - mView = view; - } - - @Override - public void run() { - mView.invalidate(); - mView.postDelayed(this, 66); - } - - } - -} diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/ProfileImageView.java b/twidere/src/main/java/org/mariotaku/twidere/view/ShapedImageView.java similarity index 80% rename from twidere/src/main/java/org/mariotaku/twidere/view/ProfileImageView.java rename to twidere/src/main/java/org/mariotaku/twidere/view/ShapedImageView.java index 1d925d5f4..5d26d3f9d 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/ProfileImageView.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/ShapedImageView.java @@ -53,10 +53,10 @@ import org.mariotaku.twidere.R; * An ImageView class with a circle mask so that all images are drawn in a * circle instead of a square. */ -public class ProfileImageView extends ImageView { +public class ShapedImageView extends ImageView { - public static final int STYLE_CIRCLE = 0x1; - public static final int STYLE_RECTANGLE = 0x2; + public static final int SHAPE_CIRCLE = 0x1; + public static final int SHAPE_RECTANGLE = 0x2; private static final int SHADOW_START_COLOR = 0x37000000; @@ -69,27 +69,34 @@ public class ProfileImageView extends ImageView { private final RectF mTempDestination; private final Paint mBitmapPaint; private final Paint mBorderPaint; + private final Paint mBackgroundPaint; private boolean mBorderEnabled; private Bitmap mShadowBitmap; private float mShadowRadius; - private Drawable mBackground; private int mStyle; private float mCornerRadius, mCornerRadiusRatio; - public ProfileImageView(Context context) { + public ShapedImageView(Context context) { this(context, null, 0); } - public ProfileImageView(Context context, AttributeSet attrs) { + public ShapedImageView(Context context, AttributeSet attrs) { this(context, attrs, 0); } - public ProfileImageView(Context context, AttributeSet attrs, int defStyle) { + @Override + public void setBackgroundColor(int color) { + mBackgroundPaint.setColor(0xFF000000 | color); + mBackgroundPaint.setAlpha(Color.alpha(color)); + invalidate(); + } + + public ShapedImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); - final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ProfileImageView, defStyle, 0); + final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ShapedImageView, defStyle, 0); mMatrix = new Matrix(); mSource = new RectF(); @@ -103,27 +110,29 @@ public class ProfileImageView extends ImageView { mBorderPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mBorderPaint.setStyle(Paint.Style.STROKE); - if (a.hasValue(R.styleable.ProfileImageView_pivBorder)) { - setBorderEnabled(a.getBoolean(R.styleable.ProfileImageView_pivBorder, false)); - } else if (a.hasValue(R.styleable.ProfileImageView_pivBorderColor) - || a.hasValue(R.styleable.ProfileImageView_pivBorderWidth)) { + mBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + + if (a.hasValue(R.styleable.ShapedImageView_sivBorder)) { + setBorderEnabled(a.getBoolean(R.styleable.ShapedImageView_sivBorder, false)); + } else if (a.hasValue(R.styleable.ShapedImageView_sivBorderColor) + || a.hasValue(R.styleable.ShapedImageView_sivBorderWidth)) { setBorderEnabled(true); } - setBorderColor(a.getColor(R.styleable.ProfileImageView_pivBorderColor, Color.TRANSPARENT)); - setBorderWidth(a.getDimensionPixelSize(R.styleable.ProfileImageView_pivBorderWidth, 0)); - setStyle(a.getInt(R.styleable.ProfileImageView_pivStyle, STYLE_RECTANGLE)); - setCornerRadius(a.getDimension(R.styleable.ProfileImageView_pivCornerRadius, 0)); - setCornerRadiusRatio(a.getFraction(R.styleable.ProfileImageView_pivCornerRadiusRatio, 1, 1, -1)); + setBorderColor(a.getColor(R.styleable.ShapedImageView_sivBorderColor, Color.TRANSPARENT)); + setBorderWidth(a.getDimensionPixelSize(R.styleable.ShapedImageView_sivBorderWidth, 0)); + setStyle(a.getInt(R.styleable.ShapedImageView_sivShape, SHAPE_RECTANGLE)); + setCornerRadius(a.getDimension(R.styleable.ShapedImageView_sivCornerRadius, 0)); + setCornerRadiusRatio(a.getFraction(R.styleable.ShapedImageView_sivCornerRadiusRatio, 1, 1, -1)); if (USE_OUTLINE) { - if (a.hasValue(R.styleable.ProfileImageView_pivElevation)) { + if (a.hasValue(R.styleable.ShapedImageView_sivElevation)) { ViewCompat.setElevation(this, - a.getDimensionPixelSize(R.styleable.ProfileImageView_pivElevation, 0)); + a.getDimensionPixelSize(R.styleable.ShapedImageView_sivElevation, 0)); } } else { - mShadowRadius = a.getDimensionPixelSize(R.styleable.ProfileImageView_pivElevation, 0); + mShadowRadius = a.getDimensionPixelSize(R.styleable.ShapedImageView_sivElevation, 0); } - + setBackgroundColor(a.getColor(R.styleable.ShapedImageView_sivBackgroundColor, 0)); a.recycle(); if (USE_OUTLINE) { @@ -185,7 +194,7 @@ public class ProfileImageView extends ImageView { shader.setLocalMatrix(mMatrix); mBitmapPaint.setShader(shader); - if (getStyle() == STYLE_CIRCLE) { + if (getStyle() == SHAPE_CIRCLE) { canvas.drawCircle(dest.centerX(), dest.centerY(), Math.min(dest.width(), dest.height()) / 2f, mBitmapPaint); } else { @@ -224,6 +233,13 @@ public class ProfileImageView extends ImageView { mDestination.set(getPaddingLeft(), getPaddingTop(), getWidth() - getPaddingRight(), getHeight() - getPaddingBottom()); + if (getStyle() == SHAPE_CIRCLE) { + canvas.drawOval(mDestination, mBackgroundPaint); + } else { + final float radius = getCalculatedCornerRadius(); + canvas.drawRoundRect(mDestination, radius, radius, mBackgroundPaint); + } + if (OUTLINE_DRAW) { super.onDraw(canvas); } else { @@ -258,16 +274,12 @@ public class ProfileImageView extends ImageView { mSource.set(0, 0, bitmap.getWidth(), bitmap.getHeight()); - if (mBackground != null) { - mBackground.draw(canvas); - } - drawBitmapWithCircleOnCanvas(bitmap, canvas, mSource, mDestination); } // Then draw the border. if (mBorderEnabled) { - if (getStyle() == STYLE_CIRCLE) { + if (getStyle() == SHAPE_CIRCLE) { canvas.drawCircle(mDestination.centerX(), mDestination.centerY(), mDestination.width() / 2f - mBorderPaint.getStrokeWidth() / 2, mBorderPaint); } else { @@ -290,7 +302,6 @@ public class ProfileImageView extends ImageView { protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); updateShadowBitmap(); - updateBackgroundPadding(); } @Override @@ -301,31 +312,16 @@ public class ProfileImageView extends ImageView { @TargetApi(Build.VERSION_CODES.JELLY_BEAN) @Override public void setBackground(Drawable background) { - if (OUTLINE_DRAW) { - super.setBackground(background); - return; - } - super.setBackground(null); - mBackground = background; - updateBackgroundPadding(); } @Override public void setBackgroundDrawable(Drawable background) { - if (OUTLINE_DRAW) { - super.setBackgroundDrawable(background); - return; - } - super.setBackgroundDrawable(null); - mBackground = background; - updateBackgroundPadding(); } @Override public void setPadding(int left, int top, int right, int bottom) { super.setPadding(left, top, right, bottom); updateShadowBitmap(); - updateBackgroundPadding(); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) @@ -333,7 +329,6 @@ public class ProfileImageView extends ImageView { public void setPaddingRelative(int start, int top, int end, int bottom) { super.setPaddingRelative(start, top, end, bottom); updateShadowBitmap(); - updateBackgroundPadding(); } private float getCornerRadius() { @@ -351,23 +346,6 @@ public class ProfileImageView extends ImageView { } } - private void updateBackgroundPadding() { - final Drawable drawable = mBackground; - if (drawable == null) return; - final int width = getWidth(), height = getHeight(); - if (width <= 0 || height <= 0) return; - final int contentLeft = getPaddingLeft(), contentTop = getPaddingTop(), - contentRight = width - getPaddingRight(), - contentBottom = height - getPaddingBottom(); - final int contentWidth = contentRight - contentLeft, - contentHeight = contentBottom - contentTop; - final int size = Math.min(contentWidth, contentHeight); - drawable.setBounds(contentLeft + (contentWidth - size) / 2, - contentTop + (contentHeight - size) / 2, - contentRight - (contentWidth - size) / 2, - contentBottom - (contentHeight - size) / 2); - } - private void updateShadowBitmap() { if (USE_OUTLINE) return; final int width = getWidth(), height = getHeight(); @@ -399,8 +377,8 @@ public class ProfileImageView extends ImageView { final int contentLeft = view.getPaddingLeft(), contentTop = view.getPaddingTop(), contentRight = view.getWidth() - view.getPaddingRight(), contentBottom = view.getHeight() - view.getPaddingBottom(); - final ProfileImageView imageView = (ProfileImageView) view; - if (imageView.getStyle() == STYLE_CIRCLE) { + final ShapedImageView imageView = (ShapedImageView) view; + if (imageView.getStyle() == SHAPE_CIRCLE) { final int contentWidth = contentRight - contentLeft, contentHeight = contentBottom - contentTop; final int size = Math.min(contentWidth, contentHeight); diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/ShortTimeView.java b/twidere/src/main/java/org/mariotaku/twidere/view/ShortTimeView.java index 9515bb188..2616f300c 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/ShortTimeView.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/ShortTimeView.java @@ -19,9 +19,6 @@ package org.mariotaku.twidere.view; -import static android.text.format.DateUtils.getRelativeTimeSpanString; -import static org.mariotaku.twidere.util.Utils.formatSameDayTime; - import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; @@ -31,93 +28,102 @@ import android.text.format.DateUtils; import android.util.AttributeSet; import org.mariotaku.twidere.Constants; +import org.mariotaku.twidere.R; import org.mariotaku.twidere.view.themed.ThemedTextView; +import static android.text.format.DateUtils.getRelativeTimeSpanString; +import static org.mariotaku.twidere.util.Utils.formatSameDayTime; + public class ShortTimeView extends ThemedTextView implements Constants, OnSharedPreferenceChangeListener { - private static final long TICKER_DURATION = 5000L; + private static final long TICKER_DURATION = 5000L; - private final Runnable mTicker; + private final Runnable mTicker; - private boolean mShowAbsoluteTime; - private long mTime; + private boolean mShowAbsoluteTime; + private long mTime; - private final SharedPreferences mPreferences; + private final SharedPreferences mPreferences; - public ShortTimeView(final Context context) { - this(context, null); - } + public ShortTimeView(final Context context) { + this(context, null); + } - public ShortTimeView(final Context context, final AttributeSet attrs) { - this(context, attrs, android.R.attr.textViewStyle); - } + public ShortTimeView(final Context context, final AttributeSet attrs) { + this(context, attrs, android.R.attr.textViewStyle); + } - public ShortTimeView(final Context context, final AttributeSet attrs, final int defStyle) { - super(context, attrs, defStyle); - mTicker = new TickerRunnable(this); - mPreferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); - if (mPreferences != null) { - mPreferences.registerOnSharedPreferenceChangeListener(this); - } - updateTimeDisplayOption(); - } + public ShortTimeView(final Context context, final AttributeSet attrs, final int defStyle) { + super(context, attrs, defStyle); + mTicker = new TickerRunnable(this); + mPreferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); + if (mPreferences != null) { + mPreferences.registerOnSharedPreferenceChangeListener(this); + } + updateTimeDisplayOption(); + } - @Override - public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) { - if (KEY_SHOW_ABSOLUTE_TIME.equals(key)) { - updateTimeDisplayOption(); - invalidateTime(); - } - } + @Override + public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) { + if (KEY_SHOW_ABSOLUTE_TIME.equals(key)) { + updateTimeDisplayOption(); + invalidateTime(); + } + } - public void setTime(final long time) { - mTime = time; - invalidateTime(); - } + public void setTime(final long time) { + mTime = time; + invalidateTime(); + } - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - post(mTicker); - } + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + post(mTicker); + } - @Override - protected void onDetachedFromWindow() { - removeCallbacks(mTicker); - super.onDetachedFromWindow(); - } + @Override + protected void onDetachedFromWindow() { + removeCallbacks(mTicker); + super.onDetachedFromWindow(); + } - private void invalidateTime() { - if (mShowAbsoluteTime) { - setText(formatSameDayTime(getContext(), mTime)); - } else { - setText(getRelativeTimeSpanString(mTime, System.currentTimeMillis(), DateUtils.MINUTE_IN_MILLIS, - DateUtils.FORMAT_ABBREV_ALL)); - } - } + private void invalidateTime() { + if (mShowAbsoluteTime) { + setText(formatSameDayTime(getContext(), mTime)); + } else { + final long current = System.currentTimeMillis(); + if (Math.abs(current - mTime) > 60 * 1000) { + setText(getRelativeTimeSpanString(mTime, System.currentTimeMillis(), + DateUtils.MINUTE_IN_MILLIS, DateUtils.FORMAT_ABBREV_ALL)); + } else { + setText(R.string.just_now); + } + } + } - private void updateTimeDisplayOption() { - if (mPreferences == null) return; - mShowAbsoluteTime = mPreferences.getBoolean(KEY_SHOW_ABSOLUTE_TIME, false); - } + private void updateTimeDisplayOption() { + if (mPreferences == null) return; + mShowAbsoluteTime = mPreferences.getBoolean(KEY_SHOW_ABSOLUTE_TIME, false); + } - private static class TickerRunnable implements Runnable { + private static class TickerRunnable implements Runnable { - private final ShortTimeView mTextView; + private final ShortTimeView mTextView; - private TickerRunnable(final ShortTimeView view) { - mTextView = view; - } + private TickerRunnable(final ShortTimeView view) { + mTextView = view; + } - @Override - public void run() { - final Handler handler = mTextView.getHandler(); - if (handler == null) return; - mTextView.invalidateTime(); - final long now = SystemClock.uptimeMillis(); - final long next = now + TICKER_DURATION - now % TICKER_DURATION; - handler.postAtTime(this, next); - } - } + @Override + public void run() { + final Handler handler = mTextView.getHandler(); + if (handler == null) return; + mTextView.invalidateTime(); + final long now = SystemClock.uptimeMillis(); + final long next = now + TICKER_DURATION - now % TICKER_DURATION; + handler.postAtTime(this, next); + } + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/SquareCircularImageView.java b/twidere/src/main/java/org/mariotaku/twidere/view/SquareCircularImageView.java index 5fb7509a6..b823cca9b 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/SquareCircularImageView.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/SquareCircularImageView.java @@ -23,7 +23,7 @@ import android.content.Context; import android.util.AttributeSet; import android.view.ViewGroup; -public class SquareCircularImageView extends ProfileImageView { +public class SquareCircularImageView extends ShapedImageView { public SquareCircularImageView(final Context context) { this(context, null); diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/TabPagerIndicator.java b/twidere/src/main/java/org/mariotaku/twidere/view/TabPagerIndicator.java index 4004d6143..542dad7db 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/TabPagerIndicator.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/TabPagerIndicator.java @@ -408,7 +408,9 @@ public class TabPagerIndicator extends RecyclerView implements PagerIndicator { final int count = mIndicator.getCount(); if (count == 0) return; final int parentHeight = mIndicator.getHeight(), parentWidth = mIndicator.getWidth(); - final int width = Math.max(parentWidth / count, child.getMeasuredWidth()); + final int decoratedWidth = getDecoratedMeasuredWidth(child); + final int decoratorWidth = decoratedWidth - child.getMeasuredWidth(); + final int width = Math.max(parentWidth / count - decoratorWidth, decoratedWidth); final int heightMeasureSpec = MeasureSpec.makeMeasureSpec(parentHeight, MeasureSpec.EXACTLY); final int widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY); child.measure(widthMeasureSpec, heightMeasureSpec); diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/TwidereMenuBar.java b/twidere/src/main/java/org/mariotaku/twidere/view/TwidereMenuBar.java index 9b532d0f0..0f081d81c 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/TwidereMenuBar.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/TwidereMenuBar.java @@ -37,7 +37,7 @@ public class TwidereMenuBar extends MenuBar implements MenuBarListener, Constant final int colorLight = resources.getColor(R.color.action_icon_light); mItemColor = Utils.getContrastYIQ(itemBackgroundColor, colorDark, colorLight); mPopupItemColor = Utils.getContrastYIQ(popupItemBackgroundColor, colorDark, colorLight); - mHighlightColor = ThemeUtils.getUserAccentColor(getContext()); + mHighlightColor = isInEditMode() ? 0 : ThemeUtils.getUserAccentColor(getContext()); setMenuBarListener(this); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/holder/StatusViewHolder.java b/twidere/src/main/java/org/mariotaku/twidere/view/holder/StatusViewHolder.java index 466bb1059..2da2d2198 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/holder/StatusViewHolder.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/holder/StatusViewHolder.java @@ -21,7 +21,8 @@ import org.mariotaku.twidere.util.ImageLoaderWrapper; import org.mariotaku.twidere.util.ImageLoadingHandler; import org.mariotaku.twidere.util.UserColorNicknameUtils; import org.mariotaku.twidere.util.Utils; -import org.mariotaku.twidere.view.ProfileImageView; +import org.mariotaku.twidere.view.CardMediaContainer; +import org.mariotaku.twidere.view.ShapedImageView; import org.mariotaku.twidere.view.ShortTimeView; import java.util.Locale; @@ -38,14 +39,13 @@ public class StatusViewHolder extends RecyclerView.ViewHolder implements OnClick private final IStatusesAdapter adapter; private final ImageView retweetProfileImageView; - private final ProfileImageView profileImageView; + private final ShapedImageView profileImageView; private final ImageView profileTypeView; - private final ImageView mediaPreviewView; private final TextView textView; private final TextView nameView, screenNameView; private final TextView replyRetweetView; private final ShortTimeView timeView; - private final View mediaPreviewContainer; + private final CardMediaContainer mediaPreviewContainer; private final TextView replyCountView, retweetCountView, favoriteCountView; @@ -56,7 +56,7 @@ public class StatusViewHolder extends RecyclerView.ViewHolder implements OnClick public StatusViewHolder(IStatusesAdapter adapter, View itemView) { super(itemView); this.adapter = adapter; - profileImageView = (ProfileImageView) itemView.findViewById(R.id.profile_image); + profileImageView = (ShapedImageView) itemView.findViewById(R.id.profile_image); profileTypeView = (ImageView) itemView.findViewById(R.id.profile_type); textView = (TextView) itemView.findViewById(R.id.text); nameView = (TextView) itemView.findViewById(R.id.name); @@ -65,8 +65,7 @@ public class StatusViewHolder extends RecyclerView.ViewHolder implements OnClick replyRetweetView = (TextView) itemView.findViewById(R.id.reply_retweet_status); timeView = (ShortTimeView) itemView.findViewById(R.id.time); - mediaPreviewContainer = itemView.findViewById(R.id.media_preview_container); - mediaPreviewView = (ImageView) itemView.findViewById(R.id.media_preview); + mediaPreviewContainer = (CardMediaContainer) itemView.findViewById(R.id.media_preview_container); replyCountView = (TextView) itemView.findViewById(R.id.reply_count); retweetCountView = (TextView) itemView.findViewById(R.id.retweet_count); @@ -75,7 +74,7 @@ public class StatusViewHolder extends RecyclerView.ViewHolder implements OnClick // profileImageView.setSelectorColor(ThemeUtils.getUserHighlightColor(itemView.getContext())); } - public void setupViews() { + public void setupViewListeners() { itemView.findViewById(R.id.item_content).setOnClickListener(this); itemView.findViewById(R.id.item_menu).setOnClickListener(this); @@ -87,6 +86,18 @@ public class StatusViewHolder extends RecyclerView.ViewHolder implements OnClick favoriteCountView.setOnClickListener(this); } + public void setupViewOptions() { + final float textSize = adapter.getTextSize(); + nameView.setTextSize(textSize); + textView.setTextSize(textSize); + screenNameView.setTextSize(textSize * 0.85f); + timeView.setTextSize(textSize * 0.85f); + replyRetweetView.setTextSize(textSize * 0.75f); + replyCountView.setTextSize(textSize); + replyCountView.setTextSize(textSize); + favoriteCountView.setTextSize(textSize); + } + public void displayStatus(final ParcelableStatus status) { displayStatus(adapter.getContext(), adapter.getImageLoader(), adapter.getImageLoadingHandler(), adapter.getTwitterWrapper(), status); @@ -137,15 +148,7 @@ public class StatusViewHolder extends RecyclerView.ViewHolder implements OnClick loader.displayProfileImage(profileImageView, status.user_profile_image_url); - if (media != null && media.length > 0) { - final ParcelableMedia firstMedia = media[0]; - loader.displayPreviewImageWithCredentials(mediaPreviewView, firstMedia.media_url, - status.account_id, handler); - mediaPreviewContainer.setVisibility(View.VISIBLE); - } else { - loader.cancelDisplayTask(mediaPreviewView); - mediaPreviewContainer.setVisibility(View.GONE); - } + mediaPreviewContainer.displayMedia(media, loader, status.account_id, null, handler); if (translation != null) { textView.setText(translation.getText()); } else { @@ -254,19 +257,10 @@ public class StatusViewHolder extends RecyclerView.ViewHolder implements OnClick loader.displayProfileImage(profileImageView, user_profile_image_url); - if (media != null && media.length > 0) { - final String textUnescaped = cursor.getString(indices.text_unescaped); - final ParcelableMedia firstMedia = media[0]; - textView.setText(textUnescaped); - loader.displayPreviewImageWithCredentials(mediaPreviewView, firstMedia.media_url, - account_id, adapter.getImageLoadingHandler()); - mediaPreviewContainer.setVisibility(View.VISIBLE); - } else { - final String text_unescaped = cursor.getString(indices.text_unescaped); - loader.cancelDisplayTask(mediaPreviewView); - textView.setText(text_unescaped); - mediaPreviewContainer.setVisibility(View.GONE); - } + final String text_unescaped = cursor.getString(indices.text_unescaped); + mediaPreviewContainer.displayMedia(media, loader, account_id, null, + adapter.getImageLoadingHandler()); + textView.setText(text_unescaped); if (reply_count > 0) { replyCountView.setText(Utils.getLocalizedNumber(Locale.getDefault(), reply_count)); @@ -310,7 +304,7 @@ public class StatusViewHolder extends RecyclerView.ViewHolder implements OnClick return (CardView) itemView.findViewById(R.id.card); } - public ProfileImageView getProfileImageView() { + public ShapedImageView getProfileImageView() { return profileImageView; } @@ -318,6 +312,14 @@ public class StatusViewHolder extends RecyclerView.ViewHolder implements OnClick return profileTypeView; } + public void displaySampleStatus() { + nameView.setText("User"); + screenNameView.setText("@user"); + timeView.setTime(System.currentTimeMillis()); + textView.setText("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam faucibus quis purus ac malesuada. Duis id vulputate magna, a eleifend amet."); + mediaPreviewContainer.displayMedia(R.drawable.profile_image_nyan_sakamoto, + R.drawable.profile_image_nyan_sakamoto_santa); + } @Override public void onClick(View v) { diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/iface/IThemedView.java b/twidere/src/main/java/org/mariotaku/twidere/view/iface/IThemedView.java new file mode 100644 index 000000000..971e60871 --- /dev/null +++ b/twidere/src/main/java/org/mariotaku/twidere/view/iface/IThemedView.java @@ -0,0 +1,31 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2014 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.view.iface; + +import android.content.res.ColorStateList; + +/** + * Created by mariotaku on 14/12/19. + */ +public interface IThemedView { + + public void setThemeTintColor(ColorStateList color); + +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/themed/ThemedAutoCompleteTextView.java b/twidere/src/main/java/org/mariotaku/twidere/view/themed/ThemedAutoCompleteTextView.java index 724ce01e4..ac90d82c5 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/themed/ThemedAutoCompleteTextView.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/themed/ThemedAutoCompleteTextView.java @@ -20,24 +20,31 @@ package org.mariotaku.twidere.view.themed; import android.content.Context; +import android.content.res.ColorStateList; import android.util.AttributeSet; import android.widget.AutoCompleteTextView; import org.mariotaku.twidere.util.ThemeUtils; +import org.mariotaku.twidere.util.accessor.ViewAccessor; +import org.mariotaku.twidere.view.iface.IThemedView; -public class ThemedAutoCompleteTextView extends AutoCompleteTextView { +public class ThemedAutoCompleteTextView extends AutoCompleteTextView implements IThemedView { - public ThemedAutoCompleteTextView(final Context context) { - this(context, null); - } + public ThemedAutoCompleteTextView(final Context context) { + this(context, null); + } - public ThemedAutoCompleteTextView(final Context context, final AttributeSet attrs) { - this(context, attrs, android.R.attr.editTextStyle); - } + public ThemedAutoCompleteTextView(final Context context, final AttributeSet attrs) { + this(context, attrs, android.R.attr.editTextStyle); + } - public ThemedAutoCompleteTextView(final Context context, final AttributeSet attrs, final int defStyle) { - super(context, attrs, defStyle); + public ThemedAutoCompleteTextView(final Context context, final AttributeSet attrs, final int defStyle) { + super(context, attrs, defStyle); ThemeUtils.initTextView(this); - } + } + @Override + public void setThemeTintColor(ColorStateList color) { + ViewAccessor.setBackgroundTintList(this, color); + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/themed/ThemedEditText.java b/twidere/src/main/java/org/mariotaku/twidere/view/themed/ThemedEditText.java index 3b2e417fc..0ec7efa05 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/themed/ThemedEditText.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/themed/ThemedEditText.java @@ -20,12 +20,15 @@ package org.mariotaku.twidere.view.themed; import android.content.Context; +import android.content.res.ColorStateList; import android.util.AttributeSet; import android.widget.EditText; import org.mariotaku.twidere.util.ThemeUtils; +import org.mariotaku.twidere.util.accessor.ViewAccessor; +import org.mariotaku.twidere.view.iface.IThemedView; -public class ThemedEditText extends EditText { +public class ThemedEditText extends EditText implements IThemedView { public ThemedEditText(final Context context) { this(context, null); @@ -40,4 +43,8 @@ public class ThemedEditText extends EditText { ThemeUtils.initTextView(this); } + @Override + public void setThemeTintColor(ColorStateList color) { + ViewAccessor.setBackgroundTintList(this, color); + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/themed/ThemedMultiAutoCompleteTextView.java b/twidere/src/main/java/org/mariotaku/twidere/view/themed/ThemedMultiAutoCompleteTextView.java index e9e8ed942..9b8ca5bf5 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/themed/ThemedMultiAutoCompleteTextView.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/themed/ThemedMultiAutoCompleteTextView.java @@ -20,24 +20,31 @@ package org.mariotaku.twidere.view.themed; import android.content.Context; +import android.content.res.ColorStateList; import android.util.AttributeSet; import android.widget.MultiAutoCompleteTextView; import org.mariotaku.twidere.util.ThemeUtils; +import org.mariotaku.twidere.util.accessor.ViewAccessor; +import org.mariotaku.twidere.view.iface.IThemedView; -public class ThemedMultiAutoCompleteTextView extends MultiAutoCompleteTextView { +public class ThemedMultiAutoCompleteTextView extends MultiAutoCompleteTextView implements IThemedView { - public ThemedMultiAutoCompleteTextView(final Context context) { - this(context, null); - } + public ThemedMultiAutoCompleteTextView(final Context context) { + this(context, null); + } - public ThemedMultiAutoCompleteTextView(final Context context, final AttributeSet attrs) { - this(context, attrs, android.R.attr.editTextStyle); - } + public ThemedMultiAutoCompleteTextView(final Context context, final AttributeSet attrs) { + this(context, attrs, android.R.attr.editTextStyle); + } - public ThemedMultiAutoCompleteTextView(final Context context, final AttributeSet attrs, final int defStyle) { - super(context, attrs, defStyle); + public ThemedMultiAutoCompleteTextView(final Context context, final AttributeSet attrs, final int defStyle) { + super(context, attrs, defStyle); ThemeUtils.initTextView(this); - } + } + @Override + public void setThemeTintColor(ColorStateList color) { + ViewAccessor.setBackgroundTintList(this, color); + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/themed/ThemedTextView.java b/twidere/src/main/java/org/mariotaku/twidere/view/themed/ThemedTextView.java index a96ee9658..6065a4153 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/themed/ThemedTextView.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/themed/ThemedTextView.java @@ -20,24 +20,30 @@ package org.mariotaku.twidere.view.themed; import android.content.Context; +import android.content.res.ColorStateList; import android.util.AttributeSet; import android.widget.TextView; import org.mariotaku.twidere.util.ThemeUtils; +import org.mariotaku.twidere.view.iface.IThemedView; -public class ThemedTextView extends TextView { +public class ThemedTextView extends TextView implements IThemedView { - public ThemedTextView(final Context context) { - this(context, null); - } + public ThemedTextView(final Context context) { + this(context, null); + } - public ThemedTextView(final Context context, final AttributeSet attrs) { - this(context, attrs, android.R.attr.textViewStyle); - } + public ThemedTextView(final Context context, final AttributeSet attrs) { + this(context, attrs, android.R.attr.textViewStyle); + } - public ThemedTextView(final Context context, final AttributeSet attrs, final int defStyle) { - super(context, attrs, defStyle); + public ThemedTextView(final Context context, final AttributeSet attrs, final int defStyle) { + super(context, attrs, defStyle); ThemeUtils.initTextView(this); - } + } + @Override + public void setThemeTintColor(ColorStateList color) { + setLinkTextColor(color); + } } diff --git a/twidere/src/main/java/twitter4j/TwitterImpl.java b/twidere/src/main/java/twitter4j/TwitterImpl.java index 7dd2adcb4..b013d0640 100644 --- a/twidere/src/main/java/twitter4j/TwitterImpl.java +++ b/twidere/src/main/java/twitter4j/TwitterImpl.java @@ -124,7 +124,8 @@ final class TwitterImpl extends TwitterBaseImpl implements Twitter { ensureAuthorizationEnabled(); final String url = conf.getRestBaseURL() + ENDPOINT_BLOCKS_CREATE; final String signUrl = conf.getSigningRestBaseURL() + ENDPOINT_BLOCKS_CREATE; - return factory.createUser(post(url, signUrl, new HttpParameter("screen_name", screenName), INCLUDE_ENTITIES)); + return factory.createUser(post(url, signUrl, new HttpParameter("screen_name", screenName), + INCLUDE_ENTITIES)); } @Override @@ -132,7 +133,8 @@ final class TwitterImpl extends TwitterBaseImpl implements Twitter { ensureAuthorizationEnabled(); final String url = conf.getRestBaseURL() + ENDPOINT_FAVORITES_CREATE; final String signUrl = conf.getSigningRestBaseURL() + ENDPOINT_FAVORITES_CREATE; - return factory.createStatus(post(url, signUrl, new HttpParameter("id", id), INCLUDE_ENTITIES)); + return factory.createStatus(post(url, signUrl, new HttpParameter("id", id), INCLUDE_ENTITIES, + INCLUDE_REPLY_COUNT, INCLUDE_DESCENDENT_REPLY_COUNT)); } @Override @@ -302,7 +304,7 @@ final class TwitterImpl extends TwitterBaseImpl implements Twitter { ensureAuthorizationEnabled(); return factory.createStatus(post(conf.getRestBaseURL() + ENDPOINT_FAVORITES_DESTROY, conf.getSigningRestBaseURL() + ENDPOINT_FAVORITES_DESTROY, new HttpParameter("id", id), - INCLUDE_ENTITIES)); + INCLUDE_ENTITIES, INCLUDE_REPLY_COUNT, INCLUDE_DESCENDENT_REPLY_COUNT)); } @Override @@ -347,7 +349,8 @@ final class TwitterImpl extends TwitterBaseImpl implements Twitter { public Status destroyStatus(final long statusId) throws TwitterException { ensureAuthorizationEnabled(); return factory.createStatus(post(conf.getRestBaseURL() + "statuses/destroy/" + statusId + ".json", - conf.getSigningRestBaseURL() + "statuses/destroy/" + statusId + ".json", INCLUDE_ENTITIES)); + conf.getSigningRestBaseURL() + "statuses/destroy/" + statusId + ".json", INCLUDE_ENTITIES, + INCLUDE_REPLY_COUNT, INCLUDE_DESCENDENT_REPLY_COUNT)); } @Override diff --git a/twidere/src/main/res/anim/activity_close_enter.xml b/twidere/src/main/res/anim/activity_close_enter.xml index b592460e1..2fe3ed0d7 100644 --- a/twidere/src/main/res/anim/activity_close_enter.xml +++ b/twidere/src/main/res/anim/activity_close_enter.xml @@ -1,24 +1,24 @@ + android:background="@android:color/transparent" + android:duration="@integer/activity_anim_time" + android:fillAfter="true" + android:fillBefore="true" + android:fillEnabled="true" + android:interpolator="@android:interpolator/accelerate_quint" + android:shareInterpolator="false" + android:zAdjustment="top"> - + - + \ No newline at end of file diff --git a/twidere/src/main/res/anim/activity_close_exit.xml b/twidere/src/main/res/anim/activity_close_exit.xml index 467c182d9..f8ebfe376 100644 --- a/twidere/src/main/res/anim/activity_close_exit.xml +++ b/twidere/src/main/res/anim/activity_close_exit.xml @@ -1,12 +1,12 @@ + android:duration="@integer/activity_anim_time" + android:interpolator="@android:interpolator/accelerate_quint" + android:shareInterpolator="false" + android:zAdjustment="top"> - + \ No newline at end of file diff --git a/twidere/src/main/res/anim/activity_open_enter.xml b/twidere/src/main/res/anim/activity_open_enter.xml index c323bc1ab..78922a1e4 100644 --- a/twidere/src/main/res/anim/activity_open_enter.xml +++ b/twidere/src/main/res/anim/activity_open_enter.xml @@ -1,12 +1,12 @@ + android:duration="@integer/activity_anim_time" + android:interpolator="@android:interpolator/decelerate_quint" + android:shareInterpolator="false" + android:zAdjustment="top"> - + \ No newline at end of file diff --git a/twidere/src/main/res/anim/activity_open_exit.xml b/twidere/src/main/res/anim/activity_open_exit.xml index d1bc43222..33af6b965 100644 --- a/twidere/src/main/res/anim/activity_open_exit.xml +++ b/twidere/src/main/res/anim/activity_open_exit.xml @@ -1,24 +1,24 @@ + android:background="@android:color/transparent" + android:duration="@integer/activity_anim_time" + android:fillAfter="true" + android:fillBefore="true" + android:fillEnabled="true" + android:interpolator="@android:interpolator/decelerate_quint" + android:shareInterpolator="false" + android:zAdjustment="normal"> - + - + \ No newline at end of file diff --git a/twidere/src/main/res/drawable-hdpi/ic_action_twitter.png b/twidere/src/main/res/drawable-hdpi/ic_action_twitter.png old mode 100644 new mode 100755 index 852a2e0d81a7aba47e6535d6e59a7f44e3f6c573..58dbc6fe0456c8beeb1e53e117fd9057a6d761df GIT binary patch delta 912 zcmV;B18@A$1f>U%BYy*INklw<#NA$c#^T^9-w${5Fh08Q{-(*3B;d@ftKcfnQ2 z$G`!|njt;rA}xN7s7>7449eB}&a)k$2Uq~Qfm&+4b=5K%KtNxJo`TL`8N}yY#PM@- z7jbuGVnK|?{oFE)G9sa8!GFDYStMr_zxO*;v<|4ZtUhsy zkAW#9X;~}og=Bfni3i{g&@dRH*7P(mD_&A9c_st2WIxCxZZ+5nOnDXoC1NIFKr4{x zFbTncTK_n>0w#lDCU*ZIHBvPOURhJE1_nT=Nu~Een#U8!$GDc~qyUovCD03c6R%8D zJ=~`dzkk@LhK~V#fL#VdeF}KSuED@wpB%G+s28SlJ`MW&6fwqrC9VboFO2bj!@LYc zCdP5z2xfy`KE)idXAr;8moLP?c8XMkv0$Wc!7}kbxnGBYW?#M#1C12f?OVtZe+2Q% zLpVbW=$l>hpdqASiJTVhjmN;75I%1M(LB)mV1Fmbhs>jdPz@dJFHVGrS5A`I2pXAy~HhJc?3J*3Av+#ne<9ZJmZD0%HbzRZnG!T7>YLBW-jf89I)NmOXQ281;8$y=La^UE2SBe^+1}f mYvIm%z|u--#&q}|_yhG7-!YXQsssQ400{s|MNUMnLSTZ^9jadd delta 568 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 bfiQu8HAwz-QStr?00000NkvXXu0mjfr_>cl literal 0 HcmV?d00001 diff --git a/twidere/src/main/res/drawable-hdpi/ic_follow_none.png b/twidere/src/main/res/drawable-hdpi/ic_follow_none.png new file mode 100644 index 0000000000000000000000000000000000000000..04ac490ff145f112b4a363703a74c853cf299bfb GIT binary patch literal 2924 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 literal 0 HcmV?d00001 diff --git a/twidere/src/main/res/drawable-hdpi/ic_follow_requested.png b/twidere/src/main/res/drawable-hdpi/ic_follow_requested.png new file mode 100644 index 0000000000000000000000000000000000000000..f91ea15e84799167f97adb9e3a7511dcff1fd83c GIT binary patch literal 4326 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 diff --git a/twidere/src/main/res/drawable-mdpi/ic_follow_bidirectional.png b/twidere/src/main/res/drawable-mdpi/ic_follow_bidirectional.png new file mode 100644 index 0000000000000000000000000000000000000000..efb14298e33ba19d217ade2186b24aaa17d36328 GIT binary patch literal 3225 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 literal 0 HcmV?d00001 diff --git a/twidere/src/main/res/drawable-mdpi/ic_follow_none.png b/twidere/src/main/res/drawable-mdpi/ic_follow_none.png new file mode 100644 index 0000000000000000000000000000000000000000..923cbb18f7aba331ffeb5330346e498e9a6b433e GIT binary patch literal 2849 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 literal 0 HcmV?d00001 diff --git a/twidere/src/main/res/drawable-mdpi/ic_follow_outgoing.png b/twidere/src/main/res/drawable-mdpi/ic_follow_outgoing.png new file mode 100644 index 0000000000000000000000000000000000000000..7d2356e469a23d578fe4658d7fba9e77694bfb0b GIT binary patch literal 2972 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 literal 0 HcmV?d00001 diff --git a/twidere/src/main/res/drawable-nodpi/profile_image_nyan_sakamoto.jpg b/twidere/src/main/res/drawable-nodpi/profile_image_nyan_sakamoto.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca6f42d39fb955b3bd711c1b42a692d5a4fc0779 GIT binary patch literal 19814 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 literal 0 HcmV?d00001 diff --git a/twidere/src/main/res/drawable-nodpi/profile_image_nyan_sakamoto_santa.jpg b/twidere/src/main/res/drawable-nodpi/profile_image_nyan_sakamoto_santa.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8fc3e75e243d12b1a0030f9e75d080fa4b328012 GIT binary patch literal 20796 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

q?^JOdY&D#=#SJF_O!!AuPip=l5Bo7N(;9{yLP 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 mr25qGeuS0#pzeXoK+K;!=fmH2Vo z!^ZutRsnV~_60|_k?X6F%PH^1>`!CRK2T`pTeE$e8*jj0hpoZ<+>f8nCw0Usz;_TR z{nYf3QZ~E}@%5y{E&Xs>YxWu6ajw78en0pYj0cZ^7k}~Nr=<3*0(=j_lQ|?`IuX83 zN>1>4+Se!TU!dP5?$0H7O-|xw6+pp0n}_8Vf2#wVaO6rMFA!iUeKr*8m*DZQO*#kZY zXK?cW?0+!`Ad!5Y{`n{uV0T9XU-EXb3eXd4C&1{0#Q)LnG&l*Arayq6!94IzLL04h zdkFz{T5XsF5E-*q&gCHJZzX4(UY!y%q|HNsy;cL>0ucCvkWB$c!OP$ypucrit3ZGw zR&t8~eIV0oQ0rOm-zUJ+RtEydX=#l@fJUnwZ+`(?`XAt`{dZ@#CQSeW{9|>*D!?)b z*IP*=jypu~dLx;eRe*soYQO!knK{nD_YmOS5K|@r+%nKEZXM_m;y}PyeS?%Ez!w2F zY+r*;099^Qfw#c}Ax;>_YLhh%0rV+sZsrVdA}H|JoDd!TDhy74#SkPwi|p(Tp5y1m zV1Fu5k)plZ4G6|F`+6M*wIBgp9Zz3>kAr?-1keMrz1t@QUloHSNC3ACTFPTF{7GWt zH#({IXWsl|lf)1}YyUGaDT((H`qZfW6~WGZ6Tt$wEKp@fb-iJ+9Bajn%4eE=^Ug2V zZWIBW2*bImR6Zw`usP1E;4#Ce;F)AHqJIhCM9|(~Hdp|3xS{id80{uTW)b}17{;<~ zL=_<0FmDJIO;tLZ80fS%I?DOiwC&Z|;9OAVvcc-Cj<;0X zS800>f&XbWWEp1?AWI01*Ltr6`XJJVXb5P_u4;+;M~72DHAS5n)DyVsdmY|_1jzN) zEfGEWhk{3e_5u22)-yu~r@w+9L04m2Cq^BqLR0}d((zbasQ|H*ELJ;d1{CYe#qvAN zfLKZvtDQ6higo5<`JHA!EG3K8PMQJ5I&-o7PBS2ulErH09{q|XP}xV!2mk;807*qo IM6N<$f)-O#e*gdg delta 737 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 literal 0 HcmV?d00001 diff --git a/twidere/src/main/res/drawable-xhdpi/ic_follow_incoming.png b/twidere/src/main/res/drawable-xhdpi/ic_follow_incoming.png new file mode 100644 index 0000000000000000000000000000000000000000..d0885edfc37789abb7698fe93ac8b9f5f919af83 GIT binary patch literal 3477 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 LeV|jNWgq?@VKRNp literal 0 HcmV?d00001 diff --git a/twidere/src/main/res/drawable-xhdpi/ic_follow_none.png b/twidere/src/main/res/drawable-xhdpi/ic_follow_none.png new file mode 100644 index 0000000000000000000000000000000000000000..ab1fbdc218f10e9b2b61638a2bcf601125241058 GIT binary patch literal 3096 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 F{{h&2m~j9A literal 0 HcmV?d00001 diff --git a/twidere/src/main/res/drawable-xhdpi/ic_follow_requested.png b/twidere/src/main/res/drawable-xhdpi/ic_follow_requested.png new file mode 100644 index 0000000000000000000000000000000000000000..b30f62b1f809a3410d9a6071b2a4bbf816b59add GIT binary patch literal 5045 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 W!hdXK9R2f-1E?y#Q>d4-3jY`H7onX1 literal 0 HcmV?d00001 diff --git a/twidere/src/main/res/drawable-xxhdpi/ic_action_twitter.png b/twidere/src/main/res/drawable-xxhdpi/ic_action_twitter.png old mode 100644 new mode 100755 index b26b990f0a5c83b227d945d1a456a3ac84718cda..f27800a60238e81eb437a780881a218e55335b29 GIT binary patch literal 2001 zcmb`I`9IT-1IPECZCE0bxpE(oGB=6l7^bz{XIPd#i}IoPR5ncED_6vP$h9F2L%Grx zw!Uf#nR1mJ^{JF=j&+Uf+xKtyet&p9UysN0$JZ~f8(ui~-EdVn2n5=V@o@F|-T41T z3ig}tOE24kK$4{xS0}$K;VTu=3@TcY*K=oO7j$K-*URTLsms{At4#S&dfmAo&y3@k z@_<`@#3&W-u^4LGc{=(zc2LQ~I24&foU3gkMuhjJ4rNR)B?%r0%F8az5nwxHN5PQY zA1_j0klRzJ8g^w#w8%z>gMvb7WGtkNf~DM-%pG5l8h|L1I6=wz|C{JvN0CTd&pl>G z=r$vH+(z8Ad6gjTZ|+;qI~%>N`v$_&9w|0#e+;en?u}IeY|q&kCj+)H=2*YC=GxW@ z-Wd0b?j8OiwqM}F!EU5XwL$QVkhkT^KQBw^CP&c%UueJ#D8uBzhvbpbL0N zGmV9-GB65#J`7oKH1#i^l$m9&F6jCLRFO03s9RSC@})a0X;N=a5eXIwjeHGnvJB8K z4&h0(!^=p%98)3%F!X74hd&ob+*gKRT?h5&Ly}Q6+nlkv|HC4{t}NY zWo6OuMwWnNOyHKVlZytcR`1+yJou}>JZSQ-wt!F#N_FB(X zEveEZc{>b_Tc}I12NxzpuF-Rqg z@N}cQk#=9;wdzDO`(EQ_8Y5&nX~^FrIfeB;F*wb0og1ngMqH#PfhA@(A@E(yek2G!}84L9PSe8*Sb5(RB(x_r3vV7 zBw)bSb&uOQfWGl8li{YL3V(WA!td)zt&NTWgg$iT+GnMt07T=D2cl0~oGx#ZlZHa< zVgkV=kuI&APgkW5!E!jb`Lp+qGvRs#P0;Qw!WZci6s4K^hb>OYouUiF()l>PfB#zH z+0|t2`6tSc^(`y`o^HDkewz7QsbI?}N>p6dZ1YOxHl^8{aU&=E@r?Fxt-`NJliI+_ zy|+Ot5=1*u@#=i?B2r=@rrj_E?nz;u5nh7G4WD7Vs6qjoex`>ExWmI*v%f;3Ux@MV zGDuAV`V@SFe^PE4sw4?tU7W#h!kfNj4nU$a_8co zbGl~Qc{mJ(r8A?(kF)&d82bmg4l_xtXuX7a=4<|YoX^`k=kV%$sMJ#3iDawnXJ(Vz zYX0U%fWOPzs0S85NLu_T*}eAsrhryVV8N?5=#V1+C*sb1IuoBp5keposO*`ed!XUP zSN%pyFAfBcxcP#kb({r|VT1t?wvkg=<;LAp(drQK>I{y;jwtY% zXe-_{cXp;)>2hXbM=NLBof?0p1=x*m6frk{6ciVODtfb*7UbSt1y9M>-E&$XoxQdh z*SmVT6ASmbsy^NH&qO5~MW^zID{B)Yafs^9u(FF9w44MM*i+*w(YY9e!`8QRV<$5^Plt+_;_ z5T26Dl5b2ZU;<(t>gyg4CA-(S*w@9nT=b5w({--4;PZ;I4Z;xPlR-iZ#4daWTX55G zpA`f9P!BTZnj!p>knRZ8Jr5Vk>*bYnn0WuHp=L7@2VaZQa~(x=wRKS&HNVI7!V~!u z@;bK^y!tt-;Rbv0LvaRLd-2Nv;j10k9C)gM45-%qe+W(~B^C4%KNc5V%~Ah-)gTNS K=i1_ozxE$n&8gP_ delta 1201 zcmV;i1WxoF#E-;r;uQFc z_=0$axSN=5^Es*fEV1~%Mp;K}C5}ZHd^QdcYlt~<2)vP4&myRL(QIO#MuyKMo+ti} z!|>7UC+>*#Rnxzx5w{WVVn)@dd|`gsN5m`*jK7%pI03^)GDJKR{<7(3IJfkGk*rc(>-0G@fQ+%9Ws6-uMwMwZy`$b?~khd;!2_h)1X2Go_&~wQ!eus zah^&68fF+&Gy7qeGo4xm#_x=FJ+8YVdf>|#gS#`=Ou~UN6vmn9IKhsvv3Uj{AUAT% za9e=U{|u7z>y<8yq18phPhf^`V&6|}Ar9epPl*Ay1%H@rz{4nTQj+xiMNx%SvKfl; z(Q*B-LPZRi%b>?msAMJK`NtIa{%HOr7O4ut@%Y|%@Rg|!KL3Vd<8uvAtTGGgwK0WT zor(?g|GZXce0Dn82S3ic;ST&Q07TfYz!0Gr-N|G#sO!>Sy#_^*8?4jC==sD0 z;fw$a7C|2fP^F6i%OaNV>QLn_K=7RKumGjH2!D`4oSdOsIH;gK>}EH#NGIR_-Y0%P z%pbh;sgnR#eI`JkR{MWwFnfF^K%;KyC$|GW_(*_5I@SOcJ`x~bM*%X?yYag5yDVKn zgIj~8IWG%v%F-EFeD`Yp|A)BB(j7F&y~OVx6yTw<-On~e;BDdE9uuI3_!W*JcUQh7bXCOmEJzi%w@&nq+W3s?!F82hpl%$DW{Z1C9TMi%rwM`Wg@U{t6S_ zPOhTuB2Kf{xUWA#gcF7vpVyjqTBZVf=GzSxpxO9ir`WFY%0S}}Xtn5)pa=yxs9{pe zVY}reAShoqV4;3e`-WQrBBY^N*Q2ojZGTEnJh~X1cj0A+H7d?JjBPh0AVwC}5lR%t ziRYdPx;8{ut~gy~m$<}_h7X`+p>h?i)2*}2x*5J)gPjyDcJBr<(dgVEU5)Dm1~q6g zRC_wxLCTqr&APR?&R|l5Ooz8oZuNqJ%ZTUT!z=OgEb%h&9`TK4J0vD>C7Ea13xAx; zA0~b>pt9wIe_K3xpBn;dwWjO7-8e$)?aCHH@U2-#l5|^DynKMdF2j$xJqO=n_}d|u z0&fWG&9%t1{Jt?#N=fj}S-2r2{ufj}S-2m}IwKp+qZ1OkCTAh3_W1%iT=d`9y1 P00000NkvXXu0mjf7p*@V diff --git a/twidere/src/main/res/drawable-xxhdpi/ic_follow_bidirectional.png b/twidere/src/main/res/drawable-xxhdpi/ic_follow_bidirectional.png new file mode 100644 index 0000000000000000000000000000000000000000..42622d34057e4f44f17571797db223f269aa7682 GIT binary patch literal 4316 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 I@|L0h2j|xarvLx| literal 0 HcmV?d00001 diff --git a/twidere/src/main/res/drawable-xxhdpi/ic_follow_blocked.png b/twidere/src/main/res/drawable-xxhdpi/ic_follow_blocked.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e16cdea9d7e0cb8eaf60e87dec7c3af6372490 GIT binary patch literal 5330 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 literal 0 HcmV?d00001 diff --git a/twidere/src/main/res/drawable-xxhdpi/ic_follow_incoming.png b/twidere/src/main/res/drawable-xxhdpi/ic_follow_incoming.png new file mode 100644 index 0000000000000000000000000000000000000000..c0355f5da26fc4c292b540ad4249cf4a8017a4a8 GIT binary patch literal 3919 zcmcha=Q|q=7siu_y=$k`c!&FU^2K@&q%^t@S3$D;zzoM<8A{Ad4BWan8{Zj5yW=4V{x< zX=z`y+lhx;QbG2$lM)Rm=!=nyzyy)I8lp4+2Kexu2LVu?B~Y>*%T%#hr`*@H4kROF zI$-JO`rzR4M_qsnXBwt=1xj#_l!bHhZAJb80qBxj73-d}M4u=+X99fkoED?Nkw|PF z`)I1m((g{k(_NzB3HJ7_T?==&PHdfL5@(Fw*l>RV%yN^u_51EwR>+g?hH%BBw4SXq6Qw*JmEeDnTyhTZ zrM&z+9nIceCKf!|o^r%?vCydK@^4p*#K){gp53tD#s8gnsE*~<***_P{k>Jan33YD*U5TfCnav;{EF}Yyuwmv8l6y)uEd&S+ z(q^N2PbH-da#00;S5qFlT*2F8K<_uMPXR;0zWrdmkULLlEWxIY%ugAaf)J_<;Y~U+ z!0BKYx{w_lvs-E;izwq9CQ%KN2!S?@o z38|s8dUKjh+b<+fLjn4SvZsOuZJEaaKZ3@~l=$fo%{{Z4K3pGZc^W6@9#(NHvs58J*@%;>J}YO2SZi2~V$-4aATfePU1@hqRNR>x{5JX@rqi6Gdf z@^ZKHEkvMW=CCHVBiM&B!>M+uCb~S!cO2Q|f=@y|V~4-xnTdZ@@ut7S{vlSf)x;*w z#-a@WjcUwxLy4cIqmgf(|7k!KucfS~LJ7E%bu^|nXuXAb4!Y}8cXOI^JA}3A#SZqh za6LmHf8e#5IKlP?@pyW3uv-YL@OvRqcTpoY2;B-DC6v8c-XQpk{!5W?wpXo|*c;#8 zjj7ck`JsAAoXBudp2wm$(#nI4kgg(DP#BaXoYZyS9`T$Pt!k}bBAO+H5o1kMK_y>@ za_T?ihpUh4DL$-LeWm(JhQYaICIqdy@@7~V5}uxuf_;lk$3|k`%qz4R zh}9(qCstn3FHl`A`ziKW7@|J-`PI*=@<-+OCmbeZ1Q2&Woed_fw(Sf4ChgNZh&fm+ zU0>o~f-DicAJa6;*c{6}=KCCz6jK`$w$vOLuvAejIiHNnBxhjcFBZ=u*2-!keXCAg4_ek> zYe|rFNIirPVhq8{w=3|ad!~1#FQu=@ca%GuGgg4jm&{ixtYuQtwt9^m#fZ_0gyNFT ze8~ajPg6y(V!JOyGpAfVVjqW9qLjs5wMxrML!7$4j=zpSRcj<$vE@PM>)cl#PHr*6qRpZ+xTm-=5}Oi+ zlIs$J=o@HiGmrAMveTA{)^s;3JO7Sw*9ALbU*6PmMR9@TjCaGPzf!tY*%WuJUM=~M z3zL6)PItOd|x?IIaZmY-n+iYU;5aV0-|`IPVJ5EtelRX z>4WcqztaC^_ypDho6ssV%Fe!be{%j*)|zhAo7h@Bvtf0KvyUs6{qmjku+$YX zoWJ&IEf^A)zD!#4tK7_(=$IUBnDGc41jbUe(JEi#!|5;eil-xo9xL|07YA`J+j;p>(?#_vhrtxWncaRz z!s>?pv3^QctP1Wm{rMjssE6b7%u(pxne2UZ0002)LTaiR`2aVkYNI&}_}g}`hs<-E zJ1?03Hu;`1_O?{3j2*1T=x_m)gtv`U7;!3vQA>JozP?+MlI=_|nQ&RiEgQhX(U_GW zqP>PJ^bKx#x_X9DC9z91$xr2lw=5D$%wS;#g4t97|0lW5Wrn$rPoqnw({-74?|SVh zEQ6XYUp_a1L3~&ph58XTVV<>l&wc1nfiI-t<``TUDje^waBKfuPfyr z-3c_IV+D3A-OX@-T&B&B8MEC!ZdnD)Nf5Ea5iSgI%VI)&lg#7shBIQGxqPl6(|l zwQF-!jU|OF)M(%QJ*yrHuk-kA>BE})I9YpIyRpbapiQOGB#7l@^?Q==>>oR;a*sDZ z@~9T68n+7X&+6su=`?1OdzX z!J`#PaRy;b{q(!jsN&FS5{PgZ%o4R>={L@c7G`s0T->(ND+u7yZ*@?jR;TVXcQU3m z!obwr@>M$l=#4yA{Ms9F=S>be0ikG^sfRIXA6#q&@&b2aw~dsHaSzno;#94G-^V_7 zXE9n`G69emO(!zItwqjmrpY7yQedjfho3=Unlrte{39C8L#Ztmc?Kf zF?j)JWHk|0KI%@5gNS$2=O$D0`^xVCXa(XO!fw6EK{%mX9>~C%nKu)b!rbHZ@u<|; zKZhCuN})d2d!}XV&|~-@ToUE*_wYf#IQ=YtF03KnZ%^PpXCK>Yuh_5U4}pB%?jpNJo#|BZmn QUp~qJBwSCkMBOIjKX~LU*#H0l literal 0 HcmV?d00001 diff --git a/twidere/src/main/res/drawable-xxhdpi/ic_follow_none.png b/twidere/src/main/res/drawable-xxhdpi/ic_follow_none.png new file mode 100644 index 0000000000000000000000000000000000000000..697c43a6bb721666675d02c3bf4384abe7ed6534 GIT binary patch literal 3448 zcmdUy={ppF7RG1Blzl5pmLf4CAzMip%NT zBzt9<#@LrgwlTTg=ehsDy&vv#?}u~V_j%9z@%QD#nVZ5n*@W2u001Y#Q2*9nP5$Sw zocy~N4SqBN0Bky5dV1yvJw0*rfV=KqzHR`3A!qiBAS=r$fmkx>D(Ukn32~_%;Sg5w zFB*pYV2e0JggGcC3KFP)!hnxg#>UmE4G52waDnl$KaE6Bux|61_q1E+!)VhuAJ)w( z)n79NMlW)9YO!Hr%3~8V(F8C*iUfB&v;{_}qIz7;}2Rg$8Uib_*#T zgFo(M$SB2JQ4+{w&99W8cGdXqmMmOq?$5+S=JSM+LqZ=^a&XP&GXyD00S=sJpD8ux zQSgM>jbw!&0BCy`M@IHvnE({|vQUGIkUZZwB^aO3M%*?Cz>?mj{vm)X;XvIp2M}EB zF&__(L!gU!Co;WgOMUK#TSUtP^p#8Loi{1Zf=$Rf^&HO?1tV(izJLLxkbYU7DeG0D z>+8tz1;UFedI4KU8Uzn-u>7bqrR6lutB%cC>GSl zUO@0GyTNG1CB?@2gM%Dgc(N;FkLQ@$rtbBrzfM%yTByruN?xytlr_d!q(UF!Lur* z=0TED$e+bSF?RcSe~O8Ygyq66N0MuRRKA>0!EBUoJLpt0^TXF{Dp+|%kem~zXoT`T zrWtWSRD>Z9(+ehfLy#8~{6@-Ko{CV_!Zz3%}=u_2$qrjcs*PTGTSw{hNM=ZJtq z*<#v_6@fEYFP6xkJpB1O<;ent+*!KgJR){1kM(rSukkT;>%}GWq(ToqLrTxcJ}uAF zGuPa?@KCsk#o_7UYv#}5Dkm90OcZY>XvCRw67Vi!s#Zgk1>P|*rytD!idnGj8^x$m zK#QxPLy#i!6Cf9j>PTaO_OUPx8`!dlZ0YMJ+e!j?&-0m=}s-aj%m_)O+%Ecw@v7W=)JJUGxkdUs@32I?g?CT#A+ue1+o?VL3W03Gm^Xg z!B6y)^DS)QqT%Oelf-&jrIT6hz&?@O=U<3R`bt{y2(v7*Frs)nR4lNiW)CG|cpi7z zqh;!zPwIR?h(b)$_z*FYg101Pvg)x`2yY1oh$e(|KCS<{D?H!~66$DHEtxBhlHyL) zHc!6@;WIN5h3QV2svEtBK88NlE4sy5>OX2*p4pUbXGYS;7-1CPY0CItcxr!DT1ARa z#wtEk$}D{XAB0EA=Sri_ha3GVK57J6v_so1u?4j@c?OjF4$Wu;jF6v!eugHXjmgD%&8kt#YbtUFTl_)BB`&HC$K-M%WGgB1Cvi`D9G9)tG zGk_UMG-qVi#E!d7`xA@jkF(YeZ(8^tkn4q3l zRlQzvd04A(xQ(cHd#nTIKtI96V2DYwaGzbp0(*n(= z&E#FKT?smbeuY^xHaM2VwKw@N@M3cmW{h`riPAW=oI?fd z9D+XuM=zfV7`{(w6b(p`ca_JXg74*xT7S!++N~ZA-keBW4D9mjnx530Vl>h(aT{}| zz!Q4YOVSpF$?T5L@HMwnZr3!V?x8omH%qjxYsG0LYMpKgY^lH~>^n0+jKIU`UlTtU z4=3nm;A`MY)+M$=umRYHS&LnX_0)++;Ldhndvm0i!WWdJ{ipy)_ed`=`Ua~ihXeoN zgER7SDwUA6$Bov(VZlM*%V?OsURSeWQs0+8ctWCpu|SYPKfD_@2EPdlh2dewcw0Fn zaozxDhZ8T>6c7{P50wlIDBJroZ5&Ho`@u%tkXN>UL0tP9@Rn9KK(0UR_dLKjsPoy=+(o+|EE-fZ*IqbU~rGW8KZ=#0v@m&saE{JLbKY|J} z(|J4h=nZNcJ71QboL(TKTsB7&=!hV|)u z=x~b3#Ro|D=FI1ROnw{UBwtEBMY0pU-^_Tx-Eu!#4Dv4Q%oFDQ2hR5Y>ZgaPx~m2~ z@@NVC6LZwAy5YlB6+K>U|LwhLkVAVD<#)?!lApMr;ndFogMmahky-!vnNf?^7PT!- zp2W?C9^Lo478KIup*vi@-M;+3>(lPUD(`Q23CH2z=z$;cKg^`Qr>@Q-F}Dw<2X~{^ zNkzLw^q{#wmZ0y`%T2#*v(QM#sn6AO4pp?l?fmVA=G$v6HqLkMJ8^p@xhB;smA)Yv z)p*0lN>&P2u);}%1=31r!+Q4D-ft7FvwqtrDJQ`lq+mZBWOk;H7YU$NKpL#?Lz`7hbkwbe5NSbUA+ z*8706ZzTGWHNL{5THQedlZ_#*$1oDd&o$?~K&^#&Ex+CLBQ4(}GG0)tp0}L9EFL=0 z6=rsuFtq2#*&<8{Cl5E|TSAW=ziTdIW*EcFW!#S1gCW-#o(z{YYQ8j^nQTtEb`@i6 zf5N?tw6pel!ih|L=8+WBsHbq8aZqE{d4gO5#ge?wJxi8G_Mg5{HT}Ori0HAGzzK&HeaQ(Z^b2|$TeG8}K z&=`K(?Y3y>Bc;LcH(z^iYZ{;94rk#JheiN^An?C!=5oO~$2*LZ!5BNK&l zo2yr*p z=4YQSfJdJ&o=%^57%_Q67y4;J`@a?!9J?>gEgIttk2T)PTDD?O#R+`kGas%yUBPxS z&rZb>3hOnklzkoLJ!}HxKdVt!9&xH1rhLNc;aXQY$f)#xuj~!^PcZx!y!#edZkI5o V7Q08gGJiiR00L&JU#;sD`46^jRG#^D5Auu(V|4{9Xn#r@`x3q ziV|C_)+Y7#`6u2F=XXBb*LCju!~NyN=|6+gQFBlO0026emd5kHJNdr>Q~c$I=1MaF zK&|SkuC5PLSLf09@pf|ca0CFf=yE>#8yU{A#^SJY*s)u@Jp4x-K~y{w3R)~6gE&~Y zJ}@Rqz)$0bCNrauiGxum88nvH9>PrXF4As>>KB84f0uyR;Lqc4D0`c9E&`*!n9aY8LV)ruGWmZxqux?FVvS(g zfVI;HlaptkbpaC0S=J*P0{I?sQV?eLy|`aM0648zzRia|;auJ&7Z6b7yc!RRgV_}^ z&Sbi-Z4NqJ9HI@+?IeZMdY&%7575OO)zf~EU<n`UV zb4zza4M~cFL6^pd0z_P{Dk2xY(z`+{NRvP$db}pfa~Bidl)KD}^#0ZnBY&DTymx7$P{gJjaUaI=$Puzu zR9vK^F)~6+pMi5Aoibb#I^|ve9qJMJoY%>A7`oZJw(d>^s|0WmrNC?>E;Xq6TZ_!w=8fN(DrbVc|Y=I*XskjxA)qq z!??okE+ujIcL*j^nStCRZ{GXJ!{@!v>DC2hqVW={-9O<6ElM&3X zmo}5(pJ6SQCun^yO#4sKRWs0_OQp*&0###@uen^`tr!i1WEZ5{y|>G@i?e&TBGYHU z-Bn%PE!l|*{h-iVPCKRQ7^zp`q# zSae*eaG_kW(!K<3>Wq4Z9%Zsj5i^%lZL(-G^jFi<5jPdLt~S`uS2D<}%q#4Gc9@5K z>m1|xZj+$;sjDPEKEJ~@*A}&Gf4>Y_KK>A8hEnMN$G-7Z{Gk%TT%aZ{2bKa$9C~Uv zJGE$J(~7Id(Ymj@2uPR9Uc@a5Pr$Gpb)8UsN}xoZ9WX?H4OOR*F+fRAOrPYcCHGKeHtPNq!d#zh@3ME@m$E zK>vU$s5Yq!L7E^FN+lX8s#`aFK|Nh$U6@F2@d;}_iz!y1+LgLr^b;x>T1%FT*SEz) zq$>o7fz8GNp#lCNQ9Fo+dM`#RX>ei?nvlq1oQd%l%7s3=)@9;E7XKNu}2mk(ZugQ4Qr*txT<99F8Hg5cR9K5EHPZi zF?E-&=~f+CxA?DtW>PV+mnj?l!W)T)mS>JvNKi&pUDUWnMz3X@J**1G0wVzRR2zQ! z)>;3GSS?LUPD2SjDjhHV*EOpCtbS6B-!{HR*z%F0AXdCb8YQ9L`pp%;XUtTfGLF=J z@EY!f$^7s~_gD+T_lf@0A!nl64n!V~Zd}rwQ&}FEMlZ?NwbGzT4 zn5!|W^l z_v8;(2F|$mb7`N<1;&SzZ3&X{P8!F|;?44>e@w?U7RtH?>jp1vg-_<(8NDN_{OS7b z5#l5(8~x2$2ZtPG`TR*f&p-5+T7UFmLL6J{;}>s~TI*LQa;j>o7KbA;s;v%Nd`joB zmsiFa<<3>|mI@&`A=up*QsVSoOzuZ(VyNp@!@ehW>m{1>kx==e{YJ>fh2^FA;z?`B z+K1~LPVxkbi#@US;A^WNid!Lzq;bm9n^wvrLI03kNcKcRfgrWs!`w3EN)rBT#;Fv0 zMEo*igG0Y}PKs$(7r#zFuh#3ifh)xcYu0OSLo1;;#5rOisP?GuU>K1xNr>(c`qOxt zK3<*|>VJuKwj1g_a39~vQr2E9X_vp4KJnae*j%0Tcik^4j$bTqS3Zd#g?+1qgULtuLKM{l1iX3=ahWKw~fsRigm1-33L2t}S!_;W3hdnwr`~ zo&VwZ`wEk2jYw_CR|9YXL|6k_m-rzD97n-&k6DYaME}cpMWojB%oKZn8D`xhEDmi*H#?5hja_sG!h;y#`o#N(N|6#V|L4+;P;a+RG zndOv&G$+Jn765;5RVsjb(9$`-8&=CT>>1$2i;vM}C#|inO2Gl_qr3@BQvtMT_zkmiC%-M!ZkO)_(-c_0 z-2USNrMC(6B>ll0l^f^*Mz`L}C2{YSb^0nu1~_#Q;221GnL1#McQl@|=kP^~Z0)#h z7xuTH;{75y$jXFOWd9AtGa0A-y_Jld@t?0kT9y3J)4#8B99^8{g0iYzioxW5(G2I< zdu&}bVcKL=jP1X#VpVru;XW|?=kuE}6hCk^KYJ!S3_l7_584l9enz zpUXQ*`1`leeS1B9gbzVdpV{g3X{dWFQk{d&eq&@+4i}XxR3VDOrZl9XZ)<0fR&^YLMJ{pOl7_34D6n&Q5n$odJ z1H4K%sYV(6Z1p7X^(~-zGMFpcM3rn=+Rk)sk7sIYY>1^}xE4k=-sg77wFNSh?7$ID z_E}(H!VMRbOTiW{ov4;M-sH|NfPY;`4s21>(wxH@45klMu5eS}g9eXr?k^%@@o*Y1 zw)ISI9tAQFN46NJ{+Ga~;dQMN0nLY|L*|`-Cg}yk1BG9-{c-3+OL73gJmG-<4-n!9 Z+}<*Wu%7%m%-??*0E0Z!s8X|u{2x$YMl%2a literal 0 HcmV?d00001 diff --git a/twidere/src/main/res/drawable-xxhdpi/ic_follow_requested.png b/twidere/src/main/res/drawable-xxhdpi/ic_follow_requested.png new file mode 100644 index 0000000000000000000000000000000000000000..a527a68c254bd102e934de7c41696c0f5d4d1ab5 GIT binary patch literal 6266 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 literal 0 HcmV?d00001 diff --git a/twidere/src/main/res/drawable-xxxhdpi/ic_follow_bidirectional.png b/twidere/src/main/res/drawable-xxxhdpi/ic_follow_bidirectional.png new file mode 100644 index 0000000000000000000000000000000000000000..a9acb943b788631eef4129a2010683b22a3088d7 GIT binary patch literal 5270 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 literal 0 HcmV?d00001 diff --git a/twidere/src/main/res/drawable-xxxhdpi/ic_follow_blocked.png b/twidere/src/main/res/drawable-xxxhdpi/ic_follow_blocked.png new file mode 100644 index 0000000000000000000000000000000000000000..c8404964689c3f4ae29dec854f03657584858f30 GIT binary patch literal 6651 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 D^?INu literal 0 HcmV?d00001 diff --git a/twidere/src/main/res/drawable-xxxhdpi/ic_follow_incoming.png b/twidere/src/main/res/drawable-xxxhdpi/ic_follow_incoming.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5f380d8d87cb3fabc87b01569b1fc2e174ee22 GIT binary patch literal 4486 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∾Ps5NrYDQVe(K zc!hPZUMr7q+0zVM@JMw+&9@hmeHkyYbF=j{qpx~O&t0$xOoAA16Ggy*0dVV4tx5qf z4uKDddMv$0j^l?HWR*?NT+4ost5iFpA~%tt=;i`LPG&E`jdyo3vw;d{nIOBWV14hJ zw$1(F?T92wzY!}))zq*MEo2Ga!cc9W>*`|;lo;(RZ8D!9@;b*5iWFP6y&+Yk(VAGW zEaUHQT-DC;uD(x!62n8K-mPu!`=fOc&Xn&a9HI06hC~VOJ&n@VuNxa6jb0*Yz za6Q2fqGSK5Y&-y1*08RP7W`+8ycrKrGp++}!m5s_TqDWQ-02+!Jj=`@Y#||cw^A9H zNqTKy-S7Dny-rVpp76s{I_KXQIQ0Hs^d~*WZ_95#!4@ibY5v3k#%M!3?~l46RzRs2 zK|-DZE27>Jzjqs@d_rc(BGX4?#;=YCFg&Blq%BZ0vh{pi_ju;$NLJxYeX1He{)h6V zpF&ixauzjq2q?l2e}+Dj#Yi@d8NlZQum;e7i@cRUCQ)NCz_VrDZGM5O3wF!B36dV| zc;zvu7a}~Tx@2@k{soj2XpoDC;dH0kya$!7O6cd_eX)a(|aHr#^Po1w)@6p<&bs-&H5R20Uc%FQhn2$$`YFyHP+}_ zs#f67V=|++^I(QYm(4bS)5HK>g2masTHzU#EzsksN^65c;+aq_QN8YGEWl`L;YONT zyH4j!IJIyBptaj0C+_s2P%Z=NIXV*5d;I6-z8fL@49-)P-1Zz2zkMmdYwLk$we+#% zzIR9?oDMK^RCq5VrgAYPw~*Rq3Y6r7fBiiZVSCrVkBS=G2y#FMI_(k}i7M}M=$V1; z;L&8j6zQ8*_f!P&0IP&{__x*>vLT_2ad(9>v@IDZ34>3NG8t1N;~{wrX)3uZpx*1N z6+fmTeo8(EGqV-TQG97X%X_TAwHp316t0V9g>rLdh9eFi*xwe_2QxF-@&D_fYUFR3 zYLO`jiUQYOWt^9_=GD&f65`b^)B(ppAB%6y_P3mMO}_J2AMBHK$9=*C4_a_kW>ZO- z-u4TzdRE%V@!EC;h2b3n!(8QTC=?Rj4B*S0gF$Xm_r!`NCjx+fDXzbb4qajHr9Zl( zGLQg*q6f3<%JHDVuHky#A}tW4$`FV0a>435?fDR1Ah{`4c64WEOt>p0efTj^eDMHZ z&u}SWo_NC#EzG)4Abf35y!{6%$kHzDlKz?o3=4W(EcDGDi9M{|e}2VI-9paDqqqa! zuGkPJRpJ3uo>(bSk@!}5cM*&hR6VfJcjy=aS)zY!`u?%RRkVBlt`&;h0r86%0?!rQ zVNLNZyGT6cnG&Jp%2XRMQG5z?RkLM}SPl@sAWW}f=QX;9d+ zssupY@62;%CiaKzYCz`2ulXF;Jf2>mlE)cOSXd?>{ficU{gQEQ{D0Atv?dldR2K)C z$%zmC8YA@CELY*mWt3#HAr%Rix>B_|91BIjOP~*_mBkZ5)lZ=RRrCG-ts*Ay1x?3D W90isC>W{1Y3IM74Or=5z9rQn>ru}gM literal 0 HcmV?d00001 diff --git a/twidere/src/main/res/drawable-xxxhdpi/ic_follow_none.png b/twidere/src/main/res/drawable-xxxhdpi/ic_follow_none.png new file mode 100644 index 0000000000000000000000000000000000000000..9a648b3f2c3e50aa6b0855ea2dd1193317dc9aad GIT binary patch literal 3826 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 YGDE1&c>9fZE`C`6t*NI`s%91Pf8-mv&;S4c literal 0 HcmV?d00001 diff --git a/twidere/src/main/res/drawable-xxxhdpi/ic_follow_outgoing.png b/twidere/src/main/res/drawable-xxxhdpi/ic_follow_outgoing.png new file mode 100644 index 0000000000000000000000000000000000000000..47fc79a47d5473f30cc71b85648706f4c0c55f02 GIT binary patch literal 4383 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 - + \ No newline at end of file diff --git a/twidere/src/main/res/drawable/ab_twidere_solid_dark_holo.xml b/twidere/src/main/res/drawable/ab_twidere_solid_dark_holo.xml index 384cc516a..bf4f7b9ca 100644 --- a/twidere/src/main/res/drawable/ab_twidere_solid_dark_holo.xml +++ b/twidere/src/main/res/drawable/ab_twidere_solid_dark_holo.xml @@ -1,9 +1,9 @@ - - + + \ No newline at end of file diff --git a/twidere/src/main/res/drawable/ab_twidere_solid_light_holo.xml b/twidere/src/main/res/drawable/ab_twidere_solid_light_holo.xml index 23d818eb7..e4c97eb74 100644 --- a/twidere/src/main/res/drawable/ab_twidere_solid_light_holo.xml +++ b/twidere/src/main/res/drawable/ab_twidere_solid_light_holo.xml @@ -1,9 +1,9 @@ - - + + \ No newline at end of file diff --git a/twidere/src/main/res/drawable/bg_map.xml b/twidere/src/main/res/drawable/bg_map.xml index 5caca3547..ddc218ca0 100644 --- a/twidere/src/main/res/drawable/bg_map.xml +++ b/twidere/src/main/res/drawable/bg_map.xml @@ -1,7 +1,7 @@ + android:antialias="true" + android:dither="true" + android:gravity="center" + android:src="@drawable/bg_map_bitmap" + android:tileMode="repeat"/> diff --git a/twidere/src/main/res/drawable/bg_tab_indicator.xml b/twidere/src/main/res/drawable/bg_tab_indicator.xml index ac87a6712..31c39a37a 100644 --- a/twidere/src/main/res/drawable/bg_tab_indicator.xml +++ b/twidere/src/main/res/drawable/bg_tab_indicator.xml @@ -20,8 +20,8 @@ - - + + \ No newline at end of file diff --git a/twidere/src/main/res/drawable/image_preview_error.xml b/twidere/src/main/res/drawable/image_preview_error.xml index 367334ff1..ea430f213 100644 --- a/twidere/src/main/res/drawable/image_preview_error.xml +++ b/twidere/src/main/res/drawable/image_preview_error.xml @@ -1,7 +1,7 @@ + android:antialias="true" + android:dither="true" + android:gravity="center" + android:src="@drawable/image_preview_error_bitmap" + android:tileMode="disabled"/> diff --git a/twidere/src/main/res/drawable/image_preview_nsfw.xml b/twidere/src/main/res/drawable/image_preview_nsfw.xml index 09436919c..a74d42f18 100644 --- a/twidere/src/main/res/drawable/image_preview_nsfw.xml +++ b/twidere/src/main/res/drawable/image_preview_nsfw.xml @@ -1,7 +1,7 @@ + android:antialias="true" + android:dither="true" + android:gravity="center" + android:src="@drawable/image_preview_nsfw_bitmap" + android:tileMode="disabled"/> diff --git a/twidere/src/main/res/drawable/image_preview_refresh.xml b/twidere/src/main/res/drawable/image_preview_refresh.xml index bb50968bc..8e6dc420d 100644 --- a/twidere/src/main/res/drawable/image_preview_refresh.xml +++ b/twidere/src/main/res/drawable/image_preview_refresh.xml @@ -1,7 +1,7 @@ + android:antialias="true" + android:dither="true" + android:gravity="center" + android:src="@drawable/image_preview_refresh_bitmap" + android:tileMode="disabled"/> diff --git a/twidere/src/main/res/drawable/nyan_sakamoto.xml b/twidere/src/main/res/drawable/nyan_sakamoto.xml deleted file mode 100644 index 1773f57bf..000000000 --- a/twidere/src/main/res/drawable/nyan_sakamoto.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/twidere/src/main/res/drawable/nyan_sakamoto_santa.xml b/twidere/src/main/res/drawable/nyan_sakamoto_santa.xml deleted file mode 100644 index 8b84eed7b..000000000 --- a/twidere/src/main/res/drawable/nyan_sakamoto_santa.xml +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/twidere/src/main/res/drawable/nyan_sakamoto_thumbnail.xml b/twidere/src/main/res/drawable/nyan_sakamoto_thumbnail.xml index 0b89d80a6..a073c2e27 100644 --- a/twidere/src/main/res/drawable/nyan_sakamoto_thumbnail.xml +++ b/twidere/src/main/res/drawable/nyan_sakamoto_thumbnail.xml @@ -1,6 +1,6 @@ + android:antialias="true" + android:filter="true" + android:src="@drawable/nyan_sakamoto_thumbnail_bitmap" + android:tileMode="disabled"/> diff --git a/twidere/src/main/res/drawable/nyan_stars_background.xml b/twidere/src/main/res/drawable/nyan_stars_background.xml index c4d49d4ae..f9003dbec 100644 --- a/twidere/src/main/res/drawable/nyan_stars_background.xml +++ b/twidere/src/main/res/drawable/nyan_stars_background.xml @@ -1,6 +1,6 @@ + android:antialias="false" + android:filter="false" + android:src="@drawable/nyan_stars_background_tile" + android:tileMode="repeat"/> diff --git a/twidere/src/main/res/drawable/shadow_bottom.xml b/twidere/src/main/res/drawable/shadow_bottom.xml index 1bb666624..bda08cadd 100644 --- a/twidere/src/main/res/drawable/shadow_bottom.xml +++ b/twidere/src/main/res/drawable/shadow_bottom.xml @@ -1,10 +1,10 @@ - + android:centerColor="#11000000" + android:endColor="#00000000" + android:startColor="#33000000"/> \ No newline at end of file diff --git a/twidere/src/main/res/drawable/shadow_left.xml b/twidere/src/main/res/drawable/shadow_left.xml index d1aebf3e9..7a221f326 100644 --- a/twidere/src/main/res/drawable/shadow_left.xml +++ b/twidere/src/main/res/drawable/shadow_left.xml @@ -1,9 +1,9 @@ - + \ No newline at end of file diff --git a/twidere/src/main/res/drawable/shadow_right.xml b/twidere/src/main/res/drawable/shadow_right.xml index 5472424ef..bc1291e19 100644 --- a/twidere/src/main/res/drawable/shadow_right.xml +++ b/twidere/src/main/res/drawable/shadow_right.xml @@ -1,9 +1,9 @@ - + \ No newline at end of file diff --git a/twidere/src/main/res/drawable/shadow_top.xml b/twidere/src/main/res/drawable/shadow_top.xml index 6a8f8e3f3..8c4db8c02 100644 --- a/twidere/src/main/res/drawable/shadow_top.xml +++ b/twidere/src/main/res/drawable/shadow_top.xml @@ -1,10 +1,10 @@ - + \ No newline at end of file diff --git a/twidere/src/main/res/drawable/shadow_user_banner_action_bar.xml b/twidere/src/main/res/drawable/shadow_user_banner_action_bar.xml index 38cb634c2..344ba221e 100644 --- a/twidere/src/main/res/drawable/shadow_user_banner_action_bar.xml +++ b/twidere/src/main/res/drawable/shadow_user_banner_action_bar.xml @@ -4,7 +4,7 @@ + android:startColor="#A0000000" + android:type="linear"/> \ No newline at end of file diff --git a/twidere/src/main/res/drawable/shadow_user_banner_image.xml b/twidere/src/main/res/drawable/shadow_user_banner_image.xml index f2e482de7..1288523ab 100644 --- a/twidere/src/main/res/drawable/shadow_user_banner_image.xml +++ b/twidere/src/main/res/drawable/shadow_user_banner_image.xml @@ -3,8 +3,8 @@ \ No newline at end of file diff --git a/twidere/src/main/res/layout-v21/layout_home_actions_button.xml b/twidere/src/main/res/layout-v21/layout_home_actions_button.xml index 64535c63d..8a6c7b402 100644 --- a/twidere/src/main/res/layout-v21/layout_home_actions_button.xml +++ b/twidere/src/main/res/layout-v21/layout_home_actions_button.xml @@ -1,4 +1,23 @@ + + . --> - + diff --git a/twidere/src/main/res/layout/action_item_compose_account.xml b/twidere/src/main/res/layout/action_item_compose_account.xml index e1d68bfca..ea176c251 100644 --- a/twidere/src/main/res/layout/action_item_compose_account.xml +++ b/twidere/src/main/res/layout/action_item_compose_account.xml @@ -1,4 +1,23 @@ + + + + + + + + - + - + + + \ No newline at end of file diff --git a/twidere/src/main/res/layout/action_item_messages_conversation_profile_image.xml b/twidere/src/main/res/layout/action_item_messages_conversation_profile_image.xml index bea72c939..89d6b06f3 100644 --- a/twidere/src/main/res/layout/action_item_messages_conversation_profile_image.xml +++ b/twidere/src/main/res/layout/action_item_messages_conversation_profile_image.xml @@ -30,6 +30,7 @@ - + - + + + \ No newline at end of file diff --git a/twidere/src/main/res/layout/actionbar_custom_view_done_cancel.xml b/twidere/src/main/res/layout/actionbar_custom_view_done_cancel.xml index 1a6e5141e..52ee130ac 100644 --- a/twidere/src/main/res/layout/actionbar_custom_view_done_cancel.xml +++ b/twidere/src/main/res/layout/actionbar_custom_view_done_cancel.xml @@ -1,3 +1,4 @@ + - - - + + + diff --git a/twidere/src/main/res/layout/activity_account_selector.xml b/twidere/src/main/res/layout/activity_account_selector.xml index 57b8ea657..30e5a51c1 100644 --- a/twidere/src/main/res/layout/activity_account_selector.xml +++ b/twidere/src/main/res/layout/activity_account_selector.xml @@ -1,39 +1,59 @@ - + - + - + - + -