49 import android.widget.ImageView; |
49 import android.widget.ImageView; |
50 import android.widget.Spinner; |
50 import android.widget.Spinner; |
51 import android.widget.Toast; |
51 import android.widget.Toast; |
52 |
52 |
53 public class SettingsFragment extends Fragment { |
53 public class SettingsFragment extends Fragment { |
54 private Spinner styleSpinner, schemeSpinner, weaponsetSpinner, themeSpinner; |
54 private Spinner styleSpinner, schemeSpinner, weaponsetSpinner, themeSpinner; |
55 private ImageView themeIcon; |
55 private ImageView themeIcon; |
56 |
56 |
57 private List<String> styles; |
57 private List<String> styles; |
58 private List<Scheme> schemes; |
58 private List<Scheme> schemes; |
59 private List<Weaponset> weaponsets; |
59 private List<Weaponset> weaponsets; |
60 private List<String> themes; |
60 private List<String> themes; |
61 |
61 |
62 private RoomStateManager stateManager; |
62 private RoomStateManager stateManager; |
63 |
63 |
64 @Override |
64 @Override |
65 public View onCreateView(LayoutInflater inflater, ViewGroup container, |
65 public View onCreateView(LayoutInflater inflater, ViewGroup container, |
66 Bundle savedInstanceState) { |
66 Bundle savedInstanceState) { |
67 View v = inflater.inflate(R.layout.fragment_settings, container, false); |
67 View v = inflater.inflate(R.layout.fragment_settings, container, false); |
68 themeIcon = (ImageView)v.findViewById(R.id.imgTheme); |
68 themeIcon = (ImageView)v.findViewById(R.id.imgTheme); |
69 |
69 |
70 try { |
70 try { |
71 styles = FrontendDataUtils.getGameStyles(getActivity()); |
71 styles = FrontendDataUtils.getGameStyles(getActivity()); |
72 schemes = Schemes.loadAllSchemes(getActivity()); |
72 schemes = Schemes.loadAllSchemes(getActivity()); |
73 weaponsets = Weaponsets.loadAllWeaponsets(getActivity()); |
73 weaponsets = Weaponsets.loadAllWeaponsets(getActivity()); |
74 themes = FrontendDataUtils.getThemes(getActivity()); |
74 themes = FrontendDataUtils.getThemes(getActivity()); |
75 } catch (IOException e) { |
75 } catch (IOException e) { |
76 Toast.makeText(getActivity().getApplicationContext(), R.string.error_missing_sdcard_or_files, Toast.LENGTH_LONG).show(); |
76 Toast.makeText(getActivity().getApplicationContext(), R.string.error_missing_sdcard_or_files, Toast.LENGTH_LONG).show(); |
77 getActivity().finish(); |
77 getActivity().finish(); |
78 return null; |
78 return null; |
79 } |
79 } |
80 |
80 |
81 Collections.sort(styles, String.CASE_INSENSITIVE_ORDER); |
81 Collections.sort(styles, String.CASE_INSENSITIVE_ORDER); |
82 Collections.sort(schemes, Scheme.NAME_ORDER); |
82 Collections.sort(schemes, Scheme.NAME_ORDER); |
83 Collections.sort(weaponsets, Weaponset.NAME_ORDER); |
83 Collections.sort(weaponsets, Weaponset.NAME_ORDER); |
84 Collections.sort(themes, String.CASE_INSENSITIVE_ORDER); |
84 Collections.sort(themes, String.CASE_INSENSITIVE_ORDER); |
85 |
85 |
86 styleSpinner = prepareSpinner(v, R.id.spinGameplay, styles, styleSelectedListener); |
86 styleSpinner = prepareSpinner(v, R.id.spinGameplay, styles, styleSelectedListener); |
87 schemeSpinner = prepareSpinner(v, R.id.spinGamescheme, Schemes.toNameList(schemes), schemeSelectedListener); |
87 schemeSpinner = prepareSpinner(v, R.id.spinGamescheme, Schemes.toNameList(schemes), schemeSelectedListener); |
88 weaponsetSpinner = prepareSpinner(v, R.id.spinweapons, Weaponsets.toNameList(weaponsets), weaponsetSelectedListener); |
88 weaponsetSpinner = prepareSpinner(v, R.id.spinweapons, Weaponsets.toNameList(weaponsets), weaponsetSelectedListener); |
89 themeSpinner = prepareSpinner(v, R.id.spinTheme, themes, themeSelectedListener); |
89 themeSpinner = prepareSpinner(v, R.id.spinTheme, themes, themeSelectedListener); |
90 |
90 |
91 stateManager.addListener(roomStateChangeListener); |
91 stateManager.addListener(roomStateChangeListener); |
92 |
92 |
93 if(stateManager.getGameStyle() != null) { |
93 if(stateManager.getGameStyle() != null) { |
94 styleSpinner.setSelection(styles.indexOf(stateManager.getGameStyle()), false); |
94 styleSpinner.setSelection(styles.indexOf(stateManager.getGameStyle()), false); |
95 } |
95 } |
96 if(stateManager.getScheme() != null) { |
96 if(stateManager.getScheme() != null) { |
97 schemeSpinner.setSelection(getSchemePosition(schemes, stateManager.getScheme().name), false); |
97 schemeSpinner.setSelection(getSchemePosition(schemes, stateManager.getScheme().name), false); |
98 } |
98 } |
99 if(stateManager.getWeaponset() != null) { |
99 if(stateManager.getWeaponset() != null) { |
100 weaponsetSpinner.setSelection(getWeaponsetPosition(weaponsets, stateManager.getWeaponset().name), false); |
100 weaponsetSpinner.setSelection(getWeaponsetPosition(weaponsets, stateManager.getWeaponset().name), false); |
101 } |
101 } |
102 if(stateManager.getMapRecipe() != null) { |
102 if(stateManager.getMapRecipe() != null) { |
103 themeSpinner.setSelection(themes.indexOf(stateManager.getMapRecipe().theme), false); |
103 themeSpinner.setSelection(themes.indexOf(stateManager.getMapRecipe().theme), false); |
104 } |
104 } |
105 |
105 |
106 setChiefState(stateManager.getChiefStatus()); |
106 setChiefState(stateManager.getChiefStatus()); |
107 |
107 |
108 return v; |
108 return v; |
109 } |
109 } |
110 |
110 |
111 private static Spinner prepareSpinner(View v, int id, List<String> items, OnItemSelectedListener itemSelectedListener) { |
111 private static Spinner prepareSpinner(View v, int id, List<String> items, OnItemSelectedListener itemSelectedListener) { |
112 Spinner spinner = (Spinner)v.findViewById(id); |
112 Spinner spinner = (Spinner)v.findViewById(id); |
113 ArrayAdapter<String> adapter = new ArrayAdapter<String>(v.getContext(), R.layout.listview_item, items); |
113 ArrayAdapter<String> adapter = new ArrayAdapter<String>(v.getContext(), R.layout.listview_item, items); |
114 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); |
114 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); |
115 spinner.setAdapter(adapter); |
115 spinner.setAdapter(adapter); |
116 spinner.setOnItemSelectedListener(itemSelectedListener); |
116 spinner.setOnItemSelectedListener(itemSelectedListener); |
117 return spinner; |
117 return spinner; |
118 } |
118 } |
119 |
119 |
120 @Override |
120 @Override |
121 public void onCreate(Bundle savedInstanceState) { |
121 public void onCreate(Bundle savedInstanceState) { |
122 super.onCreate(savedInstanceState); |
122 super.onCreate(savedInstanceState); |
123 try { |
123 try { |
124 stateManager = ((RoomStateManager.Provider)getActivity()).getRoomStateManager(); |
124 stateManager = ((RoomStateManager.Provider)getActivity()).getRoomStateManager(); |
125 } catch(ClassCastException e) { |
125 } catch(ClassCastException e) { |
126 throw new RuntimeException("Hosting activity must implement RoomStateManager.Provider.", e); |
126 throw new RuntimeException("Hosting activity must implement RoomStateManager.Provider.", e); |
127 } |
127 } |
128 } |
128 } |
129 |
129 |
130 @Override |
130 @Override |
131 public void onDestroy() { |
131 public void onDestroy() { |
132 super.onDestroy(); |
132 super.onDestroy(); |
133 stateManager.removeListener(roomStateChangeListener); |
133 stateManager.removeListener(roomStateChangeListener); |
134 } |
134 } |
135 |
135 |
136 private static int getSchemePosition(List<Scheme> schemes, String scheme) { |
136 private static int getSchemePosition(List<Scheme> schemes, String scheme) { |
137 for(int i=0; i<schemes.size(); i++) { |
137 for(int i=0; i<schemes.size(); i++) { |
138 if(schemes.get(i).name.equals(scheme)) { |
138 if(schemes.get(i).name.equals(scheme)) { |
139 return i; |
139 return i; |
140 } |
140 } |
141 } |
141 } |
142 return -1; |
142 return -1; |
143 } |
143 } |
144 |
144 |
145 private static int getWeaponsetPosition(List<Weaponset> weaponsets, String weaponset) { |
145 private static int getWeaponsetPosition(List<Weaponset> weaponsets, String weaponset) { |
146 for(int i=0; i<weaponsets.size(); i++) { |
146 for(int i=0; i<weaponsets.size(); i++) { |
147 if(weaponsets.get(i).name.equals(weaponset)) { |
147 if(weaponsets.get(i).name.equals(weaponset)) { |
148 return i; |
148 return i; |
149 } |
149 } |
150 } |
150 } |
151 return -1; |
151 return -1; |
152 } |
152 } |
153 |
153 |
154 private void setChiefState(boolean chiefState) { |
154 private void setChiefState(boolean chiefState) { |
155 styleSpinner.setEnabled(chiefState); |
155 styleSpinner.setEnabled(chiefState); |
156 schemeSpinner.setEnabled(chiefState); |
156 schemeSpinner.setEnabled(chiefState); |
157 weaponsetSpinner.setEnabled(chiefState); |
157 weaponsetSpinner.setEnabled(chiefState); |
158 themeSpinner.setEnabled(chiefState); |
158 themeSpinner.setEnabled(chiefState); |
159 |
159 |
160 if(chiefState) { |
160 if(chiefState) { |
161 stateManager.changeGameStyle(styles.get(styleSpinner.getSelectedItemPosition())); |
161 stateManager.changeGameStyle(styles.get(styleSpinner.getSelectedItemPosition())); |
162 stateManager.changeScheme(schemes.get(schemeSpinner.getSelectedItemPosition())); |
162 stateManager.changeScheme(schemes.get(schemeSpinner.getSelectedItemPosition())); |
163 stateManager.changeWeaponset(weaponsets.get(weaponsetSpinner.getSelectedItemPosition())); |
163 stateManager.changeWeaponset(weaponsets.get(weaponsetSpinner.getSelectedItemPosition())); |
164 stateManager.changeMapTheme(themes.get(themeSpinner.getSelectedItemPosition())); |
164 stateManager.changeMapTheme(themes.get(themeSpinner.getSelectedItemPosition())); |
165 } |
165 } |
166 } |
166 } |
167 |
167 |
168 private final OnItemSelectedListener styleSelectedListener = new OnItemSelectedListener() { |
168 private final OnItemSelectedListener styleSelectedListener = new OnItemSelectedListener() { |
169 public void onItemSelected(AdapterView<?> adapter, View v, int position, long arg3) { |
169 public void onItemSelected(AdapterView<?> adapter, View v, int position, long arg3) { |
170 stateManager.changeGameStyle(styles.get(position)); |
170 stateManager.changeGameStyle(styles.get(position)); |
171 } |
171 } |
172 public void onNothingSelected(AdapterView<?> arg0) {} |
172 public void onNothingSelected(AdapterView<?> arg0) {} |
173 }; |
173 }; |
174 |
174 |
175 private final OnItemSelectedListener schemeSelectedListener = new OnItemSelectedListener() { |
175 private final OnItemSelectedListener schemeSelectedListener = new OnItemSelectedListener() { |
176 public void onItemSelected(AdapterView<?> adapter, View v, int position, long arg3) { |
176 public void onItemSelected(AdapterView<?> adapter, View v, int position, long arg3) { |
177 stateManager.changeScheme(schemes.get(position)); |
177 stateManager.changeScheme(schemes.get(position)); |
178 } |
178 } |
179 public void onNothingSelected(AdapterView<?> arg0) {} |
179 public void onNothingSelected(AdapterView<?> arg0) {} |
180 }; |
180 }; |
181 |
181 |
182 private final OnItemSelectedListener weaponsetSelectedListener = new OnItemSelectedListener() { |
182 private final OnItemSelectedListener weaponsetSelectedListener = new OnItemSelectedListener() { |
183 public void onItemSelected(AdapterView<?> adapter, View v, int position, long arg3) { |
183 public void onItemSelected(AdapterView<?> adapter, View v, int position, long arg3) { |
184 stateManager.changeWeaponset(weaponsets.get(position)); |
184 stateManager.changeWeaponset(weaponsets.get(position)); |
185 } |
185 } |
186 public void onNothingSelected(AdapterView<?> arg0) {} |
186 public void onNothingSelected(AdapterView<?> arg0) {} |
187 }; |
187 }; |
188 |
188 |
189 private final OnItemSelectedListener themeSelectedListener = new OnItemSelectedListener() { |
189 private final OnItemSelectedListener themeSelectedListener = new OnItemSelectedListener() { |
190 public void onItemSelected(AdapterView<?> adapter, View v, int position, long arg3) { |
190 public void onItemSelected(AdapterView<?> adapter, View v, int position, long arg3) { |
191 stateManager.changeMapTheme(themes.get(position)); |
191 stateManager.changeMapTheme(themes.get(position)); |
192 String theme = themes.get(position); |
192 String theme = themes.get(position); |
193 try { |
193 try { |
194 File iconFile = FileUtils.getDataPathFile(getActivity(), "Themes", theme, "icon@2X.png"); |
194 File iconFile = FileUtils.getDataPathFile(getActivity(), "Themes", theme, "icon@2X.png"); |
195 Drawable themeIconDrawable = Drawable.createFromPath(iconFile.getAbsolutePath()); |
195 Drawable themeIconDrawable = Drawable.createFromPath(iconFile.getAbsolutePath()); |
196 themeIcon.setImageDrawable(themeIconDrawable); |
196 themeIcon.setImageDrawable(themeIconDrawable); |
197 } catch (FileNotFoundException e) { |
197 } catch (FileNotFoundException e) { |
198 Log.e("SettingsFragment", "Unable to find preview for theme "+theme, e); |
198 Log.e("SettingsFragment", "Unable to find preview for theme "+theme, e); |
199 } |
199 } |
200 }; |
200 }; |
201 public void onNothingSelected(AdapterView<?> arg0) {}; |
201 public void onNothingSelected(AdapterView<?> arg0) {}; |
202 }; |
202 }; |
203 |
203 |
204 private final RoomStateManager.Listener roomStateChangeListener = new RoomStateManager.Listener() { |
204 private final RoomStateManager.Listener roomStateChangeListener = new RoomStateManager.Listener() { |
205 public void onWeaponsetChanged(Weaponset weaponset) { |
205 public void onWeaponsetChanged(Weaponset weaponset) { |
206 weaponsetSpinner.setSelection(getWeaponsetPosition(weaponsets, weaponset.name)); |
206 weaponsetSpinner.setSelection(getWeaponsetPosition(weaponsets, weaponset.name)); |
207 } |
207 } |
208 |
208 |
209 public void onTeamsChanged(Map<String, TeamInGame> teams) {} |
209 public void onTeamsChanged(Map<String, TeamInGame> teams) {} |
210 |
210 |
211 public void onSchemeChanged(Scheme scheme) { |
211 public void onSchemeChanged(Scheme scheme) { |
212 schemeSpinner.setSelection(getSchemePosition(schemes, scheme.name)); |
212 schemeSpinner.setSelection(getSchemePosition(schemes, scheme.name)); |
213 } |
213 } |
214 |
214 |
215 public void onMapChanged(MapRecipe recipe) { |
215 public void onMapChanged(MapRecipe recipe) { |
216 themeSpinner.setSelection(themes.indexOf(recipe.theme)); |
216 themeSpinner.setSelection(themes.indexOf(recipe.theme)); |
217 } |
217 } |
218 |
218 |
219 public void onGameStyleChanged(String gameStyle) { |
219 public void onGameStyleChanged(String gameStyle) { |
220 styleSpinner.setSelection(styles.indexOf(gameStyle)); |
220 styleSpinner.setSelection(styles.indexOf(gameStyle)); |
221 } |
221 } |
222 |
222 |
223 public void onChiefStatusChanged(boolean isChief) { |
223 public void onChiefStatusChanged(boolean isChief) { |
224 setChiefState(isChief); |
224 setChiefState(isChief); |
225 } |
225 } |
226 }; |
226 }; |
227 } |
227 } |