From 07d729daa2d95d9812a7ea33c193c62cd1f8019b Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sat, 17 Aug 2013 14:28:50 -0400 Subject: [PATCH] [Android] Prevent duplicate duplicate items from being in the game list at one time. Previously it was possible for a game with the same path and name to be in the list as another. This is annoying because duplicates ae (obviously) no different from the initial item. This prevents duplicates from entering the list. The way this works is: 1. We get the final list of items to add to the list. 2. Loop through it using two indices, which, for this explanation I'll call [item] and [itemAfter] We compare path name at item with index [item] and the path name at item with index [itemAfter] To phrase this numerically comparison works like so: for (int i = 0; i < listSize; i++) { if (i+1 < listSize) item[i].getPath().equals(item[i+1].getPath()) } 3. For each path comparison that is true, remove item at [indexNext]. --- .../dolphinemu/dolphinemu/GameListFragment.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java index 13f66c1c83..8464eaea9c 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java @@ -76,6 +76,21 @@ public final class GameListFragment extends Fragment } } Collections.sort(fls); + + // Remove any duplicate items from the list. + // We don't need to index these in the game list more than once. + // + // This works by comparing the paths of items in the file list for equality, + // so there should be no worries about accidentally removing a valid game. + for (int i = 0; i < fls.size(); i++) + { + int indexNext = i+1; + + if (indexNext < fls.size() && fls.get(indexNext).getPath().contains(fls.get(i).getPath())) + { + fls.remove(indexNext); + } + } mGameAdapter = new GameListAdapter(mMe, R.layout.gamelist_layout, fls); mMainList.setAdapter(mGameAdapter);