diff --git a/bin/EhViewer.apk b/bin/EhViewer.apk index 29b106f3a..b191c38f3 100644 Binary files a/bin/EhViewer.apk and b/bin/EhViewer.apk differ diff --git a/bin/R.txt b/bin/R.txt new file mode 100644 index 000000000..147e89053 --- /dev/null +++ b/bin/R.txt @@ -0,0 +1,508 @@ +int array download_item_long_click 0x7f070008 +int array favourite_item_long_click 0x7f070007 +int array is_exhentai 0x7f07000d +int array list_item_long_click 0x7f070006 +int array list_list_title 0x7f070000 +int array min_rating 0x7f070001 +int array page_scaling_entries 0x7f070002 +int array page_scaling_entry_values 0x7f070003 +int array preference_screen_ori_entries 0x7f070009 +int array preference_screen_ori_entry_values 0x7f07000a +int array preference_update_server_entries 0x7f07000b +int array preference_update_server_entry_values 0x7f07000c +int array start_position_entries 0x7f070004 +int array start_position_values 0x7f070005 +int attr adjustViewBounds 0x7f010010 +int attr baseLine 0x7f010019 +int attr baseline 0x7f010016 +int attr baselineAlignBottom 0x7f010014 +int attr behindOffset 0x7f010003 +int attr behindScrollScale 0x7f010005 +int attr behindWidth 0x7f010004 +int attr cropToPadding 0x7f010015 +int attr drawableAlpha 0x7f010017 +int attr fadeDegree 0x7f01000b +int attr fadeEnabled 0x7f01000a +int attr mask 0x7f010018 +int attr maxHeight 0x7f010012 +int attr maxWidth 0x7f010011 +int attr mode 0x7f010000 +int attr scaleType 0x7f01000f +int attr selectorDrawable 0x7f01000d +int attr selectorEnabled 0x7f01000c +int attr shadowDrawable 0x7f010008 +int attr shadowWidth 0x7f010009 +int attr src 0x7f01000e +int attr tint 0x7f010013 +int attr touchModeAbove 0x7f010006 +int attr touchModeBehind 0x7f010007 +int attr viewAbove 0x7f010001 +int attr viewBehind 0x7f010002 +int color blue_dark 0x7f080001 +int color blue_light 0x7f080000 +int dimen activity_horizontal_margin 0x7f090000 +int dimen activity_vertical_margin 0x7f090001 +int dimen menu_offset 0x7f090003 +int dimen shadow_width 0x7f090002 +int drawable artistcg 0x7f020000 +int drawable asianporn 0x7f020001 +int drawable back 0x7f020002 +int drawable cosplay 0x7f020003 +int drawable doujinshi 0x7f020004 +int drawable drawer_shadow_left 0x7f020005 +int drawable drawer_shadow_right 0x7f020006 +int drawable front 0x7f020007 +int drawable gamecg 0x7f020008 +int drawable ic_action_action_search 0x7f020009 +int drawable ic_action_completed 0x7f02000a +int drawable ic_action_core_overflow 0x7f02000b +int drawable ic_action_download 0x7f02000c +int drawable ic_action_favourite 0x7f02000d +int drawable ic_action_jump 0x7f02000e +int drawable ic_action_pause 0x7f02000f +int drawable ic_action_refresh 0x7f020010 +int drawable ic_action_remove 0x7f020011 +int drawable ic_action_search 0x7f020012 +int drawable ic_action_settings 0x7f020013 +int drawable ic_action_start 0x7f020014 +int drawable ic_launcher 0x7f020015 +int drawable ic_navigation_drawer 0x7f020016 +int drawable ic_pulltorefresh_arrow 0x7f020017 +int drawable ic_touch 0x7f020018 +int drawable imageset 0x7f020019 +int drawable manga 0x7f02001a +int drawable mask 0x7f02001b +int drawable misc 0x7f02001c +int drawable non_h 0x7f02001d +int drawable progress_large 0x7f02001e +int drawable progress_small 0x7f02001f +int drawable sadpanda 0x7f020020 +int drawable scrollbar_blue 0x7f020021 +int drawable scrollbar_white 0x7f020022 +int drawable spinner_16_inner 0x7f020023 +int drawable spinner_16_outer 0x7f020024 +int drawable spinner_76_inner 0x7f020025 +int drawable spinner_76_outer 0x7f020026 +int drawable star 0x7f020027 +int drawable star_empty 0x7f020028 +int drawable star_half 0x7f020029 +int drawable unknown 0x7f02002a +int drawable welcome 0x7f02002b +int drawable western 0x7f02002c +int id action 0x7f060035 +int id action_download 0x7f060083 +int id action_favourite 0x7f060082 +int id action_jump 0x7f060086 +int id action_refresh 0x7f060085 +int id action_search 0x7f060084 +int id action_settings 0x7f060087 +int id app_start_view 0x7f060080 +int id autoCompleteTextView1 0x7f06007c +int id bottom 0x7f06000f +int id bottom_panel 0x7f06006e +int id button_artistcg 0x7f060039 +int id button_asianporn 0x7f06003f +int id button_check_login 0x7f060066 +int id button_cosplay 0x7f06003e +int id button_doujinshi 0x7f060037 +int id button_gamecg 0x7f06003a +int id button_imageset 0x7f06003d +int id button_login 0x7f060065 +int id button_manga 0x7f060038 +int id button_misc 0x7f060040 +int id button_non_h 0x7f06003c +int id button_read 0x7f060023 +int id button_western 0x7f06003b +int id center 0x7f06000b +int id centerCrop 0x7f06000c +int id centerInside 0x7f06000d +int id checkbox_advance 0x7f060042 +int id checkbox_sdesc 0x7f060046 +int id checkbox_sdt1 0x7f060049 +int id checkbox_sdt2 0x7f06004a +int id checkbox_sh 0x7f06004b +int id checkbox_sname 0x7f060044 +int id checkbox_sr 0x7f06004c +int id checkbox_stags 0x7f060045 +int id checkbox_sto 0x7f060048 +int id checkbox_storr 0x7f060047 +int id cover 0x7f060059 +int id custom 0x7f06002c +int id detail_average 0x7f060020 +int id detail_button_cancel 0x7f060025 +int id detail_button_every 0x7f060027 +int id detail_button_known 0x7f060028 +int id detail_button_once 0x7f060026 +int id detail_cover 0x7f060012 +int id detail_language 0x7f06001e +int id detail_pages 0x7f06001c +int id detail_people 0x7f060021 +int id detail_posted 0x7f06001b +int id detail_rate 0x7f06001f +int id detail_refresh 0x7f060018 +int id detail_size 0x7f06001d +int id detail_title 0x7f060013 +int id detail_type 0x7f060019 +int id detail_uploader 0x7f06001a +int id detail_wait 0x7f060017 +int id download 0x7f060031 +int id drawer_login 0x7f06005f +int id drawer_login_over 0x7f060060 +int id favourite 0x7f060036 +int id filter_advance 0x7f060043 +int id fitCenter 0x7f060009 +int id fitEnd 0x7f06000a +int id fitStart 0x7f060008 +int id fitXY 0x7f060007 +int id footer_progressBar 0x7f060072 +int id footer_tip_text 0x7f060073 +int id fullscreen 0x7f060003 +int id gl_root_view 0x7f06004f +int id head_arrowImageView 0x7f060078 +int id head_contentLayout 0x7f060077 +int id head_progressBar 0x7f060079 +int id head_tipsTextView 0x7f06007a +int id header 0x7f060070 +int id header_arrow_image 0x7f060074 +int id header_progressBar 0x7f060075 +int id header_tip_text 0x7f060076 +int id info 0x7f060034 +int id is_exhentai 0x7f060061 +int id left 0x7f060000 +int id list 0x7f06002d +int id list_button_logout 0x7f060069 +int id list_jump_edit 0x7f060052 +int id list_jump_sum 0x7f060050 +int id list_jump_to 0x7f060051 +int id list_list 0x7f060054 +int id list_main 0x7f060053 +int id list_menu_list 0x7f06005d +int id list_menu_login 0x7f06005e +int id list_no_found 0x7f060058 +int id list_refresh 0x7f060056 +int id list_view 0x7f060071 +int id list_wait_first 0x7f060055 +int id list_wait_login 0x7f060067 +int id list_wait_logout 0x7f06006a +int id main 0x7f06004e +int id manga_detail 0x7f060011 +int id manga_detail_normal 0x7f060014 +int id manga_detail_offensive 0x7f060015 +int id manga_detail_pining 0x7f060016 +int id manga_detail_scrollview 0x7f060010 +int id margin 0x7f060002 +int id matrix 0x7f060006 +int id message 0x7f06002b +int id name 0x7f06005a +int id negative_button 0x7f06002e +int id neutral_button 0x7f06002f +int id none 0x7f060004 +int id page_list 0x7f060024 +int id pager 0x7f060064 +int id paper_list_layout 0x7f06006b +int id paper_list_wait 0x7f06006c +int id password 0x7f060063 +int id positive_button 0x7f060030 +int id preview_button_refresh 0x7f06006d +int id preview_num 0x7f06006f +int id progressBar 0x7f060033 +int id rate 0x7f06005c +int id remove 0x7f06007d +int id right 0x7f060001 +int id sadpanda 0x7f060057 +int id scroll_view 0x7f06002a +int id search_bar 0x7f06007b +int id search_text 0x7f060041 +int id selected_view 0x7f060005 +int id set_name_edit 0x7f06007e +int id slidingmenumain 0x7f06007f +int id spinner_min_rating 0x7f06004d +int id tags_layout 0x7f060022 +int id text_username 0x7f060068 +int id thumb 0x7f060032 +int id title 0x7f060029 +int id top 0x7f06000e +int id type 0x7f06005b +int id username 0x7f060062 +int id wait_message 0x7f060081 +int layout detail 0x7f030000 +int layout detail_normal 0x7f030001 +int layout detail_offensive 0x7f030002 +int layout detail_pining 0x7f030003 +int layout dialog 0x7f030004 +int layout download 0x7f030005 +int layout download_item 0x7f030006 +int layout favourite 0x7f030007 +int layout filter 0x7f030008 +int layout gl_root_group 0x7f030009 +int layout jump 0x7f03000a +int layout list 0x7f03000b +int layout list_item 0x7f03000c +int layout list_item_text 0x7f03000d +int layout list_menu_list 0x7f03000e +int layout list_menu_login 0x7f03000f +int layout login 0x7f030010 +int layout manga 0x7f030011 +int layout menu_item 0x7f030012 +int layout menu_login 0x7f030013 +int layout menu_login_over 0x7f030014 +int layout page_list 0x7f030015 +int layout page_list_panel 0x7f030016 +int layout pull_list_view 0x7f030017 +int layout pull_list_view_footer 0x7f030018 +int layout pull_list_view_header 0x7f030019 +int layout pull_to_refresh_head 0x7f03001a +int layout search_view 0x7f03001b +int layout set_name 0x7f03001c +int layout slidingmenumain 0x7f03001d +int layout start 0x7f03001e +int layout wait 0x7f03001f +int menu detail 0x7f0c0000 +int menu main 0x7f0c0001 +int raw change_log 0x7f050000 +int raw thanks 0x7f050001 +int string _default 0x7f0a00af +int string action_refresh 0x7f0a005e +int string action_settings 0x7f0a005f +int string actual_size 0x7f0a00b7 +int string add 0x7f0a00ab +int string add_tag 0x7f0a007a +int string add_to_favourite 0x7f0a00c1 +int string advance_search_left 0x7f0a00c7 +int string app_name 0x7f0a0000 +int string bottom_left 0x7f0a00be +int string bottom_right 0x7f0a00bf +int string cache_large 0x7f0a0074 +int string center 0x7f0a00c0 +int string changelog 0x7f0a00a5 +int string check_login 0x7f0a000c +int string checkbox_advance 0x7f0a0015 +int string checkbox_sdesc 0x7f0a0018 +int string checkbox_sdt1 0x7f0a001b +int string checkbox_sdt2 0x7f0a001c +int string checkbox_sh 0x7f0a001d +int string checkbox_sname 0x7f0a0016 +int string checkbox_sr 0x7f0a001e +int string checkbox_stags 0x7f0a0017 +int string checkbox_sto 0x7f0a001a +int string checkbox_storr 0x7f0a0019 +int string checking_update 0x7f0a002c +int string create_cache_error 0x7f0a0076 +int string dailog_check_network 0x7f0a0007 +int string dailog_network_error_no 0x7f0a0009 +int string dailog_network_error_yes 0x7f0a0008 +int string dailog_waring_no 0x7f0a0006 +int string dailog_waring_plain 0x7f0a0004 +int string dailog_waring_title 0x7f0a0003 +int string dailog_waring_yes 0x7f0a0005 +int string detail_average 0x7f0a0034 +int string detail_button_cancel 0x7f0a0038 +int string detail_button_every 0x7f0a003a +int string detail_button_known 0x7f0a003c +int string detail_button_once 0x7f0a0039 +int string detail_language 0x7f0a0033 +int string detail_not_rated 0x7f0a003e +int string detail_offensive 0x7f0a0037 +int string detail_offensive_title 0x7f0a0036 +int string detail_pages 0x7f0a0031 +int string detail_people 0x7f0a0035 +int string detail_pining 0x7f0a003b +int string detail_posted 0x7f0a0030 +int string detail_preview_error 0x7f0a003d +int string detail_size 0x7f0a0032 +int string detail_uploader 0x7f0a002f +int string develop 0x7f0a00c6 +int string dialog_messgae_login_or_not 0x7f0a0010 +int string dialog_send_crash_no 0x7f0a0025 +int string dialog_send_crash_plain 0x7f0a0023 +int string dialog_send_crash_title 0x7f0a0022 +int string dialog_send_crash_yes 0x7f0a0024 +int string dialog_title_login_or_not 0x7f0a000f +int string dialog_wait_send_crash_msg 0x7f0a000a +int string download 0x7f0a00b2 +int string download_successfully 0x7f0a0095 +int string download_task_finished 0x7f0a0093 +int string download_unsuccessfully 0x7f0a0096 +int string downloading 0x7f0a0094 +int string drawer_close 0x7f0a0002 +int string drawer_open 0x7f0a0001 +int string em_can_not_reach 0x7f0a0055 +int string em_check_login_error 0x7f0a004e +int string em_client_protocol 0x7f0a004a +int string em_host_error 0x7f0a005b +int string em_invalid_request 0x7f0a005c +int string em_login_error 0x7f0a004d +int string em_logout_error 0x7f0a004f +int string em_network_error 0x7f0a0044 +int string em_no_network 0x7f0a0054 +int string em_no_network_2 0x7f0a0056 +int string em_no_sdcard 0x7f0a005d +int string em_open_input_stream_error 0x7f0a0048 +int string em_parser_error 0x7f0a0047 +int string em_put_cache_error 0x7f0a004b +int string em_read_input_stream_error 0x7f0a0049 +int string em_redirection_error 0x7f0a005a +int string em_request_error 0x7f0a0057 +int string em_response_code_error 0x7f0a0046 +int string em_retry 0x7f0a0051 +int string em_retry_times 0x7f0a0052 +int string em_timeout 0x7f0a0045 +int string em_unexpected_response_code 0x7f0a0059 +int string em_unknown_error 0x7f0a0053 +int string em_unknown_host 0x7f0a0058 +int string em_url_error 0x7f0a0050 +int string em_url_format_error 0x7f0a004c +int string error 0x7f0a00a4 +int string exit_tip 0x7f0a000b +int string favourite 0x7f0a00b1 +int string first_page 0x7f0a0040 +int string fit_to_height 0x7f0a00b9 +int string fit_to_screen 0x7f0a00ba +int string fit_to_width 0x7f0a00b8 +int string fixed_scale 0x7f0a00bb +int string footer_fail 0x7f0a0091 +int string footer_loaded 0x7f0a0090 +int string footer_loading 0x7f0a008f +int string found_update 0x7f0a002e +int string hint_no_keyword 0x7f0a0014 +int string homepage 0x7f0a00b0 +int string input_error 0x7f0a0075 +int string jump 0x7f0a00ad +int string jump_sum 0x7f0a001f +int string jump_to 0x7f0a0020 +int string landscape 0x7f0a0063 +int string last_page 0x7f0a009f +int string list_title 0x7f0a0029 +int string load_pre 0x7f0a003f +int string login 0x7f0a00a6 +int string logout 0x7f0a00a7 +int string menu 0x7f0a009d +int string new_tag_name 0x7f0a007f +int string next_page 0x7f0a009a +int string no_found 0x7f0a0028 +int string not_login 0x7f0a0011 +int string not_started 0x7f0a0097 +int string password 0x7f0a00aa +int string period 0x7f0a00a2 +int string portrait 0x7f0a0062 +int string pre_page 0x7f0a0099 +int string preference_author 0x7f0a0072 +int string preference_author_summary 0x7f0a0073 +int string preference_auto_page_cache 0x7f0a006c +int string preference_auto_page_cache_summary_off 0x7f0a006e +int string preference_auto_page_cache_summary_on 0x7f0a006d +int string preference_cache 0x7f0a0068 +int string preference_cache_summary 0x7f0a006a +int string preference_cache_summary_no 0x7f0a006b +int string preference_category_about 0x7f0a0071 +int string preference_category_cache 0x7f0a0067 +int string preference_category_display 0x7f0a0060 +int string preference_clear_cache 0x7f0a0069 +int string preference_download_path 0x7f0a006f +int string preference_page_scaling 0x7f0a0064 +int string preference_screen_ori 0x7f0a0061 +int string preference_settings_title 0x7f0a0066 +int string preference_start_position 0x7f0a0065 +int string preference_update_server 0x7f0a0070 +int string pull_load_cancel 0x7f0a008e +int string pull_load_doing 0x7f0a008c +int string pull_load_done 0x7f0a008d +int string pull_load_pull 0x7f0a008a +int string pull_load_release 0x7f0a008b +int string pull_pre_cancel 0x7f0a0089 +int string pull_pre_doing 0x7f0a0087 +int string pull_pre_done 0x7f0a0088 +int string pull_pre_pull 0x7f0a0085 +int string pull_pre_release 0x7f0a0086 +int string pull_refresh_cancel 0x7f0a0084 +int string pull_refresh_doing 0x7f0a0082 +int string pull_refresh_done 0x7f0a0083 +int string pull_refresh_pull 0x7f0a0080 +int string pull_refresh_release 0x7f0a0081 +int string read 0x7f0a009e +int string refresh 0x7f0a00a3 +int string remove 0x7f0a00c2 +int string remove_info_data 0x7f0a00c3 +int string retry_max_next 0x7f0a0043 +int string retry_max_pre 0x7f0a0042 +int string sadpanda 0x7f0a00a0 +int string some_page 0x7f0a00ae +int string star_2 0x7f0a00b3 +int string star_3 0x7f0a00b4 +int string star_4 0x7f0a00b5 +int string star_5 0x7f0a00b6 +int string start_download_task 0x7f0a0092 +int string start_reloading 0x7f0a0041 +int string tag_change_name 0x7f0a007e +int string tag_name 0x7f0a007b +int string tag_name_empty 0x7f0a007c +int string tag_name_exist 0x7f0a007d +int string tap_update 0x7f0a002b +int string thanks 0x7f0a00c5 +int string toast_add_download 0x7f0a0027 +int string toast_add_favourite 0x7f0a0026 +int string toast_invalid_page 0x7f0a0021 +int string toast_login_failed 0x7f0a000e +int string toast_login_succeeded 0x7f0a000d +int string toast_logout_failed 0x7f0a0013 +int string toast_logout_succeeded 0x7f0a0012 +int string top_left 0x7f0a00bc +int string top_right 0x7f0a00bd +int string unfinished 0x7f0a00a1 +int string up_to_date 0x7f0a002d +int string update 0x7f0a00c4 +int string update_message 0x7f0a002a +int string update_server_gokuai 0x7f0a0079 +int string update_server_google 0x7f0a0077 +int string update_server_qiniu 0x7f0a0078 +int string username 0x7f0a00a9 +int string wait 0x7f0a00a8 +int string waiting 0x7f0a0098 +int string what_to_do 0x7f0a00ac +int string zoom_in 0x7f0a009b +int string zoom_out 0x7f0a009c +int style ActionBar 0x7f0b0000 +int style ActionBarTitleFont 0x7f0b0001 +int style AppTheme 0x7f0b000a +int style AppTheme_NoActionBar 0x7f0b000b +int style AppTheme_NoActionBar_Transparent 0x7f0b000c +int style Button 0x7f0b0004 +int style Button_Blue 0x7f0b0005 +int style Button_White 0x7f0b0006 +int style OverFlow 0x7f0b0002 +int style PopupMenu 0x7f0b0003 +int style ProgressBar 0x7f0b0007 +int style ProgressBar_Large 0x7f0b0009 +int style ProgressBar_Small 0x7f0b0008 +int[] styleable AutoWrapLayout { 0x7f010019 } +int styleable AutoWrapLayout_baseLine 0 +int[] styleable CheckImage { 0x7f010018 } +int styleable CheckImage_mask 0 +int[] styleable SlidingMenu { 0x7f010000, 0x7f010001, 0x7f010002, 0x7f010003, 0x7f010004, 0x7f010005, 0x7f010006, 0x7f010007, 0x7f010008, 0x7f010009, 0x7f01000a, 0x7f01000b, 0x7f01000c, 0x7f01000d } +int styleable SlidingMenu_behindOffset 3 +int styleable SlidingMenu_behindScrollScale 5 +int styleable SlidingMenu_behindWidth 4 +int styleable SlidingMenu_fadeDegree 11 +int styleable SlidingMenu_fadeEnabled 10 +int styleable SlidingMenu_mode 0 +int styleable SlidingMenu_selectorDrawable 13 +int styleable SlidingMenu_selectorEnabled 12 +int styleable SlidingMenu_shadowDrawable 8 +int styleable SlidingMenu_shadowWidth 9 +int styleable SlidingMenu_touchModeAbove 6 +int styleable SlidingMenu_touchModeBehind 7 +int styleable SlidingMenu_viewAbove 1 +int styleable SlidingMenu_viewBehind 2 +int[] styleable SuperImageView { 0x7f01000e, 0x7f01000f, 0x7f010010, 0x7f010011, 0x7f010012, 0x7f010013, 0x7f010014, 0x7f010015, 0x7f010016, 0x7f010017 } +int styleable SuperImageView_adjustViewBounds 2 +int styleable SuperImageView_baseline 8 +int styleable SuperImageView_baselineAlignBottom 6 +int styleable SuperImageView_cropToPadding 7 +int styleable SuperImageView_drawableAlpha 9 +int styleable SuperImageView_maxHeight 4 +int styleable SuperImageView_maxWidth 3 +int styleable SuperImageView_scaleType 1 +int styleable SuperImageView_src 0 +int styleable SuperImageView_tint 5 +int xml searchable 0x7f040000 +int xml settings 0x7f040001 diff --git a/bin/classes.dex b/bin/classes.dex index bf2842245..b2db65cfe 100644 Binary files a/bin/classes.dex and b/bin/classes.dex differ diff --git a/bin/dexedLibs/android-support-v4-1c1a4a4d71c1c723e2137d4d967c3739.jar b/bin/dexedLibs/android-support-v4-1c1a4a4d71c1c723e2137d4d967c3739.jar new file mode 100644 index 000000000..d1986a35d Binary files /dev/null and b/bin/dexedLibs/android-support-v4-1c1a4a4d71c1c723e2137d4d967c3739.jar differ diff --git a/bin/dexedLibs/slidingmenu-f48f3a4eceb3b9455e8ae38a55377052.jar b/bin/dexedLibs/slidingmenu-f48f3a4eceb3b9455e8ae38a55377052.jar new file mode 100644 index 000000000..1450ce4ca Binary files /dev/null and b/bin/dexedLibs/slidingmenu-f48f3a4eceb3b9455e8ae38a55377052.jar differ diff --git a/bin/jarlist.cache b/bin/jarlist.cache index 0565465f2..f5f610068 100644 --- a/bin/jarlist.cache +++ b/bin/jarlist.cache @@ -1,3 +1,5 @@ # cache for current jar dependency. DO NOT EDIT. # format is # Encoding is UTF-8 +1397228709198 627582 db0f122c99ef9f90dbab3fada6d191f2880cbb8e E:\code\SlidingMenu\library\libs\android-support-v4.jar +1389885111965 627582 db0f122c99ef9f90dbab3fada6d191f2880cbb8e E:\Android\code\EhViewer\libs\android-support-v4.jar diff --git a/bin/resources.ap_ b/bin/resources.ap_ index 7692c617b..ab8230e78 100644 Binary files a/bin/resources.ap_ and b/bin/resources.ap_ differ diff --git a/project.properties b/project.properties index 0d5ddca4e..62acd19bf 100644 --- a/project.properties +++ b/project.properties @@ -12,4 +12,5 @@ # Project target. target=android-19 -#proguard.config=E:/Android/android-sdk/tools/proguard/proguard-android.txt:proguard-project.txt \ No newline at end of file +#proguard.config=E:/Android/android-sdk/tools/proguard/proguard-android.txt:proguard-project.txt +android.library.reference.1=../../../code/SlidingMenu/library diff --git a/res/layout/list.xml b/res/layout/list.xml index 726757bf1..6b5b2fa1c 100644 --- a/res/layout/list.xml +++ b/res/layout/list.xml @@ -1,9 +1,6 @@ - - - - - - - - \ No newline at end of file diff --git a/src/com/hippo/ehviewer/apiGetGalleryInfo.java b/src/com/hippo/ehviewer/ApiGetGalleryInfo.java similarity index 82% rename from src/com/hippo/ehviewer/apiGetGalleryInfo.java rename to src/com/hippo/ehviewer/ApiGetGalleryInfo.java index 0180a76b5..b880900a9 100644 --- a/src/com/hippo/ehviewer/apiGetGalleryInfo.java +++ b/src/com/hippo/ehviewer/ApiGetGalleryInfo.java @@ -1,6 +1,6 @@ package com.hippo.ehviewer; -public class apiGetGalleryInfo extends GalleryInfo{ +public class ApiGetGalleryInfo extends GalleryInfo{ public String archiver_key; public String title_jpn; public String filecount; diff --git a/src/com/hippo/ehviewer/AppContext.java b/src/com/hippo/ehviewer/AppContext.java index 2f844dd90..d68159c66 100644 --- a/src/com/hippo/ehviewer/AppContext.java +++ b/src/com/hippo/ehviewer/AppContext.java @@ -2,6 +2,9 @@ package com.hippo.ehviewer; import java.lang.Thread.UncaughtExceptionHandler; +import com.hippo.ehviewer.data.Data; +import com.hippo.ehviewer.network.HttpHelper; +import com.hippo.ehviewer.network.PrefCookieHelper; import com.hippo.ehviewer.util.Cache; import com.hippo.ehviewer.util.Config; import com.hippo.ehviewer.util.Crash; @@ -21,6 +24,7 @@ public class AppContext extends Application implements UncaughtExceptionHandler private Thread.UncaughtExceptionHandler mDefaultHandler; + private Data mData; private EhClient mEhClient; private ThreadPool mNetworkThreadPool; @@ -36,12 +40,15 @@ public class AppContext extends Application implements UncaughtExceptionHandler Ui.init(this); Cache.init(this); Favourite.init(this); - Tag.init(this); Crash.init(this); + Tag.init(this); BeautifyScreen.init(this); mEhClient = new EhClient(this); Download.init(this); + mData = new Data(this); + HttpHelper.setCookieHelper(this); + mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(this); } diff --git a/src/com/hippo/ehviewer/GalleryInfo.java b/src/com/hippo/ehviewer/GalleryInfo.java index 3447c845d..08f7bde0b 100644 --- a/src/com/hippo/ehviewer/GalleryInfo.java +++ b/src/com/hippo/ehviewer/GalleryInfo.java @@ -26,7 +26,7 @@ public class GalleryInfo implements Parcelable{ p.thumb = source.readString(); p.uploader = source.readString(); p.rating = source.readString(); - return null; + return p; } @Override diff --git a/src/com/hippo/ehviewer/ListUrls.java b/src/com/hippo/ehviewer/ListUrls.java index 7bcd32650..48abae1ac 100644 --- a/src/com/hippo/ehviewer/ListUrls.java +++ b/src/com/hippo/ehviewer/ListUrls.java @@ -33,15 +33,16 @@ public class ListUrls { public static final int STD2 = 0x40; public static final int SH = 0x80; + public static final int DEFAULT_ADVANCE = SNAME | STAGS; + public static final int DEFAULT_MIN_RATING = 2; + private int page = 0; private int numPerPage = 25; private int max = -1; private int type = ALL_TYPE; - private boolean mAdvsearch = false; - private int advsearchType = SNAME|STAGS; - private boolean isMinRating = false; - private int minRating = 2; + private int advsearchType = -1; + private int minRating = -1; private String search = null; @@ -54,18 +55,16 @@ public class ListUrls { } public boolean isSameUrls(ListUrls listUrls) { - if (type == listUrls.type - && mAdvsearch == listUrls.mAdvsearch - && isMinRating == listUrls.isMinRating) { + if (type == listUrls.type) { if ((search == null && listUrls.search != null) || (search != null && listUrls.search == null)) return false; if (search != null && listUrls.search != null && !search.equals(listUrls.search)) return false; - if (mAdvsearch && advsearchType != listUrls.advsearchType) + if (advsearchType != listUrls.advsearchType) return false; - if (isMinRating && minRating != listUrls.minRating) + if (minRating != listUrls.minRating) return false; return true; } else @@ -76,12 +75,7 @@ public class ListUrls { public ListUrls clone() { ListUrls listUrls = new ListUrls(type, search, page); listUrls.setMax(max); - if (mAdvsearch) { - if (isMinRating) - listUrls.setAdvance(advsearchType, minRating); - else - listUrls.setAdvance(advsearchType); - } + listUrls.setAdvance(advsearchType, minRating); return listUrls; } @@ -120,20 +114,24 @@ public class ListUrls { return search; } + public void setAdvance(boolean enabled) { + if (enabled && advsearchType == -1) + advsearchType = DEFAULT_ADVANCE; + else if (!enabled) + advsearchType = -1; + } + public void setAdvance(int advanceType) { - mAdvsearch = true; advsearchType = advanceType; } public void setAdvance(int advanceType, int minRating) { - mAdvsearch = true; advsearchType = advanceType; - isMinRating = true; this.minRating = minRating; } public boolean isAdvance() { - return mAdvsearch; + return advsearchType != -1; } public int getAdvanceType() { @@ -141,15 +139,13 @@ public class ListUrls { } public boolean isMinRating() { - return isMinRating; + return minRating != -1; } public int getMinRating() { return minRating; } - - public boolean isSetMax() { return max == -1 ? false : true; } @@ -284,7 +280,7 @@ public class ListUrls { url.append("f_apply=Apply+Filter"); // Is advance search - if (mAdvsearch) { + if (isAdvance()) { url.append("&advsearch=1"); if((advsearchType & SNAME) != 0) url.append("&f_sname=on"); @@ -304,7 +300,7 @@ public class ListUrls { url.append("&f_sh=on"); // Set min star - if (isMinRating) + if (isMinRating()) url.append("&f_sr=on&f_srdd=").append(minRating); } return url.toString(); diff --git a/src/com/hippo/ehviewer/Tag.java b/src/com/hippo/ehviewer/Tag.java new file mode 100644 index 000000000..b462b43a7 --- /dev/null +++ b/src/com/hippo/ehviewer/Tag.java @@ -0,0 +1,18 @@ +package com.hippo.ehviewer; + +public class Tag extends ListUrls { + private String mName; + + public Tag(String name, int category, String search) { + super(category, search); + mName = name; + } + + public void setName(String name) { + mName = name; + } + + public String getName() { + return mName; + } +} diff --git a/src/com/hippo/ehviewer/activity/MangaDetailActivity.java b/src/com/hippo/ehviewer/activity/MangaDetailActivity.java index 7b8499e9d..b76c9ea46 100644 --- a/src/com/hippo/ehviewer/activity/MangaDetailActivity.java +++ b/src/com/hippo/ehviewer/activity/MangaDetailActivity.java @@ -160,7 +160,7 @@ public class MangaDetailActivity extends Activity { } }); // Set white drawable for temp - ColorDrawable white = new ColorDrawable(Ui.HOLO_WHITE); + ColorDrawable white = new ColorDrawable(Color.TRANSPARENT); white.setBounds(0, 0, item.width, item.height); tvu.setCompoundDrawables(null, white, null, null); @@ -203,7 +203,6 @@ public class MangaDetailActivity extends Activity { for(int i = startIndex ; i < endIndex; i++) { PageList.Row.Item item = items.get(i - startIndex); - // if (item.xOffset + item.width > maxWidth) item.width = maxWidth - item.xOffset; if (item.yOffset + item.height > maxHeight) @@ -463,12 +462,13 @@ public class MangaDetailActivity extends Activity { // Get information Intent intent = getIntent(); url = intent.getStringExtra("url"); - String gid = intent.getStringExtra("gid"); + GalleryInfo galleryInfo = (GalleryInfo)(intent.getParcelableExtra(KEY_G_INFO)); + boolean getFromCache = true; - mangaDetail = Cache.mdCache.get(gid); + mangaDetail = Cache.mdCache.get(galleryInfo.gid); if (mangaDetail == null) { getFromCache = false; - mangaDetail = new GalleryDetail((GalleryInfo)(intent.getParcelableExtra(KEY_G_INFO))); + mangaDetail = new GalleryDetail(galleryInfo); } getActionBar().setDisplayHomeAsUpEnabled(true); diff --git a/src/com/hippo/ehviewer/activity/MangaListActivity.java b/src/com/hippo/ehviewer/activity/MangaListActivity.java index 0ce1baa01..c36f13515 100644 --- a/src/com/hippo/ehviewer/activity/MangaListActivity.java +++ b/src/com/hippo/ehviewer/activity/MangaListActivity.java @@ -17,6 +17,7 @@ import com.hippo.ehviewer.util.Cache; import com.hippo.ehviewer.util.Config; import com.hippo.ehviewer.util.EhClient; import com.hippo.ehviewer.util.Favourite; +import com.hippo.ehviewer.util.Log; import com.hippo.ehviewer.util.Tag; import com.hippo.ehviewer.util.Ui; import com.hippo.ehviewer.util.Util; @@ -31,10 +32,11 @@ import com.hippo.ehviewer.widget.PullListView; import com.hippo.ehviewer.widget.SuperDialogUtil; import com.hippo.ehviewer.widget.PullListView.OnFooterRefreshListener; import com.hippo.ehviewer.widget.PullListView.OnHeaderRefreshListener; +import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; +import com.jeremyfeinstein.slidingmenu.lib.app.SlidingActivity; import android.os.Build; import android.os.Bundle; -import android.app.Activity; import android.app.AlertDialog; import android.app.SearchManager; import android.content.Context; @@ -43,8 +45,6 @@ import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Color; import android.support.v4.app.ActionBarDrawerToggle; -import android.support.v4.widget.DrawerLayout; -import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; @@ -70,19 +70,17 @@ import android.widget.TextView; import android.widget.Toast; // TODO check visiblePage is right or not -// TODO Good resource // TODO http://lofi.e-hentai.org/ -// TODO http://exhentai.org/ -// TODO add lock to get list -public class MangaListActivity extends Activity { +public class MangaListActivity extends SlidingActivity { @SuppressWarnings("unused") private static String TAG = "MangaListActivity"; private AppContext mAppContext; private EhClient mEhClient; - private DrawerLayout mDrawerLayout; + private SlidingMenu mSlidingMenu; + private GetPaddingRelativeLayout mainLayout; private TagListView listMenu; private RelativeLayout loginMenu; @@ -102,8 +100,6 @@ public class MangaListActivity extends Activity { private Button logoutButton; private View waitlogoutView; - private ActionBarDrawerToggle mDrawerToggle; - private TagsAdapter tagsAdapter; private ListUrls lus; @@ -219,7 +215,7 @@ public class MangaListActivity extends Activity { @Override public void onClick(View v) { ((AlertButton)v).dialog.dismiss(); - mDrawerLayout.closeDrawers(); + showContent(); ListUrls listUrls = getLus(filterDialog); String search = listUrls.getSearch(); String t = null; @@ -701,7 +697,12 @@ public class MangaListActivity extends Activity { checkImageSr.setChecked(false); Spinner spinnerMinRating = (Spinner) view .findViewById(R.id.spinner_min_rating); - spinnerMinRating.setSelection(listUrls.getMinRating() - 2); + int index; + if (listUrls.getMinRating() == -1) + index = 0; + else + index = listUrls.getMinRating() - 2; + spinnerMinRating.setSelection(index); } private class MangaListGetPackage { @@ -1016,19 +1017,11 @@ public class MangaListActivity extends Activity { @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); - mDrawerToggle.onConfigurationChanged(newConfig); if (Build.VERSION.SDK_INT >= 19) { BeautifyScreen.fixColour(this); } } - @Override - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - // Sync the toggle state after onRestoreInstanceState has occurred. - mDrawerToggle.syncState(); - } - @Override protected void onResume() { super.onResume(); @@ -1042,6 +1035,30 @@ public class MangaListActivity extends Activity { super.onCreate(savedInstanceState); setContentView(R.layout.list); + setBehindContentView(R.layout.list_menu_list); + setSlidingActionBarEnabled(false); + mSlidingMenu = getSlidingMenu(); + mSlidingMenu.setMode(SlidingMenu.LEFT_RIGHT); + mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); + mSlidingMenu.setSecondaryMenu(R.layout.list_menu_login); + mSlidingMenu.setBehindWidth(Ui.dp2pix(240)); + + mSlidingMenu.setOnOpenedListener(new SlidingMenu.OnOpenedListener() { + @Override + public void onOpened() { + setTitle(R.string.app_name); + invalidateOptionsMenu(); + } + }); + + mSlidingMenu.setOnClosedListener(new SlidingMenu.OnClosedListener() { + @Override + public void onClosed() { + setTitle(title); + invalidateOptionsMenu(); + } + }); + mAppContext = (AppContext)getApplication(); mEhClient = mAppContext.getEhClient(); @@ -1075,7 +1092,6 @@ public class MangaListActivity extends Activity { } // Get View - mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout); mainLayout = (GetPaddingRelativeLayout)findViewById(R.id.list_main); listMenu = (TagListView) findViewById(R.id.list_menu_list); loginMenu = (RelativeLayout)findViewById(R.id.list_menu_login); @@ -1096,33 +1112,11 @@ public class MangaListActivity extends Activity { waitlogoutView = (View) findViewById(R.id.list_wait_logout); // fitsSystemWindows for menu - mainLayout.setView(listMenu, loginMenu); + //mainLayout.setView(listMenu, loginMenu); // Drawer getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); - mDrawerToggle = new ActionBarDrawerToggle( - this, /* host Activity */ - mDrawerLayout, /* DrawerLayout object */ - R.drawable.ic_navigation_drawer, /* nav drawer image to replace 'Up' caret */ - R.string.drawer_open, /* "open drawer" description for accessibility */ - R.string.drawer_close /* "close drawer" description for accessibility */ - ) { - public void onDrawerClosed(View view) { - getActionBar().setTitle(title); - invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() - } - - public void onDrawerOpened(View drawerView) { - getActionBar().setTitle(R.string.app_name); - invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() - } - }; - mDrawerLayout.setDrawerListener(mDrawerToggle); - - // set drawer shadow - mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow_left, Gravity.LEFT); - mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow_right, Gravity.RIGHT); // leftDrawer String[] menuTitles = getResources().getStringArray(R.array.list_list_title); @@ -1143,23 +1137,23 @@ public class MangaListActivity extends Activity { int position, long arg3) { if (position == 0) { // Home page if (refresh(new ListUrls(ListUrls.ALL_TYPE, null, 0), listMenuTitle.get(position))) - mDrawerLayout.closeDrawers(); + showContent(); } else if (position == 1) { // Favourite Intent intent = new Intent(MangaListActivity.this, FavouriteActivity.class); startActivity(intent); - mDrawerLayout.closeDrawers(); + showContent(); } else if (position == 2) { // filter filterDialog.show(); } else if (position == 3) { // Download Intent intent = new Intent(MangaListActivity.this, DownloadActivity.class); startActivity(intent); - mDrawerLayout.closeDrawers(); + showContent(); } else if (position >= mStableItemCount){ ListUrls listUrls = Tag.get(listMenuTitle.get(position)); if (listUrls != null && refresh(listUrls, listMenuTitle.get(position))) - mDrawerLayout.closeDrawers(); + showContent(); } } }); @@ -1169,18 +1163,6 @@ public class MangaListActivity extends Activity { createModifyTagDialog(position).show(); } }); - listMenu.setOnMoveLister(new TagListView.OnMoveLister() { - @Override - public void onMoveStart() { - mDrawerLayout.setEnabled(false); - } - - @Override - public void onMoveOver() { - mDrawerLayout.setEnabled(true); - } - }); - // is Exhentai final String[] isExhentaiListTitle = getResources().getStringArray(R.array.is_exhentai); @@ -1238,7 +1220,7 @@ public class MangaListActivity extends Activity { if (isChanged) { isExhentaiListAdapter.notifyDataSetChanged(); refresh(new ListUrls(ListUrls.ALL_TYPE, null, 0), listMenuTitle.get(0)); - mDrawerLayout.closeDrawers(); // TODO + showContent(); // TODO } } }); @@ -1393,8 +1375,7 @@ public class MangaListActivity extends Activity { @Override public boolean onPrepareOptionsMenu(Menu menu) { // If the nav drawer is open, hide action items related to the content view - boolean drawerOpen = mDrawerLayout.isDrawerOpen(Gravity.LEFT) - | mDrawerLayout.isDrawerOpen(Gravity.RIGHT); + boolean drawerOpen = mSlidingMenu.isMenuShowing(); menu.findItem(R.id.action_search).setVisible(!drawerOpen); menu.findItem(R.id.action_refresh).setVisible(!drawerOpen); menu.findItem(R.id.action_jump).setVisible(!drawerOpen); @@ -1421,10 +1402,10 @@ public class MangaListActivity extends Activity { // Handle item selection switch (item.getItemId()) { case android.R.id.home: - if (mDrawerLayout.isDrawerOpen(Gravity.START)) - mDrawerLayout.closeDrawers(); + if (mSlidingMenu.isMenuShowing()) + showContent(); else - mDrawerLayout.openDrawer(Gravity.START); + showMenu(); return true; case R.id.action_refresh: // TODO 点击刷新,pullviewheader 不会自动出来 refresh(lus.clone(), listMenuTitle.get(0)); diff --git a/src/com/hippo/ehviewer/data/Data.java b/src/com/hippo/ehviewer/data/Data.java new file mode 100644 index 000000000..e12fe4175 --- /dev/null +++ b/src/com/hippo/ehviewer/data/Data.java @@ -0,0 +1,195 @@ +package com.hippo.ehviewer.data; + +import java.util.ArrayList; +import java.util.List; + +import com.hippo.ehviewer.ListUrls; +import com.hippo.ehviewer.Tag; +import com.hippo.ehviewer.util.Util; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.DatabaseUtils; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +/** + * @author Hippo + * + */ + +public class Data { + + private static final int mVersion = 1; + private static final String DB_NAME = "data"; + + private static final String TABLE_GALLERY = "gallery"; + private static final String TABLE_READ = "read"; + private static final String TABLE_LOCAL_FAVOURITE = "local_favourite"; + private static final String TABLE_TAG = "tag"; + + private static final String COLUMN_GID = "gid"; + private static final String COLUMN_TOKEN = "token"; + private static final String COLUMN_TITLE = "title"; + private static final String COLUMN_POSTED = "posted"; + private static final String COLUMN_CATEGORY = "category"; + private static final String COLUMN_THUMB = "thumb"; + private static final String COLUMN_UPLODER = "uploder"; + private static final String COLUMN_RATING = "rating"; + private static final String COLUMN_REFERENCE = "reference"; + + private static final String COLUMN_ID = "id"; + private static final String COLUMN_NAME = "name"; + private static final String COLUMN_SEARCH = "search"; + private static final String COLUMN_ADVANCE = "advance"; + private static final String COLUMN_MIN_RATING = "min_rating"; + + private long tagRowNum; + private List mTags = new ArrayList(); + + private Context mContext; + + private DBHelper mDBHelper; + private SQLiteDatabase mDatabase; + + public Data(Context context) { + mContext = context; + mDBHelper = new DBHelper(mContext); + mDatabase = mDBHelper.getWritableDatabase(); + + getTags(); + } + + @Override + public void finalize() { + mDBHelper.close(); + } + + /****** TAG ******/ + private synchronized List getTags() { + mTags = new ArrayList(); + tagRowNum = 0; + Cursor cursor = mDatabase.rawQuery("select * from " + TABLE_TAG + + " order by " + COLUMN_ID + " asc", null); + if (cursor.moveToFirst()) { + while (!cursor.isAfterLast()) { + + String name = cursor.getString(1); + int category = cursor.getInt(2); + String search = cursor.getString(3); + int advance = cursor.getInt(4); + int min_rating = cursor.getInt(5); + + Tag tag = new Tag(name, category, search); + tag.setAdvance(advance, min_rating); + + mTags.add(tag); + + cursor.moveToNext(); + tagRowNum++; + } + } + return mTags; + } + + public synchronized boolean addTag(String name, Tag tag) { + ContentValues values = new ContentValues(); + values.put(COLUMN_ID, tagRowNum); + values.put(COLUMN_NAME, name); + values.put(COLUMN_CATEGORY, tag.getType()); + values.put(COLUMN_SEARCH, tag.getSearch()); + values.put(COLUMN_ADVANCE, tag.getAdvanceType()); + values.put(COLUMN_MIN_RATING, tag.getMinRating()); + + boolean ok = mDatabase.insert( + TABLE_TAG, null, values) != -1; + if (ok) { + tagRowNum++; + mTags.add(tag); + } + return ok; + } + + public synchronized void deleteTag(int id) { + int deleteNum = mDatabase.delete(TABLE_TAG, COLUMN_ID + "=?", new String[]{String.valueOf(id)}); + tagRowNum -= deleteNum; + } + + public List getAllTags() { + return mTags; + } + + public synchronized boolean swapTag(int indexOne, int indexTwo) { + if (indexOne < 0 || indexOne > tagRowNum + || indexTwo < 0 || indexTwo > tagRowNum) + return false; + + if (indexOne == indexTwo) + return true; + + // Update list + Tag temp = mTags.get(indexOne); + mTags.set(indexOne, mTags.get(indexTwo)); + mTags.set(indexTwo, temp); + // Update sql + ContentValues values = new ContentValues(); + values.put(COLUMN_ID, -1); + mDatabase.update(TABLE_TAG, values, COLUMN_ID + "=?", new String[]{String.valueOf(indexOne)}); + values.put(COLUMN_ID, indexOne); + mDatabase.update(TABLE_TAG, values, COLUMN_ID + "=?", new String[]{String.valueOf(indexTwo)}); + values.put(COLUMN_ID, indexTwo); + mDatabase.update(TABLE_TAG, values, COLUMN_ID + "=?", new String[]{String.valueOf(indexOne)}); + return true; + } + + + + public class DBHelper extends SQLiteOpenHelper { + + public DBHelper(Context context) { + super(context, DB_NAME, null, mVersion); + } + + @Override + public void onCreate(SQLiteDatabase db) { + String CreateGallery = "create table " + TABLE_GALLERY + "(" + + "gid text primary key," + + "token text," + + "title text," + + "posted text," + + "category integer," + + "thumb text," + + "uploder text," + + "rating text," + + "reference integer);"; + db.execSQL(CreateGallery); + + String CreateRead = "create table " + + TABLE_READ + "(" + + "gid text primary key);"; + db.execSQL(CreateRead); + + String CreateLocalFavourite = "create table " + + TABLE_LOCAL_FAVOURITE + "(" + + "gid text primary key);"; + db.execSQL(CreateLocalFavourite); + + String CreateTag = "create table " + + TABLE_TAG + "(" + + "id integer primary key," + + "name text," + + "category integer," + + "search text," + + "advance integer," + + "min_rating integer);"; + db.execSQL(CreateTag); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + db.execSQL("drop table if exists " + TABLE_GALLERY); + onCreate(db); + } + } +} diff --git a/src/com/hippo/ehviewer/gallery/glrenderer/GLCanvas.java b/src/com/hippo/ehviewer/gallery/glrenderer/GLCanvas.java index 928ce9b7d..4ff7aa492 100644 --- a/src/com/hippo/ehviewer/gallery/glrenderer/GLCanvas.java +++ b/src/com/hippo/ehviewer/gallery/glrenderer/GLCanvas.java @@ -179,6 +179,18 @@ public interface GLCanvas { public abstract void texSubImage2D(BasicTexture texture, int xOffset, int yOffset, Bitmap bitmap, int format, int type); + + /** + * Calls glTexSubImage2D to upload a bitmap to the texture. + * + * @param texture The target texture to write to. + * @param xOffset Specifies a texel offset in the x direction within the + * texture array. + * @param yOffset Specifies a texel offset in the y direction within the + * texture array. + */ + public abstract void texSubImage2D(BasicTexture texture, int xOffset, int yOffset, + Bitmap bitmap); /** * Generates buffers and uploads the buffer data. diff --git a/src/com/hippo/ehviewer/gallery/glrenderer/GLES11Canvas.java b/src/com/hippo/ehviewer/gallery/glrenderer/GLES11Canvas.java index 240e86d3d..aa1da9082 100644 --- a/src/com/hippo/ehviewer/gallery/glrenderer/GLES11Canvas.java +++ b/src/com/hippo/ehviewer/gallery/glrenderer/GLES11Canvas.java @@ -959,6 +959,13 @@ public class GLES11Canvas implements GLCanvas { mGL.glBindTexture(target, texture.getId()); GLUtils.texSubImage2D(target, 0, xOffset, yOffset, bitmap, format, type); } + + @Override + public void texSubImage2D(BasicTexture texture, int xOffset, int yOffset, Bitmap bitmap) { + int target = texture.getTarget(); + mGL.glBindTexture(target, texture.getId()); + GLUtils.texSubImage2D(target, 0, xOffset, yOffset, bitmap); + } @Override public int uploadBuffer(FloatBuffer buf) { diff --git a/src/com/hippo/ehviewer/gallery/glrenderer/GLES20Canvas.java b/src/com/hippo/ehviewer/gallery/glrenderer/GLES20Canvas.java index a963bdb81..cda92d371 100644 --- a/src/com/hippo/ehviewer/gallery/glrenderer/GLES20Canvas.java +++ b/src/com/hippo/ehviewer/gallery/glrenderer/GLES20Canvas.java @@ -937,6 +937,14 @@ public class GLES20Canvas implements GLCanvas { checkError(); GLUtils.texSubImage2D(target, 0, xOffset, yOffset, bitmap, format, type); } + + @Override + public void texSubImage2D(BasicTexture texture, int xOffset, int yOffset, Bitmap bitmap) { + int target = texture.getTarget(); + GLES20.glBindTexture(target, texture.getId()); + checkError(); + GLUtils.texSubImage2D(target, 0, xOffset, yOffset, bitmap); + } @Override public int uploadBuffer(FloatBuffer buf) { diff --git a/src/com/hippo/ehviewer/network/Downloader.java b/src/com/hippo/ehviewer/network/Downloader.java index 87b476121..fe11e08d6 100644 --- a/src/com/hippo/ehviewer/network/Downloader.java +++ b/src/com/hippo/ehviewer/network/Downloader.java @@ -49,6 +49,7 @@ public class Downloader implements Runnable { private Context mContext; + private File mFile; private File mFolder; private String mPath; private String mFileName; @@ -69,6 +70,10 @@ public class Downloader implements Runnable { public void onDownloadStartConnect(); public void onDownloadStartDownload(int totalSize); public void onDownloadStatusUpdate(int downloadSize, int totalSize); + /** + * FAILED or COMPLETED or STOPED + * @param status + */ public void onDownloadOver(int status); } @@ -186,6 +191,9 @@ public class Downloader implements Runnable { if (mContorlor.isStop()) status = STOPED; + if (status != COMPLETED && mFile != null) + mFile.delete(); + if (mListener != null) mListener.onDownloadOver(status); } @@ -304,7 +312,6 @@ public class Downloader implements Runnable { private void transferData(HttpURLConnection conn) throws Exception { InputStream in = null; RandomAccessFile raf = null; - File file = null; if (mContorlor.isStop()) throw new StopRequestException(); @@ -317,8 +324,8 @@ public class Downloader implements Runnable { } try { - file = new File(mPath, mFileName); - raf = new RandomAccessFile(file, "rw"); + mFile = new File(mPath, mFileName); + raf = new RandomAccessFile(mFile, "rw"); raf.seek(mDownloadSize); } catch (IOException e) { throw new FileException(FileException.CREATE_FILE_ERROR); diff --git a/src/com/hippo/ehviewer/network/HttpHelper.java b/src/com/hippo/ehviewer/network/HttpHelper.java index bce593da2..c384a06dc 100644 --- a/src/com/hippo/ehviewer/network/HttpHelper.java +++ b/src/com/hippo/ehviewer/network/HttpHelper.java @@ -5,6 +5,9 @@ import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; +import java.net.CookieHandler; +import java.net.CookieManager; +import java.net.CookiePolicy; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.SocketException; @@ -51,6 +54,11 @@ public class HttpHelper { mContext = context; } + public static void setCookieHelper(Context context) { + CookieManager cookieManager = new CookieManager(new ShapreCookieStore(context), CookiePolicy.ACCEPT_ALL); + CookieHandler.setDefault(cookieManager); + } + /** * Get last error message * @return @@ -104,22 +112,13 @@ public class HttpHelper { // Get charset String charset = null; - List contentType = conn.getHeaderFields().get("Content-Type"); - if (contentType != null) { - for (String item : contentType) { - if (item == null) - continue; - int index = -1; - if ((index = item.indexOf(CHARSET_KEY)) != -1) { - charset = item.substring(index + CHARSET_KEY.length()); - break; - } - } - } - // Use default charset - if (charset == null) { + String contentType = conn.getContentType(); + int index = -1; + if (contentType != null + && (index = contentType.indexOf(CHARSET_KEY)) != -1) { + charset = contentType.substring(index + CHARSET_KEY.length()); + } else charset = DEFAULT_CHARSET; - } pageContext = baos.toString(charset); } catch (IOException e) { @@ -145,10 +144,12 @@ public class HttpHelper { url = new URL(urlStr); while (redirectionCount++ < Constant.MAX_REDIRECTS) { conn = (HttpURLConnection) url.openConnection(); + conn.setInstanceFollowRedirects(true); conn.addRequestProperty("Accept-Encoding", "gzip"); conn.setRequestProperty("User-Agent", Constant.userAgent); conn.setConnectTimeout(Constant.DEFAULT_TIMEOUT); conn.setReadTimeout(Constant.DEFAULT_TIMEOUT); + conn.setRequestProperty("Connection", "close"); conn.connect(); final int responseCode = conn.getResponseCode(); @@ -207,6 +208,7 @@ public class HttpHelper { conn.setInstanceFollowRedirects(true); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + conn.setRequestProperty("Connection", "close"); DataOutputStream out = new DataOutputStream(conn.getOutputStream()); StringBuilder sb = new StringBuilder(); @@ -279,6 +281,7 @@ public class HttpHelper { conn.setRequestMethod("POST"); conn.setUseCaches(false); conn.setInstanceFollowRedirects(true); + conn.setRequestProperty("Connection", "close"); DataOutputStream out = new DataOutputStream(conn.getOutputStream()); out.writeBytes(str); @@ -344,6 +347,7 @@ public class HttpHelper { conn.setInstanceFollowRedirects(true); conn.setRequestProperty("Content-Type", "application/json"); conn.setRequestProperty("Accept", "application/json"); + conn.setRequestProperty("Connection", "close"); DataOutputStream out = new DataOutputStream(conn.getOutputStream()); out.writeBytes(jsonStr); @@ -405,12 +409,14 @@ public class HttpHelper { conn.setRequestProperty("User-Agent", Constant.userAgent); conn.setConnectTimeout(Constant.DEFAULT_TIMEOUT); conn.setReadTimeout(Constant.DEFAULT_TIMEOUT); + conn.setRequestProperty("Connection", "close"); conn.connect(); final int responseCode = conn.getResponseCode(); switch (responseCode) { case HttpURLConnection.HTTP_OK: case HttpURLConnection.HTTP_PARTIAL: + Bitmap bitmap = null; is = conn.getInputStream(); if (diskCache == null) { diff --git a/src/com/hippo/ehviewer/network/PrefCookieHelper.java b/src/com/hippo/ehviewer/network/PrefCookieHelper.java new file mode 100644 index 000000000..b6dc6256f --- /dev/null +++ b/src/com/hippo/ehviewer/network/PrefCookieHelper.java @@ -0,0 +1,72 @@ +package com.hippo.ehviewer.network; + +import java.net.CookieStore; +import java.net.HttpCookie; +import java.net.HttpURLConnection; +import java.net.URI; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.hippo.ehviewer.util.Log; + +import android.content.Context; +import android.content.SharedPreferences; + +public class PrefCookieHelper implements CookieStore { + private static final String TAG = "PrefCookieHelper"; + private final String PREF_NAME = "cookies"; + + private final SharedPreferences cookiePref; + private Map cookies; + + public PrefCookieHelper(Context context) { + cookiePref = context.getSharedPreferences(PREF_NAME, 0); + + cookies = new HashMap(); + Map all = cookiePref.getAll(); + for (Entry item : all.entrySet()) { + Object value = item.getValue(); + if (value instanceof String) + cookies.put(item.getKey(), (String)value); + } + } + + @Override + public synchronized void add(URI uri, HttpCookie cookie) { + uri.getHost(); + } + + @Override + public synchronized List get(URI uri) { + // TODO Auto-generated method stub + return null; + } + + @Override + public synchronized List getCookies() { + // TODO Auto-generated method stub + return null; + } + + @Override + public synchronized List getURIs() { + // TODO Auto-generated method stub + return null; + } + + @Override + public synchronized boolean remove(URI uri, HttpCookie cookie) { + // TODO Auto-generated method stub + return false; + } + + @Override + public synchronized boolean removeAll() { + // TODO Auto-generated method stub + return false; + } +} diff --git a/src/com/hippo/ehviewer/util/EhClient.java b/src/com/hippo/ehviewer/util/EhClient.java index 6b75ea306..1be43772c 100644 --- a/src/com/hippo/ehviewer/util/EhClient.java +++ b/src/com/hippo/ehviewer/util/EhClient.java @@ -124,9 +124,6 @@ public class EhClient { public EhClient(AppContext appContext) { mAppContext = appContext; - CookieManager cookieManager = new CookieManager(new ShapreCookieStore(mAppContext), CookiePolicy.ACCEPT_ALL); - CookieHandler.setDefault(cookieManager); - if (Config.isExhentai()) { listHeader = EXHENTAI_LIST_HEADER; detailHeader = EXHENTAI_DETAIL_HEADER; diff --git a/src/com/hippo/ehviewer/view/TagListView.java b/src/com/hippo/ehviewer/view/TagListView.java index 38e222ac9..428f28416 100644 --- a/src/com/hippo/ehviewer/view/TagListView.java +++ b/src/com/hippo/ehviewer/view/TagListView.java @@ -43,6 +43,7 @@ import android.widget.ListView; import java.util.ArrayList; import java.util.HashMap; +import com.hippo.ehviewer.util.Log; import com.hippo.ehviewer.util.Tag; import com.hippo.ehviewer.util.Ui; @@ -68,7 +69,9 @@ import com.hippo.ehviewer.util.Ui; * listview also scrolls on its own so as to reveal additional content. */ public class TagListView extends ListView { - + + private static final String TAG = "TagListView"; + private final int SMOOTH_SCROLL_AMOUNT_AT_EDGE = 15; private final int MOVE_DURATION = 150; private final int LINE_THICKNESS = Ui.dp2pix(3); @@ -180,7 +183,7 @@ public class TagListView extends ListView { int top = v.getTop(); int left = v.getLeft(); - Bitmap b = getBitmapWithBorder(v); + Bitmap b = getHoverBitmap(v); BitmapDrawable drawable = new BitmapDrawable(getResources(), b); @@ -201,18 +204,13 @@ public class TagListView extends ListView { } private Bitmap getDeleteBitmap(View v) { - Bitmap bitmap = getBitmapWithBorder(v); + Bitmap bitmap = getBitmapFromView(v); Canvas can = new Canvas(bitmap); + Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); Paint paint = new Paint(); - paint.setStyle(Paint.Style.STROKE); - paint.setStrokeWidth(LINE_THICKNESS/2); - paint.setColor(Color.WHITE); - - int width = bitmap.getWidth(); - int height = bitmap.getHeight(); - for (int i = -height; i < width; i += height/2) - can.drawLine(i, 0, i + height, height, paint); + paint.setColor(0x8fff0000); + can.drawRect(rect, paint); return bitmap; } @@ -226,38 +224,27 @@ public class TagListView extends ListView { } private Bitmap getModifyBitmap(View v) { - Bitmap bitmap = getBitmapWithBorder(v); + Bitmap bitmap = getBitmapFromView(v); Canvas can = new Canvas(bitmap); + Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); Paint paint = new Paint(); - paint.setStyle(Paint.Style.STROKE); - paint.setStrokeWidth(LINE_THICKNESS/2); - paint.setColor(Color.WHITE); - - int gap = LINE_THICKNESS * 4; - int width = bitmap.getWidth(); - int height = bitmap.getHeight(); - for (int i = gap; i < height; i += gap) - can.drawLine(0, i, width, i, paint); + paint.setColor(0x8faa00ff); + can.drawRect(rect, paint); return bitmap; } /** Draws a black border over the screenshot of the view passed in. */ - private Bitmap getBitmapWithBorder(View v) { + private Bitmap getHoverBitmap(View v) { Bitmap bitmap = getBitmapFromView(v); Canvas can = new Canvas(bitmap); - + Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); - Paint paint = new Paint(); - paint.setStyle(Paint.Style.STROKE); - paint.setStrokeWidth(LINE_THICKNESS); - paint.setColor(Color.WHITE); - - //can.drawBitmap(bitmap, 0, 0, null); + paint.setColor(0x8f00aadd); can.drawRect(rect, paint); - + return bitmap; } @@ -350,7 +337,6 @@ public class TagListView extends ListView { @Override public boolean onTouchEvent (MotionEvent event) { - switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: mDownX = (int)event.getX(); diff --git a/src/com/hippo/ehviewer/widget/LoadImageView.java b/src/com/hippo/ehviewer/widget/LoadImageView.java index aea2d9523..07dd546d8 100644 --- a/src/com/hippo/ehviewer/widget/LoadImageView.java +++ b/src/com/hippo/ehviewer/widget/LoadImageView.java @@ -27,6 +27,7 @@ public class LoadImageView extends ImageView { private static final int WAIT_IMAGE_ID = R.drawable.ic_launcher; private static final int TOUCH_IMAGE_ID = R.drawable.ic_touch; + private static final int SHORT_DURATION = 100; private static final int DURATION = 300; private int mState = NONE; @@ -80,10 +81,12 @@ public class LoadImageView extends ImageView { } public void setContextImage(Bitmap bmp) { + int dur = DURATION; + Drawable oldDrawable = getDrawable(); if (oldDrawable == null) { - oldDrawable = new ColorDrawable(Ui.HOLO_WHITE); - oldDrawable.setBounds(0, 0, bmp.getWidth(), bmp.getHeight()); + oldDrawable = new ColorDrawable(Color.TRANSPARENT); + dur = SHORT_DURATION; } else if (oldDrawable instanceof TransitionDrawable){ oldDrawable = ((TransitionDrawable)oldDrawable).getDrawable(1); } @@ -93,7 +96,7 @@ public class LoadImageView extends ImageView { layers[1] = new BitmapDrawable(getContext().getResources(), bmp); TransitionDrawable transitionDrawable = new TransitionDrawable(layers); setImageDrawable(transitionDrawable); - transitionDrawable.startTransition(DURATION); + transitionDrawable.startTransition(dur); } class OnClickListener implements View.OnClickListener {