project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/MapFragment.java
changeset 10017 de822cd3df3a
parent 7584 7831c84cc644
--- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/MapFragment.java	Tue Jan 21 22:38:13 2014 +0100
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/MapFragment.java	Tue Jan 21 22:43:06 2014 +0100
@@ -50,225 +50,225 @@
 
 /**
  * Display a map preview, and configuration options for the map.
- * 
+ *
  * Mostly for layout reasons, this does not include the theme setting, which
  * (arguably) is more a map setting than a general game setting.
  */
 public class MapFragment extends Fragment {
-	private Spinner mapTypeSpinner, mapNameSpinner, templateSpinner, mazeSizeSpinner;
-	private TableRow nameRow, templateRow, mazeSizeRow;
-	private ImageView mapPreview;
-	
-	private List<MapFile> mapFiles;
-	private RoomStateManager stateManager;
-	private Random random = new Random();
-	private CalmDownHandler mapPreviewHandler;
-	
-	/*
-	 * Rendering the preview can take a few seconds on Android, so we want to prevent preview
-	 * requests from queueing up if maps are changed quickly. So if there is already a preview
-	 * being generated, we store our latest request in the newPreviewRequest variable instead.
-	 * Once the current preview is finished generating it will start on that one.
-	 */
-	private boolean previewGenerationInProgress;
-	private MapRecipe newPreviewRequest;
-	private MapRecipe currentMap; // kept for reference on every change to find out what changed
-	
-	@Override
-	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
-		View v = inflater.inflate(R.layout.fragment_map, container, false);
-		final Context appContext = getActivity().getApplicationContext();
+    private Spinner mapTypeSpinner, mapNameSpinner, templateSpinner, mazeSizeSpinner;
+    private TableRow nameRow, templateRow, mazeSizeRow;
+    private ImageView mapPreview;
+
+    private List<MapFile> mapFiles;
+    private RoomStateManager stateManager;
+    private Random random = new Random();
+    private CalmDownHandler mapPreviewHandler;
+
+    /*
+     * Rendering the preview can take a few seconds on Android, so we want to prevent preview
+     * requests from queueing up if maps are changed quickly. So if there is already a preview
+     * being generated, we store our latest request in the newPreviewRequest variable instead.
+     * Once the current preview is finished generating it will start on that one.
+     */
+    private boolean previewGenerationInProgress;
+    private MapRecipe newPreviewRequest;
+    private MapRecipe currentMap; // kept for reference on every change to find out what changed
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+        View v = inflater.inflate(R.layout.fragment_map, container, false);
+        final Context appContext = getActivity().getApplicationContext();
+
+        /*
+         * This handler will start the map preview after none of the map settings
+         * have been updated for a short time.
+         */
+        mapPreviewHandler = new CalmDownHandler(getActivity().getMainLooper(), new Runnable() {
+            public void run() {
+                if(!previewGenerationInProgress) {
+                    mapPreview.setImageResource(R.drawable.roomlist_preparing);
+                    MapPreviewGenerator.startPreviewGeneration(appContext, stateManager.getMapRecipe(), mapPreviewListener);
+                    previewGenerationInProgress = true;
+                } else {
+                    newPreviewRequest = stateManager.getMapRecipe();
+                }
+            }
+        }, 250);
+
+        nameRow = (TableRow) v.findViewById(R.id.rowMapName);
+        templateRow = (TableRow) v.findViewById(R.id.rowTemplateFilter);
+        mazeSizeRow = (TableRow) v.findViewById(R.id.rowMazeSize);
+        mapPreview = (ImageView) v.findViewById(R.id.mapPreview);
+        mapPreview.setImageDrawable(null);;
+        mapPreview.setOnClickListener(mapClickListener);
 
-		/*
-		 * This handler will start the map preview after none of the map settings
-		 * have been updated for a short time.
-		 */
-		mapPreviewHandler = new CalmDownHandler(getActivity().getMainLooper(), new Runnable() {
-			public void run() {
-				if(!previewGenerationInProgress) {
-					mapPreview.setImageResource(R.drawable.roomlist_preparing);
-					MapPreviewGenerator.startPreviewGeneration(appContext, stateManager.getMapRecipe(), mapPreviewListener);
-					previewGenerationInProgress = true;
-				} else {
-					newPreviewRequest = stateManager.getMapRecipe();
-				}
-			}
-		}, 250);
-		
-		nameRow = (TableRow) v.findViewById(R.id.rowMapName);
-		templateRow = (TableRow) v.findViewById(R.id.rowTemplateFilter);
-		mazeSizeRow = (TableRow) v.findViewById(R.id.rowMazeSize);
-		mapPreview = (ImageView) v.findViewById(R.id.mapPreview);
-		mapPreview.setImageDrawable(null);;
-		mapPreview.setOnClickListener(mapClickListener);
-		
-		try {
-			mapFiles = FrontendDataUtils.getMaps(getActivity());
-		} catch (IOException e) {
-			Toast.makeText(getActivity().getApplicationContext(), R.string.error_missing_sdcard_or_files, Toast.LENGTH_LONG).show();
-			getActivity().finish();
-			return null;
-		}
-		Collections.sort(mapFiles, MapFile.MISSIONS_FIRST_NAME_ORDER);
-		
-		List<String> mapNames = MapFile.toDisplayNameList(mapFiles, getResources());
-		mapTypeSpinner = prepareSpinner(v, R.id.spinMapType, Arrays.asList(getResources().getStringArray(R.array.map_types)), mapTypeSelectedListener);
-		mapNameSpinner = prepareSpinner(v, R.id.spinMapName, mapNames, mapNameSelectedListener);
-		templateSpinner = prepareSpinner(v, R.id.spinTemplateFilter, Arrays.asList(getResources().getStringArray(R.array.map_templates)), mapTemplateSelectedListener);
-		mazeSizeSpinner = prepareSpinner(v, R.id.spinMazeSize, Arrays.asList(getResources().getStringArray(R.array.map_maze_sizes)), mazeSizeSelectedListener);
+        try {
+            mapFiles = FrontendDataUtils.getMaps(getActivity());
+        } catch (IOException e) {
+            Toast.makeText(getActivity().getApplicationContext(), R.string.error_missing_sdcard_or_files, Toast.LENGTH_LONG).show();
+            getActivity().finish();
+            return null;
+        }
+        Collections.sort(mapFiles, MapFile.MISSIONS_FIRST_NAME_ORDER);
+
+        List<String> mapNames = MapFile.toDisplayNameList(mapFiles, getResources());
+        mapTypeSpinner = prepareSpinner(v, R.id.spinMapType, Arrays.asList(getResources().getStringArray(R.array.map_types)), mapTypeSelectedListener);
+        mapNameSpinner = prepareSpinner(v, R.id.spinMapName, mapNames, mapNameSelectedListener);
+        templateSpinner = prepareSpinner(v, R.id.spinTemplateFilter, Arrays.asList(getResources().getStringArray(R.array.map_templates)), mapTemplateSelectedListener);
+        mazeSizeSpinner = prepareSpinner(v, R.id.spinMazeSize, Arrays.asList(getResources().getStringArray(R.array.map_maze_sizes)), mazeSizeSelectedListener);
+
+        stateManager.addListener(roomStateChangeListener);
+        currentMap = stateManager.getMapRecipe();
+        if(currentMap != null) {
+            updateDisplay(currentMap);
+        }
+        setChiefState(stateManager.getChiefStatus());
+        mapPreviewHandler.activity();
+        return v;
+    }
+
+    private static Spinner prepareSpinner(View v, int id, List<String> items, OnItemSelectedListener itemSelectedListener) {
+        Spinner spinner = (Spinner)v.findViewById(id);
+        ArrayAdapter<String> adapter = new ArrayAdapter<String>(v.getContext(), R.layout.listview_item, items);
+        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+        spinner.setAdapter(adapter);
+        spinner.setOnItemSelectedListener(itemSelectedListener);
+        return spinner;
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        try {
+            stateManager = ((RoomStateManager.Provider)getActivity()).getRoomStateManager();
+        } catch(ClassCastException e) {
+            throw new RuntimeException("Hosting activity must implement RoomStateManager.Provider.", e);
+        }
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        mapPreviewHandler.stop();
+        newPreviewRequest = null;
+
+        stateManager.removeListener(roomStateChangeListener);
+    }
+
+    private void setChiefState(boolean chiefState) {
+        mapTypeSpinner.setEnabled(chiefState);
+        mapNameSpinner.setEnabled(chiefState);
+        templateSpinner.setEnabled(chiefState);
+        mazeSizeSpinner.setEnabled(chiefState);
+        mapPreview.setEnabled(chiefState);
 
-		stateManager.addListener(roomStateChangeListener);
-		currentMap = stateManager.getMapRecipe();
-		if(currentMap != null) {
-			updateDisplay(currentMap);
-		}
-		setChiefState(stateManager.getChiefStatus());
-		mapPreviewHandler.activity();
-		return v;
-	}
-	
-	private static Spinner prepareSpinner(View v, int id, List<String> items, OnItemSelectedListener itemSelectedListener) {
-		Spinner spinner = (Spinner)v.findViewById(id);
-		ArrayAdapter<String> adapter = new ArrayAdapter<String>(v.getContext(), R.layout.listview_item, items);
-		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
-		spinner.setAdapter(adapter);
-		spinner.setOnItemSelectedListener(itemSelectedListener);
-		return spinner;
-	}
-	
-	@Override
-	public void onCreate(Bundle savedInstanceState) {
-		super.onCreate(savedInstanceState);
-		try {
-			stateManager = ((RoomStateManager.Provider)getActivity()).getRoomStateManager();
-		} catch(ClassCastException e) {
-			throw new RuntimeException("Hosting activity must implement RoomStateManager.Provider.", e);
-		}
-	}
-	
-	@Override
-	public void onDestroy() {
-		super.onDestroy();
-		mapPreviewHandler.stop();
-		newPreviewRequest = null;
-		
-		stateManager.removeListener(roomStateChangeListener);
-	}
-	
-	private void setChiefState(boolean chiefState) {
-		mapTypeSpinner.setEnabled(chiefState);
-		mapNameSpinner.setEnabled(chiefState);
-		templateSpinner.setEnabled(chiefState);
-		mazeSizeSpinner.setEnabled(chiefState);
-		mapPreview.setEnabled(chiefState);
-		
-		if(chiefState) {
-			sendMapnameAndGenerator();
-			stateManager.changeMapTemplate(templateSpinner.getSelectedItemPosition());
-			stateManager.changeMazeSize(mazeSizeSpinner.getSelectedItemPosition());
-		}
-	}
-	
-	private void updateDisplay(MapRecipe map) {
-		nameRow.setVisibility(map.mapgen == Frontlib.MAPGEN_NAMED ? View.VISIBLE : View.GONE);
-		templateRow.setVisibility(map.mapgen == Frontlib.MAPGEN_REGULAR ? View.VISIBLE : View.GONE);
-		mazeSizeRow.setVisibility(map.mapgen == Frontlib.MAPGEN_MAZE ? View.VISIBLE : View.GONE);
-		
-		mapTypeSpinner.setSelection(map.mapgen);
-		int mapPosition = findMapPosition(mapFiles, map.name);
-		if(mapPosition >= 0) {
-			mapNameSpinner.setSelection(mapPosition);
-		}
-		templateSpinner.setSelection(map.templateFilter);
-		mazeSizeSpinner.setSelection(map.mazeSize);
-	}
-	
-	private static int findMapPosition(List<MapFile> mapFiles, String mapName) {
-		for(int i=0; i<mapFiles.size(); i++) {
-			if(mapName.equals(mapFiles.get(i).name)) {
-				return i;
-			}
-		}
-		return -1;
-	}
-	
-	private void sendMapnameAndGenerator() {
-		int mapType = mapTypeSpinner.getSelectedItemPosition();
-		String mapName = mapFiles.get(mapNameSpinner.getSelectedItemPosition()).name;
-		stateManager.changeMapNameAndGenerator(MapRecipe.mapnameForGenerator(mapType, mapName));
-	}
-	
-	private final OnItemSelectedListener mapTypeSelectedListener = new OnItemSelectedListener() {
-		public void onItemSelected(AdapterView<?> adapter, View v, int position, long arg3) {
-			sendMapnameAndGenerator();
-		}
-		public void onNothingSelected(AdapterView<?> arg0) {}
-	};
-	
-	private final OnItemSelectedListener mapNameSelectedListener = new OnItemSelectedListener() {
-		public void onItemSelected(AdapterView<?> adapter, View v, int position, long arg3) {
-			sendMapnameAndGenerator();
-		}
-		public void onNothingSelected(AdapterView<?> arg0) {}
-	};
-	
-	private final OnItemSelectedListener mapTemplateSelectedListener = new OnItemSelectedListener() {
-		public void onItemSelected(AdapterView<?> adapter, View v, int position, long arg3) {
-			stateManager.changeMapTemplate(position);
-		}
-		public void onNothingSelected(AdapterView<?> arg0) {}
-	};
-	
-	private final OnItemSelectedListener mazeSizeSelectedListener = new OnItemSelectedListener() {
-		public void onItemSelected(AdapterView<?> adapter, View v, int position, long arg3) {
-			stateManager.changeMazeSize(position);
-		}
-		public void onNothingSelected(AdapterView<?> arg0) {}
-	};
-	
-	private final OnClickListener mapClickListener = new OnClickListener() {
-		public void onClick(View v) {
-			stateManager.changeMapSeed(MapRecipe.makeRandomSeed());
-			if(mapTypeSpinner.getSelectedItemPosition() == Frontlib.MAPGEN_NAMED) {
-				mapNameSpinner.setSelection(random.nextInt(mapNameSpinner.getCount()));
-			}
-		}
-	};
-	
-	private final RoomStateManager.Listener roomStateChangeListener = new RoomStateManager.ListenerAdapter() {
-		@Override
-		public void onChiefStatusChanged(boolean isChief) {
-			setChiefState(isChief);
-		};
-		
-		@Override
-		public void onMapChanged(MapRecipe recipe) {
-			// Only trigger a preview update if a relevant field changed (not theme)
-			if(currentMap==null
-					|| currentMap.mapgen != recipe.mapgen
-					|| currentMap.mazeSize != recipe.mazeSize
-					|| !currentMap.name.equals(recipe.name)
-					|| !currentMap.seed.equals(recipe.seed)
-					|| currentMap.templateFilter != recipe.templateFilter
-					|| !Arrays.equals(currentMap.getDrawData(), recipe.getDrawData())) {
-				mapPreviewHandler.activity();
-			}
-			updateDisplay(recipe);
-			currentMap = recipe;
-		};
-	};
-	
-	private MapPreviewGenerator.Listener mapPreviewListener = new MapPreviewGenerator.Listener() {
-		public void onMapPreviewResult(Drawable preview) {
-			if(newPreviewRequest != null) {
-				MapPreviewGenerator.startPreviewGeneration(getActivity().getApplicationContext(), newPreviewRequest, mapPreviewListener);
-				newPreviewRequest = null;
-			} else {
-				if(mapPreview != null) {
-					mapPreview.setImageDrawable(preview);
-				}
-				previewGenerationInProgress = false;
-			}
-		}
-	};
+        if(chiefState) {
+            sendMapnameAndGenerator();
+            stateManager.changeMapTemplate(templateSpinner.getSelectedItemPosition());
+            stateManager.changeMazeSize(mazeSizeSpinner.getSelectedItemPosition());
+        }
+    }
+
+    private void updateDisplay(MapRecipe map) {
+        nameRow.setVisibility(map.mapgen == Frontlib.MAPGEN_NAMED ? View.VISIBLE : View.GONE);
+        templateRow.setVisibility(map.mapgen == Frontlib.MAPGEN_REGULAR ? View.VISIBLE : View.GONE);
+        mazeSizeRow.setVisibility(map.mapgen == Frontlib.MAPGEN_MAZE ? View.VISIBLE : View.GONE);
+
+        mapTypeSpinner.setSelection(map.mapgen);
+        int mapPosition = findMapPosition(mapFiles, map.name);
+        if(mapPosition >= 0) {
+            mapNameSpinner.setSelection(mapPosition);
+        }
+        templateSpinner.setSelection(map.templateFilter);
+        mazeSizeSpinner.setSelection(map.mazeSize);
+    }
+
+    private static int findMapPosition(List<MapFile> mapFiles, String mapName) {
+        for(int i=0; i<mapFiles.size(); i++) {
+            if(mapName.equals(mapFiles.get(i).name)) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    private void sendMapnameAndGenerator() {
+        int mapType = mapTypeSpinner.getSelectedItemPosition();
+        String mapName = mapFiles.get(mapNameSpinner.getSelectedItemPosition()).name;
+        stateManager.changeMapNameAndGenerator(MapRecipe.mapnameForGenerator(mapType, mapName));
+    }
+
+    private final OnItemSelectedListener mapTypeSelectedListener = new OnItemSelectedListener() {
+        public void onItemSelected(AdapterView<?> adapter, View v, int position, long arg3) {
+            sendMapnameAndGenerator();
+        }
+        public void onNothingSelected(AdapterView<?> arg0) {}
+    };
+
+    private final OnItemSelectedListener mapNameSelectedListener = new OnItemSelectedListener() {
+        public void onItemSelected(AdapterView<?> adapter, View v, int position, long arg3) {
+            sendMapnameAndGenerator();
+        }
+        public void onNothingSelected(AdapterView<?> arg0) {}
+    };
+
+    private final OnItemSelectedListener mapTemplateSelectedListener = new OnItemSelectedListener() {
+        public void onItemSelected(AdapterView<?> adapter, View v, int position, long arg3) {
+            stateManager.changeMapTemplate(position);
+        }
+        public void onNothingSelected(AdapterView<?> arg0) {}
+    };
+
+    private final OnItemSelectedListener mazeSizeSelectedListener = new OnItemSelectedListener() {
+        public void onItemSelected(AdapterView<?> adapter, View v, int position, long arg3) {
+            stateManager.changeMazeSize(position);
+        }
+        public void onNothingSelected(AdapterView<?> arg0) {}
+    };
+
+    private final OnClickListener mapClickListener = new OnClickListener() {
+        public void onClick(View v) {
+            stateManager.changeMapSeed(MapRecipe.makeRandomSeed());
+            if(mapTypeSpinner.getSelectedItemPosition() == Frontlib.MAPGEN_NAMED) {
+                mapNameSpinner.setSelection(random.nextInt(mapNameSpinner.getCount()));
+            }
+        }
+    };
+
+    private final RoomStateManager.Listener roomStateChangeListener = new RoomStateManager.ListenerAdapter() {
+        @Override
+        public void onChiefStatusChanged(boolean isChief) {
+            setChiefState(isChief);
+        };
+
+        @Override
+        public void onMapChanged(MapRecipe recipe) {
+            // Only trigger a preview update if a relevant field changed (not theme)
+            if(currentMap==null
+                    || currentMap.mapgen != recipe.mapgen
+                    || currentMap.mazeSize != recipe.mazeSize
+                    || !currentMap.name.equals(recipe.name)
+                    || !currentMap.seed.equals(recipe.seed)
+                    || currentMap.templateFilter != recipe.templateFilter
+                    || !Arrays.equals(currentMap.getDrawData(), recipe.getDrawData())) {
+                mapPreviewHandler.activity();
+            }
+            updateDisplay(recipe);
+            currentMap = recipe;
+        };
+    };
+
+    private MapPreviewGenerator.Listener mapPreviewListener = new MapPreviewGenerator.Listener() {
+        public void onMapPreviewResult(Drawable preview) {
+            if(newPreviewRequest != null) {
+                MapPreviewGenerator.startPreviewGeneration(getActivity().getApplicationContext(), newPreviewRequest, mapPreviewListener);
+                newPreviewRequest = null;
+            } else {
+                if(mapPreview != null) {
+                    mapPreview.setImageDrawable(preview);
+                }
+                previewGenerationInProgress = false;
+            }
+        }
+    };
 }