start rewrite of invitation dialogs

Moving stuff into superclass and trying in general to simplify
things. BT and SMS invitation work, but the option to have more than one
player per device isn't available. RelayID invitation is a mess, but was
before I think.  WiDir invitation crashes in assert because I can't
debug it on this branch. Lots of work and cleanup still required.
This commit is contained in:
Eric House 2016-12-14 08:07:45 -08:00
parent a1e4d4da0e
commit cd14001db1
15 changed files with 843 additions and 818 deletions

View file

@ -88,263 +88,266 @@ public final class R {
} }
public static final class id { public static final class id {
public static final int about_xlator=0x7f0c0001; public static final int about_xlator=0x7f0c0001;
public static final int add_player=0x7f0c0031; public static final int add_player=0x7f0c0033;
public static final int advertise_new_room_check=0x7f0c0038; public static final int advertise_new_room_check=0x7f0c003a;
public static final int blessed_label=0x7f0c005e; public static final int blessed_label=0x7f0c0060;
public static final int board_menu_chat=0x7f0c00a5; public static final int board_menu_chat=0x7f0c00a7;
public static final int board_menu_dict=0x7f0c00a2; public static final int board_menu_dict=0x7f0c00a4;
public static final int board_menu_done=0x7f0c008c; public static final int board_menu_done=0x7f0c008e;
public static final int board_menu_file_prefs=0x7f0c0099; public static final int board_menu_file_prefs=0x7f0c009b;
public static final int board_menu_flip=0x7f0c00a4; public static final int board_menu_flip=0x7f0c00a6;
public static final int board_menu_game_counts=0x7f0c0092; public static final int board_menu_game_counts=0x7f0c0094;
public static final int board_menu_game_history=0x7f0c0094; public static final int board_menu_game_history=0x7f0c0096;
public static final int board_menu_game_invites=0x7f0c009b; public static final int board_menu_game_invites=0x7f0c009d;
public static final int board_menu_game_left=0x7f0c0093; public static final int board_menu_game_left=0x7f0c0095;
public static final int board_menu_game_netstats=0x7f0c009a; public static final int board_menu_game_netstats=0x7f0c009c;
public static final int board_menu_game_resend=0x7f0c0096; public static final int board_menu_game_resend=0x7f0c0098;
public static final int board_menu_game_resign=0x7f0c0095; public static final int board_menu_game_resign=0x7f0c0097;
public static final int board_menu_hint_next=0x7f0c00a0; public static final int board_menu_hint_next=0x7f0c00a2;
public static final int board_menu_hint_prev=0x7f0c009f; public static final int board_menu_hint_prev=0x7f0c00a1;
public static final int board_menu_invite=0x7f0c009c; public static final int board_menu_invite=0x7f0c009e;
public static final int board_menu_juggle=0x7f0c00a3; public static final int board_menu_juggle=0x7f0c00a5;
public static final int board_menu_rematch=0x7f0c008b; public static final int board_menu_rematch=0x7f0c008d;
public static final int board_menu_toggle=0x7f0c00a6; public static final int board_menu_toggle=0x7f0c00a8;
public static final int board_menu_trade=0x7f0c008d; public static final int board_menu_trade=0x7f0c008f;
public static final int board_menu_trade_cancel=0x7f0c008e; public static final int board_menu_trade_cancel=0x7f0c0090;
public static final int board_menu_trade_commit=0x7f0c008f; public static final int board_menu_trade_commit=0x7f0c0091;
public static final int board_menu_tray=0x7f0c0091; public static final int board_menu_tray=0x7f0c0093;
public static final int board_menu_undo_current=0x7f0c00a1; public static final int board_menu_undo_current=0x7f0c00a3;
public static final int board_menu_undo_last=0x7f0c0090; public static final int board_menu_undo_last=0x7f0c0092;
public static final int board_root=0x7f0c0002; public static final int board_root=0x7f0c0002;
public static final int board_view=0x7f0c0003; public static final int board_view=0x7f0c0003;
public static final int boardsize_spinner=0x7f0c0044; public static final int boardsize_spinner=0x7f0c0046;
public static final int button_add=0x7f0c0078; public static final int button_add=0x7f0c0009;
public static final int button_clear=0x7f0c0054; public static final int button_bar=0x7f0c0055;
public static final int button_done=0x7f0c0069; public static final int button_clear=0x7f0c000a;
public static final int button_invite=0x7f0c0055; public static final int button_done=0x7f0c006b;
public static final int button_newgame_multi=0x7f0c0046; public static final int button_invite=0x7f0c0056;
public static final int button_newgame_solo=0x7f0c0045; public static final int button_newgame_multi=0x7f0c0048;
public static final int button_rescan=0x7f0c0053; public static final int button_newgame_solo=0x7f0c0047;
public static final int button_study=0x7f0c0068; public static final int button_relay_add=0x7f0c007a;
public static final int change_connection=0x7f0c003c; public static final int button_study=0x7f0c006a;
public static final int chat_button=0x7f0c0084; public static final int change_connection=0x7f0c003e;
public static final int chat_edit=0x7f0c000b; public static final int chat_button=0x7f0c0086;
public static final int chat_history=0x7f0c000a; public static final int chat_edit=0x7f0c000d;
public static final int chat_menu_clear=0x7f0c00a8; public static final int chat_history=0x7f0c000c;
public static final int chat_menu_send=0x7f0c00a7; public static final int chat_menu_clear=0x7f0c00aa;
public static final int chat_row_name=0x7f0c000d; public static final int chat_menu_send=0x7f0c00a9;
public static final int chat_row_text=0x7f0c000e; public static final int chat_row_name=0x7f0c000f;
public static final int chat_send=0x7f0c000c; public static final int chat_row_text=0x7f0c0010;
public static final int checkbox=0x7f0c0058; public static final int chat_send=0x7f0c000e;
public static final int color_display_sample=0x7f0c000f; public static final int checkbox=0x7f0c005a;
public static final int color_edit_sample=0x7f0c0010; public static final int color_display_sample=0x7f0c0011;
public static final int confirm_sms_reasons=0x7f0c0017; public static final int color_edit_sample=0x7f0c0012;
public static final int conn_types=0x7f0c0018; public static final int confirm_sms_reasons=0x7f0c0019;
public static final int connect_set_relay=0x7f0c0034; public static final int conn_types=0x7f0c001a;
public static final int conns_label=0x7f0c0033; public static final int connect_set_relay=0x7f0c0036;
public static final int default_check=0x7f0c0019; public static final int conns_label=0x7f0c0035;
public static final int del=0x7f0c005b; public static final int default_check=0x7f0c001b;
public static final int desc=0x7f0c001c; public static final int del=0x7f0c005d;
public static final int details=0x7f0c0079; public static final int desc=0x7f0c001e;
public static final int dict_label=0x7f0c0070; public static final int details=0x7f0c007c;
public static final int dict_spinner=0x7f0c002e; public static final int dict_label=0x7f0c0072;
public static final int dictlist_button=0x7f0c0087; public static final int dict_spinner=0x7f0c0030;
public static final int dicts_delete=0x7f0c00ab; public static final int dictlist_button=0x7f0c0089;
public static final int dicts_deselect_all=0x7f0c00aa; public static final int dicts_delete=0x7f0c00ad;
public static final int dicts_download=0x7f0c00a9; public static final int dicts_deselect_all=0x7f0c00ac;
public static final int dicts_move=0x7f0c00ac; public static final int dicts_download=0x7f0c00ab;
public static final int dicts_select=0x7f0c00ad; public static final int dicts_move=0x7f0c00ae;
public static final int divider=0x7f0c0024; public static final int dicts_select=0x7f0c00af;
public static final int download_button=0x7f0c007a; public static final int divider=0x7f0c0026;
public static final int dwnld_message=0x7f0c0050; public static final int download_button=0x7f0c007d;
public static final int edit=0x7f0c006a; public static final int dwnld_message=0x7f0c0052;
public static final int edit_blue=0x7f0c0016; public static final int edit=0x7f0c006c;
public static final int edit_green=0x7f0c0014; public static final int edit_blue=0x7f0c0018;
public static final int edit_red=0x7f0c0012; public static final int edit_green=0x7f0c0016;
public static final int english_label=0x7f0c005c; public static final int edit_red=0x7f0c0014;
public static final int english_view=0x7f0c005d; public static final int english_label=0x7f0c005e;
public static final int english_view=0x7f0c005f;
public static final int exchange_buttons=0x7f0c0004; public static final int exchange_buttons=0x7f0c0004;
public static final int exchange_cancel=0x7f0c0006; public static final int exchange_cancel=0x7f0c0006;
public static final int exchange_commit=0x7f0c0005; public static final int exchange_commit=0x7f0c0005;
public static final int expander=0x7f0c0027; public static final int expander=0x7f0c0029;
public static final int filters=0x7f0c0063; public static final int filters=0x7f0c0065;
public static final int flip_button=0x7f0c0089; public static final int flip_button=0x7f0c008b;
public static final int game_locked_check=0x7f0c0029; public static final int frame=0x7f0c0059;
public static final int game_name=0x7f0c0047; public static final int game_locked_check=0x7f0c002b;
public static final int gamel_menu_checkmoves=0x7f0c0098; public static final int game_name=0x7f0c0049;
public static final int games_game_config=0x7f0c00b0; public static final int gamel_menu_checkmoves=0x7f0c009a;
public static final int games_game_copy=0x7f0c00b5; public static final int games_game_config=0x7f0c00b2;
public static final int games_game_delete=0x7f0c00ae; public static final int games_game_copy=0x7f0c00b7;
public static final int games_game_deselect=0x7f0c00b7; public static final int games_game_delete=0x7f0c00b0;
public static final int games_game_invites=0x7f0c00b8; public static final int games_game_deselect=0x7f0c00b9;
public static final int games_game_move=0x7f0c00b1; public static final int games_game_invites=0x7f0c00ba;
public static final int games_game_new_from=0x7f0c00b3; public static final int games_game_move=0x7f0c00b3;
public static final int games_game_rematch=0x7f0c00af; public static final int games_game_new_from=0x7f0c00b5;
public static final int games_game_rename=0x7f0c00b4; public static final int games_game_rematch=0x7f0c00b1;
public static final int games_game_reset=0x7f0c00b2; public static final int games_game_rename=0x7f0c00b6;
public static final int games_game_select=0x7f0c00b6; public static final int games_game_reset=0x7f0c00b4;
public static final int games_group_default=0x7f0c00bc; public static final int games_game_select=0x7f0c00b8;
public static final int games_group_delete=0x7f0c00bb; public static final int games_group_default=0x7f0c00be;
public static final int games_group_movedown=0x7f0c00ba; public static final int games_group_delete=0x7f0c00bd;
public static final int games_group_moveup=0x7f0c00b9; public static final int games_group_movedown=0x7f0c00bc;
public static final int games_group_rename=0x7f0c00bd; public static final int games_group_moveup=0x7f0c00bb;
public static final int games_menu_about=0x7f0c00c6; public static final int games_group_rename=0x7f0c00bf;
public static final int games_menu_checkmoves=0x7f0c00c8; public static final int games_menu_about=0x7f0c00c8;
public static final int games_menu_checkupdates=0x7f0c00c9; public static final int games_menu_checkmoves=0x7f0c00ca;
public static final int games_menu_dicts=0x7f0c00c4; public static final int games_menu_checkupdates=0x7f0c00cb;
public static final int games_menu_disable_dualpane=0x7f0c00be; public static final int games_menu_dicts=0x7f0c00c6;
public static final int games_menu_email=0x7f0c00c5; public static final int games_menu_disable_dualpane=0x7f0c00c0;
public static final int games_menu_loaddb=0x7f0c00cb; public static final int games_menu_email=0x7f0c00c7;
public static final int games_menu_newgame_net=0x7f0c00c0; public static final int games_menu_loaddb=0x7f0c00cd;
public static final int games_menu_newgame_solo=0x7f0c00bf; public static final int games_menu_newgame_net=0x7f0c00c2;
public static final int games_menu_newgroup=0x7f0c00c1; public static final int games_menu_newgame_solo=0x7f0c00c1;
public static final int games_menu_prefs=0x7f0c00c2; public static final int games_menu_newgroup=0x7f0c00c3;
public static final int games_menu_rateme=0x7f0c00c3; public static final int games_menu_prefs=0x7f0c00c4;
public static final int games_menu_resend=0x7f0c00c7; public static final int games_menu_rateme=0x7f0c00c5;
public static final int games_menu_storedb=0x7f0c00ca; public static final int games_menu_resend=0x7f0c00c9;
public static final int games_menu_study=0x7f0c0097; public static final int games_menu_storedb=0x7f0c00cc;
public static final int group_done=0x7f0c008a; public static final int games_menu_study=0x7f0c0099;
public static final int group_exchange=0x7f0c009d; public static final int group_done=0x7f0c008c;
public static final int group_hint=0x7f0c009e; public static final int group_exchange=0x7f0c009f;
public static final int hideable=0x7f0c004c; public static final int group_hint=0x7f0c00a0;
public static final int hints_allowed=0x7f0c003d; public static final int hideable=0x7f0c004e;
public static final int invite_desc=0x7f0c0052; public static final int hints_allowed=0x7f0c003f;
public static final int inviter_check=0x7f0c0056; public static final int invite_desc=0x7f0c0054;
public static final int item_name=0x7f0c0074; public static final int inviter_check=0x7f0c0057;
public static final int item_score=0x7f0c0075; public static final int item_name=0x7f0c0076;
public static final int join_public_room_check=0x7f0c0035; public static final int item_score=0x7f0c0077;
public static final int juggle_players=0x7f0c0032; public static final int join_public_room_check=0x7f0c0037;
public static final int label=0x7f0c0026; public static final int juggle_players=0x7f0c0034;
public static final int lang_separator=0x7f0c002c; public static final int label=0x7f0c0028;
public static final int lang_spinner=0x7f0c002d; public static final int lang_separator=0x7f0c002e;
public static final int list_container=0x7f0c0023; public static final int lang_spinner=0x7f0c002f;
public static final int loc_item_check=0x7f0c00cd; public static final int list_container=0x7f0c0025;
public static final int loc_item_clear=0x7f0c00cc; public static final int loc_item_check=0x7f0c00cf;
public static final int loc_item_copy_bless=0x7f0c00cf; public static final int loc_item_clear=0x7f0c00ce;
public static final int loc_item_copy_eng=0x7f0c00ce; public static final int loc_item_copy_bless=0x7f0c00d1;
public static final int loc_search_button=0x7f0c0065; public static final int loc_item_copy_eng=0x7f0c00d0;
public static final int loc_search_field=0x7f0c0064; public static final int loc_search_button=0x7f0c0067;
public static final int local_label=0x7f0c0060; public static final int loc_search_field=0x7f0c0066;
public static final int local_player_set=0x7f0c006e; public static final int local_label=0x7f0c0062;
public static final int main_container=0x7f0c0025; public static final int local_player_set=0x7f0c0070;
public static final int manual_add_button=0x7f0c007c; public static final int main_container=0x7f0c0027;
public static final int modtime=0x7f0c004d; public static final int manual_add_button=0x7f0c007b;
public static final int msg=0x7f0c006b; public static final int modtime=0x7f0c004f;
public static final int msg_marker=0x7f0c004a; public static final int msg=0x7f0c006d;
public static final int name=0x7f0c007d; public static final int msg_marker=0x7f0c004c;
public static final int name_edit=0x7f0c001a; public static final int name=0x7f0c007f;
public static final int name_label=0x7f0c007b; public static final int name_edit=0x7f0c001c;
public static final int nexthint_button=0x7f0c0083; public static final int name_label=0x7f0c007e;
public static final int not_again_check=0x7f0c006c; public static final int nexthint_button=0x7f0c0085;
public static final int nperdev_spinner=0x7f0c0057; public static final int not_again_check=0x7f0c006e;
public static final int number=0x7f0c007e; public static final int nperdev_spinner=0x7f0c0058;
public static final int other_lang=0x7f0c0066; public static final int number=0x7f0c0080;
public static final int password_edit=0x7f0c0073; public static final int other_lang=0x7f0c0068;
public static final int password_set=0x7f0c0072; public static final int password_edit=0x7f0c0075;
public static final int phonies_spinner=0x7f0c0042; public static final int password_set=0x7f0c0074;
public static final int pick_faceup=0x7f0c0043; public static final int phonies_spinner=0x7f0c0044;
public static final int pick_lang=0x7f0c007f; public static final int pick_faceup=0x7f0c0045;
public static final int pick_lang_spinner=0x7f0c0080; public static final int pick_lang=0x7f0c0081;
public static final int play_button=0x7f0c002a; public static final int pick_lang_spinner=0x7f0c0082;
public static final int player_list=0x7f0c0030; public static final int play_button=0x7f0c002c;
public static final int player_name_edit=0x7f0c006f; public static final int player_list=0x7f0c0032;
public static final int players=0x7f0c0028; public static final int player_name_edit=0x7f0c0071;
public static final int players_label=0x7f0c002f; public static final int players=0x7f0c002a;
public static final int prevhint_button=0x7f0c0082; public static final int players_label=0x7f0c0031;
public static final int private_rooms_set=0x7f0c0036; public static final int prevhint_button=0x7f0c0084;
public static final int progress_bar=0x7f0c0051; public static final int private_rooms_set=0x7f0c0038;
public static final int public_rooms_set=0x7f0c0039; public static final int progress_bar=0x7f0c0053;
public static final int refresh_button=0x7f0c003b; public static final int public_rooms_set=0x7f0c003b;
public static final int remote_check=0x7f0c006d; public static final int refresh_button=0x7f0c003d;
public static final int revert_all=0x7f0c0077; public static final int remote_check=0x7f0c006f;
public static final int revert_colors=0x7f0c0076; public static final int revert_all=0x7f0c0079;
public static final int robot_check=0x7f0c0071; public static final int revert_colors=0x7f0c0078;
public static final int role=0x7f0c004f; public static final int robot_check=0x7f0c0073;
public static final int room_edit=0x7f0c0037; public static final int role=0x7f0c0051;
public static final int room_spinner=0x7f0c003a; public static final int room_edit=0x7f0c0039;
public static final int screen=0x7f0c002b; public static final int room_spinner=0x7f0c003c;
public static final int scroll=0x7f0c0009; public static final int screen=0x7f0c002d;
public static final int search=0x7f0c001d; public static final int scroll=0x7f0c000b;
public static final int search_button=0x7f0c001f; public static final int search=0x7f0c001f;
public static final int seek_blue=0x7f0c0015; public static final int search_button=0x7f0c0021;
public static final int seek_green=0x7f0c0013; public static final int seek_blue=0x7f0c0017;
public static final int seek_red=0x7f0c0011; public static final int seek_green=0x7f0c0015;
public static final int show_remote=0x7f0c001b; public static final int seek_red=0x7f0c0013;
public static final int shuffle_button=0x7f0c0085; public static final int show_remote=0x7f0c001d;
public static final int sizes=0x7f0c0020; public static final int shuffle_button=0x7f0c0087;
public static final int slmenu_clear_sel=0x7f0c00d4; public static final int sizes=0x7f0c0022;
public static final int slmenu_copy_sel=0x7f0c00d3; public static final int slmenu_clear_sel=0x7f0c00d6;
public static final int slmenu_deselect_all=0x7f0c00d2; public static final int slmenu_copy_sel=0x7f0c00d5;
public static final int slmenu_lookup_sel=0x7f0c00d0; public static final int slmenu_deselect_all=0x7f0c00d4;
public static final int slmenu_select_all=0x7f0c00d1; public static final int slmenu_lookup_sel=0x7f0c00d2;
public static final int smart_robot=0x7f0c0041; public static final int slmenu_select_all=0x7f0c00d3;
public static final int state=0x7f0c004e; public static final int smart_robot=0x7f0c0043;
public static final int summary=0x7f0c0067; public static final int state=0x7f0c0050;
public static final int summary=0x7f0c0069;
public static final int tbar_parent_hor=0x7f0c0008; public static final int tbar_parent_hor=0x7f0c0008;
public static final int tbar_parent_vert=0x7f0c0007; public static final int tbar_parent_vert=0x7f0c0007;
public static final int text_item=0x7f0c0059; public static final int text_item=0x7f0c005b;
public static final int text_item2=0x7f0c005a; public static final int text_item2=0x7f0c005c;
public static final int thumbnail=0x7f0c004b; public static final int thumbnail=0x7f0c004d;
public static final int timer_minutes_edit=0x7f0c0040; public static final int timer_minutes_edit=0x7f0c0042;
public static final int timer_set=0x7f0c003f; public static final int timer_set=0x7f0c0041;
public static final int toolbar=0x7f0c0081; public static final int toolbar=0x7f0c0083;
public static final int undo_button=0x7f0c0086; public static final int undo_button=0x7f0c0088;
public static final int use_timer=0x7f0c003e; public static final int use_timer=0x7f0c0040;
public static final int values_button=0x7f0c0088; public static final int values_button=0x7f0c008a;
public static final int version_string=0x7f0c0000; public static final int version_string=0x7f0c0000;
public static final int view_loaded=0x7f0c0049; public static final int view_loaded=0x7f0c004b;
public static final int view_unloaded=0x7f0c0048; public static final int view_unloaded=0x7f0c004a;
public static final int word_edit=0x7f0c001e; public static final int word_edit=0x7f0c0020;
public static final int wordlen_max=0x7f0c0022; public static final int wordlen_max=0x7f0c0024;
public static final int wordlen_min=0x7f0c0021; public static final int wordlen_min=0x7f0c0023;
public static final int xlated_view=0x7f0c0062; public static final int xlated_view=0x7f0c0064;
public static final int xlated_view_blessed=0x7f0c005f; public static final int xlated_view_blessed=0x7f0c0061;
public static final int xlated_view_local=0x7f0c0061; public static final int xlated_view_local=0x7f0c0063;
} }
public static final class layout { public static final class layout {
public static final int about_dlg=0x7f030000; public static final int about_dlg=0x7f030000;
public static final int board=0x7f030001; public static final int board=0x7f030001;
public static final int chat=0x7f030002; public static final int bt_buttons=0x7f030002;
public static final int chat_row=0x7f030003; public static final int chat=0x7f030003;
public static final int color_display=0x7f030004; public static final int chat_row=0x7f030004;
public static final int color_edit=0x7f030005; public static final int color_display=0x7f030005;
public static final int confirm_sms=0x7f030006; public static final int color_edit=0x7f030006;
public static final int conn_types_display=0x7f030007; public static final int confirm_sms=0x7f030007;
public static final int dflt_name=0x7f030008; public static final int conn_types_display=0x7f030008;
public static final int dict_browse=0x7f030009; public static final int dflt_name=0x7f030009;
public static final int dict_browser=0x7f03000a; public static final int dict_browse=0x7f03000a;
public static final int dict_browser_list=0x7f03000b; public static final int dict_browser=0x7f03000b;
public static final int divider_view=0x7f03000c; public static final int dict_browser_list=0x7f03000c;
public static final int dualcontainer=0x7f03000d; public static final int divider_view=0x7f03000d;
public static final int expander_header=0x7f03000e; public static final int dualcontainer=0x7f03000e;
public static final int force_remote=0x7f03000f; public static final int expander_header=0x7f03000f;
public static final int game_config=0x7f030010; public static final int force_remote=0x7f030010;
public static final int game_list=0x7f030011; public static final int game_config=0x7f030011;
public static final int game_list_group=0x7f030012; public static final int game_list=0x7f030012;
public static final int game_list_item=0x7f030013; public static final int game_list_group=0x7f030013;
public static final int import_dict=0x7f030014; public static final int game_list_item=0x7f030014;
public static final int import_dict_item=0x7f030015; public static final int import_dict=0x7f030015;
public static final int inviter=0x7f030016; public static final int import_dict_item=0x7f030016;
public static final int inviter_item=0x7f030017; public static final int inviter=0x7f030017;
public static final int list_group=0x7f030018; public static final int inviter_item=0x7f030018;
public static final int list_item=0x7f030019; public static final int list_group=0x7f030019;
public static final int loc_item_edit=0x7f03001a; public static final int list_item=0x7f03001a;
public static final int loc_list_item=0x7f03001b; public static final int loc_item_edit=0x7f03001b;
public static final int loc_main=0x7f03001c; public static final int loc_list_item=0x7f03001c;
public static final int lookup=0x7f03001d; public static final int loc_main=0x7f03001d;
public static final int msg_label_and_edit=0x7f03001e; public static final int lookup=0x7f03001e;
public static final int not_again_view=0x7f03001f; public static final int msg_label_and_edit=0x7f03001f;
public static final int passwd_view=0x7f030020; public static final int not_again_view=0x7f030020;
public static final int player_edit=0x7f030021; public static final int passwd_view=0x7f030021;
public static final int player_list_elem=0x7f030022; public static final int player_edit=0x7f030022;
public static final int prefs_w_buttons=0x7f030023; public static final int player_list_elem=0x7f030023;
public static final int relayinviter=0x7f030024; public static final int prefs_w_buttons=0x7f030024;
public static final int remote_dict_details=0x7f030025; public static final int relay_buttons=0x7f030025;
public static final int rename_game=0x7f030026; public static final int remote_dict_details=0x7f030026;
public static final int smsinviter=0x7f030027; public static final int rename_game=0x7f030027;
public static final int smsinviter_item=0x7f030028; public static final int sms_buttons=0x7f030028;
public static final int studylist=0x7f030029; public static final int smsinviter_item=0x7f030029;
public static final int toolbar=0x7f03002a; public static final int studylist=0x7f03002a;
public static final int toolbar=0x7f03002b;
} }
public static final class menu { public static final class menu {
public static final int board_menu=0x7f0b0000; public static final int board_menu=0x7f0b0000;

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<Button android:id="@+id/button_add"
android:text="@string/bt_pick_addall_button"
style="@style/evenly_spaced_horizontal"
/>
<Button android:id="@+id/button_clear"
android:text="@string/bt_pick_clear_button"
style="@style/evenly_spaced_horizontal"
/>
</LinearLayout>

View file

@ -21,25 +21,16 @@
android:padding="8dp" android:padding="8dp"
/> />
<LinearLayout android:orientation="horizontal" <TextView android:id="@android:id/empty"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
> android:padding="20dp"
<Button android:id="@+id/button_rescan" />
android:text="@string/bt_pick_addall_button"
style="@style/evenly_spaced_horizontal" <FrameLayout android:id="@+id/button_bar"
/> android:layout_width="match_parent"
<!-- <Button android:id="@+id/button_reconfigure" --> android:layout_height="wrap_content"
<!-- android:text="@string/bt_pick_reconfig_button" --> />
<!-- android:layout_width="wrap_content" -->
<!-- android:layout_height="wrap_content" -->
<!-- android:layout_weight="1" -->
<!-- /> -->
<Button android:id="@+id/button_clear"
android:text="@string/bt_pick_clear_button"
style="@style/evenly_spaced_horizontal"
/>
</LinearLayout>
<Button android:id="@+id/button_invite" <Button android:id="@+id/button_invite"
android:text="@string/button_invite" android:text="@string/button_invite"

View file

@ -7,14 +7,21 @@
> >
<CheckBox android:id="@+id/inviter_check" <CheckBox android:id="@+id/inviter_check"
style="@style/evenly_spaced_horizontal" android:layout_width="wrap_content"
android:layout_height="wrap_content"
/> />
<Spinner android:id="@+id/nperdev_spinner" <Spinner android:id="@+id/nperdev_spinner"
style="@style/evenly_spaced_horizontal"
android:prompt="@string/nplayers_prompt" android:prompt="@string/nplayers_prompt"
android:drawSelectorOnTop="true" android:drawSelectorOnTop="true"
android:visibility="gone" android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/> />
<FrameLayout android:id="@+id/frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout> </LinearLayout>

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<Button android:id="@+id/button_relay_add"
android:text="@string/button_relay_add"
style="@style/evenly_spaced_horizontal"
/>
<ImageButton android:id="@+id/manual_add_button"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:src="@android:drawable/ic_input_add"
android:clickable="false"
/>
add_self_button
<Button android:id="@+id/button_clear"
android:text="@string/bt_pick_clear_button"
style="@style/evenly_spaced_horizontal"
/>
</LinearLayout>

View file

@ -1,52 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView android:id="@+id/invite_desc"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:padding="8dp"
/>
<ListView android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:drawSelectorOnTop="false"
android:layout_weight="1"
android:padding="8dp"
/>
<TextView android:id="@android:id/empty"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/empty_relay_inviter"
android:padding="20dp"
/>
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<Button android:id="@+id/button_add"
android:text="@string/button_relay_add"
style="@style/evenly_spaced_horizontal"
/>
<Button android:id="@+id/button_clear"
android:text="@string/bt_pick_clear_button"
style="@style/evenly_spaced_horizontal"
/>
</LinearLayout>
<Button android:id="@+id/button_invite"
android:text="@string/button_invite"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dip"
/>
</LinearLayout>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<Button android:id="@+id/button_add"
android:text="@string/button_sms_add"
style="@style/evenly_spaced_horizontal"
/>
<ImageButton android:id="@+id/manual_add_button"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:src="@android:drawable/ic_input_add"
android:clickable="false"
/>
<Button android:id="@+id/button_clear"
android:text="@string/bt_pick_clear_button"
style="@style/evenly_spaced_horizontal"
/>
</LinearLayout>

View file

@ -1,57 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView android:id="@+id/invite_desc"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:padding="8dp"
/>
<ListView android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:drawSelectorOnTop="false"
android:layout_weight="1"
android:padding="8dp"
/>
<TextView android:id="@android:id/empty"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/empty_sms_inviter"
android:padding="20dp"
/>
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<Button android:id="@+id/button_add"
android:text="@string/button_sms_add"
style="@style/evenly_spaced_horizontal"
/>
<ImageButton android:id="@+id/manual_add_button"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:src="@android:drawable/ic_input_add"
android:clickable="false"
/>
<Button android:id="@+id/button_clear"
android:text="@string/bt_pick_clear_button"
style="@style/evenly_spaced_horizontal"
/>
</LinearLayout>
<Button android:id="@+id/button_invite"
android:text="@string/button_invite"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>

View file

@ -9,34 +9,18 @@
android:paddingRight="8dp" android:paddingRight="8dp"
> >
<CheckBox android:id="@+id/checkbox" <LinearLayout android:layout_width="wrap_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:orientation="vertical"
> >
<LinearLayout android:layout_width="wrap_content" <TextView android:id="@+id/name"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:layout_width="wrap_content"
> android:textAppearance="?android:attr/textAppearanceMedium"
<TextView android:id="@+id/name" />
android:layout_height="wrap_content" <TextView android:id="@+id/number"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium" android:layout_width="wrap_content"
/> />
<TextView android:id="@+id/number"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
/>
</LinearLayout>
<Spinner android:id="@+id/nperdev_spinner"
style="@style/evenly_spaced_horizontal"
android:prompt="@string/nplayers_prompt"
android:drawSelectorOnTop="true"
android:visibility="gone"
/>
</LinearLayout> </LinearLayout>
</org.eehouse.android.xw4.SMSListItem> </org.eehouse.android.xw4.SMSListItem>

View file

@ -26,13 +26,14 @@ import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener; import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.TextView;
import junit.framework.Assert; import junit.framework.Assert;
@ -47,7 +48,9 @@ import java.util.Set;
public class BTInviteDelegate extends InviteDelegate { public class BTInviteDelegate extends InviteDelegate {
private static final String TAG = BTInviteDelegate.class.getSimpleName(); private static final String TAG = BTInviteDelegate.class.getSimpleName();
private static final int[] BUTTONIDS = { R.id.button_add,
R.id.button_clear,
};
private Activity m_activity; private Activity m_activity;
public static void launchForResult( Activity activity, int nMissing, public static void launchForResult( Activity activity, int nMissing,
@ -68,7 +71,7 @@ public class BTInviteDelegate extends InviteDelegate {
protected BTInviteDelegate( Delegator delegator, Bundle savedInstanceState ) protected BTInviteDelegate( Delegator delegator, Bundle savedInstanceState )
{ {
super( delegator, savedInstanceState, R.layout.inviter ); super( delegator, savedInstanceState );
m_activity = delegator.getActivity(); m_activity = delegator.getActivity();
} }
@ -78,11 +81,24 @@ public class BTInviteDelegate extends InviteDelegate {
String msg = getString( R.string.bt_pick_addall_button ); String msg = getString( R.string.bt_pick_addall_button );
msg = getQuantityString( R.plurals.invite_bt_desc_fmt, m_nMissing, msg = getQuantityString( R.plurals.invite_bt_desc_fmt, m_nMissing,
m_nMissing, msg ); m_nMissing, msg );
super.init( R.id.button_invite, R.id.button_rescan, super.init( msg, 0 );
R.id.button_clear, R.id.invite_desc, msg ); addButtonBar( R.layout.bt_buttons, BUTTONIDS );
BTService.clearDevices( m_activity, null ); // will return names BTService.clearDevices( m_activity, null ); // will return names
} }
@Override
protected void onBarButtonClicked( int id )
{
switch( id ) {
case R.id.button_add:
scan();
break;
case R.id.button_clear:
Utils.notImpl( m_activity );
break;
}
}
// MultiService.MultiEventListener interface // MultiService.MultiEventListener interface
@Override @Override
public void eventOccurred( MultiService.MultiEvent event, final Object ... args ) public void eventOccurred( MultiService.MultiEvent event, final Object ... args )
@ -93,22 +109,15 @@ public class BTInviteDelegate extends InviteDelegate {
public void run() { public void run() {
synchronized( BTInviteDelegate.this ) { synchronized( BTInviteDelegate.this ) {
String[] btDevAddrs = null; TwoStringPair[] pairs = null;
String[] btDevNames = null;
if ( 0 < args.length ) { if ( 0 < args.length ) {
btDevAddrs = (String[])(args[0]); pairs = TwoStringPair.make( (String[])(args[0]),
btDevNames = (String[])(args[1]); (String[])(args[1]) );
if ( null != btDevNames
&& 0 == btDevNames.length ) {
btDevNames = null;
btDevAddrs = null;
}
} }
// m_setChecked = null != btDevNames // m_setChecked = null != btDevNames
// && m_nMissing == btDevNames.length; // && m_nMissing == btDevNames.length;
updateListAdapter( R.layout.inviter_item, updateListAdapter( R.layout.smsinviter_item, pairs );
btDevNames, btDevAddrs, false );
// m_adapter = new NameAddrDevsAdapter( BTInviteDelegate.this, // m_adapter = new NameAddrDevsAdapter( BTInviteDelegate.this,
// btDevAddrs, btDevNames ); // btDevAddrs, btDevNames );
// setListAdapter( m_adapter ); // setListAdapter( m_adapter );
@ -123,7 +132,27 @@ public class BTInviteDelegate extends InviteDelegate {
} }
} }
protected void scan() @Override
protected void onChildAdded( View child, InviterItem data )
{
SMSListItem item = (SMSListItem)child; // change class name!
TwoStringPair pair = (TwoStringPair)data;
((TextView)item.findViewById(R.id.number)).setText( pair.str1 );
((TextView)item.findViewById(R.id.name)).setText( pair.str2 );
}
@Override
protected void listSelected( InviterItem[] selected, String[] devs, int[] counts )
{
for ( int ii = 0; ii < selected.length; ++ii ) {
TwoStringPair rec = (TwoStringPair)selected[ii];
counts[ii] = 1; // rec.m_nPlayers;
devs[ii] = rec.str1;
DbgUtils.logd( TAG, "selecting address %s", devs[ii] );
}
}
private void scan()
{ {
int count = BTService.getPairedCount( m_activity ); int count = BTService.getPairedCount( m_activity );
if ( 0 < count ) { if ( 0 < count ) {
@ -136,15 +165,15 @@ public class BTInviteDelegate extends InviteDelegate {
} }
} }
@Override // @Override
protected void clearSelected( Integer[] itemIndices ) // protected void clearSelected( Integer[] itemIndices )
{ // {
String[][] selected = new String[1][]; // // String[][] selected = new String[1][];
listSelected( selected, null ); // // listSelected( selected, null );
BTService.clearDevices( m_activity, selected[0] ); // // BTService.clearDevices( m_activity, selected[0] );
// super.clearSelected( itemIndices ); // // super.clearSelected( itemIndices );
} // }
// DlgDelegate.DlgClickNotify interface // DlgDelegate.DlgClickNotify interface
@Override @Override

View file

@ -32,6 +32,7 @@ import android.widget.Button;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.FrameLayout;
import android.widget.ListView; import android.widget.ListView;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.TextView; import android.widget.TextView;
@ -48,6 +49,31 @@ abstract class InviteDelegate extends ListDelegateBase
ViewGroup.OnHierarchyChangeListener { ViewGroup.OnHierarchyChangeListener {
private static final String TAG = InviteDelegate.class.getSimpleName(); private static final String TAG = InviteDelegate.class.getSimpleName();
protected interface InviterItem {
}
protected static class TwoStringPair implements InviterItem {
public String str1;
public String str2;
public TwoStringPair( String str1, String str2 ) {
this.str1 = str1; this.str2 = str2;
}
public static TwoStringPair[] make( String[] names, String[] addrs )
{
TwoStringPair[] pairs = new TwoStringPair[names.length];
for ( int ii = 0; ii < pairs.length; ++ii ) {
pairs[ii] = new TwoStringPair( names[ii], addrs[ii] );
}
return pairs;
}
}
// Children implement ...
abstract void onChildAdded( View child, InviterItem item );
abstract void listSelected( InviterItem[] selected, String[] devsP, int[] countsP );
public static final String DEVS = "DEVS"; public static final String DEVS = "DEVS";
public static final String COUNTS = "COUNTS"; public static final String COUNTS = "COUNTS";
protected static final String INTENT_KEY_NMISSING = "NMISSING"; protected static final String INTENT_KEY_NMISSING = "NMISSING";
@ -60,51 +86,37 @@ abstract class InviteDelegate extends ListDelegateBase
protected Button m_clearButton; protected Button m_clearButton;
private Activity m_activity; private Activity m_activity;
private ListView m_lv; private ListView m_lv;
private View m_ev; private TextView m_ev;
private boolean m_showAddrs; private boolean m_showAddrs;
private InviteItemsAdapter m_adapter; private InviteItemsAdapter m_adapter;
protected Map<String, Integer> m_counts; protected Map<InviterItem, Integer> m_counts;
protected Set<Integer> m_checked; protected Set<Integer> m_checked;
private boolean m_setChecked; private boolean m_setChecked;
private LinearLayout[] m_items; // private LinearLayout[] m_items;
public InviteDelegate( Delegator delegator, Bundle savedInstanceState, public InviteDelegate( Delegator delegator, Bundle savedInstanceState )
int layoutID )
{ {
super( delegator, savedInstanceState, layoutID, R.menu.empty ); super( delegator, savedInstanceState, R.layout.inviter, R.menu.empty );
m_activity = delegator.getActivity(); m_activity = delegator.getActivity();
Intent intent = getIntent(); Intent intent = getIntent();
m_nMissing = intent.getIntExtra( INTENT_KEY_NMISSING, -1 ); m_nMissing = intent.getIntExtra( INTENT_KEY_NMISSING, -1 );
m_lastDev = intent.getStringExtra( INTENT_KEY_LASTDEV ); m_lastDev = intent.getStringExtra( INTENT_KEY_LASTDEV );
m_counts = new HashMap<String, Integer>(); m_counts = new HashMap<InviterItem, Integer>();
m_checked = new HashSet<Integer>(); m_checked = new HashSet<Integer>();
} }
protected void init( int button_invite, int desc_id, String descTxt ) protected void init( String descTxt, int emptyMsgId )
{ {
init( button_invite, 0, 0, desc_id, descTxt ); m_inviteButton = (Button)findViewById( R.id.button_invite );
}
protected void init( int button_invite, int button_rescan,
int button_clear, int desc_id, String descTxt )
{
m_inviteButton = (Button)findViewById( button_invite );
m_inviteButton.setOnClickListener( this ); m_inviteButton.setOnClickListener( this );
if ( 0 != button_rescan ) {
m_rescanButton = (Button)findViewById( button_rescan );
m_rescanButton.setOnClickListener( this );
}
if ( 0 != button_clear ) {
m_clearButton = (Button)findViewById( button_clear );
m_clearButton.setOnClickListener( this );
}
TextView descView = (TextView)findViewById( desc_id ); TextView descView = (TextView)findViewById( R.id.invite_desc );
descView.setText( descTxt ); descView.setText( descTxt );
m_lv = (ListView)findViewById( android.R.id.list ); m_lv = (ListView)findViewById( android.R.id.list );
m_ev = findViewById( android.R.id.empty ); m_ev = (TextView)findViewById( android.R.id.empty );
if ( null != m_lv && null != m_ev ) { if ( null != m_lv && null != m_ev && 0 != emptyMsgId ) {
m_ev.setText( getString( emptyMsgId ) );
m_lv.setOnHierarchyChangeListener( this ); m_lv.setOnHierarchyChangeListener( this );
showEmptyIfEmpty(); showEmptyIfEmpty();
} }
@ -112,35 +124,71 @@ abstract class InviteDelegate extends ListDelegateBase
tryEnable(); tryEnable();
} }
protected void updateListAdapter( int itemId, String[] names, String[] addrs, // Subclasses are meant to call this
boolean showAddrs ) protected void addButtonBar( int buttonBarId, int[] buttonBarItemIds )
{ {
m_showAddrs = showAddrs; FrameLayout container = (FrameLayout)findViewById( R.id.button_bar );
m_adapter = new InviteItemsAdapter( itemId, names, addrs ); ViewGroup bar = (ViewGroup)inflate( buttonBarId );
container.addView( bar );
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick( View view ) {
onBarButtonClicked( view.getId() );
}
};
for ( int id : buttonBarItemIds ) {
bar.findViewById( id ).setOnClickListener( listener );
}
}
protected void updateListAdapter( int itemId, InviterItem[] items )
{
// m_items = items;
m_adapter = new InviteItemsAdapter( itemId, items );
setListAdapter( m_adapter ); setListAdapter( m_adapter );
} }
protected void onBarButtonClicked( int id )
{
Assert.fail(); // subclass must implement
}
// Subclasses can do something here
protected void addToButtonBar( FrameLayout container ) {}
//////////////////////////////////////// ////////////////////////////////////////
// View.OnClickListener // View.OnClickListener
//////////////////////////////////////// ////////////////////////////////////////
public void onClick( View view ) public void onClick( View view )
{ {
if ( m_inviteButton == view ) { if ( m_inviteButton == view ) {
int len = m_checked.size();
String[] devs = new String[len];
int[] counts = new int[len];
listSelected( getSelItems(), devs, counts );
Intent intent = new Intent(); Intent intent = new Intent();
String[][] devs = new String[1][]; intent.putExtra( DEVS, devs );
int[][] counts = new int[1][]; intent.putExtra( COUNTS, counts );
listSelected( devs, counts );
intent.putExtra( DEVS, devs[0] );
intent.putExtra( COUNTS, counts[0] );
setResult( Activity.RESULT_OK, intent ); setResult( Activity.RESULT_OK, intent );
finish(); finish();
} else if ( m_rescanButton == view ) {
scan();
} else if ( m_clearButton == view ) {
clearSelected( makeCheckedArray() );
} }
} }
private InviterItem[] getSelItems()
{
int ii = 0;
InviterItem[] result = new InviterItem[m_checked.size()];
InviterItem[] src = getAdapter().getItems();
for ( int checked : m_checked ) {
result[ii++] = src[checked];
}
return result;
}
//////////////////////////////////////// ////////////////////////////////////////
// ViewGroup.OnHierarchyChangeListener // ViewGroup.OnHierarchyChangeListener
//////////////////////////////////////// ////////////////////////////////////////
@ -159,60 +207,22 @@ abstract class InviteDelegate extends ListDelegateBase
? View.VISIBLE : View.GONE ); ? View.VISIBLE : View.GONE );
} }
protected void listSelected( String[][] devsP, int[][] countsP )
{
int[] counts = null;
int len = m_checked.size();
Assert.assertTrue( 0 < len );
if ( null != countsP ) {
counts = new int[len];
countsP[0] = counts;
}
String[] checked = new String[len];
Iterator<Integer> iter = m_checked.iterator();
for ( int ii = 0; iter.hasNext(); ++ii ) {
int index = iter.next();
String addr = m_adapter.getAddrs()[index];
Assert.assertNotNull( addr ); // fired!!!
checked[ii] = addr;
if ( null != counts ) {
counts[ii] = m_counts.get( addr );
}
}
DbgUtils.logd( TAG, "listSelected() adding %s",
checked.toString() );
devsP[0] = checked;
}
protected void tryEnable() protected void tryEnable()
{ {
int count = m_checked.size(); int count = m_checked.size();
m_inviteButton.setEnabled( count > 0 && count <= m_nMissing ); m_inviteButton.setEnabled( count > 0 && count <= m_nMissing );
if ( null != m_clearButton ) { // if ( null != m_clearButton ) {
m_clearButton.setEnabled( count > 0 ); // m_clearButton.setEnabled( count > 0 );
} // }
} }
protected void scan() {} final Set<Integer> getChecked() { return m_checked; }
protected void clearSelected( Integer[] itemIndices ) protected void clearChecked() { m_checked.clear(); }
{
for ( Iterator<Integer> iter = m_checked.iterator(); // protected void scan() {}
iter.hasNext(); ) {
int index = iter.next();
LinearLayout item = m_items[index];
CheckBox box = (CheckBox)item.findViewById( R.id.inviter_check );
if ( null != box ) {
box.setChecked( false );
}
m_checked.remove( iter );
}
}
// callbacks made by InviteItemsAdapter // callbacks made by InviteItemsAdapter
protected void onItemChecked( int index, boolean checked ) protected void onItemChecked( int index, boolean checked )
{ {
DbgUtils.logd( TAG, "onItemChecked(%d, %b)", index, checked ); DbgUtils.logd( TAG, "onItemChecked(%d, %b)", index, checked );
@ -234,35 +244,42 @@ abstract class InviteDelegate extends ListDelegateBase
} }
private class InviteItemsAdapter extends XWListAdapter { private class InviteItemsAdapter extends XWListAdapter {
private String[] m_devAddrs; private InviterItem[] m_items;
private String[] m_devNames;
private int m_itemId; private int m_itemId;
public InviteItemsAdapter( int itemID, String[] names, String[] addrs ) public InviteItemsAdapter( int itemID, InviterItem[] items )
{ {
super( null == addrs? 0 : addrs.length ); super( null == items? 0 : items.length );
m_itemId = itemID; m_itemId = itemID;
m_devAddrs = addrs; m_items = items;
m_devNames = names; // m_items = new LinearLayout[getCount()];
m_items = new LinearLayout[getCount()];
} }
public String[] getAddrs() { return m_devAddrs; } public InviterItem[] getItems() { return m_items; }
// public String[] getAddrs() { return m_devAddrs; }
@Override @Override
public Object getItem( int position ) { return m_devNames[position]; } public Object getItem( int position ) { return m_items[position]; }
@Override @Override
public View getView( final int position, View convertView, public View getView( final int position, View convertView,
ViewGroup parent ) ViewGroup parent )
{ {
final String addr = m_devAddrs[position]; final InviterItem item = m_items[position];
final LinearLayout layout = (LinearLayout)inflate( m_itemId ); final LinearLayout layout = (LinearLayout)inflate( R.layout.inviter_item );
CheckBox box = (CheckBox)layout.findViewById( R.id.inviter_check ); CheckBox box = (CheckBox)layout.findViewById( R.id.inviter_check );
box.setText( m_devNames[position] ); // box.setText( m_devNames[position] );
box.setTag( addr ); // box.setTag( addr );
m_counts.put( addr, 1 ); // Give subclass a chance to install and populate its view
FrameLayout frame = (FrameLayout)layout.findViewById( R.id.frame );
Assert.assertNotNull( frame );
View child = inflate( m_itemId );
frame.addView( child );
onChildAdded( child, m_items[position] );
m_counts.put( item, 1 );
if ( XWPrefs.getCanInviteMulti( m_activity ) && 1 < m_nMissing ) { if ( XWPrefs.getCanInviteMulti( m_activity ) && 1 < m_nMissing ) {
Spinner spinner = (Spinner) Spinner spinner = (Spinner)
layout.findViewById(R.id.nperdev_spinner); layout.findViewById(R.id.nperdev_spinner);
@ -280,7 +297,7 @@ abstract class InviteDelegate extends ListDelegateBase
View view, int pos, View view, int pos,
long id ) long id )
{ {
m_counts.put( addr, 1 + pos ); m_counts.put( item, 1 + pos );
tryEnable(); tryEnable();
} }
@ -295,13 +312,13 @@ abstract class InviteDelegate extends ListDelegateBase
if ( !isChecked ) { if ( !isChecked ) {
m_setChecked = false; m_setChecked = false;
} }
// if ( isChecked ) { if ( isChecked ) {
// m_checked.add( position ); m_checked.add( position );
// } else { } else {
// m_checked.remove( position ); m_checked.remove( position );
// // User's now making changes; don't check new views // // User's now making changes; don't check new views
// m_setChecked = false; // m_setChecked = false;
// } }
onItemChecked( position, isChecked ); onItemChecked( position, isChecked );
tryEnable(); tryEnable();
@ -311,15 +328,16 @@ abstract class InviteDelegate extends ListDelegateBase
if ( m_setChecked || m_checked.contains( position ) ) { if ( m_setChecked || m_checked.contains( position ) ) {
box.setChecked( true ); box.setChecked( true );
} else if ( null != m_lastDev && m_lastDev.equals( addr ) ) { } else if ( null != m_lastDev && m_lastDev.equals( item ) ) {
m_lastDev = null; m_lastDev = null;
box.setChecked( true ); box.setChecked( true );
} }
m_items[position] = layout; // m_items[position] = layout;
return layout; return layout;
} }
public String getAddr( CheckBox box ) { return (String)box.getTag(); } public String getAddr( CheckBox box ) { return (String)box.getTag(); }
public String getName( CheckBox box ) { return box.getText().toString(); } public String getName( CheckBox box ) { return box.getText().toString(); }
} }
} }

View file

@ -20,18 +20,21 @@
package org.eehouse.android.xw4; package org.eehouse.android.xw4;
import android.content.DialogInterface;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener; import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.FrameLayout;
import android.widget.Spinner; import android.widget.Spinner;
import junit.framework.Assert; import junit.framework.Assert;
@ -51,12 +54,18 @@ import java.util.Set;
public class RelayInviteDelegate extends InviteDelegate { public class RelayInviteDelegate extends InviteDelegate {
private static final String TAG = RelayInviteDelegate.class.getSimpleName(); private static final String TAG = RelayInviteDelegate.class.getSimpleName();
private static int[] BUTTONIDS = {
R.id.button_relay_add,
R.id.manual_add_button,
R.id.button_clear,
};
// private static final int GET_CONTACT = 1; // private static final int GET_CONTACT = 1;
private static final String SAVE_NAME = "SAVE_NAME"; private static final String SAVE_NAME = "SAVE_NAME";
private static final String SAVE_NUMBER = "SAVE_NUMBER"; private static final String SAVE_NUMBER = "SAVE_NUMBER";
private ArrayList<DevIDRec> m_devIDRecs; private ArrayList<DevIDRec> m_devIDRecs;
private RelayDevsAdapter m_adapter; // private RelayDevsAdapter m_adapter;
private boolean m_immobileConfirmed; private boolean m_immobileConfirmed;
private Activity m_activity; private Activity m_activity;
@ -70,7 +79,7 @@ public class RelayInviteDelegate extends InviteDelegate {
public RelayInviteDelegate( Delegator delegator, Bundle savedInstanceState ) public RelayInviteDelegate( Delegator delegator, Bundle savedInstanceState )
{ {
super( delegator, savedInstanceState, R.layout.relayinviter ); super( delegator, savedInstanceState );
m_activity = delegator.getActivity(); m_activity = delegator.getActivity();
} }
@ -79,8 +88,8 @@ public class RelayInviteDelegate extends InviteDelegate {
String msg = getString( R.string.button_invite ); String msg = getString( R.string.button_invite );
msg = getQuantityString( R.plurals.invite_relay_desc_fmt, m_nMissing, msg = getQuantityString( R.plurals.invite_relay_desc_fmt, m_nMissing,
m_nMissing, msg ); m_nMissing, msg );
super.init( R.id.button_invite, R.id.button_add, R.id.button_clear, super.init( msg, R.string.empty_relay_inviter );
R.id.invite_desc, msg ); addButtonBar( R.layout.relay_buttons, BUTTONIDS );
// getBundledData( savedInstanceState ); // getBundledData( savedInstanceState );
@ -110,6 +119,27 @@ public class RelayInviteDelegate extends InviteDelegate {
rebuildList( true ); rebuildList( true );
} }
@Override
protected void onBarButtonClicked( int id )
{
switch( id ) {
case R.id.button_relay_add:
Utils.notImpl( m_activity );
break;
case R.id.manual_add_button:
showDialog( DlgID.GET_NUMBER );
break;
case R.id.button_clear:
Utils.notImpl( m_activity );
// int count = getChecked().size();
// String msg = getQuantityString( R.plurals.confirm_clear_sms_fmt,
// count, count );
// makeConfirmThenBuilder( msg, Action.CLEAR_ACTION ).show();
break;
}
}
// protected void onSaveInstanceState( Bundle outState ) // protected void onSaveInstanceState( Bundle outState )
// { // {
// outState.putString( SAVE_NAME, m_pendingName ); // outState.putString( SAVE_NAME, m_pendingName );
@ -171,74 +201,86 @@ public class RelayInviteDelegate extends InviteDelegate {
// return dialog; // return dialog;
// } // }
@Override
protected void onChildAdded( View child, InviterItem data )
{
Assert.fail();
}
@Override
public void listSelected( InviterItem[] selected, String[] devsP, int[] countsP )
{
Assert.fail();
}
// We want to present user with list of previous opponents and devices. We // We want to present user with list of previous opponents and devices. We
// can easily get list of relayIDs. The relay, if reachable, can convert // can easily get list of relayIDs. The relay, if reachable, can convert
// that to a (likely shorter) list of devices. Then for each deviceID, // that to a (likely shorter) list of devices. Then for each deviceID,
// open the newest game with a relayID mapping to it and get the name of // open the newest game with a relayID mapping to it and get the name of
// the opponent? // the opponent?
protected void scan() // protected void scan()
{ // {
long[][] rowIDss = new long[1][]; // long[][] rowIDss = new long[1][];
String[] relayIDs = DBUtils.getRelayIDs( m_activity, rowIDss ); // String[] relayIDs = DBUtils.getRelayIDs( m_activity, rowIDss );
if ( null != relayIDs && 0 < relayIDs.length ) { // if ( null != relayIDs && 0 < relayIDs.length ) {
new ListOpponentsTask( m_activity, relayIDs, rowIDss[0] ).execute(); // new ListOpponentsTask( m_activity, relayIDs, rowIDss[0] ).execute();
} // }
// Intent intent = new Intent( Intent.ACTION_PICK, // // Intent intent = new Intent( Intent.ACTION_PICK,
// ContactsContract.Contacts.CONTENT_URI ); // // ContactsContract.Contacts.CONTENT_URI );
// intent.setType( Phone.CONTENT_TYPE ); // // intent.setType( Phone.CONTENT_TYPE );
// startActivityForResult( intent, GET_CONTACT ); // // startActivityForResult( intent, GET_CONTACT );
} // }
@Override // @Override
protected void clearSelected( Integer[] selected ) // protected void clearSelected( Integer[] selected )
{ // {
makeConfirmThenBuilder( R.string.confirm_clear_relay, Action.CLEAR_ACTION ) // makeConfirmThenBuilder( R.string.confirm_clear_relay, Action.CLEAR_ACTION )
.show(); // .show();
} // }
protected void listSelected( String[][] devsP, int[][] countsP ) // protected void listSelected( String[][] devsP, int[][] countsP )
{ // {
int count = m_adapter.getCount(); // // int count = m_adapter.getCount();
String[] result = new String[countChecks()]; // // String[] result = new String[countChecks()];
int[] counts = new int[result.length]; // // int[] counts = new int[result.length];
int index = 0; // // int index = 0;
Iterator<DevIDRec> iter = m_devIDRecs.iterator(); // // Iterator<DevIDRec> iter = m_devIDRecs.iterator();
for ( int ii = 0; iter.hasNext(); ++ii ) { // // for ( int ii = 0; iter.hasNext(); ++ii ) {
DevIDRec rec = iter.next(); // // DevIDRec rec = iter.next();
if ( rec.m_isChecked ) { // // if ( rec.m_isChecked ) {
counts[index] = rec.m_nPlayers; // // counts[index] = rec.m_nPlayers;
result[index] = ((SMSListItem)m_adapter.getItem(ii)).getNumber(); // // result[index] = ((SMSListItem)m_adapter.getItem(ii)).getNumber();
index++; // // index++;
} // // }
} // // }
devsP[0] = result; // // devsP[0] = result;
if ( null != countsP ) { // // if ( null != countsP ) {
countsP[0] = counts; // // countsP[0] = counts;
} // // }
} // }
@Override // @Override
protected void tryEnable() // protected void tryEnable()
{ // {
if ( null != m_devIDRecs ) { // if ( null != m_devIDRecs ) {
int nPlayers = 0; // int nPlayers = 0;
int nDevs = 0; // int nDevs = 0;
Iterator<DevIDRec> iter = m_devIDRecs.iterator(); // Iterator<DevIDRec> iter = m_devIDRecs.iterator();
while ( iter.hasNext() ) { // while ( iter.hasNext() ) {
DevIDRec rec = iter.next(); // DevIDRec rec = iter.next();
if ( rec.m_isChecked ) { // if ( rec.m_isChecked ) {
++nDevs; // ++nDevs;
nPlayers += rec.m_nPlayers; // nPlayers += rec.m_nPlayers;
} // }
} // }
m_inviteButton.setEnabled( 0 < nPlayers && nPlayers <= m_nMissing ); // m_inviteButton.setEnabled( 0 < nPlayers && nPlayers <= m_nMissing );
m_clearButton.setEnabled( 0 < nDevs ); // m_clearButton.setEnabled( 0 < nDevs );
} // }
} // }
// DlgDelegate.DlgClickNotify interface // DlgDelegate.DlgClickNotify interface
@Override @Override
@ -266,19 +308,19 @@ public class RelayInviteDelegate extends InviteDelegate {
} }
} }
private int countChecks() // private int countChecks()
{ // {
int count = 0; // int count = 0;
if ( null != m_devIDRecs ) { // if ( null != m_devIDRecs ) {
Iterator<DevIDRec> iter = m_devIDRecs.iterator(); // Iterator<DevIDRec> iter = m_devIDRecs.iterator();
while ( iter.hasNext() ) { // while ( iter.hasNext() ) {
if ( iter.next().m_isChecked ) { // if ( iter.next().m_isChecked ) {
++count; // ++count;
} // }
} // }
} // }
return count; // return count;
} // }
// private void addPhoneNumbers( Intent intent ) // private void addPhoneNumbers( Intent intent )
// { // {
@ -323,20 +365,20 @@ public class RelayInviteDelegate extends InviteDelegate {
private void rebuildList( boolean checkIfAll ) private void rebuildList( boolean checkIfAll )
{ {
Collections.sort( m_devIDRecs, new Comparator<DevIDRec>() { // Collections.sort( m_devIDRecs, new Comparator<DevIDRec>() {
public int compare( DevIDRec rec1, DevIDRec rec2 ) { // public int compare( DevIDRec rec1, DevIDRec rec2 ) {
return rec1.m_opponent.compareTo(rec2.m_opponent); // return rec1.m_opponent.compareTo(rec2.m_opponent);
} // }
}); // });
m_adapter = new RelayDevsAdapter(); // m_adapter = new RelayDevsAdapter();
setListAdapter( m_adapter ); // setListAdapter( m_adapter );
if ( checkIfAll && m_devIDRecs.size() <= m_nMissing ) { // if ( checkIfAll && m_devIDRecs.size() <= m_nMissing ) {
Iterator<DevIDRec> iter = m_devIDRecs.iterator(); // Iterator<DevIDRec> iter = m_devIDRecs.iterator();
while ( iter.hasNext() ) { // while ( iter.hasNext() ) {
iter.next().m_isChecked = true; // iter.next().m_isChecked = true;
} // }
} // }
tryEnable(); // tryEnable();
} }
private void getSavedState() private void getSavedState()
@ -363,122 +405,120 @@ public class RelayInviteDelegate extends InviteDelegate {
rebuildList( false ); rebuildList( false );
} }
private void addChecked( DevIDRec rec ) // private void addChecked( DevIDRec rec )
{ // {
if ( m_nMissing <= countChecks() ) { // if ( m_nMissing <= countChecks() ) {
Iterator<DevIDRec> iter = m_devIDRecs.iterator(); // Iterator<DevIDRec> iter = m_devIDRecs.iterator();
while ( iter.hasNext() ) { // while ( iter.hasNext() ) {
iter.next().m_isChecked = false; // iter.next().m_isChecked = false;
} // }
} // }
rec.m_isChecked = true; // rec.m_isChecked = true;
m_devIDRecs.add( rec ); // m_devIDRecs.add( rec );
} // }
private void clearSelectedImpl() private void clearSelectedImpl()
{ {
int count = m_adapter.getCount(); // int count = m_adapter.getCount();
for ( int ii = count - 1; ii >= 0; --ii ) { // for ( int ii = count - 1; ii >= 0; --ii ) {
if ( m_devIDRecs.get( ii ).m_isChecked ) { // if ( m_devIDRecs.get( ii ).m_isChecked ) {
m_devIDRecs.remove( ii ); // m_devIDRecs.remove( ii );
} // }
} // }
saveAndRebuild(); // saveAndRebuild();
} }
private class DevIDRec { private class DevIDRec implements InviterItem {
public String m_devID; public String m_devID;
public String m_opponent; public String m_opponent;
public boolean m_isChecked;
public int m_nPlayers; public int m_nPlayers;
public DevIDRec( String name, String devID ) // public DevIDRec( String name, String devID )
{ // {
this( name, devID, false ); // this( name, devID, false );
} // }
// public DevIDRec( String devID ) // public DevIDRec( String devID )
// { // {
// this( null, devID, false ); // this( null, devID, false );
// } // }
public DevIDRec( String opponent, String devID, boolean checked ) public DevIDRec( String opponent, String devID )
{ {
m_devID = devID; m_devID = devID;
m_isChecked = checked;
m_nPlayers = 1; m_nPlayers = 1;
m_opponent = opponent; m_opponent = opponent;
} }
} }
private class RelayDevsAdapter extends XWListAdapter { // private class RelayDevsAdapter extends XWListAdapter {
private SMSListItem[] m_items; // private SMSListItem[] m_items;
public RelayDevsAdapter() // public RelayDevsAdapter()
{ // {
super( m_devIDRecs.size() ); // super( m_devIDRecs.size() );
m_items = new SMSListItem[m_devIDRecs.size()]; // m_items = new SMSListItem[m_devIDRecs.size()];
} // }
public Object getItem( final int position ) // public Object getItem( final int position )
{ // {
// For some reason I can't cache items to be returned. // // For some reason I can't cache items to be returned.
// Checking/unchecking breaks for some but not all items, // // Checking/unchecking breaks for some but not all items,
// with some relation to whether they were scrolled into // // with some relation to whether they were scrolled into
// view. So build them anew each time (but still cache // // view. So build them anew each time (but still cache
// for by-index access.) // // for by-index access.)
SMSListItem item = // SMSListItem item =
(SMSListItem)inflate( R.layout.smsinviter_item ); // (SMSListItem)inflate( R.layout.smsinviter_item );
item.setChecked( m_devIDRecs.get(position).m_isChecked ); // // item.setChecked( m_devIDRecs.get(position).m_isChecked );
CompoundButton.OnCheckedChangeListener lstnr = // CompoundButton.OnCheckedChangeListener lstnr =
new CompoundButton.OnCheckedChangeListener() { // new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged( CompoundButton bv, // public void onCheckedChanged( CompoundButton bv,
boolean isChecked ) { // boolean isChecked ) {
m_devIDRecs.get(position).m_isChecked = isChecked; // m_devIDRecs.get(position).m_isChecked = isChecked;
tryEnable(); // tryEnable();
} // }
}; // };
item.setOnCheckedChangeListener( lstnr ); // item.setOnCheckedChangeListener( lstnr );
final DevIDRec rec = m_devIDRecs.get( position ); // final DevIDRec rec = m_devIDRecs.get( position );
item.setContents( rec.m_opponent, rec.m_devID ); // item.setContents( rec.m_opponent, rec.m_devID );
m_items[position] = item; // m_items[position] = item;
// Set up spinner // // Set up spinner
Assert.assertTrue( 1 == rec.m_nPlayers ); // Assert.assertTrue( 1 == rec.m_nPlayers );
if ( XWPrefs.getCanInviteMulti( m_activity ) && 1 < m_nMissing ) { // if ( XWPrefs.getCanInviteMulti( m_activity ) && 1 < m_nMissing ) {
Spinner spinner = (Spinner) // Spinner spinner = (Spinner)
item.findViewById(R.id.nperdev_spinner); // item.findViewById(R.id.nperdev_spinner);
ArrayAdapter<String> adapter = // ArrayAdapter<String> adapter =
new ArrayAdapter<String>( m_activity, android.R.layout // new ArrayAdapter<String>( m_activity, android.R.layout
.simple_spinner_item ); // .simple_spinner_item );
for ( int ii = 1; ii <= m_nMissing; ++ii ) { // for ( int ii = 1; ii <= m_nMissing; ++ii ) {
String str = getQuantityString( R.plurals.nplayers_fmt, ii, ii ); // String str = getQuantityString( R.plurals.nplayers_fmt, ii, ii );
adapter.add( str ); // adapter.add( str );
} // }
spinner.setAdapter( adapter ); // spinner.setAdapter( adapter );
spinner.setVisibility( View.VISIBLE ); // spinner.setVisibility( View.VISIBLE );
spinner.setOnItemSelectedListener( new OnItemSelectedListener() { // spinner.setOnItemSelectedListener( new OnItemSelectedListener() {
public void onItemSelected( AdapterView<?> parent, // public void onItemSelected( AdapterView<?> parent,
View view, int pos, // View view, int pos,
long id ) // long id )
{ // {
rec.m_nPlayers = 1 + pos; // rec.m_nPlayers = 1 + pos;
tryEnable(); // tryEnable();
} // }
public void onNothingSelected( AdapterView<?> parent ) {} // public void onNothingSelected( AdapterView<?> parent ) {}
} ); // } );
} // }
return item; // return item;
} // }
public View getView( final int position, View convertView, // public View getView( final int position, View convertView,
ViewGroup parent ) { // ViewGroup parent ) {
return (View)getItem( position ); // return (View)getItem( position );
} // }
} // }
private class ListOpponentsTask extends AsyncTask<Void, Void, Set<String>> { private class ListOpponentsTask extends AsyncTask<Void, Void, Set<String>> {
private Context m_context; private Context m_context;
@ -554,10 +594,10 @@ public class RelayInviteDelegate extends InviteDelegate {
m_devIDRecs.add( rec ); m_devIDRecs.add( rec );
} }
m_adapter = new RelayDevsAdapter(); // m_adapter = new RelayDevsAdapter();
setListAdapter( m_adapter ); // setListAdapter( m_adapter );
// m_checked.clear(); // // m_checked.clear();
tryEnable(); // tryEnable();
} }
} }

View file

@ -28,17 +28,16 @@ import android.content.Intent;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract;
import android.text.method.DialerKeyListener; import android.text.method.DialerKeyListener;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.widget.Button;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.FrameLayout;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.TextView;
import junit.framework.Assert; import junit.framework.Assert;
@ -49,9 +48,16 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.Iterator; import java.util.Iterator;
import java.util.Set;
public class SMSInviteDelegate extends InviteDelegate { public class SMSInviteDelegate extends InviteDelegate
implements View.OnClickListener {
private static final String TAG = SMSInviteDelegate.class.getSimpleName(); private static final String TAG = SMSInviteDelegate.class.getSimpleName();
private static int[] BUTTONIDS = {
R.id.button_add,
R.id.manual_add_button,
R.id.button_clear,
};
private static final String SAVE_NAME = "SAVE_NAME"; private static final String SAVE_NAME = "SAVE_NAME";
private static final String SAVE_NUMBER = "SAVE_NUMBER"; private static final String SAVE_NUMBER = "SAVE_NUMBER";
@ -78,7 +84,7 @@ public class SMSInviteDelegate extends InviteDelegate {
public SMSInviteDelegate( Delegator delegator, Bundle savedInstanceState ) public SMSInviteDelegate( Delegator delegator, Bundle savedInstanceState )
{ {
super( delegator, savedInstanceState, R.layout.smsinviter ); super( delegator, savedInstanceState );
m_activity = delegator.getActivity(); m_activity = delegator.getActivity();
} }
@ -87,19 +93,11 @@ public class SMSInviteDelegate extends InviteDelegate {
String msg = getString( R.string.button_invite ); String msg = getString( R.string.button_invite );
msg = getQuantityString( R.plurals.invite_sms_desc_fmt, m_nMissing, msg = getQuantityString( R.plurals.invite_sms_desc_fmt, m_nMissing,
m_nMissing, msg ); m_nMissing, msg );
super.init( R.id.button_invite, R.id.button_add, R.id.button_clear, super.init( msg, R.string.empty_sms_inviter );
R.id.invite_desc, msg ); addButtonBar( R.layout.sms_buttons, BUTTONIDS );
getBundledData( savedInstanceState ); getBundledData( savedInstanceState );
m_addButton = (ImageButton)findViewById( R.id.manual_add_button );
m_addButton.setOnClickListener( new View.OnClickListener() {
public void onClick( View view )
{
showDialog( DlgID.GET_NUMBER );
}
} );
getSavedState(); getSavedState();
rebuildList( true ); rebuildList( true );
} }
@ -120,13 +118,34 @@ public class SMSInviteDelegate extends InviteDelegate {
} }
} }
@Override
protected void onBarButtonClicked( int id )
{
switch( id ) {
case R.id.button_add:
Intent intent = new Intent( Intent.ACTION_PICK,
ContactsContract.Contacts.CONTENT_URI );
intent.setType( Phone.CONTENT_TYPE );
startActivityForResult( intent, RequestCode.GET_CONTACT );
break;
case R.id.manual_add_button:
showDialog( DlgID.GET_NUMBER );
break;
case R.id.button_clear:
int count = getChecked().size();
String msg = getQuantityString( R.plurals.confirm_clear_sms_fmt,
count, count );
makeConfirmThenBuilder( msg, Action.CLEAR_ACTION ).show();
break;
}
}
@Override @Override
protected void onActivityResult( RequestCode requestCode, int resultCode, protected void onActivityResult( RequestCode requestCode, int resultCode,
Intent data ) Intent data )
{ {
// super.onActivityResult( requestCode, resultCode, data );
if ( Activity.RESULT_CANCELED != resultCode && data != null ) { if ( Activity.RESULT_CANCELED != resultCode && data != null ) {
switch (requestCode) { switch ( requestCode ) {
case GET_CONTACT: case GET_CONTACT:
addPhoneNumbers( data ); addPhoneNumbers( data );
break; break;
@ -134,6 +153,7 @@ public class SMSInviteDelegate extends InviteDelegate {
} }
} }
@Override
protected Dialog onCreateDialog( int id ) protected Dialog onCreateDialog( int id )
{ {
Dialog dialog = super.onCreateDialog( id ); Dialog dialog = super.onCreateDialog( id );
@ -171,63 +191,24 @@ public class SMSInviteDelegate extends InviteDelegate {
return dialog; return dialog;
} }
protected void scan()
{
Intent intent = new Intent( Intent.ACTION_PICK,
ContactsContract.Contacts.CONTENT_URI );
intent.setType( Phone.CONTENT_TYPE );
startActivityForResult( intent, RequestCode.GET_CONTACT );
}
@Override @Override
protected void clearSelected( Integer[] checked ) protected void listSelected( InviterItem[] selected, String[] devs,
int[] counts )
{ {
int count = checked.length; for ( int ii = 0; ii < selected.length; ++ii ) {
String msg = getQuantityString( R.plurals.confirm_clear_sms_fmt, PhoneRec rec = (PhoneRec)selected[ii];
count, count ); counts[ii] = rec.m_nPlayers;
makeConfirmThenBuilder( msg, Action.CLEAR_ACTION ).show(); devs[ii] = rec.m_phone;
}
protected void listSelected( String[][] devsP, int[][] countsP )
{
XWListAdapter adapter = getAdapter();
int count = adapter.getCount();
String[] result = new String[countChecks()];
int[] counts = new int[result.length];
int index = 0;
Iterator<PhoneRec> iter = m_phoneRecs.iterator();
for ( int ii = 0; iter.hasNext(); ++ii ) {
PhoneRec rec = iter.next();
if ( rec.m_isChecked ) {
counts[index] = rec.m_nPlayers;
result[index] = ((SMSListItem)adapter.getItem(ii)).getNumber();
index++;
}
}
devsP[0] = result;
if ( null != countsP ) {
countsP[0] = counts;
} }
} }
@Override @Override
protected void tryEnable() protected void onChildAdded( View child, InviterItem data )
{ {
if ( null != m_phoneRecs ) { SMSListItem item = (SMSListItem)child;
int nPlayers = 0; PhoneRec rec = (PhoneRec)data;
int nDevs = 0; ((TextView)item.findViewById(R.id.name)).setText( rec.m_name );
Iterator<PhoneRec> iter = m_phoneRecs.iterator(); ((TextView)item.findViewById(R.id.number)).setText( rec.m_phone );
while ( iter.hasNext() ) {
PhoneRec rec = iter.next();
if ( rec.m_isChecked ) {
++nDevs;
nPlayers += rec.m_nPlayers;
}
}
m_inviteButton.setEnabled( 0 < nPlayers && nPlayers <= m_nMissing );
m_clearButton.setEnabled( 0 < nDevs );
}
} }
// DlgDelegate.DlgClickNotify interface // DlgDelegate.DlgClickNotify interface
@ -324,15 +305,16 @@ public class SMSInviteDelegate extends InviteDelegate {
return rec1.m_name.compareTo(rec2.m_name); return rec1.m_name.compareTo(rec2.m_name);
} }
}); });
String[] phones = new String[m_phoneRecs.size()]; // String[] phones = new String[m_phoneRecs.size()];
String[] names = new String[m_phoneRecs.size()]; // String[] names = new String[m_phoneRecs.size()];
for ( int ii = 0; ii < m_phoneRecs.size(); ++ii ) { // for ( int ii = 0; ii < m_phoneRecs.size(); ++ii ) {
PhoneRec rec = m_phoneRecs.get( ii ); // PhoneRec rec = m_phoneRecs.get( ii );
phones[ii] = rec.m_phone; // phones[ii] = rec.m_phone;
names[ii] = rec.m_name; // names[ii] = rec.m_name;
} // }
updateListAdapter( R.layout.smsinviter_item, phones, names, true ); updateListAdapter( R.layout.smsinviter_item,
m_phoneRecs.toArray( new PhoneRec[m_phoneRecs.size()] ) );
tryEnable(); tryEnable();
} }
@ -376,17 +358,17 @@ public class SMSInviteDelegate extends InviteDelegate {
private void clearSelectedImpl() private void clearSelectedImpl()
{ {
XWListAdapter adapter = getAdapter(); Set<Integer> checked = getChecked();
int count = adapter.getCount(); for ( int ii = m_phoneRecs.size() - 1; ii >= 0; --ii ) {
for ( int ii = count - 1; ii >= 0; --ii ) { if ( checked.contains( ii ) ) {
if ( m_phoneRecs.get( ii ).m_isChecked ) {
m_phoneRecs.remove( ii ); m_phoneRecs.remove( ii );
} }
} }
clearChecked();
saveAndRebuild(); saveAndRebuild();
} }
private class PhoneRec { private class PhoneRec implements InviterItem {
public String m_phone; public String m_phone;
public String m_name; public String m_name;
public boolean m_isChecked; public boolean m_isChecked;

View file

@ -43,11 +43,11 @@ public class SMSListItem extends LinearLayout {
tv.setText( number ); tv.setText( number );
} }
public void setOnCheckedChangeListener( OnCheckedChangeListener lstnr ) // public void setOnCheckedChangeListener( OnCheckedChangeListener lstnr )
{ // {
CheckBox cb = (CheckBox)findViewById( R.id.checkbox ); // CheckBox cb = (CheckBox)findViewById( R.id.checkbox );
cb.setOnCheckedChangeListener( lstnr ); // cb.setOnCheckedChangeListener( lstnr );
} // }
public String getNumber() public String getNumber()
{ {
@ -55,15 +55,15 @@ public class SMSListItem extends LinearLayout {
return tv.getText().toString(); return tv.getText().toString();
} }
public void setChecked( boolean checked ) // public void setChecked( boolean checked )
{ // {
CheckBox cb = (CheckBox)findViewById( R.id.checkbox ); // CheckBox cb = (CheckBox)findViewById( R.id.checkbox );
cb.setChecked( checked ); // cb.setChecked( checked );
} // }
public boolean isChecked() // public boolean isChecked()
{ // {
CheckBox cb = (CheckBox)findViewById( R.id.checkbox ); // CheckBox cb = (CheckBox)findViewById( R.id.checkbox );
return cb.isChecked(); // return cb.isChecked();
} // }
} }

View file

@ -47,7 +47,7 @@ public class WiDirInviteDelegate extends InviteDelegate
public WiDirInviteDelegate( Delegator delegator, Bundle savedInstanceState ) public WiDirInviteDelegate( Delegator delegator, Bundle savedInstanceState )
{ {
super( delegator, savedInstanceState, R.layout.inviter ); super( delegator, savedInstanceState );
m_activity = delegator.getActivity(); m_activity = delegator.getActivity();
} }
@ -58,9 +58,7 @@ public class WiDirInviteDelegate extends InviteDelegate
msg = getQuantityString( R.plurals.invite_p2p_desc_fmt, m_nMissing, msg = getQuantityString( R.plurals.invite_p2p_desc_fmt, m_nMissing,
m_nMissing, msg ); m_nMissing, msg );
msg += "\n\n" + getString( R.string.invite_p2p_desc_extra ); msg += "\n\n" + getString( R.string.invite_p2p_desc_extra );
super.init( R.id.button_invite, R.id.invite_desc, msg ); super.init( msg, R.string.empty_p2p_inviter );
findViewById( R.id.button_rescan ).setVisibility( View.GONE );
findViewById( R.id.button_clear ).setVisibility( View.GONE );
} }
@Override @Override
@ -77,6 +75,19 @@ public class WiDirInviteDelegate extends InviteDelegate
WiDirService.unregisterDevSetListener( this ); WiDirService.unregisterDevSetListener( this );
} }
@Override
protected void onChildAdded( View child, InviterItem data )
{
Assert.fail();
}
@Override
protected void listSelected( InviterItem[] selected, String[] devsP,
int[] countsP )
{
Assert.fail();
}
// DevSetListener interface // DevSetListener interface
public void setChanged( Map<String, String> macToName ) public void setChanged( Map<String, String> macToName )
{ {
@ -92,15 +103,17 @@ public class WiDirInviteDelegate extends InviteDelegate
private void rebuildList() private void rebuildList()
{ {
int count = m_macsToName.size(); int count = m_macsToName.size();
String[] names = new String[count]; TwoStringPair[] pairs = new TwoStringPair[count];
String[] addrs = new String[count]; // String[] names = new String[count];
// String[] addrs = new String[count];
Iterator<String> iter = m_macsToName.keySet().iterator(); Iterator<String> iter = m_macsToName.keySet().iterator();
for ( int ii = 0; ii < count; ++ii ) { for ( int ii = 0; ii < count; ++ii ) {
String mac = iter.next(); String mac = iter.next();
addrs[ii] = mac; pairs[ii] = new TwoStringPair(mac, m_macsToName.get(mac) );
names[ii] = m_macsToName.get(mac); // addrs[ii] = mac;
// names[ii] = m_macsToName.get(mac);
} }
updateListAdapter( R.layout.inviter_item, names, addrs, false ); updateListAdapter( R.layout.inviter_item, pairs );
} }
} }