# HG changeset patch # User Medo # Date 1345591856 -7200 # Node ID 33924ff4af504d24ce7f8ccb400fabdf16d3cb14 # Parent 7831c84cc644beb002bec55c7d70f88892850787 Hedgeroid: Some code cleanup, adding a forgotten file diff -r 7831c84cc644 -r 33924ff4af50 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Datastructures/FrontendDataUtils.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Datastructures/FrontendDataUtils.java Mon Aug 20 21:05:57 2012 +0200 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Datastructures/FrontendDataUtils.java Wed Aug 22 01:30:56 2012 +0200 @@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; import org.hedgewars.hedgeroid.R; import org.hedgewars.hedgeroid.util.FileUtils; @@ -38,9 +39,9 @@ /** * @throws FileNotFoundException if the sdcard isn't available or the Maps directory doesn't exist */ - public static ArrayList getMaps(Context c) throws FileNotFoundException { + public static List getMaps(Context c) throws FileNotFoundException { File[] files = FileUtils.getFilesFromRelativeDir(c,"Maps"); - ArrayList ret = new ArrayList(); + List ret = new ArrayList(); for(File f : files) { boolean isMission = FileUtils.hasFileWithSuffix(f, ".lua"); @@ -56,7 +57,7 @@ */ public static List getGameStyles(Context c) throws FileNotFoundException { File[] files = FileUtils.getFilesFromRelativeDir(c, "Scripts/Multiplayer"); - ArrayList ret = new ArrayList(); + List ret = new ArrayList(); /* * Caution: It is important that the "empty" style has this exact name, because * it will be interpreted as "don't load a script" by the frontlib, and also by @@ -84,23 +85,19 @@ /** * @throws FileNotFoundException if the sdcard isn't available or the Graphics/Graves directory doesn't exist */ - public static ArrayList> getGraves(Context c) throws FileNotFoundException { - File gravePath = new File(new File(FileUtils.getDataPathFile(c), "Graphics"), "Graves"); - ArrayList names = FileUtils.getFileNamesFromDirWithSuffix(c,"Graphics/Graves", ".png", true); - ArrayList> data = new ArrayList>(names.size()); + public static List> getGraves(Context c) throws FileNotFoundException { + File gravePath = FileUtils.getDataPathFile(c, "Graphics", "Graves"); + List names = FileUtils.getFileNamesFromDirWithSuffix(c,"Graphics/Graves", ".png", true); + List> data = new ArrayList>(names.size()); for(String s : names){ HashMap map = new HashMap(); map.put("txt", s); Bitmap b = BitmapFactory.decodeFile(new File(gravePath, s + ".png").getAbsolutePath()); int width = b.getWidth(); - if(b.getHeight() > width){//some pictures contain more 'frames' underneath each other, if so we only use the first frame - Bitmap tmp = Bitmap.createBitmap(width, width, b.getConfig()); - int[] pixels = new int[width * width]; - b.getPixels(pixels, 0,width,0,0,width,width); - tmp.setPixels(pixels,0,width,0,0,width,width); - b.recycle(); - b = tmp; + if(b.getHeight() > width){ + // some pictures contain more 'frames' underneath each other, if so we only use the first frame + b = Bitmap.createBitmap(b, 0, 0, width, width); } map.put("img", b); data.add(map); @@ -111,13 +108,13 @@ /** * @throws FileNotFoundException if the sdcard isn't available or the Graphics/Graves directory doesn't exist */ - public static ArrayList> getFlags(Context c) throws FileNotFoundException { - File flagsPath = new File(new File(FileUtils.getDataPathFile(c), "Graphics"), "Flags"); - ArrayList names = FileUtils.getFileNamesFromDirWithSuffix(c, "Graphics/Flags", ".png", true); - ArrayList> data = new ArrayList>(names.size()); + public static List> getFlags(Context c) throws FileNotFoundException { + File flagsPath = FileUtils.getDataPathFile(c, "Graphics", "Flags"); + List names = FileUtils.getFileNamesFromDirWithSuffix(c, "Graphics/Flags", ".png", true); + List> data = new ArrayList>(names.size()); for(String s : names){ - HashMap map = new HashMap(); + Map map = new HashMap(); map.put("txt", s); Bitmap b = BitmapFactory.decodeFile(new File(flagsPath, s + ".png").getAbsolutePath()); map.put("img", b); @@ -129,9 +126,9 @@ /** * @throws FileNotFoundException if the sdcard isn't available or the Sounds/voices directory doesn't exist */ - public static ArrayList getVoices(Context c) throws FileNotFoundException { + public static List getVoices(Context c) throws FileNotFoundException { File[] files = FileUtils.getFilesFromRelativeDir(c, "Sounds/voices"); - ArrayList ret = new ArrayList(); + List ret = new ArrayList(); for(File f : files){ if(f.isDirectory()) ret.add(f.getName()); @@ -142,17 +139,17 @@ /** * @throws FileNotFoundException if the sdcard isn't available or the Forts directory doesn't exist */ - public static ArrayList getForts(Context c) throws FileNotFoundException { + public static List getForts(Context c) throws FileNotFoundException { return FileUtils.getFileNamesFromDirWithSuffix(c,"Forts", "L.png", true); } - public static ArrayList> getTypes(Context c){ - ArrayList> data = new ArrayList>(6); + public static List> getTypes(Context c){ + List> data = new ArrayList>(6); String[] levels = {c.getString(R.string.human), c.getString(R.string.bot5), c.getString(R.string.bot4), c.getString(R.string.bot3), c.getString(R.string.bot2), c.getString(R.string.bot1)}; int[] images = {R.drawable.human, R.drawable.bot5, R.drawable.bot4, R.drawable.bot3, R.drawable.bot2, R.drawable.bot1}; for(int i = 0; i < levels.length; i++){ - HashMap map = new HashMap(); + Map map = new HashMap(); map.put("txt", levels[i]); map.put("img", images[i]); map.put("level", i); @@ -166,15 +163,14 @@ /** * @throws FileNotFoundException if the sdcard isn't available or the Graphics/Hats directory doesn't exist */ - public static ArrayList> getHats(Context c) throws FileNotFoundException { - ArrayList files = FileUtils.getFileNamesFromDirWithSuffix(c,"Graphics/Hats", ".png", true); - File hatsPath = new File(new File(FileUtils.getDataPathFile(c), "Graphics"), "Hats"); + public static List> getHats(Context c) throws FileNotFoundException { + List files = FileUtils.getFileNamesFromDirWithSuffix(c,"Graphics/Hats", ".png", true); + File hatsPath = FileUtils.getDataPathFile(c, "Graphics", "Hats"); int size = files.size(); - ArrayList> data = new ArrayList>(size); + List> data = new ArrayList>(size); - HashMap hashmap; for(String s : files){ - hashmap = new HashMap(); + Map hashmap = new HashMap(); hashmap.put("txt", s); Bitmap b = BitmapFactory.decodeFile(new File(hatsPath, s + ".png").getAbsolutePath()); b = Bitmap.createBitmap(b, 0,0,b.getWidth()/2, b.getWidth()/2); diff -r 7831c84cc644 -r 33924ff4af50 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Datastructures/Grave.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Datastructures/Grave.java Mon Aug 20 21:05:57 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* - * Hedgewars for Android. An Android port of Hedgewars, a free turn based strategy game - * Copyright (c) 2011-2012 Richard Deurwaarder - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -package org.hedgewars.hedgeroid.Datastructures; - -public final class Grave{ - public final String name; - public final String path; - - public Grave(String name, String path) { - this.name = name; - this.path = path; - } - - @Override - public String toString() { - return "Grave [name=" + name + ", path=" + path + "]"; - } -} diff -r 7831c84cc644 -r 33924ff4af50 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Datastructures/MapFile.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Datastructures/MapFile.java Mon Aug 20 21:05:57 2012 +0200 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Datastructures/MapFile.java Wed Aug 22 01:30:56 2012 +0200 @@ -49,7 +49,7 @@ * @throws FileNotFoundException if the sdcard is not available. Does NOT throw if the requested map file does not exist. */ public static File getFileForMapname(Context ctx, String mapname) throws FileNotFoundException { - return new File(new File(FileUtils.getDataPathFile(ctx), MAP_DIRECTORY), mapname); + return FileUtils.getDataPathFile(ctx, MAP_DIRECTORY, mapname); } public static final Comparator MISSIONS_FIRST_NAME_ORDER = new Comparator() { @@ -72,7 +72,7 @@ } public static File getPreviewFile(Context c, String mapName) throws FileNotFoundException { - return new File(FileUtils.getDataPathFile(c), MAP_DIRECTORY + "/" + mapName + "/" + "preview.png"); + return FileUtils.getDataPathFile(c, MAP_DIRECTORY, mapName, "preview.png"); } public static List toDisplayNameList(List mapFiles, Resources res) { diff -r 7831c84cc644 -r 33924ff4af50 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Downloader/DownloadPackage.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Downloader/DownloadPackage.java Mon Aug 20 21:05:57 2012 +0200 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Downloader/DownloadPackage.java Wed Aug 22 01:30:56 2012 +0200 @@ -137,7 +137,7 @@ version = -1; } }else if(name.equals("path")){ - path = FileUtils.getDataPath(c) + text; + path = FileUtils.getDataPathFile(c, text).getAbsolutePath(); }else if(name.equals("representation")){ representation = text; }else if(name.equals("description")){ diff -r 7831c84cc644 -r 33924ff4af50 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/LobbyActivity.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/LobbyActivity.java Mon Aug 20 21:05:57 2012 +0200 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/LobbyActivity.java Wed Aug 22 01:30:56 2012 +0200 @@ -67,9 +67,9 @@ tabHost.setup(); tabHost.getTabWidget().setOrientation(LinearLayout.VERTICAL); - tabHost.addTab(tabHost.newTabSpec("rooms").setIndicator(UiUtils.createTabIndicator(tabHost, R.string.lobby_tab_rooms, R.drawable.roomlist_ingame)).setContent(R.id.roomListFragment)); - tabHost.addTab(tabHost.newTabSpec("chat").setIndicator(UiUtils.createTabIndicator(tabHost, R.string.lobby_tab_chat, R.drawable.edit)).setContent(R.id.chatFragment)); - tabHost.addTab(tabHost.newTabSpec("players").setIndicator(UiUtils.createTabIndicator(tabHost, R.string.lobby_tab_players, R.drawable.human)).setContent(R.id.playerListFragment)); + tabHost.addTab(tabHost.newTabSpec("rooms").setIndicator(UiUtils.createVerticalTabIndicator(tabHost, R.string.lobby_tab_rooms, R.drawable.roomlist_ingame)).setContent(R.id.roomListFragment)); + tabHost.addTab(tabHost.newTabSpec("chat").setIndicator(UiUtils.createVerticalTabIndicator(tabHost, R.string.lobby_tab_chat, R.drawable.edit)).setContent(R.id.chatFragment)); + tabHost.addTab(tabHost.newTabSpec("players").setIndicator(UiUtils.createVerticalTabIndicator(tabHost, R.string.lobby_tab_players, R.drawable.human)).setContent(R.id.playerListFragment)); if (icicle != null) { tabHost.setCurrentTabByTag(icicle.getString("currentTab")); diff -r 7831c84cc644 -r 33924ff4af50 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/LocalRoomActivity.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/LocalRoomActivity.java Mon Aug 20 21:05:57 2012 +0200 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/LocalRoomActivity.java Wed Aug 22 01:30:56 2012 +0200 @@ -66,9 +66,9 @@ tabHost.setup(); tabHost.getTabWidget().setOrientation(LinearLayout.VERTICAL); - tabHost.addTab(tabHost.newTabSpec("map").setIndicator(UiUtils.createTabIndicator(tabHost, R.string.room_tab_map, 0)).setContent(R.id.mapFragment)); - tabHost.addTab(tabHost.newTabSpec("settings").setIndicator(UiUtils.createTabIndicator(tabHost, R.string.room_tab_settings, 0)).setContent(R.id.settingsFragment)); - tabHost.addTab(tabHost.newTabSpec("teams").setIndicator(UiUtils.createTabIndicator(tabHost, R.string.room_tab_teams, 0)).setContent(R.id.teamlistContainer)); + tabHost.addTab(tabHost.newTabSpec("map").setIndicator(UiUtils.createVerticalTabIndicator(tabHost, R.string.room_tab_map, 0)).setContent(R.id.mapFragment)); + tabHost.addTab(tabHost.newTabSpec("settings").setIndicator(UiUtils.createVerticalTabIndicator(tabHost, R.string.room_tab_settings, 0)).setContent(R.id.settingsFragment)); + tabHost.addTab(tabHost.newTabSpec("teams").setIndicator(UiUtils.createVerticalTabIndicator(tabHost, R.string.room_tab_teams, 0)).setContent(R.id.teamlistContainer)); if (icicle != null) { tabHost.setCurrentTabByTag(icicle.getString("currentTab")); diff -r 7831c84cc644 -r 33924ff4af50 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/NetRoomActivity.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/NetRoomActivity.java Mon Aug 20 21:05:57 2012 +0200 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/NetRoomActivity.java Wed Aug 22 01:30:56 2012 +0200 @@ -75,11 +75,11 @@ tabHost.setup(); tabHost.getTabWidget().setOrientation(LinearLayout.VERTICAL); - tabHost.addTab(tabHost.newTabSpec("map").setIndicator(UiUtils.createTabIndicator(tabHost, R.string.room_tab_map, 0)).setContent(R.id.mapFragment)); - tabHost.addTab(tabHost.newTabSpec("settings").setIndicator(UiUtils.createTabIndicator(tabHost, R.string.room_tab_settings, 0)).setContent(R.id.settingsFragment)); - tabHost.addTab(tabHost.newTabSpec("teams").setIndicator(UiUtils.createTabIndicator(tabHost, R.string.room_tab_teams, 0)).setContent(R.id.teamlistFragment)); - tabHost.addTab(tabHost.newTabSpec("chat").setIndicator(UiUtils.createTabIndicator(tabHost, R.string.room_tab_chat, 0)).setContent(R.id.chatFragment)); - tabHost.addTab(tabHost.newTabSpec("players").setIndicator(UiUtils.createTabIndicator(tabHost, R.string.room_tab_players, 0)).setContent(R.id.playerListContainer)); + tabHost.addTab(tabHost.newTabSpec("map").setIndicator(UiUtils.createVerticalTabIndicator(tabHost, R.string.room_tab_map, 0)).setContent(R.id.mapFragment)); + tabHost.addTab(tabHost.newTabSpec("settings").setIndicator(UiUtils.createVerticalTabIndicator(tabHost, R.string.room_tab_settings, 0)).setContent(R.id.settingsFragment)); + tabHost.addTab(tabHost.newTabSpec("teams").setIndicator(UiUtils.createVerticalTabIndicator(tabHost, R.string.room_tab_teams, 0)).setContent(R.id.teamlistFragment)); + tabHost.addTab(tabHost.newTabSpec("chat").setIndicator(UiUtils.createVerticalTabIndicator(tabHost, R.string.room_tab_chat, 0)).setContent(R.id.chatFragment)); + tabHost.addTab(tabHost.newTabSpec("players").setIndicator(UiUtils.createVerticalTabIndicator(tabHost, R.string.room_tab_players, 0)).setContent(R.id.playerListContainer)); if (icicle != null) { tabHost.setCurrentTabByTag(icicle.getString("currentTab")); diff -r 7831c84cc644 -r 33924ff4af50 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/SettingsFragment.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/SettingsFragment.java Mon Aug 20 21:05:57 2012 +0200 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/SettingsFragment.java Wed Aug 22 01:30:56 2012 +0200 @@ -191,7 +191,7 @@ stateManager.changeMapTheme(themes.get(position)); String theme = themes.get(position); try { - File iconFile = new File(FileUtils.getDataPathFile(getActivity()), "Themes/" + theme + "/icon@2X.png"); + File iconFile = FileUtils.getDataPathFile(getActivity(), "Themes", theme, "icon@2X.png"); Drawable themeIconDrawable = Drawable.createFromPath(iconFile.getAbsolutePath()); themeIcon.setImageDrawable(themeIconDrawable); } catch (FileNotFoundException e) { diff -r 7831c84cc644 -r 33924ff4af50 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/TeamCreatorActivity.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/TeamCreatorActivity.java Mon Aug 20 21:05:57 2012 +0200 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/TeamCreatorActivity.java Wed Aug 22 01:30:56 2012 +0200 @@ -24,7 +24,6 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.NoSuchElementException; @@ -39,6 +38,7 @@ import android.graphics.drawable.Drawable; import android.media.MediaPlayer; import android.os.Bundle; +import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; @@ -62,6 +62,7 @@ */ public class TeamCreatorActivity extends Activity implements Runnable { public static final String PARAMETER_EXISTING_TEAMNAME = "existingTeamName"; + private static final String TAG = TeamCreatorActivity.class.getSimpleName(); private TextView name; private Spinner difficulty, grave, flag, voice, fort; @@ -76,10 +77,10 @@ private String existingTeamName = null; - private final List> flagsData = new ArrayList>(); - private final List> typesData = new ArrayList>(); - private final List> gravesData = new ArrayList>(); - private final List> hatsData = new ArrayList>(); + private final List> flagsData = new ArrayList>(); + private final List> typesData = new ArrayList>(); + private final List> gravesData = new ArrayList>(); + private final List> hatsData = new ArrayList>(); private final List voicesData = new ArrayList(); private final List fortsData = new ArrayList(); @@ -158,7 +159,7 @@ public void run(){ try { - final ArrayList> gravesDataNew = FrontendDataUtils.getGraves(this); + final List> gravesDataNew = FrontendDataUtils.getGraves(this); runOnUiThread(new Runnable(){ public void run() { gravesData.addAll(gravesDataNew); @@ -166,7 +167,7 @@ } }); - final ArrayList> flagsDataNew = FrontendDataUtils.getFlags(this); + final List> flagsDataNew = FrontendDataUtils.getFlags(this); runOnUiThread(new Runnable(){ public void run() { flagsData.addAll(flagsDataNew); @@ -174,7 +175,7 @@ } }); - final ArrayList> typesDataNew = FrontendDataUtils.getTypes(this); + final List> typesDataNew = FrontendDataUtils.getTypes(this); runOnUiThread(new Runnable(){ public void run() { typesData.addAll(typesDataNew); @@ -182,7 +183,7 @@ } }); - final ArrayList> hatsDataNew = FrontendDataUtils.getHats(this); + final List> hatsDataNew = FrontendDataUtils.getHats(this); runOnUiThread(new Runnable(){ public void run() { hatsData.addAll(hatsDataNew); @@ -190,7 +191,7 @@ } }); - final ArrayList voicesDataNew = FrontendDataUtils.getVoices(this); + final List voicesDataNew = FrontendDataUtils.getVoices(this); runOnUiThread(new Runnable(){ public void run() { voicesData.addAll(voicesDataNew); @@ -198,7 +199,7 @@ } }); - final ArrayList fortsDataNew = FrontendDataUtils.getForts(this); + final List fortsDataNew = FrontendDataUtils.getForts(this); runOnUiThread(new Runnable(){ public void run() { fortsData.addAll(fortsDataNew); @@ -295,11 +296,13 @@ public void onItemSelected(AdapterView arg0, View arg1, int position, long arg3) { String fortName = (String) arg0.getAdapter().getItem(position); - Drawable fortIconDrawable = Drawable.createFromPath(FileUtils - .getDataPath(TeamCreatorActivity.this) - + "Forts/" - + fortName + "L.png"); - imgFort.setImageDrawable(fortIconDrawable); + try { + File fortImage = FileUtils.getDataPathFile(TeamCreatorActivity.this, "Forts", fortName, "L.png"); + Drawable fortIconDrawable = Drawable.createFromPath(fortImage.getAbsolutePath()); + imgFort.setImageDrawable(fortIconDrawable); + } catch(IOException e) { + Log.e(TAG, "Unable to show fort image", e); + } scroller.fullScroll(ScrollView.FOCUS_DOWN);// Scroll the scrollview // to the bottom, work // around for scrollview @@ -315,9 +318,7 @@ private OnClickListener voiceClicker = new OnClickListener() { public void onClick(View v) { try { - File dir = new File(String.format("%sSounds/voices/%s", - FileUtils.getDataPath(TeamCreatorActivity.this), - voice.getSelectedItem())); + File dir = FileUtils.getDataPathFile(TeamCreatorActivity.this, "Sounds", "voices", (String)voice.getSelectedItem()); String file = ""; File[] dirs = dir.listFiles(); File f = dirs[(int) Math.round(Math.random() * dirs.length)]; @@ -332,11 +333,11 @@ mp.prepare(); mp.start(); } catch (IllegalArgumentException e) { - e.printStackTrace(); + Log.e(TAG, "Unable to play voice sample", e); } catch (IllegalStateException e) { - e.printStackTrace(); + Log.e(TAG, "Unable to play voice sample", e); } catch (IOException e) { - e.printStackTrace(); + Log.e(TAG, "Unable to play voice sample", e); } } }; diff -r 7831c84cc644 -r 33924ff4af50 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/util/CalmDownHandler.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/util/CalmDownHandler.java Wed Aug 22 01:30:56 2012 +0200 @@ -0,0 +1,62 @@ +/* + * Hedgewars for Android. An Android port of Hedgewars, a free turn based strategy game + * Copyright (C) 2012 Simeon Maxein + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package org.hedgewars.hedgeroid.util; + +import android.os.Handler; +import android.os.Looper; +import android.os.Message; + +/** + * This class allows you to define a runnable that is called when there has been + * no activity for a set amount of time, where activity is determined by calls + * to the activity() method of the handler. It is used to update the map preview + * when there have been no updates to the relevant map information for a time, + * to prevent triggering several updates at once when different parts of the + * information change. + */ +public final class CalmDownHandler extends Handler { + int runningMessagesCounter = 0; + final Runnable inactivityRunnable; + final long inactivityMs; + boolean stopped; + + public CalmDownHandler(Looper looper, Runnable runnable, long inactivityMs) { + super(looper); + this.inactivityRunnable = runnable; + this.inactivityMs = inactivityMs; + } + + public void activity() { + runningMessagesCounter++; + sendMessageDelayed(obtainMessage(), inactivityMs); + } + + @Override + public void handleMessage(Message msg) { + runningMessagesCounter--; + if(runningMessagesCounter==0 && !stopped) { + inactivityRunnable.run(); + } + } + + public void stop() { + stopped = true; + } +} \ No newline at end of file diff -r 7831c84cc644 -r 33924ff4af50 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/util/FileUtils.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/util/FileUtils.java Mon Aug 20 21:05:57 2012 +0200 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/util/FileUtils.java Wed Aug 22 01:30:56 2012 +0200 @@ -71,21 +71,14 @@ } } - public static File getDataPathFile(Context c) throws FileNotFoundException { - return new File(getCachePath(c), ROOT_DIR); + public static File getDataPathFile(Context c, String...subpath) throws FileNotFoundException { + File file = new File(getCachePath(c), ROOT_DIR); + for(String pathcomponent : subpath) { + file = new File(file, pathcomponent); + } + return file; } - // TODO Several callers are unaware that this may fail, so it throws an RTE now. - // Should be handled better though. - @Deprecated - public static String getDataPath(Context c) { - try { - return getDataPathFile(c).getAbsolutePath()+"/"; - } catch(FileNotFoundException e) { - throw new RuntimeException(e); - } - } - @TargetApi(8) private static class FroyoSDCardDir{ public static File getDownloadPath(Context c){ @@ -113,7 +106,7 @@ * @throws FileNotFoundException If the sdcard is not available or the subdirectory "dirName" does not exist */ public static File[] getFilesFromRelativeDir(Context c, String dirName) throws FileNotFoundException { - File f = new File(getDataPathFile(c), dirName); + File f = getDataPathFile(c, dirName); if(f.isDirectory()) { return f.listFiles(); @@ -160,9 +153,9 @@ * Get all files from directory dir which have the given suffix * @throws FileNotFoundException If the sdcard is not available or the subdirectory "dir" does not exist */ - public static ArrayList getFileNamesFromDirWithSuffix(Context c, String dir, String suffix, boolean removeSuffix) throws FileNotFoundException{ + public static List getFileNamesFromDirWithSuffix(Context c, String dir, String suffix, boolean removeSuffix) throws FileNotFoundException{ File[] files = FileUtils.getFilesFromRelativeDir(c, dir); - ArrayList ret = new ArrayList(); + List ret = new ArrayList(); for(File file : files){ String s = file.getName(); if(s.endsWith(suffix)){ diff -r 7831c84cc644 -r 33924ff4af50 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/util/UiUtils.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/util/UiUtils.java Mon Aug 20 21:05:57 2012 +0200 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/util/UiUtils.java Wed Aug 22 01:30:56 2012 +0200 @@ -33,7 +33,7 @@ throw new AssertionError("This class is not meant to be instantiated"); } - public static View createTabIndicator(TabHost tabHost, int label, int icon) { + public static View createVerticalTabIndicator(TabHost tabHost, int label, int icon) { LayoutInflater inflater = (LayoutInflater) tabHost.getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE);