1 package org.hedgewars.hedgeroid.netplay; |
1 package org.hedgewars.hedgeroid.netplay; |
2 |
2 |
3 import org.hedgewars.hedgeroid.R; |
3 import org.hedgewars.hedgeroid.R; |
4 import org.hedgewars.hedgeroid.netplay.NetplayService.NetplayBinder; |
|
5 |
4 |
6 import android.content.ComponentName; |
|
7 import android.content.Context; |
|
8 import android.content.Intent; |
|
9 import android.content.ServiceConnection; |
|
10 import android.os.Bundle; |
5 import android.os.Bundle; |
11 import android.os.CountDownTimer; |
6 import android.os.CountDownTimer; |
12 import android.os.IBinder; |
|
13 import android.support.v4.app.ListFragment; |
7 import android.support.v4.app.ListFragment; |
14 import android.view.LayoutInflater; |
8 import android.view.LayoutInflater; |
15 import android.view.Menu; |
9 import android.view.Menu; |
16 import android.view.MenuInflater; |
10 import android.view.MenuInflater; |
17 import android.view.MenuItem; |
11 import android.view.MenuItem; |
18 import android.view.View; |
12 import android.view.View; |
19 import android.view.ViewGroup; |
13 import android.view.ViewGroup; |
|
14 import android.widget.AdapterView; |
20 import android.widget.AdapterView.OnItemClickListener; |
15 import android.widget.AdapterView.OnItemClickListener; |
21 import android.widget.AdapterView; |
|
22 import android.widget.Toast; |
16 import android.widget.Toast; |
23 |
17 |
24 public class RoomlistFragment extends ListFragment implements OnItemClickListener { |
18 public class RoomlistFragment extends ListFragment implements OnItemClickListener { |
25 private static final int AUTO_REFRESH_INTERVAL_MS = 15000; |
19 private static final int AUTO_REFRESH_INTERVAL_MS = 15000; |
26 |
20 |
27 private NetplayService service; |
21 private Netplay netconn; |
28 private RoomListAdapter adapter; |
22 private RoomListAdapter adapter; |
29 private CountDownTimer autoRefreshTimer = new CountDownTimer(Long.MAX_VALUE, AUTO_REFRESH_INTERVAL_MS) { |
23 private CountDownTimer autoRefreshTimer = new CountDownTimer(Long.MAX_VALUE, AUTO_REFRESH_INTERVAL_MS) { |
30 @Override |
24 @Override |
31 public void onTick(long millisUntilFinished) { |
25 public void onTick(long millisUntilFinished) { |
32 if(service != null && service.isConnected()) { |
26 netconn.sendRoomlistRequest(); |
33 service.sendRoomlistRequest(); |
|
34 } |
|
35 } |
27 } |
36 |
28 |
37 @Override |
29 @Override |
38 public void onFinish() { } |
30 public void onFinish() { } |
39 }; |
31 }; |
40 |
32 |
41 @Override |
33 @Override |
42 public void onCreate(Bundle savedInstanceState) { |
34 public void onCreate(Bundle savedInstanceState) { |
43 super.onCreate(savedInstanceState); |
35 super.onCreate(savedInstanceState); |
44 getActivity().bindService(new Intent(getActivity(), NetplayService.class), serviceConnection, |
36 netconn = Netplay.getAppInstance(getActivity().getApplicationContext()); |
45 Context.BIND_AUTO_CREATE); |
|
46 adapter = new RoomListAdapter(getActivity()); |
37 adapter = new RoomListAdapter(getActivity()); |
|
38 adapter.setList(netconn.roomList); |
47 setListAdapter(adapter); |
39 setListAdapter(adapter); |
48 setHasOptionsMenu(true); |
40 setHasOptionsMenu(true); |
49 } |
41 } |
50 |
42 |
51 @Override |
43 @Override |
52 public View onCreateView(LayoutInflater inflater, ViewGroup container, |
44 public View onCreateView(LayoutInflater inflater, ViewGroup container, |
53 Bundle savedInstanceState) { |
45 Bundle savedInstanceState) { |
54 View v = inflater.inflate(R.layout.lobby_rooms_fragment, container, false); |
46 return inflater.inflate(R.layout.lobby_rooms_fragment, container, false); |
55 return v; |
|
56 } |
47 } |
57 |
48 |
58 @Override |
49 @Override |
59 public void onActivityCreated(Bundle savedInstanceState) { |
50 public void onActivityCreated(Bundle savedInstanceState) { |
60 super.onActivityCreated(savedInstanceState); |
51 super.onActivityCreated(savedInstanceState); |
90 |
78 |
91 @Override |
79 @Override |
92 public boolean onOptionsItemSelected(MenuItem item) { |
80 public boolean onOptionsItemSelected(MenuItem item) { |
93 switch(item.getItemId()) { |
81 switch(item.getItemId()) { |
94 case R.id.roomlist_refresh: |
82 case R.id.roomlist_refresh: |
95 if(service != null && service.isConnected()) { |
83 netconn.sendRoomlistRequest(); |
96 service.sendRoomlistRequest(); |
|
97 } |
|
98 return true; |
84 return true; |
99 default: |
85 default: |
100 return super.onOptionsItemSelected(item); |
86 return super.onOptionsItemSelected(item); |
101 } |
87 } |
102 } |
88 } |
103 |
89 |
104 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { |
90 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { |
105 Toast.makeText(getActivity(), R.string.not_implemented_yet, Toast.LENGTH_SHORT).show(); |
91 Toast.makeText(getActivity(), R.string.not_implemented_yet, Toast.LENGTH_SHORT).show(); |
106 } |
92 } |
107 |
|
108 private ServiceConnection serviceConnection = new ServiceConnection() { |
|
109 public void onServiceConnected(ComponentName className, IBinder binder) { |
|
110 service = ((NetplayBinder) binder).getService(); |
|
111 adapter.setList(service.roomList); |
|
112 autoRefreshTimer.start(); |
|
113 } |
|
114 |
|
115 public void onServiceDisconnected(ComponentName className) { |
|
116 // TODO navigate away |
|
117 adapter.invalidate(); |
|
118 service = null; |
|
119 } |
|
120 }; |
|
121 } |
93 } |