diff --git a/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/controller/InputController.java b/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/controller/InputController.java index 2ce960604..0748b4c14 100644 --- a/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/controller/InputController.java +++ b/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/controller/InputController.java @@ -2,6 +2,7 @@ package com.gpl.rpg.AndorsTrail.controller; import android.content.Context; import android.content.Intent; +import android.os.Build; import android.util.SparseIntArray; import android.view.KeyEvent; import android.view.View; @@ -98,28 +99,36 @@ public final class InputController implements OnClickListener, OnLongClickListen // Keys mapping to UP_LEFT key = KEY_MOVE_UP_LEFT; - keyMap.put(KeyEvent.KEYCODE_DPAD_UP_LEFT, key); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + keyMap.put(KeyEvent.KEYCODE_DPAD_UP_LEFT, key); + } keyMap.put(KeyEvent.KEYCODE_NUMPAD_7, key); keyMap.put(KeyEvent.KEYCODE_7, key); keyMap.put(KeyEvent.KEYCODE_MOVE_HOME, key); // Keys mapping to UP_RIGHT key = KEY_MOVE_UP_RIGHT; - keyMap.put(KeyEvent.KEYCODE_DPAD_UP_RIGHT, key); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + keyMap.put(KeyEvent.KEYCODE_DPAD_UP_RIGHT, key); + } keyMap.put(KeyEvent.KEYCODE_NUMPAD_9, key); keyMap.put(KeyEvent.KEYCODE_9, key); keyMap.put(KeyEvent.KEYCODE_PAGE_UP, key); // Keys mapping to DOWN_LEFT key = KEY_MOVE_DOWN_LEFT; - keyMap.put(KeyEvent.KEYCODE_DPAD_DOWN_LEFT, key); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + keyMap.put(KeyEvent.KEYCODE_DPAD_DOWN_LEFT, key); + } keyMap.put(KeyEvent.KEYCODE_NUMPAD_1, key); keyMap.put(KeyEvent.KEYCODE_1, key); keyMap.put(KeyEvent.KEYCODE_MOVE_END, key); // Keys mapping to DOWN_RIGHT key = KEY_MOVE_DOWN_RIGHT; - keyMap.put(KeyEvent.KEYCODE_DPAD_DOWN_RIGHT, key); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + keyMap.put(KeyEvent.KEYCODE_DPAD_DOWN_RIGHT, key); + } keyMap.put(KeyEvent.KEYCODE_NUMPAD_3, key); keyMap.put(KeyEvent.KEYCODE_3, key); keyMap.put(KeyEvent.KEYCODE_PAGE_DOWN, key); diff --git a/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/model/GameStatistics.java b/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/model/GameStatistics.java index 938a949e9..fc2ed7721 100644 --- a/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/model/GameStatistics.java +++ b/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/model/GameStatistics.java @@ -19,6 +19,7 @@ import com.gpl.rpg.AndorsTrail.model.actor.MonsterType; import com.gpl.rpg.AndorsTrail.model.item.ItemType; import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap; import com.gpl.rpg.AndorsTrail.model.quest.Quest; +import com.gpl.rpg.AndorsTrail.util.HashMapHelper; public final class GameStatistics { private int deaths = 0; @@ -36,10 +37,10 @@ public final class GameStatistics { public void addMonsterKill(MonsterType monsterType) { // Track monster kills by type ID, for savegame file - killedMonstersByTypeID.put(monsterType.id, killedMonstersByTypeID.getOrDefault((monsterType.id), 0) + 1); + killedMonstersByTypeID.put(monsterType.id, getNumberOfKillsForMonsterType(monsterType.id) + 1); // Also track by name, for statistics display (multiple IDs w/same name don't matter to player) - killedMonstersByName.put(monsterType.name, killedMonstersByName.getOrDefault(monsterType.name, 0) + 1); + killedMonstersByName.put(monsterType.name, getNumberOfKillsForMonsterName(monsterType.name) + 1); } public void addPlayerDeath(int lostExp) { @@ -50,8 +51,7 @@ public final class GameStatistics { } public void addItemUsage(ItemType type) { final String n = type.id; - if (!usedItems.containsKey(n)) usedItems.put(n, 1); - else usedItems.put(n, usedItems.get(n) + 1); + usedItems.put(n, HashMapHelper.getOrDefault(usedItems, n,0) + 1); } public int getDeaths() { @@ -73,15 +73,11 @@ public final class GameStatistics { public boolean isDead() { return !hasUnlimitedLives() && getLivesLeft() < 1; } public int getNumberOfKillsForMonsterType(String monsterTypeID) { - Integer v = killedMonstersByTypeID.get(monsterTypeID); - if (v == null) return 0; - return v; + return HashMapHelper.getOrDefault(killedMonstersByTypeID, monsterTypeID, 0); } public int getNumberOfKillsForMonsterName(String monsterName) { - Integer v = killedMonstersByName.get(monsterName); - if (v == null) return 0; - return v; + return HashMapHelper.getOrDefault(killedMonstersByName, monsterName, 0); } public String getTop5MostCommonlyKilledMonsters(WorldContext world, Resources res) { @@ -144,20 +140,15 @@ public final class GameStatistics { } public int getNumberOfUsedItems() { - int result = 0; - for (int v : usedItems.values()) result += v; - return result; + return HashMapHelper.sumIntegerValues(usedItems); } public int getNumberOfTimesItemHasBeenUsed(String itemId) { - if (!usedItems.containsKey(itemId)) return 0; - return usedItems.get(itemId); + return HashMapHelper.getOrDefault(usedItems, itemId, 0); } public int getNumberOfKilledMonsters() { - int result = 0; - for (int v : killedMonstersByTypeID.values()) result += v; - return result; + return HashMapHelper.sumIntegerValues(killedMonstersByTypeID); } private static final Comparator> descendingValueComparator = new Comparator>() { @@ -186,7 +177,7 @@ public final class GameStatistics { // Also track by name, for statistics display (multiple IDs w/same name don't matter to player) MonsterType t = world.monsterTypes.getMonsterType(id); - if (t != null) killedMonstersByName.put(t.name, killedMonstersByName.getOrDefault(t.name, 0) + value); + if (t != null) killedMonstersByName.put(t.name, getNumberOfKillsForMonsterName(t.name) + value); } if (fileversion <= 17) return; diff --git a/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/util/HashMapHelper.java b/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/util/HashMapHelper.java new file mode 100644 index 000000000..54d679d52 --- /dev/null +++ b/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/util/HashMapHelper.java @@ -0,0 +1,16 @@ +package com.gpl.rpg.AndorsTrail.util; + +import java.util.HashMap; + +public final class HashMapHelper { + public static V getOrDefault(HashMap map, K key, V defaultValue) { + V v = map.get(key); + return v == null ? defaultValue : v; + } + public static Integer sumIntegerValues(HashMap map) { + int sum = 0; + for (Integer v : map.values()) sum += v; + return sum; + } + +}