diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index aeadb10d4..67d6a0600 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -14,7 +14,7 @@
diff --git a/bin/AndroidManifest.xml b/bin/AndroidManifest.xml
index aeadb10d4..67d6a0600 100644
--- a/bin/AndroidManifest.xml
+++ b/bin/AndroidManifest.xml
@@ -14,7 +14,7 @@
diff --git a/bin/EhViewer.apk b/bin/EhViewer.apk
index 30a77055f..c52103bc7 100644
Binary files a/bin/EhViewer.apk and b/bin/EhViewer.apk differ
diff --git a/bin/R.txt b/bin/R.txt
index c7223b1e8..5bb00e3fb 100644
--- a/bin/R.txt
+++ b/bin/R.txt
@@ -11,43 +11,29 @@ int array preference_screen_ori_entry_values 0x7f080008
int array pull_next 0x7f08000c
int array pull_pre 0x7f08000b
int array pull_refresh 0x7f08000a
-int attr adjustViewBounds 0x7f01001c
-int attr alignmentMode 0x7f010012
-int attr baseline 0x7f010022
-int attr baselineAlignBottom 0x7f010020
-int attr behindOffset 0x7f010003
-int attr behindScrollScale 0x7f010005
-int attr behindWidth 0x7f010004
-int attr columnCount 0x7f010010
-int attr columnOrderPreserved 0x7f010014
-int attr cropToPadding 0x7f010021
-int attr drawableAlpha 0x7f010023
-int attr fadeDegree 0x7f01000b
-int attr fadeEnabled 0x7f01000a
-int attr layout_column 0x7f010017
-int attr layout_columnSpan 0x7f010018
-int attr layout_gravity 0x7f010019
-int attr layout_row 0x7f010015
-int attr layout_rowSpan 0x7f010016
-int attr mask 0x7f010024
-int attr maxHeight 0x7f01001e
-int attr maxWidth 0x7f01001d
-int attr mode 0x7f010000
-int attr orientation 0x7f01000e
-int attr rowCount 0x7f01000f
-int attr rowOrderPreserved 0x7f010013
-int attr scaleType 0x7f01001b
-int attr selectorDrawable 0x7f01000d
-int attr selectorEnabled 0x7f01000c
-int attr shadowDrawable 0x7f010008
-int attr shadowWidth 0x7f010009
-int attr src 0x7f01001a
-int attr tint 0x7f01001f
-int attr touchModeAbove 0x7f010006
-int attr touchModeBehind 0x7f010007
-int attr useDefaultMargins 0x7f010011
-int attr viewAbove 0x7f010001
-int attr viewBehind 0x7f010002
+int attr adjustViewBounds 0x7f01000e
+int attr alignmentMode 0x7f010004
+int attr baseline 0x7f010014
+int attr baselineAlignBottom 0x7f010012
+int attr columnCount 0x7f010002
+int attr columnOrderPreserved 0x7f010006
+int attr cropToPadding 0x7f010013
+int attr drawableAlpha 0x7f010015
+int attr layout_column 0x7f010009
+int attr layout_columnSpan 0x7f01000a
+int attr layout_gravity 0x7f01000b
+int attr layout_row 0x7f010007
+int attr layout_rowSpan 0x7f010008
+int attr mask 0x7f010016
+int attr maxHeight 0x7f010010
+int attr maxWidth 0x7f01000f
+int attr orientation 0x7f010000
+int attr rowCount 0x7f010001
+int attr rowOrderPreserved 0x7f010005
+int attr scaleType 0x7f01000d
+int attr src 0x7f01000c
+int attr tint 0x7f010011
+int attr useDefaultMargins 0x7f010003
int color blue_dark 0x7f090001
int color blue_light 0x7f090000
int dimen activity_horizontal_margin 0x7f070001
@@ -85,165 +71,161 @@ int drawable misc 0x7f02001a
int drawable non_h 0x7f02001b
int drawable progress_large 0x7f02001c
int drawable progress_small 0x7f02001d
-int drawable refresh 0x7f02001e
-int drawable sadpanda 0x7f02001f
-int drawable scrollbar_blue 0x7f020020
-int drawable scrollbar_white 0x7f020021
-int drawable spinner_16_inner 0x7f020022
-int drawable spinner_16_outer 0x7f020023
-int drawable spinner_76_inner 0x7f020024
-int drawable spinner_76_outer 0x7f020025
-int drawable star 0x7f020026
-int drawable star_empty 0x7f020027
-int drawable star_half 0x7f020028
-int drawable textfield 0x7f020029
-int drawable unknown 0x7f02002a
-int drawable wait 0x7f02002b
-int drawable welcome 0x7f02002c
-int drawable western 0x7f02002d
-int id action 0x7f060040
-int id action_download 0x7f06008a
-int id action_favourite 0x7f060089
-int id action_jump 0x7f06008d
-int id action_refresh 0x7f06008c
-int id action_search 0x7f06008b
-int id action_settings 0x7f06008e
-int id alignBounds 0x7f060007
-int id alignMargins 0x7f060008
-int id app_start_view 0x7f060087
-int id autoCompleteTextView1 0x7f060083
-int id bottom 0x7f06000a
-int id bottom_panel 0x7f060075
-int id button_artistcg 0x7f060044
-int id button_asianporn 0x7f06004a
-int id button_cosplay 0x7f060049
-int id button_doujinshi 0x7f060042
-int id button_gamecg 0x7f060045
-int id button_imageset 0x7f060048
-int id button_login 0x7f06006e
-int id button_manga 0x7f060043
-int id button_misc 0x7f06004b
-int id button_non_h 0x7f060047
-int id button_read 0x7f06002e
-int id button_western 0x7f060046
-int id center 0x7f06000f
-int id centerCrop 0x7f06001a
-int id centerInside 0x7f06001b
-int id center_horizontal 0x7f06000d
-int id center_vertical 0x7f06000b
-int id checkbox_advance 0x7f06004d
-int id checkbox_sdesc 0x7f060051
-int id checkbox_sdt1 0x7f060054
-int id checkbox_sdt2 0x7f060055
-int id checkbox_sh 0x7f060056
-int id checkbox_sname 0x7f06004f
-int id checkbox_sr 0x7f060057
-int id checkbox_stags 0x7f060050
-int id checkbox_sto 0x7f060053
-int id checkbox_storr 0x7f060052
-int id clip_horizontal 0x7f060012
-int id clip_vertical 0x7f060011
-int id cover 0x7f060062
-int id custom 0x7f060037
-int id detail_average 0x7f06002c
-int id detail_button_cancel 0x7f060030
-int id detail_button_every 0x7f060032
-int id detail_button_known 0x7f060033
-int id detail_button_once 0x7f060031
-int id detail_cover 0x7f06001e
-int id detail_language 0x7f06002a
-int id detail_pages 0x7f060028
-int id detail_people 0x7f06002d
-int id detail_posted 0x7f060027
-int id detail_rate 0x7f06002b
-int id detail_refresh 0x7f060024
-int id detail_size 0x7f060029
-int id detail_title 0x7f06001f
-int id detail_type 0x7f060025
-int id detail_uploader 0x7f060026
-int id detail_wait 0x7f060023
-int id download 0x7f06003c
-int id drawer_login 0x7f060068
-int id drawer_login_over 0x7f060069
-int id end 0x7f060014
-int id favourite 0x7f060041
-int id fill 0x7f060010
-int id fill_horizontal 0x7f06000e
-int id fill_vertical 0x7f06000c
-int id filter_advance 0x7f06004e
-int id fitCenter 0x7f060018
-int id fitEnd 0x7f060019
-int id fitStart 0x7f060017
-int id fitXY 0x7f060016
-int id footer_progressBar 0x7f060079
-int id footer_tip_text 0x7f06007a
-int id fullscreen 0x7f060003
-int id head_arrowImageView 0x7f06007f
-int id head_contentLayout 0x7f06007e
-int id head_progressBar 0x7f060080
-int id head_tipsTextView 0x7f060081
-int id header 0x7f060077
-int id header_arrow_image 0x7f06007b
-int id header_progressBar 0x7f06007c
-int id header_tip_text 0x7f06007d
-int id horizontal 0x7f060005
-int id info 0x7f06003f
-int id is_exhentai 0x7f06006a
-int id left 0x7f060000
-int id list 0x7f060038
-int id list_button_logout 0x7f060070
-int id list_jump_edit 0x7f06005b
-int id list_jump_sum 0x7f060059
-int id list_jump_to 0x7f06005a
-int id list_list 0x7f06005d
-int id list_main 0x7f06005c
-int id list_menu_list 0x7f060066
-int id list_menu_login 0x7f060067
-int id list_no_found 0x7f060061
-int id list_refresh 0x7f06005f
-int id list_view 0x7f060078
-int id list_wait_first 0x7f06005e
-int id list_wait_logout 0x7f060071
-int id manga_detail 0x7f06001d
-int id manga_detail_normal 0x7f060020
-int id manga_detail_offensive 0x7f060021
-int id manga_detail_pining 0x7f060022
-int id manga_detail_scrollview 0x7f06001c
-int id margin 0x7f060002
-int id matrix 0x7f060015
-int id message 0x7f060036
-int id name 0x7f060063
-int id negative_button 0x7f060039
-int id neutral_button 0x7f06003a
-int id page_list 0x7f06002f
-int id pager 0x7f06006d
-int id paper_list_gridLayout 0x7f060072
-int id paper_list_wait 0x7f060073
-int id password 0x7f06006c
-int id positive_button 0x7f06003b
-int id preview_button_refresh 0x7f060074
-int id preview_num 0x7f060076
-int id progressBar 0x7f06003e
-int id rate 0x7f060065
-int id remove 0x7f060084
-int id right 0x7f060001
-int id sadpanda 0x7f060060
-int id scroll_view 0x7f060035
-int id search_bar 0x7f060082
-int id search_text 0x7f06004c
-int id selected_view 0x7f060004
-int id set_name_edit 0x7f060085
-int id slidingmenumain 0x7f060086
-int id spinner_min_rating 0x7f060058
-int id start 0x7f060013
-int id text_username 0x7f06006f
-int id thumb 0x7f06003d
-int id title 0x7f060034
-int id top 0x7f060009
-int id type 0x7f060064
-int id username 0x7f06006b
-int id vertical 0x7f060006
-int id wait_message 0x7f060088
+int drawable sadpanda 0x7f02001e
+int drawable scrollbar_blue 0x7f02001f
+int drawable scrollbar_white 0x7f020020
+int drawable spinner_16_inner 0x7f020021
+int drawable spinner_16_outer 0x7f020022
+int drawable spinner_76_inner 0x7f020023
+int drawable spinner_76_outer 0x7f020024
+int drawable star 0x7f020025
+int drawable star_empty 0x7f020026
+int drawable star_half 0x7f020027
+int drawable textfield 0x7f020028
+int drawable unknown 0x7f020029
+int drawable welcome 0x7f02002a
+int drawable western 0x7f02002b
+int id action 0x7f06003d
+int id action_download 0x7f060088
+int id action_favourite 0x7f060087
+int id action_jump 0x7f06008b
+int id action_refresh 0x7f06008a
+int id action_search 0x7f060089
+int id action_settings 0x7f06008c
+int id alignBounds 0x7f060002
+int id alignMargins 0x7f060003
+int id app_start_view 0x7f060085
+int id autoCompleteTextView1 0x7f060082
+int id bottom 0x7f060005
+int id bottom_panel 0x7f060074
+int id button_artistcg 0x7f060041
+int id button_asianporn 0x7f060047
+int id button_cosplay 0x7f060046
+int id button_doujinshi 0x7f06003f
+int id button_gamecg 0x7f060042
+int id button_imageset 0x7f060045
+int id button_login 0x7f06006c
+int id button_manga 0x7f060040
+int id button_misc 0x7f060048
+int id button_non_h 0x7f060044
+int id button_read 0x7f06002b
+int id button_western 0x7f060043
+int id center 0x7f06000c
+int id centerCrop 0x7f060017
+int id centerInside 0x7f060018
+int id center_horizontal 0x7f06000a
+int id center_vertical 0x7f060008
+int id checkbox_advance 0x7f06004a
+int id checkbox_sdesc 0x7f06004e
+int id checkbox_sdt1 0x7f060051
+int id checkbox_sdt2 0x7f060052
+int id checkbox_sh 0x7f060053
+int id checkbox_sname 0x7f06004c
+int id checkbox_sr 0x7f060054
+int id checkbox_stags 0x7f06004d
+int id checkbox_sto 0x7f060050
+int id checkbox_storr 0x7f06004f
+int id clip_horizontal 0x7f06000f
+int id clip_vertical 0x7f06000e
+int id cover 0x7f060060
+int id custom 0x7f060034
+int id detail_average 0x7f060029
+int id detail_button_cancel 0x7f06002d
+int id detail_button_every 0x7f06002f
+int id detail_button_known 0x7f060030
+int id detail_button_once 0x7f06002e
+int id detail_cover 0x7f06001b
+int id detail_language 0x7f060027
+int id detail_pages 0x7f060025
+int id detail_people 0x7f06002a
+int id detail_posted 0x7f060024
+int id detail_rate 0x7f060028
+int id detail_refresh 0x7f060021
+int id detail_size 0x7f060026
+int id detail_title 0x7f06001c
+int id detail_type 0x7f060022
+int id detail_uploader 0x7f060023
+int id detail_wait 0x7f060020
+int id download 0x7f060039
+int id drawer_layout 0x7f060059
+int id drawer_login 0x7f060066
+int id drawer_login_over 0x7f060067
+int id end 0x7f060011
+int id favourite 0x7f06003e
+int id fill 0x7f06000d
+int id fill_horizontal 0x7f06000b
+int id fill_vertical 0x7f060009
+int id filter_advance 0x7f06004b
+int id fitCenter 0x7f060015
+int id fitEnd 0x7f060016
+int id fitStart 0x7f060014
+int id fitXY 0x7f060013
+int id footer_progressBar 0x7f060078
+int id footer_tip_text 0x7f060079
+int id head_arrowImageView 0x7f06007e
+int id head_contentLayout 0x7f06007d
+int id head_progressBar 0x7f06007f
+int id head_tipsTextView 0x7f060080
+int id header 0x7f060076
+int id header_arrow_image 0x7f06007a
+int id header_progressBar 0x7f06007b
+int id header_tip_text 0x7f06007c
+int id horizontal 0x7f060000
+int id info 0x7f06003c
+int id is_exhentai 0x7f060068
+int id left 0x7f060006
+int id list 0x7f060035
+int id list_button_logout 0x7f06006f
+int id list_jump_edit 0x7f060058
+int id list_jump_sum 0x7f060056
+int id list_jump_to 0x7f060057
+int id list_list 0x7f06005b
+int id list_main 0x7f06005a
+int id list_menu_list 0x7f060064
+int id list_menu_login 0x7f060065
+int id list_no_found 0x7f06005f
+int id list_refresh 0x7f06005d
+int id list_view 0x7f060077
+int id list_wait_first 0x7f06005c
+int id list_wait_login 0x7f06006d
+int id list_wait_logout 0x7f060070
+int id manga_detail 0x7f06001a
+int id manga_detail_normal 0x7f06001d
+int id manga_detail_offensive 0x7f06001e
+int id manga_detail_pining 0x7f06001f
+int id manga_detail_scrollview 0x7f060019
+int id matrix 0x7f060012
+int id message 0x7f060033
+int id name 0x7f060061
+int id negative_button 0x7f060036
+int id neutral_button 0x7f060037
+int id page_list 0x7f06002c
+int id pager 0x7f06006b
+int id paper_list_gridLayout 0x7f060071
+int id paper_list_wait 0x7f060072
+int id password 0x7f06006a
+int id positive_button 0x7f060038
+int id preview_button_refresh 0x7f060073
+int id preview_num 0x7f060075
+int id progressBar 0x7f06003b
+int id rate 0x7f060063
+int id remove 0x7f060083
+int id right 0x7f060007
+int id sadpanda 0x7f06005e
+int id scroll_view 0x7f060032
+int id search_bar 0x7f060081
+int id search_text 0x7f060049
+int id set_name_edit 0x7f060084
+int id spinner_min_rating 0x7f060055
+int id start 0x7f060010
+int id text_username 0x7f06006e
+int id thumb 0x7f06003a
+int id title 0x7f060031
+int id top 0x7f060004
+int id type 0x7f060062
+int id username 0x7f060069
+int id vertical 0x7f060001
+int id wait_message 0x7f060086
int layout detail 0x7f030000
int layout detail_normal 0x7f030001
int layout detail_offensive 0x7f030002
@@ -272,24 +254,23 @@ int layout pull_list_view_header 0x7f030018
int layout pull_to_refresh_head 0x7f030019
int layout search_view 0x7f03001a
int layout set_name 0x7f03001b
-int layout slidingmenumain 0x7f03001c
-int layout start 0x7f03001d
-int layout wait 0x7f03001e
+int layout start 0x7f03001c
+int layout wait 0x7f03001d
int menu detail 0x7f0c0000
int menu main 0x7f0c0001
int raw change_log 0x7f050000
int raw thanks 0x7f050001
-int string _default 0x7f0a008a
-int string action_refresh 0x7f0a004e
-int string action_settings 0x7f0a004f
-int string actual_size 0x7f0a0092
-int string add 0x7f0a0086
-int string add_tag 0x7f0a0067
-int string add_to_favourite 0x7f0a0096
-int string advance_search_left 0x7f0a009a
+int string _default 0x7f0a008c
+int string action_refresh 0x7f0a0050
+int string action_settings 0x7f0a0051
+int string actual_size 0x7f0a0094
+int string add 0x7f0a0088
+int string add_tag 0x7f0a0069
+int string add_to_favourite 0x7f0a0098
+int string advance_search_left 0x7f0a009d
int string app_name 0x7f0a0000
-int string cache_large 0x7f0a0064
-int string changelog 0x7f0a0080
+int string cache_large 0x7f0a0066
+int string changelog 0x7f0a0082
int string checkbox_advance 0x7f0a0012
int string checkbox_sdesc 0x7f0a0015
int string checkbox_sdt1 0x7f0a0018
@@ -300,7 +281,7 @@ int string checkbox_sr 0x7f0a001b
int string checkbox_stags 0x7f0a0014
int string checkbox_sto 0x7f0a0017
int string checkbox_storr 0x7f0a0016
-int string create_cache_error 0x7f0a0066
+int string create_cache_error 0x7f0a0068
int string dailog_check_login 0x7f0a0009
int string dailog_check_network 0x7f0a0005
int string dailog_network_error_no 0x7f0a0007
@@ -309,119 +290,120 @@ int string dailog_waring_no 0x7f0a0004
int string dailog_waring_plain 0x7f0a0002
int string dailog_waring_title 0x7f0a0001
int string dailog_waring_yes 0x7f0a0003
-int string detail_average 0x7f0a002b
-int string detail_button_cancel 0x7f0a0030
-int string detail_button_every 0x7f0a0032
-int string detail_button_known 0x7f0a0034
-int string detail_button_once 0x7f0a0031
-int string detail_button_read 0x7f0a002f
-int string detail_language 0x7f0a002a
-int string detail_not_rated 0x7f0a0036
-int string detail_offensive 0x7f0a002e
-int string detail_offensive_title 0x7f0a002d
-int string detail_pages 0x7f0a0028
-int string detail_people 0x7f0a002c
-int string detail_pining 0x7f0a0033
-int string detail_posted 0x7f0a0027
-int string detail_preview_error 0x7f0a0035
-int string detail_size 0x7f0a0029
-int string detail_uploader 0x7f0a0026
+int string detail_average 0x7f0a002d
+int string detail_button_cancel 0x7f0a0032
+int string detail_button_every 0x7f0a0034
+int string detail_button_known 0x7f0a0036
+int string detail_button_once 0x7f0a0033
+int string detail_button_read 0x7f0a0031
+int string detail_language 0x7f0a002c
+int string detail_not_rated 0x7f0a0038
+int string detail_offensive 0x7f0a0030
+int string detail_offensive_title 0x7f0a002f
+int string detail_pages 0x7f0a002a
+int string detail_people 0x7f0a002e
+int string detail_pining 0x7f0a0035
+int string detail_posted 0x7f0a0029
+int string detail_preview_error 0x7f0a0037
+int string detail_size 0x7f0a002b
+int string detail_uploader 0x7f0a0028
int string dialog_messgae_login_or_not 0x7f0a000d
int string dialog_send_crash_no 0x7f0a0022
int string dialog_send_crash_plain 0x7f0a0020
int string dialog_send_crash_title 0x7f0a001f
int string dialog_send_crash_yes 0x7f0a0021
int string dialog_title_login_or_not 0x7f0a000c
-int string download 0x7f0a008d
-int string download_successfully 0x7f0a0076
-int string download_task_finished 0x7f0a0074
-int string download_unsuccessfully 0x7f0a0077
-int string downloading 0x7f0a0075
-int string em_can_not_reach 0x7f0a004c
-int string em_check_login_error 0x7f0a0045
-int string em_client_protocol 0x7f0a0042
-int string em_logout_error 0x7f0a0046
-int string em_network_error 0x7f0a003c
-int string em_no_network 0x7f0a004b
-int string em_no_network_2 0x7f0a004d
-int string em_open_input_stream_error 0x7f0a0040
-int string em_parser_error 0x7f0a003f
-int string em_put_cache_error 0x7f0a0043
-int string em_read_input_stream_error 0x7f0a0041
-int string em_response_code_error 0x7f0a003e
-int string em_retry 0x7f0a0048
-int string em_retry_times 0x7f0a0049
-int string em_timeout 0x7f0a003d
-int string em_unknown_error 0x7f0a004a
-int string em_url_error 0x7f0a0047
-int string em_url_format_error 0x7f0a0044
-int string error 0x7f0a007f
+int string download 0x7f0a008f
+int string download_successfully 0x7f0a0078
+int string download_task_finished 0x7f0a0076
+int string download_unsuccessfully 0x7f0a0079
+int string downloading 0x7f0a0077
+int string em_can_not_reach 0x7f0a004e
+int string em_check_login_error 0x7f0a0047
+int string em_client_protocol 0x7f0a0044
+int string em_logout_error 0x7f0a0048
+int string em_network_error 0x7f0a003e
+int string em_no_network 0x7f0a004d
+int string em_no_network_2 0x7f0a004f
+int string em_open_input_stream_error 0x7f0a0042
+int string em_parser_error 0x7f0a0041
+int string em_put_cache_error 0x7f0a0045
+int string em_read_input_stream_error 0x7f0a0043
+int string em_response_code_error 0x7f0a0040
+int string em_retry 0x7f0a004a
+int string em_retry_times 0x7f0a004b
+int string em_timeout 0x7f0a003f
+int string em_unknown_error 0x7f0a004c
+int string em_url_error 0x7f0a0049
+int string em_url_format_error 0x7f0a0046
+int string error 0x7f0a0081
int string exit_tip 0x7f0a0008
-int string favourite 0x7f0a008c
-int string first_page 0x7f0a0038
-int string fit_to_height 0x7f0a0094
-int string fit_to_screen 0x7f0a0095
-int string fit_to_width 0x7f0a0093
+int string favourite 0x7f0a008e
+int string first_page 0x7f0a003a
+int string fit_to_height 0x7f0a0096
+int string fit_to_screen 0x7f0a0097
+int string fit_to_width 0x7f0a0095
int string hint_no_keyword 0x7f0a0011
-int string homepage 0x7f0a008b
-int string input_error 0x7f0a0065
-int string jump 0x7f0a0088
+int string homepage 0x7f0a008d
+int string input_error 0x7f0a0067
+int string jump 0x7f0a008a
int string jump_sum 0x7f0a001c
int string jump_to 0x7f0a001d
-int string landscape 0x7f0a0053
-int string last_page 0x7f0a007a
-int string load_pre 0x7f0a0037
-int string login 0x7f0a0081
-int string logout 0x7f0a0082
-int string new_tag_name 0x7f0a006c
+int string landscape 0x7f0a0055
+int string last_page 0x7f0a007c
+int string list_title 0x7f0a0026
+int string load_pre 0x7f0a0039
+int string login 0x7f0a0083
+int string logout 0x7f0a0084
+int string new_tag_name 0x7f0a006e
int string no_found 0x7f0a0025
int string not_login 0x7f0a000e
-int string not_started 0x7f0a0078
-int string password 0x7f0a0085
-int string period 0x7f0a007d
-int string portrait 0x7f0a0052
-int string preference_author 0x7f0a0062
-int string preference_author_summary 0x7f0a0063
-int string preference_auto_page_cache 0x7f0a005d
-int string preference_auto_page_cache_summary_off 0x7f0a005f
-int string preference_auto_page_cache_summary_on 0x7f0a005e
-int string preference_cache_summary 0x7f0a005b
-int string preference_cache_summary_no 0x7f0a005c
-int string preference_category_about 0x7f0a0061
-int string preference_category_cache 0x7f0a0056
-int string preference_category_display 0x7f0a0050
-int string preference_clear_cp_cache 0x7f0a0058
-int string preference_clear_page_cache 0x7f0a005a
-int string preference_cp_cache 0x7f0a0057
-int string preference_download_path 0x7f0a0060
-int string preference_page_cache 0x7f0a0059
-int string preference_page_scaling 0x7f0a0054
-int string preference_screen_ori 0x7f0a0051
-int string preference_settings_title 0x7f0a0055
-int string pull_next_pull 0x7f0a0071
-int string pull_next_release 0x7f0a0072
-int string pull_pre_pull 0x7f0a006f
-int string pull_pre_release 0x7f0a0070
-int string pull_refresh_pull 0x7f0a006d
-int string pull_refresh_release 0x7f0a006e
-int string refresh 0x7f0a007e
-int string remove 0x7f0a0097
-int string remove_info_data 0x7f0a0098
-int string retry_max_next 0x7f0a003b
-int string retry_max_pre 0x7f0a003a
-int string sadpanda 0x7f0a007b
-int string some_page 0x7f0a0089
-int string star_2 0x7f0a008e
-int string star_3 0x7f0a008f
-int string star_4 0x7f0a0090
-int string star_5 0x7f0a0091
-int string start_download_task 0x7f0a0073
-int string start_reloading 0x7f0a0039
-int string tag_change_name 0x7f0a006b
-int string tag_name 0x7f0a0068
-int string tag_name_empty 0x7f0a0069
-int string tag_name_exist 0x7f0a006a
-int string thanks 0x7f0a0099
+int string not_started 0x7f0a007a
+int string password 0x7f0a0087
+int string period 0x7f0a007f
+int string portrait 0x7f0a0054
+int string preference_author 0x7f0a0064
+int string preference_author_summary 0x7f0a0065
+int string preference_auto_page_cache 0x7f0a005f
+int string preference_auto_page_cache_summary_off 0x7f0a0061
+int string preference_auto_page_cache_summary_on 0x7f0a0060
+int string preference_cache_summary 0x7f0a005d
+int string preference_cache_summary_no 0x7f0a005e
+int string preference_category_about 0x7f0a0063
+int string preference_category_cache 0x7f0a0058
+int string preference_category_display 0x7f0a0052
+int string preference_clear_cp_cache 0x7f0a005a
+int string preference_clear_page_cache 0x7f0a005c
+int string preference_cp_cache 0x7f0a0059
+int string preference_download_path 0x7f0a0062
+int string preference_page_cache 0x7f0a005b
+int string preference_page_scaling 0x7f0a0056
+int string preference_screen_ori 0x7f0a0053
+int string preference_settings_title 0x7f0a0057
+int string pull_next_pull 0x7f0a0073
+int string pull_next_release 0x7f0a0074
+int string pull_pre_pull 0x7f0a0071
+int string pull_pre_release 0x7f0a0072
+int string pull_refresh_pull 0x7f0a006f
+int string pull_refresh_release 0x7f0a0070
+int string refresh 0x7f0a0080
+int string remove 0x7f0a0099
+int string remove_info_data 0x7f0a009a
+int string retry_max_next 0x7f0a003d
+int string retry_max_pre 0x7f0a003c
+int string sadpanda 0x7f0a007d
+int string some_page 0x7f0a008b
+int string star_2 0x7f0a0090
+int string star_3 0x7f0a0091
+int string star_4 0x7f0a0092
+int string star_5 0x7f0a0093
+int string start_download_task 0x7f0a0075
+int string start_reloading 0x7f0a003b
+int string tag_change_name 0x7f0a006d
+int string tag_name 0x7f0a006a
+int string tag_name_empty 0x7f0a006b
+int string tag_name_exist 0x7f0a006c
+int string thanks 0x7f0a009c
int string toast_add_download 0x7f0a0024
int string toast_add_favourite 0x7f0a0023
int string toast_invalid_page 0x7f0a001e
@@ -429,11 +411,13 @@ int string toast_login_failed 0x7f0a000b
int string toast_login_succeeded 0x7f0a000a
int string toast_logout_failed 0x7f0a0010
int string toast_logout_succeeded 0x7f0a000f
-int string unfinished 0x7f0a007c
-int string username 0x7f0a0084
-int string wait 0x7f0a0083
-int string waiting 0x7f0a0079
-int string what_to_do 0x7f0a0087
+int string unfinished 0x7f0a007e
+int string update 0x7f0a009b
+int string update_message 0x7f0a0027
+int string username 0x7f0a0086
+int string wait 0x7f0a0085
+int string waiting 0x7f0a007b
+int string what_to_do 0x7f0a0089
int style ActionBar 0x7f0b0000
int style AppTheme 0x7f0b0009
int style AppTheme_NoActionBar 0x7f0b000a
@@ -446,9 +430,9 @@ int style PopupMenu 0x7f0b0002
int style ProgressBar 0x7f0b0006
int style ProgressBar_Large 0x7f0b0008
int style ProgressBar_Small 0x7f0b0007
-int[] styleable CheckImage { 0x7f010024 }
+int[] styleable CheckImage { 0x7f010016 }
int styleable CheckImage_mask 0
-int[] styleable GridLayout { 0x7f01000e, 0x7f01000f, 0x7f010010, 0x7f010011, 0x7f010012, 0x7f010013, 0x7f010014 }
+int[] styleable GridLayout { 0x7f010000, 0x7f010001, 0x7f010002, 0x7f010003, 0x7f010004, 0x7f010005, 0x7f010006 }
int styleable GridLayout_alignmentMode 4
int styleable GridLayout_columnCount 2
int styleable GridLayout_columnOrderPreserved 6
@@ -456,7 +440,7 @@ int styleable GridLayout_orientation 0
int styleable GridLayout_rowCount 1
int styleable GridLayout_rowOrderPreserved 5
int styleable GridLayout_useDefaultMargins 3
-int[] styleable GridLayout_Layout { 0x010100f4, 0x010100f5, 0x010100f6, 0x010100f7, 0x010100f8, 0x010100f9, 0x010100fa, 0x7f010015, 0x7f010016, 0x7f010017, 0x7f010018, 0x7f010019 }
+int[] styleable GridLayout_Layout { 0x010100f4, 0x010100f5, 0x010100f6, 0x010100f7, 0x010100f8, 0x010100f9, 0x010100fa, 0x7f010007, 0x7f010008, 0x7f010009, 0x7f01000a, 0x7f01000b }
int styleable GridLayout_Layout_android_layout_height 1
int styleable GridLayout_Layout_android_layout_margin 2
int styleable GridLayout_Layout_android_layout_marginBottom 6
@@ -469,22 +453,7 @@ int styleable GridLayout_Layout_layout_columnSpan 10
int styleable GridLayout_Layout_layout_gravity 11
int styleable GridLayout_Layout_layout_row 7
int styleable GridLayout_Layout_layout_rowSpan 8
-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 { 0x7f01001a, 0x7f01001b, 0x7f01001c, 0x7f01001d, 0x7f01001e, 0x7f01001f, 0x7f010020, 0x7f010021, 0x7f010022, 0x7f010023 }
+int[] styleable SuperImageView { 0x7f01000c, 0x7f01000d, 0x7f01000e, 0x7f01000f, 0x7f010010, 0x7f010011, 0x7f010012, 0x7f010013, 0x7f010014, 0x7f010015 }
int styleable SuperImageView_adjustViewBounds 2
int styleable SuperImageView_baseline 8
int styleable SuperImageView_baselineAlignBottom 6
diff --git a/bin/classes.dex b/bin/classes.dex
index 6b1409afa..19930503a 100644
Binary files a/bin/classes.dex and b/bin/classes.dex differ
diff --git a/bin/classes/.gitignore b/bin/classes/.gitignore
index 43fd7e231..40971e43a 100644
--- a/bin/classes/.gitignore
+++ b/bin/classes/.gitignore
@@ -1,3 +1,3 @@
-/android
/com
/.gitignore
+/android
diff --git a/bin/dexedLibs/android-support-v4-1c1a4a4d71c1c723e2137d4d967c3739.jar b/bin/dexedLibs/android-support-v4-1c1a4a4d71c1c723e2137d4d967c3739.jar
deleted file mode 100644
index 4c1e22084..000000000
Binary files a/bin/dexedLibs/android-support-v4-1c1a4a4d71c1c723e2137d4d967c3739.jar and /dev/null differ
diff --git a/bin/dexedLibs/android-support-v7-gridlayout-65f5994dd745e0ac459040dfde731386.jar b/bin/dexedLibs/android-support-v7-gridlayout-65f5994dd745e0ac459040dfde731386.jar
index 8da3be005..ad4840fe3 100644
Binary files a/bin/dexedLibs/android-support-v7-gridlayout-65f5994dd745e0ac459040dfde731386.jar and b/bin/dexedLibs/android-support-v7-gridlayout-65f5994dd745e0ac459040dfde731386.jar differ
diff --git a/bin/dexedLibs/commons-lang3-3.2.1-8a36c15e1c40f2ad0206e5389bc96b5a.jar b/bin/dexedLibs/commons-lang3-3.2.1-8a36c15e1c40f2ad0206e5389bc96b5a.jar
index 4cf920524..c69d96a7c 100644
Binary files a/bin/dexedLibs/commons-lang3-3.2.1-8a36c15e1c40f2ad0206e5389bc96b5a.jar and b/bin/dexedLibs/commons-lang3-3.2.1-8a36c15e1c40f2ad0206e5389bc96b5a.jar differ
diff --git a/bin/dexedLibs/gridlayout_v7-9aadecd3606a07a44286cb470164fa04.jar b/bin/dexedLibs/gridlayout_v7-9aadecd3606a07a44286cb470164fa04.jar
index 1a3838eb4..56542122c 100644
Binary files a/bin/dexedLibs/gridlayout_v7-9aadecd3606a07a44286cb470164fa04.jar and b/bin/dexedLibs/gridlayout_v7-9aadecd3606a07a44286cb470164fa04.jar differ
diff --git a/bin/dexedLibs/slidingmenu-f48f3a4eceb3b9455e8ae38a55377052.jar b/bin/dexedLibs/slidingmenu-f48f3a4eceb3b9455e8ae38a55377052.jar
deleted file mode 100644
index 1a7ddb766..000000000
Binary files a/bin/dexedLibs/slidingmenu-f48f3a4eceb3b9455e8ae38a55377052.jar and /dev/null differ
diff --git a/bin/res/crunch/drawable-xxhdpi/back.png b/bin/res/crunch/drawable-xxhdpi/back.png
index d71c7e118..05be3d0b4 100644
Binary files a/bin/res/crunch/drawable-xxhdpi/back.png and b/bin/res/crunch/drawable-xxhdpi/back.png differ
diff --git a/bin/res/crunch/drawable-xxhdpi/front.png b/bin/res/crunch/drawable-xxhdpi/front.png
index a5615c9c4..8a33b13b8 100644
Binary files a/bin/res/crunch/drawable-xxhdpi/front.png and b/bin/res/crunch/drawable-xxhdpi/front.png differ
diff --git a/bin/res/crunch/drawable-xxhdpi/spinner_16_inner.png b/bin/res/crunch/drawable-xxhdpi/spinner_16_inner.png
index 8919d444a..b95ad0404 100644
Binary files a/bin/res/crunch/drawable-xxhdpi/spinner_16_inner.png and b/bin/res/crunch/drawable-xxhdpi/spinner_16_inner.png differ
diff --git a/bin/res/crunch/drawable-xxhdpi/spinner_76_inner.png b/bin/res/crunch/drawable-xxhdpi/spinner_76_inner.png
index 6cb81d55b..1ae5eebe5 100644
Binary files a/bin/res/crunch/drawable-xxhdpi/spinner_76_inner.png and b/bin/res/crunch/drawable-xxhdpi/spinner_76_inner.png differ
diff --git a/bin/res/crunch/drawable-xxhdpi/spinner_76_outer.png b/bin/res/crunch/drawable-xxhdpi/spinner_76_outer.png
index d827788d1..6526a1962 100644
Binary files a/bin/res/crunch/drawable-xxhdpi/spinner_76_outer.png and b/bin/res/crunch/drawable-xxhdpi/spinner_76_outer.png differ
diff --git a/bin/res/crunch/drawable/refresh.png b/bin/res/crunch/drawable/refresh.png
deleted file mode 100644
index 31f22571b..000000000
Binary files a/bin/res/crunch/drawable/refresh.png and /dev/null differ
diff --git a/bin/resources.ap_ b/bin/resources.ap_
index bb1694659..9e565816b 100644
Binary files a/bin/resources.ap_ and b/bin/resources.ap_ differ
diff --git a/gen/.gitignore b/gen/.gitignore
index 43fd7e231..40971e43a 100644
--- a/gen/.gitignore
+++ b/gen/.gitignore
@@ -1,3 +1,3 @@
-/android
/com
/.gitignore
+/android
diff --git a/project.properties b/project.properties
index 7109f8f86..82e986310 100644
--- a/project.properties
+++ b/project.properties
@@ -13,4 +13,3 @@
# Project target.
target=android-19
android.library.reference.1=..\\..\\..\\workspace\\gridlayout_v7
-android.library.reference.2=..\\..\\..\\code\\SlidingMenu\\library
diff --git a/res/drawable-xxhdpi/back.png b/res/drawable-xxhdpi/back.png
index 0bb9b541d..4d387633d 100644
Binary files a/res/drawable-xxhdpi/back.png and b/res/drawable-xxhdpi/back.png differ
diff --git a/res/drawable-xxhdpi/front.png b/res/drawable-xxhdpi/front.png
index f125399a7..4556e30a5 100644
Binary files a/res/drawable-xxhdpi/front.png and b/res/drawable-xxhdpi/front.png differ
diff --git a/res/drawable-xxhdpi/spinner_16_inner.png b/res/drawable-xxhdpi/spinner_16_inner.png
index e9e9746f6..7b4af6a64 100644
Binary files a/res/drawable-xxhdpi/spinner_16_inner.png and b/res/drawable-xxhdpi/spinner_16_inner.png differ
diff --git a/res/drawable-xxhdpi/spinner_76_inner.png b/res/drawable-xxhdpi/spinner_76_inner.png
index b6a9abd91..df39b2e9a 100644
Binary files a/res/drawable-xxhdpi/spinner_76_inner.png and b/res/drawable-xxhdpi/spinner_76_inner.png differ
diff --git a/res/drawable-xxhdpi/spinner_76_outer.png b/res/drawable-xxhdpi/spinner_76_outer.png
index 56366163f..853e9b097 100644
Binary files a/res/drawable-xxhdpi/spinner_76_outer.png and b/res/drawable-xxhdpi/spinner_76_outer.png differ
diff --git a/res/drawable/refresh.png b/res/drawable/refresh.png
deleted file mode 100644
index d3c80583a..000000000
Binary files a/res/drawable/refresh.png and /dev/null differ
diff --git a/res/drawable/wait.gif b/res/drawable/wait.gif
deleted file mode 100644
index 15f804789..000000000
Binary files a/res/drawable/wait.gif and /dev/null differ
diff --git a/res/layout/list.xml b/res/layout/list.xml
index 5f22c736c..083db0009 100644
--- a/res/layout/list.xml
+++ b/res/layout/list.xml
@@ -1,47 +1,58 @@
-
-
-
+
+
+ android:layout_height="fill_parent"
+ android:fitsSystemWindows="true" >
-
+
-
-
-
-
-
+
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/list_menu_list.xml b/res/layout/list_menu_list.xml
index 180be163b..a7c4106c2 100644
--- a/res/layout/list_menu_list.xml
+++ b/res/layout/list_menu_list.xml
@@ -1,8 +1,9 @@
+ android:onClick="buttonLogin"
+ android:text="@string/login" />
+
+
\ No newline at end of file
diff --git a/res/raw/change_log b/res/raw/change_log
index bde16feb8..912cca5fc 100644
--- a/res/raw/change_log
+++ b/res/raw/change_log
@@ -1,7 +1,9 @@
Version 0.3.2 (2014-??-??)
* 添加启动界面
-* 优化下拉控件
* 添加自动更新
+* 优化下拉控件
+* 优化侧边栏
+* 列表标题显示内容
Version 0.3.1 (2014-03-14)
* 修正有时点击通知栏无法进入下载界面
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index faecba146..bc669b497 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -56,7 +56,11 @@
未找到
+ %s 第 %d 页
+
+ 发现新版本:%s\n大小:%s\n%s\n\n是否更新?
+
上传者:%s
发布时间:%s
@@ -194,10 +198,10 @@
匹配屏幕
收藏
- 下载
移除
移除信息与数据
+ 更新
感谢
高级搜索请左划
diff --git a/res/values/strings.xml b/res/values/strings.xml
index eb5146779..472ec7f6f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -58,7 +58,11 @@
No hits found
-
+ %s Page %d
+
+
+ Found new version : %s\nSize : %s\n%s\n\nUpdate ?
+
Uploader: %s
Posted: %s
@@ -201,11 +205,10 @@
Fit to screen
Add to favourite
- Download
Remove
Remove information and data
-
+ Update
Thanks
Advance search in left
diff --git a/src/com/hippo/ehviewer/CrashApplication.java b/src/com/hippo/ehviewer/CrashApplication.java
index b60f7877b..b8610f485 100644
--- a/src/com/hippo/ehviewer/CrashApplication.java
+++ b/src/com/hippo/ehviewer/CrashApplication.java
@@ -13,6 +13,7 @@ import com.hippo.ehviewer.util.Ui;
import android.app.Application;
import android.util.Log;
+import android.widget.Toast;
public class CrashApplication extends Application implements UncaughtExceptionHandler {
@@ -23,7 +24,7 @@ public class CrashApplication extends Application implements UncaughtExceptionHa
@Override
public void onCreate() {
super.onCreate();
-
+ Log.i(TAG, "onCreate");
// TODO Init everything
Config.init(this);
Ui.init(this);
diff --git a/src/com/hippo/ehviewer/activity/MangaListActivity.java b/src/com/hippo/ehviewer/activity/MangaListActivity.java
index c4e951cfa..74cf98b2d 100644
--- a/src/com/hippo/ehviewer/activity/MangaListActivity.java
+++ b/src/com/hippo/ehviewer/activity/MangaListActivity.java
@@ -20,17 +20,18 @@ import com.hippo.ehviewer.util.Tag;
import com.hippo.ehviewer.util.Ui;
import com.hippo.ehviewer.view.AlertButton;
import com.hippo.ehviewer.view.CheckImage;
+import com.hippo.ehviewer.view.GetPaddingRelativeLayout;
import com.hippo.ehviewer.view.OlImageView;
import com.hippo.ehviewer.view.TagListView;
import com.hippo.ehviewer.view.TagsAdapter;
+import com.hippo.ehviewer.widget.DrawerLayout;
import com.hippo.ehviewer.widget.PullListView;
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.NotificationManager;
import android.app.SearchManager;
@@ -41,6 +42,7 @@ import android.content.res.Resources;
import android.graphics.Color;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
+import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
@@ -59,6 +61,7 @@ import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
+import android.widget.RelativeLayout;
import android.widget.SearchView;
import android.widget.Spinner;
import android.widget.TextView;
@@ -70,10 +73,13 @@ import android.widget.Toast;
// TODO http://exhentai.org/
// TODO add lock to get list
-public class MangaListActivity extends SlidingActivity {
+public class MangaListActivity extends Activity {
private static String TAG = "MangaListActivity";
+ private DrawerLayout drawer;
+ private GetPaddingRelativeLayout mainLayout;
private TagListView listMenu;
+ private RelativeLayout loginMenu;
private ListView isExhentaiList;
private PullListView pullListView;
private ListView listView;
@@ -83,13 +89,13 @@ public class MangaListActivity extends SlidingActivity {
private ImageView sadpanda;
private ViewGroup loginView;
private ViewGroup loginOverView;
+ private Button loginButton;
+ private View waitloginView;
private TextView usernameText;
private Button logoutButton;
private View waitlogoutView;
private TagsAdapter tagsAdapter;
-
- private SlidingMenu mSlidingMenu;
private ListUrls lus;
private GmlAdapter gmlAdapter;
@@ -125,6 +131,18 @@ public class MangaListActivity extends SlidingActivity {
private int lastIndex = 0;
private int visiblePage = 0;
+ private String title;
+
+ private class RefreshPackage {
+ public ListUrls listUrls;
+ public String title;
+
+ public RefreshPackage(ListUrls listUrls, String title) {
+ this.listUrls = listUrls;
+ this.title = title;
+ }
+ }
+
private DownloadServiceConnection mServiceConn = new DownloadServiceConnection();
private AlertDialog createCheckLoginDialog() {
@@ -149,38 +167,22 @@ public class MangaListActivity extends SlidingActivity {
@Override
public void onClick(View v) {
((AlertButton)v).dialog.dismiss();
- checkLoginDialog.show();
+ loginButton.setVisibility(View.GONE);
+ waitloginView.setVisibility(View.VISIBLE);
String username = ((EditText) loginDialog.findViewById(R.id.username)).getText().toString();
String password = ((EditText) loginDialog.findViewById(R.id.password)).getText().toString();
EhClient.login(username, password, new EhClient.OnLoginListener() {
@Override
public void onSuccess() {
- EhClient.checkLogin(new EhClient.OnCheckLoginListener() {
- @Override
- public void onSuccess() {
- checkLoginDialog.dismiss();
- Config.loginNow();
- Toast.makeText( MangaListActivity.this,
- getString(R.string.toast_login_succeeded),
- Toast.LENGTH_SHORT).show();
- layoutDrawRight();
- }
- @Override
- public void onFailure(int errorMessageId) {
- checkLoginDialog.dismiss();
- Toast.makeText(MangaListActivity.this,
- getString(errorMessageId), Toast.LENGTH_SHORT).show();
- loginDialog.show();
- }
- });
+ checkLogin();
}
@Override
public void onFailure(int errorMessageId) {
- checkLoginDialog.dismiss();
+ loginButton.setVisibility(View.VISIBLE);
+ waitloginView.setVisibility(View.GONE);
Toast.makeText(MangaListActivity.this,
getString(errorMessageId),
Toast.LENGTH_SHORT).show();
- loginDialog.show();
}
});
}
@@ -216,8 +218,15 @@ public class MangaListActivity extends SlidingActivity {
@Override
public void onClick(View v) {
((AlertButton)v).dialog.dismiss();
- MangaListActivity.this.showContent();
- refresh(getLus(filterDialog));
+ drawer.closeDrawers();
+ ListUrls listUrls = getLus(filterDialog);
+ String search = listUrls.getSearch();
+ String t = null;
+ if (search == null || search.isEmpty())
+ t = getString(android.R.string.search_go);
+ else
+ t = getString(android.R.string.search_go) + " " + search;
+ refresh(listUrls, t);
}
}).setNegativeButton(android.R.string.cancel, new View.OnClickListener() {
@Override
@@ -417,7 +426,13 @@ public class MangaListActivity extends SlidingActivity {
freshButton.setVisibility(View.GONE);
noFoundView.setVisibility(View.GONE);
sadpanda.setVisibility(View.GONE);
- pullListView.clickHeaderRefresh(listUrls);
+ if (pullListView.clickHeaderRefresh(new RefreshPackage(listUrls, title)))
+ pullListView.setHeaderString(
+ "下拉加载...",
+ "释放加载...",
+ "正在加载...",
+ "完成加载",
+ "取消加载");
} else {
Toast.makeText(MangaListActivity.this,
getString(R.string.toast_invalid_page),
@@ -692,11 +707,13 @@ public class MangaListActivity extends SlidingActivity {
public long stamp;
public ListUrls targetListUrls;
public boolean setPosition;
+ public String title;
public MangaListGetPackage(long stamp, ListUrls targetListUrls,
- boolean setPosition) {
+ boolean setPosition, String title) {
this.stamp = stamp;
this.targetListUrls = targetListUrls;
this.setPosition = setPosition;
+ this.title = title;
}
}
@@ -709,7 +726,7 @@ public class MangaListActivity extends SlidingActivity {
if (getPackage.stamp != lastGetStamp)
return;
lus = getPackage.targetListUrls;
-
+ title = getPackage.title;
// Check no Found view later
waitView.setVisibility(View.GONE);
freshButton.setVisibility(View.GONE);
@@ -755,7 +772,7 @@ public class MangaListActivity extends SlidingActivity {
firstIndex = 0;
lastIndex = newLmdArray.size() - 1;
visiblePage = 0;
- setTitle(String.format(getString(R.string.some_page), visiblePage + 1));
+ setTitle(String.format(getString(R.string.list_title), title, visiblePage + 1));
// Go to top
listView.setSelection(0);
@@ -768,7 +785,7 @@ public class MangaListActivity extends SlidingActivity {
firstIndex = 0;
lastIndex = newLmdArray.size()-1;
visiblePage = getPageIndex;
- setTitle(String.format(getString(R.string.some_page), visiblePage + 1));
+ setTitle(String.format(getString(R.string.list_title), title, visiblePage + 1));
// Go to top
listView.setSelection(0);
} else {
@@ -786,7 +803,7 @@ public class MangaListActivity extends SlidingActivity {
firstIndex = lmdArray.size() - newLmdArray.size();
lastIndex = lmdArray.size() - 1;
visiblePage = getPageIndex;
- setTitle(String.format(getString(R.string.some_page), visiblePage + 1));
+ setTitle(String.format(getString(R.string.list_title), title, visiblePage + 1));
listView.setSelectionFromTop(firstIndex, -1);
}
} else if (getPageIndex < firstPage - 1 ||
@@ -801,7 +818,7 @@ public class MangaListActivity extends SlidingActivity {
firstIndex = 0;
lastIndex = newLmdArray.size();
visiblePage = getPageIndex;
- setTitle(String.format(getString(R.string.some_page), visiblePage + 1));
+ setTitle(String.format(getString(R.string.list_title), title, visiblePage + 1));
// Go to top
listView.setSelection(0);
@@ -908,8 +925,7 @@ public class MangaListActivity extends SlidingActivity {
visiblePage = visiblePage + pageChanged;
firstIndex += pageChanged * lus.getNumPerPage();
lastIndex += pageChanged * lus.getNumPerPage();
- setTitle(String.format(
- getString(R.string.some_page), visiblePage + 1));
+ setTitle(String.format(getString(R.string.list_title), title, visiblePage + 1));
}
}
@@ -983,7 +999,6 @@ public class MangaListActivity extends SlidingActivity {
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
- mSlidingMenu.setBehindOffsetRes(R.dimen.menu_offset);
if (Build.VERSION.SDK_INT >= 19) {
BeautifyScreen.fixColour(this);
}
@@ -1024,19 +1039,18 @@ public class MangaListActivity extends SlidingActivity {
filterDialog = createFilterDialog();
longClickDialog = createLongClickDialog();
- // Set menu
- mSlidingMenu = getSlidingMenu();
- mSlidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
- mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
- setSlidingActionBarEnabled(false);
- mSlidingMenu.setBehindOffsetRes(R.dimen.menu_offset);
- setBehindContentView(R.layout.list_menu_list);
- mSlidingMenu.setSecondaryMenu(R.layout.list_menu_login);
-
getActionBar().setDisplayHomeAsUpEnabled(true);
+ // For colourfy the activity
+ if (Build.VERSION.SDK_INT >= 19) {
+ BeautifyScreen.ColourfyScreen(this);
+ }
+
// Get View
+ drawer = (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);
isExhentaiList = (ListView)findViewById(R.id.is_exhentai);
pullListView = ((PullListView)findViewById(R.id.list_list));
listView = pullListView.getListView();
@@ -1045,16 +1059,16 @@ public class MangaListActivity extends SlidingActivity {
noFoundView = (View) findViewById(R.id.list_no_found);
sadpanda = (ImageView) findViewById(R.id.sadpanda);
loginView = (ViewGroup) findViewById(R.id.drawer_login);
+ loginButton = (Button) findViewById(R.id.button_login);
+ waitloginView = (View) findViewById(R.id.list_wait_login);
loginOverView = (ViewGroup) findViewById(R.id.drawer_login_over);
usernameText = (TextView) findViewById(R.id.text_username);
logoutButton = (Button) findViewById(R.id.list_button_logout);
waitlogoutView = (View) findViewById(R.id.list_wait_logout);
-
- // For colourfy the activity
- if (Build.VERSION.SDK_INT >= 19) {
- BeautifyScreen.ColourfyScreen(this);
- }
-
+
+ // fitsSystemWindows for menu
+ mainLayout.setView(listMenu, loginMenu);
+
// leftDrawer
String[] menuTitles = getResources().getStringArray(R.array.list_list_title);
mStableItemCount = menuTitles.length;
@@ -1073,24 +1087,24 @@ public class MangaListActivity extends SlidingActivity {
public void onItemClick(AdapterView> arg0, View arg1,
int position, long arg3) {
if (position == 0) { // Home page
- if (refresh(new ListUrls(ListUrls.ALL_TYPE, null, 0)))
- showContent();
+ if (refresh(new ListUrls(ListUrls.ALL_TYPE, null, 0), listMenuTitle.get(position)))
+ drawer.closeDrawers();
} else if (position == 1) { // Favourite
Intent intent = new Intent(MangaListActivity.this,
FavouriteActivity.class);
startActivity(intent);
- showContent();
+ drawer.closeDrawers();
} else if (position == 2) { // filter
filterDialog.show();
} else if (position == 3) { // Download
Intent intent = new Intent(MangaListActivity.this,
DownloadActivity.class);
startActivity(intent);
- showContent();
+ drawer.closeDrawers();
} else if (position >= mStableItemCount){
ListUrls listUrls = Tag.get(listMenuTitle.get(position));
- if (listUrls != null && refresh(listUrls))
- showContent();
+ if (listUrls != null && refresh(listUrls, listMenuTitle.get(position)))
+ drawer.closeDrawers();
}
}
});
@@ -1100,6 +1114,18 @@ public class MangaListActivity extends SlidingActivity {
createModifyTagDialog(position).show();
}
});
+ listMenu.setOnMoveLister(new TagListView.OnMoveLister() {
+ @Override
+ public void onMoveStart() {
+ drawer.setEnabled(false);
+ }
+
+ @Override
+ public void onMoveOver() {
+ drawer.setEnabled(true);
+ }
+ });
+
// is Exhentai
final String[] isExhentaiListTitle = getResources().getStringArray(R.array.is_exhentai);
@@ -1156,8 +1182,8 @@ public class MangaListActivity extends SlidingActivity {
}
if (isChanged) {
isExhentaiListAdapter.notifyDataSetChanged();
- refresh(new ListUrls(ListUrls.ALL_TYPE, null, 0));
- showContent();
+ refresh(new ListUrls(ListUrls.ALL_TYPE, null, 0), listMenuTitle.get(0));
+ drawer.closeDrawers(); // TODO
}
}
});
@@ -1175,7 +1201,7 @@ public class MangaListActivity extends SlidingActivity {
else
listUrls.setPage(firstPage - 1);
EhClient.getManagaList(listUrls.getUrl(),
- new MangaListGetPackage((lastGetStamp = System.currentTimeMillis()), listUrls, true),
+ new MangaListGetPackage((lastGetStamp = System.currentTimeMillis()), listUrls, false, title),
new MangaListGetListener());
}
@@ -1183,9 +1209,10 @@ public class MangaListActivity extends SlidingActivity {
public void onHeaderRefresh(Object obj) {
mListFirst = true;
mLoadListOver = false;
- ListUrls listUrls = (ListUrls)obj;
- EhClient.getManagaList(listUrls.getUrl(),
- new MangaListGetPackage((lastGetStamp = System.currentTimeMillis()), listUrls, true),
+ RefreshPackage rp = (RefreshPackage)obj;
+ EhClient.getManagaList(rp.listUrls.getUrl(),
+ new MangaListGetPackage((lastGetStamp = System.currentTimeMillis()),
+ rp.listUrls, true, rp.title),
new MangaListGetListener());
}
});
@@ -1198,7 +1225,7 @@ public class MangaListActivity extends SlidingActivity {
mListFirst = true;
mLoadListOver = false;
EhClient.getManagaList(listUrls.getUrl(),
- new MangaListGetPackage((lastGetStamp = System.currentTimeMillis()), listUrls, false),
+ new MangaListGetPackage((lastGetStamp = System.currentTimeMillis()), listUrls, false, title),
new MangaListGetListener());
}
else
@@ -1255,11 +1282,20 @@ public class MangaListActivity extends SlidingActivity {
noFoundView.setVisibility(View.GONE);
sadpanda.setVisibility(View.GONE);
+ loginView.setVisibility(View.VISIBLE);
+ loginOverView.setVisibility(View.GONE);
+ loginButton.setVisibility(View.VISIBLE);
+ waitloginView.setVisibility(View.GONE);
+
// Check update
- //checkupdate();
+ checkUpdate();
+
+ // Check login
+ checkLogin();
// get MangeList
- refresh(lus.clone());
+ title = listMenuTitle.get(0);
+ refresh(lus.clone(), listMenuTitle.get(0));
}
@Override
@@ -1280,7 +1316,12 @@ public class MangaListActivity extends SlidingActivity {
@Override
public boolean onQueryTextSubmit(String query) {
searchView.clearFocus();
- refresh(new ListUrls(ListUrls.ALL_TYPE, query));
+ String t = null;
+ if (query == null || query.isEmpty())
+ t = getString(android.R.string.search_go);
+ else
+ t = getString(android.R.string.search_go) + " " + query;
+ refresh(new ListUrls(ListUrls.ALL_TYPE, query), t);
return true;
}
});
@@ -1328,10 +1369,13 @@ public class MangaListActivity extends SlidingActivity {
// Handle item selection
switch (item.getItemId()) {
case android.R.id.home:
- toggle();
+ if (drawer.isDrawerOpen(Gravity.START))
+ drawer.closeDrawers();
+ else
+ drawer.openDrawer(Gravity.START);
return true;
case R.id.action_refresh:
- refresh(lus.clone());
+ refresh(lus.clone(), listMenuTitle.get(0));
return true;
case R.id.action_jump:
if (mLoadListOver)
@@ -1394,25 +1438,41 @@ public class MangaListActivity extends SlidingActivity {
}
}
- private void checkupdate() {
+ private void checkUpdate() {
EhClient.checkUpdate(new EhClient.OnCheckUpdateListener() {
@Override
public void onSuccess(String pageContext) {
String[] items = pageContext.split("\n");
- if (items.length > 1) {
+ if (items.length > 3) {
String newVer = items[0];
- String url = EhClient.UPDATE_URL + items[1];
+ final String url = EhClient.UPDATE_URL + items[1];
+ final String name = url.substring(url.lastIndexOf('/')+1);
+ String size = items[2];
+ String info = items[3];
- String name = url.substring(url.lastIndexOf('/')+1);
-
- Downloader d = new Downloader();
- try {
- Downloader.Controlor controlor = d.resetData(Config.getDownloadPath(), name, url);
- d.setOnDownloadListener(new UpdateListener());
- new Thread(d).start();
- } catch (MalformedURLException e) {
- e.printStackTrace();
- }
+ AlertDialog dialog = new DialogBuilder(MangaListActivity.this).setTitle(R.string.update)
+ .setMessage(String.format(getString(R.string.update_message), newVer, size, info))
+ .setNegativeButton(android.R.string.cancel, new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ ((AlertButton)v).dialog.dismiss();
+ }
+ }).setPositiveButton(android.R.string.ok, new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ ((AlertButton)v).dialog.dismiss();
+ Downloader d = new Downloader();
+ try {
+ Downloader.Controlor controlor = d.resetData(Config.getDownloadPath(), name, url);
+ d.setOnDownloadListener(new UpdateListener());
+ new Thread(d).start();
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ }
+ }
+ }).create();
+ if (!MangaListActivity.this.isFinishing())
+ dialog.show();
}
}
@@ -1423,8 +1483,33 @@ public class MangaListActivity extends SlidingActivity {
});
}
- private void layoutDrawRight() {
+ private void checkLogin() {
+ if (EhClient.hasLogin())
+ loginButton.setVisibility(View.GONE);
+ waitloginView.setVisibility(View.VISIBLE);
+ EhClient.checkLogin(new EhClient.OnCheckLoginListener() {
+ @Override
+ public void onSuccess() {
+ loginButton.setVisibility(View.VISIBLE);
+ waitloginView.setVisibility(View.GONE);
+ Toast.makeText(MangaListActivity.this,
+ getString(R.string.toast_login_succeeded),
+ Toast.LENGTH_SHORT).show();
+ layoutDrawRight();
+ }
+ @Override
+ public void onFailure(int errorMessageId) {
+ loginButton.setVisibility(View.VISIBLE);
+ waitloginView.setVisibility(View.GONE);
+ Toast.makeText(MangaListActivity.this,
+ getString(errorMessageId),
+ Toast.LENGTH_SHORT).show();
+ }
+ });
+ }
+
+ private void layoutDrawRight() {
if (EhClient.isLogin()) { // If have login
loginView.setVisibility(View.GONE);
loginOverView.setVisibility(View.VISIBLE);
@@ -1435,9 +1520,9 @@ public class MangaListActivity extends SlidingActivity {
}
}
- private boolean refresh(ListUrls listUrls) {
+ private boolean refresh(ListUrls listUrls, String title) {
listUrls.setPage(0);
- boolean re = pullListView.clickHeaderRefresh(listUrls);
+ boolean re = pullListView.clickHeaderRefresh(new RefreshPackage(listUrls, title));
if (re) {
mListFirst = true;
mLoadListOver = false;
@@ -1467,6 +1552,7 @@ public class MangaListActivity extends SlidingActivity {
// CheckLogin
+ /*
private void checkLogin() {
checkLoginDialog.show();
EhClient.checkLogin(new EhClient.OnCheckLoginListener() {
@@ -1488,12 +1574,12 @@ public class MangaListActivity extends SlidingActivity {
loginDialog.show();
}
});
- }
+ }*/
// *** Button onclick ***//
public void buttonRefresh(View arg0) {
- refresh(lus.clone());
+ refresh(lus.clone(), listMenuTitle.get(0));
}
public void buttonLogout(View paramView) {
diff --git a/src/com/hippo/ehviewer/util/Cache.java b/src/com/hippo/ehviewer/util/Cache.java
index c1c383497..49ea4b3b5 100644
--- a/src/com/hippo/ehviewer/util/Cache.java
+++ b/src/com/hippo/ehviewer/util/Cache.java
@@ -6,6 +6,7 @@ import android.graphics.Bitmap;
import android.os.Build;
import android.os.Environment;
import android.support.v4.util.LruCache;
+import android.util.Log;
import com.hippo.ehviewer.DiskCache;
import com.hippo.ehviewer.MangaDetail;
@@ -62,7 +63,7 @@ public class Cache {
}
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
- final int cacheSize = maxMemory / 8;
+ final int cacheSize = maxMemory / 24;
memoryCache = new LruCache(cacheSize) {
@SuppressLint("NewApi")
@Override
diff --git a/src/com/hippo/ehviewer/view/TagListView.java b/src/com/hippo/ehviewer/view/TagListView.java
index 15dc3a6a7..38e222ac9 100644
--- a/src/com/hippo/ehviewer/view/TagListView.java
+++ b/src/com/hippo/ehviewer/view/TagListView.java
@@ -111,6 +111,7 @@ public class TagListView extends ListView {
private int mScrollState = OnScrollListener.SCROLL_STATE_IDLE;
private OnModifyListener listener = null;
+ private OnMoveLister movelistener = null;
public TagListView(Context context) {
super(context);
@@ -144,6 +145,9 @@ public class TagListView extends ListView {
if (pos < mStableItemCount)
return true;
+ if (movelistener != null)
+ movelistener.onMoveStart();
+
mTotalOffset = 0;
int position = pointToPosition(mDownX, mDownY);
@@ -315,6 +319,15 @@ public class TagListView extends ListView {
this.listener = listener;
}
+ public interface OnMoveLister {
+ public void onMoveStart();
+ public void onMoveOver();
+ }
+
+ public void setOnMoveLister(OnMoveLister listener) {
+ this.movelistener = listener;
+ }
+
/**
* dispatchDraw gets invoked when all the child views are about to be drawn.
* By overriding this method, the hover cell (BitmapDrawable) can be drawn
@@ -381,9 +394,13 @@ public class TagListView extends ListView {
}
break;
case MotionEvent.ACTION_UP:
+ if (movelistener != null)
+ movelistener.onMoveOver();
touchEventsEnded();
break;
case MotionEvent.ACTION_CANCEL:
+ if (movelistener != null)
+ movelistener.onMoveOver();
touchEventsCancelled();
break;
case MotionEvent.ACTION_POINTER_UP:
@@ -395,6 +412,8 @@ public class TagListView extends ListView {
MotionEvent.ACTION_POINTER_INDEX_SHIFT;
final int pointerId = event.getPointerId(pointerIndex);
if (pointerId == mActivePointerId) {
+ if (movelistener != null)
+ movelistener.onMoveOver();
touchEventsEnded();
}
break;
diff --git a/src/com/hippo/ehviewer/widget/PullListView.java b/src/com/hippo/ehviewer/widget/PullListView.java
index c018310e6..248d0f792 100644
--- a/src/com/hippo/ehviewer/widget/PullListView.java
+++ b/src/com/hippo/ehviewer/widget/PullListView.java
@@ -8,6 +8,7 @@ import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
+import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;
@@ -56,6 +57,8 @@ public class PullListView extends LinearLayout implements AbsListView.OnScrollLi
private boolean isHeaderRecored = false;
private boolean isFooterRecored = false;
+ private int mTouchSlop;
+
// Header String to show
private String mHeaderPullStr;
private String mHeaderReleaseStr;
@@ -225,6 +228,8 @@ public class PullListView extends LinearLayout implements AbsListView.OnScrollLi
mHeader.setPadding(headerOriginalLeftPadding, -headerHeight, headerOriginalRightPadding, headerOriginalBottomPadding);
mHeader.invalidate();
+
+ //mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
}
@Override
@@ -284,6 +289,11 @@ public class PullListView extends LinearLayout implements AbsListView.OnScrollLi
break;
case MotionEvent.ACTION_CANCEL:
+ headerState = HEADER_DONE;
+ isHeaderRecored = false;
+ isBack = false;
+ changeHeaderViewByState();
+ break;
case MotionEvent.ACTION_UP:
if (headerState == HEADER_PULL_TO_REFRESH) {
headerState = HEADER_CANCEL;