diff --git a/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/GameController.java b/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/GameController.java index 716bd1a..2c0ed89 100644 --- a/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/GameController.java +++ b/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/GameController.java @@ -116,6 +116,7 @@ public class GameController implements IModelChangedListener, Parcelable { this.gameID = gic.getID(); this.difficulty = gic.getDifficulty(); this.time = gic.getTimePlayed(); + this.usedHints = gic.getHintsUsed(); setGameType(gic.getGameType()); this.gameBoard = new GameBoard(gic.getGameType()); @@ -472,7 +473,6 @@ public class GameController implements IModelChangedListener, Parcelable { undoRedoManager.addState(gameBoard); notifyHighlightChangedListeners(); } - } public void toggleSelectedCellsNote(int value) { @@ -487,12 +487,6 @@ public class GameController implements IModelChangedListener, Parcelable { return selectedRow != -1 && selectedCol != -1 && !getGameCell(selectedRow, selectedCol).isFixed(); } -// public void registerListener(IModelChangeListener l) { -// if(!listeners.contains(l)) { -// listeners.add(l); -// } -// } - public int getSectionHeight() { return sectionHeight; } @@ -554,12 +548,6 @@ public class GameController implements IModelChangedListener, Parcelable { } } - /*public void registerGameErrorListener(IGameErrorListener l) { - if(!errorListeners.contains(l)) { - errorListeners.add(l); - } - }*/ - public void removeGameSolvedListener(IGameSolvedListener l) { if(solvedListeners.contains(l)) { solvedListeners.remove(l); diff --git a/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/GameStateManager.java b/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/GameStateManager.java index 8022363..64db4e8 100644 --- a/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/GameStateManager.java +++ b/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/GameStateManager.java @@ -4,6 +4,8 @@ import android.content.Context; import android.content.SharedPreferences; import android.util.Log; +import org.secuso.privacyfriendlysudoku.controller.helper.GameInfoContainer; + import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -11,8 +13,6 @@ import java.io.IOException; import java.util.LinkedList; import java.util.List; -import org.secuso.privacyfriendlysudoku.controller.helper.GameInfoContainer; - /** * Created by Chris on 16.11.2015. */ @@ -86,9 +86,13 @@ public class GameStateManager { gic.parseFixedValues(values[i++]); gic.parseSetValues(values[i++]); gic.parseNotes(values[i++]); + gic.parseHintsUsed(values[i++]); } catch(IllegalArgumentException e) { file.delete(); continue; + } catch(IndexOutOfBoundsException e) { + file.delete(); + continue; } // then add it to the list diff --git a/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/helper/GameInfoContainer.java b/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/helper/GameInfoContainer.java index 58838d2..43ed14e 100644 --- a/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/helper/GameInfoContainer.java +++ b/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/helper/GameInfoContainer.java @@ -2,8 +2,6 @@ package org.secuso.privacyfriendlysudoku.controller.helper; import android.util.Log; -import java.util.Date; - import org.secuso.privacyfriendlysudoku.controller.GameController; import org.secuso.privacyfriendlysudoku.controller.Symbol; import org.secuso.privacyfriendlysudoku.game.GameCell; @@ -11,6 +9,8 @@ import org.secuso.privacyfriendlysudoku.game.GameDifficulty; import org.secuso.privacyfriendlysudoku.game.GameType; import org.secuso.privacyfriendlysudoku.game.ICellAction; +import java.util.Date; + /** * Created by Chris on 17.11.2015. */ @@ -24,12 +24,13 @@ public class GameInfoContainer { int[] fixedValues; int[] setValues; boolean[][] setNotes; + int hintsUsed; public GameInfoContainer() {} public GameInfoContainer(int ID, GameDifficulty difficulty, GameType gameType, int[] fixedValues, int[] setValues, boolean[][] setNotes) { - this(ID, difficulty, new Date(), 0, gameType, fixedValues, setValues, setNotes); + this(ID, difficulty, new Date(), 0, gameType, fixedValues, setValues, setNotes, 0); } - public GameInfoContainer(int ID, GameDifficulty difficulty, Date lastTimePlayed, int timePlayed, GameType gameType, int[] fixedValues, int[] setValues, boolean[][] setNotes) { + public GameInfoContainer(int ID, GameDifficulty difficulty, Date lastTimePlayed, int timePlayed, GameType gameType, int[] fixedValues, int[] setValues, boolean[][] setNotes, int hintsUsed) { this.ID = ID; this.timePlayed = timePlayed; this.difficulty = difficulty; @@ -38,6 +39,7 @@ public class GameInfoContainer { this.fixedValues = fixedValues; this.setValues = setValues; this.setNotes = setNotes; + this.hintsUsed = hintsUsed; } public void setID(int ID) { @@ -67,6 +69,14 @@ public class GameInfoContainer { } } + public void parseHintsUsed(String s) { + try { + this.hintsUsed = Integer.valueOf(s); + } catch(NumberFormatException e) { + throw new IllegalArgumentException("GameInfoContainer: Can not parse hints used.", e); + } + } + public void parseDate(String s) { try { this.lastTimePlayed = new Date(Long.valueOf(s)); @@ -130,7 +140,7 @@ public class GameInfoContainer { throw new IllegalArgumentException("The string must be "+size+" characters long."); } for(int k = 0; k < strings[i].length(); k++) { - setNotes[i][k] = (strings[i].charAt(k)) == '1' ? true : false; + setNotes[i][k] = (strings[i].charAt(k)) == '1'; } } } @@ -159,6 +169,8 @@ public class GameInfoContainer { return ID; } + public int getHintsUsed() { return hintsUsed; } + public static String getGameInfo(GameController controller) { StringBuilder sb = new StringBuilder(); Date today = new Date(); @@ -176,6 +188,8 @@ public class GameInfoContainer { sb.append(getSetCells(controller)); sb.append("/"); sb.append(getNotes(controller)); + sb.append("/"); + sb.append(controller.getUsedHints()); String result = sb.toString(); diff --git a/app/src/main/java/org/secuso/privacyfriendlysudoku/ui/view/SudokuKeyboardLayout.java b/app/src/main/java/org/secuso/privacyfriendlysudoku/ui/view/SudokuKeyboardLayout.java index b39366b..f6adb3b 100644 --- a/app/src/main/java/org/secuso/privacyfriendlysudoku/ui/view/SudokuKeyboardLayout.java +++ b/app/src/main/java/org/secuso/privacyfriendlysudoku/ui/view/SudokuKeyboardLayout.java @@ -1,20 +1,16 @@ package org.secuso.privacyfriendlysudoku.ui.view; -import android.app.Activity; import android.content.Context; import android.graphics.Canvas; -import android.graphics.Paint; import android.util.AttributeSet; import android.util.TypedValue; import android.view.Gravity; import android.view.View; -import android.view.ViewGroup; import android.widget.LinearLayout; import org.secuso.privacyfriendlysudoku.controller.GameController; import org.secuso.privacyfriendlysudoku.controller.Symbol; import org.secuso.privacyfriendlysudoku.game.listener.IHighlightChangedListener; -import org.w3c.dom.Text; /** * Created by TMZ_LToP on 12.11.2015. @@ -37,8 +33,6 @@ public class SudokuKeyboardLayout extends LinearLayout implements IHighlightChan SudokuButton btn = (SudokuButton)v; gameController.selectValue(btn.getValue()); - - gameController.saveGame(getContext()); } } }; diff --git a/app/src/main/java/org/secuso/privacyfriendlysudoku/ui/view/SudokuSpecialButtonLayout.java b/app/src/main/java/org/secuso/privacyfriendlysudoku/ui/view/SudokuSpecialButtonLayout.java index ea02006..6f6860b 100644 --- a/app/src/main/java/org/secuso/privacyfriendlysudoku/ui/view/SudokuSpecialButtonLayout.java +++ b/app/src/main/java/org/secuso/privacyfriendlysudoku/ui/view/SudokuSpecialButtonLayout.java @@ -19,13 +19,14 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.Toast; -import java.util.LinkedList; - import org.secuso.privacyfriendlysudoku.controller.GameController; import org.secuso.privacyfriendlysudoku.game.listener.IHighlightChangedListener; import org.secuso.privacyfriendlysudoku.ui.listener.IHintDialogFragmentListener; -import static org.secuso.privacyfriendlysudoku.ui.view.SudokuButtonType.*; +import java.util.LinkedList; + +import static org.secuso.privacyfriendlysudoku.ui.view.SudokuButtonType.Spacer; +import static org.secuso.privacyfriendlysudoku.ui.view.SudokuButtonType.getSpecialButtons; /** * Created by TMZ_LToP on 17.11.2015. @@ -62,11 +63,9 @@ public class SudokuSpecialButtonLayout extends LinearLayout implements IHighligh break; case Do: gameController.ReDo(); - gameController.saveGame(getContext()); break; case Undo: gameController.UnDo(); - gameController.saveGame(getContext()); break; case Hint: if(gameController.isValidCellSelected()) {