From f43803ad465989432504eb5bb9a9a1132fddda1d Mon Sep 17 00:00:00 2001 From: Christopher Beckmann Date: Fri, 13 Nov 2015 13:43:58 +0100 Subject: [PATCH] Added a new solve strategy to the Solver. Added new settings that will work across the app. Cleaned up code. Added about page. --- .../sudoku/view/ApplicationTest.java | 2 +- app/src/main/AndroidManifest.xml | 15 +-- .../sudoku/controller/GameController.java | 48 ++++++-- .../tu_darmstadt/sudoku/game/GameField.java | 14 ++- .../{Default9x9Solver.java => Solver.java} | 84 ++++++++++++- .../tu_darmstadt/sudoku/ui/AboutActivity.java | 35 ++++++ .../AppCompatPreferenceActivity.java | 2 +- .../sudoku/{view => ui}/GameActivity.java | 41 ++++--- .../sudoku/{view => ui}/MainActivity.java | 5 +- .../sudoku/{view => ui}/SettingsActivity.java | 111 +++--------------- .../view}/CellHighlightTypes.java | 2 +- .../sudoku/{ => ui}/view/SudokuCellView.java | 26 ++-- .../{ => ui}/view/SudokuFieldLayout.java | 20 +++- .../drawable-hdpi/privacyfriendlyappslogo.png | Bin 0 -> 75215 bytes .../drawable-hdpi/secuso_logo_blau_blau.png | Bin 0 -> 13625 bytes app/src/main/res/layout/activity_about.xml | 91 ++++++++++++++ app/src/main/res/layout/activity_main.xml | 2 +- app/src/main/res/layout/app_bar_game_view.xml | 2 +- app/src/main/res/layout/content_game_view.xml | 4 +- .../main/res/layout/nav_header_game_view.xml | 4 +- .../res/menu/activity_game_view_drawer.xml | 17 ++- app/src/main/res/values-de/strings.xml | 8 +- app/src/main/res/values/colors.xml | 4 +- app/src/main/res/values/strings.xml | 63 +++++----- app/src/main/res/xml/pref_data_sync.xml | 21 ---- app/src/main/res/xml/pref_general.xml | 20 ++-- app/src/main/res/xml/pref_headers.xml | 11 +- app/src/main/res/xml/pref_highlighting.xml | 32 ++++- app/src/main/res/xml/pref_notification.xml | 27 ----- .../tu_darmstadt/sudoku/ExampleUnitTest.java | 2 +- .../sudoku/game/solver/SolverTest.java | 4 + 31 files changed, 446 insertions(+), 271 deletions(-) rename app/src/main/java/tu_darmstadt/sudoku/game/solver/{Default9x9Solver.java => Solver.java} (57%) create mode 100644 app/src/main/java/tu_darmstadt/sudoku/ui/AboutActivity.java rename app/src/main/java/tu_darmstadt/sudoku/{view => ui}/AppCompatPreferenceActivity.java (98%) rename app/src/main/java/tu_darmstadt/sudoku/{view => ui}/GameActivity.java (73%) rename app/src/main/java/tu_darmstadt/sudoku/{view => ui}/MainActivity.java (87%) rename app/src/main/java/tu_darmstadt/sudoku/{view => ui}/SettingsActivity.java (63%) rename app/src/main/java/tu_darmstadt/sudoku/{view/highlighting => ui/view}/CellHighlightTypes.java (81%) rename app/src/main/java/tu_darmstadt/sudoku/{ => ui}/view/SudokuCellView.java (88%) rename app/src/main/java/tu_darmstadt/sudoku/{ => ui}/view/SudokuFieldLayout.java (85%) create mode 100644 app/src/main/res/drawable-hdpi/privacyfriendlyappslogo.png create mode 100644 app/src/main/res/drawable-hdpi/secuso_logo_blau_blau.png create mode 100644 app/src/main/res/layout/activity_about.xml delete mode 100644 app/src/main/res/xml/pref_data_sync.xml delete mode 100644 app/src/main/res/xml/pref_notification.xml diff --git a/app/src/androidTest/java/tu_darmstadt/sudoku/view/ApplicationTest.java b/app/src/androidTest/java/tu_darmstadt/sudoku/view/ApplicationTest.java index 03dfa6e..14f8c61 100644 --- a/app/src/androidTest/java/tu_darmstadt/sudoku/view/ApplicationTest.java +++ b/app/src/androidTest/java/tu_darmstadt/sudoku/view/ApplicationTest.java @@ -1,4 +1,4 @@ -package tu_darmstadt.sudoku.view; +package tu_darmstadt.sudoku.ui.view; import android.app.Application; import android.test.ApplicationTestCase; diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5aedd69..938bcea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="tu_darmstadt.sudoku.ui.view" > - + @@ -16,18 +16,19 @@ + android:parentActivityName="tu_darmstadt.sudoku.ui.MainActivity" > + android:value="tu_darmstadt.sudoku.ui.MainActivity" /> - + + diff --git a/app/src/main/java/tu_darmstadt/sudoku/controller/GameController.java b/app/src/main/java/tu_darmstadt/sudoku/controller/GameController.java index 1ece34b..073d851 100644 --- a/app/src/main/java/tu_darmstadt/sudoku/controller/GameController.java +++ b/app/src/main/java/tu_darmstadt/sudoku/controller/GameController.java @@ -1,5 +1,7 @@ package tu_darmstadt.sudoku.controller; +import android.content.SharedPreferences; + import java.util.LinkedList; import java.util.List; @@ -7,10 +9,8 @@ import tu_darmstadt.sudoku.game.CellConflict; import tu_darmstadt.sudoku.game.CellConflictList; import tu_darmstadt.sudoku.game.GameCell; import tu_darmstadt.sudoku.game.GameField; -import tu_darmstadt.sudoku.game.GameSettings; import tu_darmstadt.sudoku.game.GameType; -import tu_darmstadt.sudoku.game.ICellAction; -import tu_darmstadt.sudoku.game.solver.Default9x9Solver; +import tu_darmstadt.sudoku.game.solver.Solver; import tu_darmstadt.sudoku.game.solver.ISolver; /** @@ -26,21 +26,26 @@ public class GameController { private GameType gameType; private int selectedRow; private int selectedCol; + private SharedPreferences settings; private CellConflictList errorList = new CellConflictList(); - private GameSettings settings = new GameSettings(); //private LinkedList listeners = new LinkedList<>(); -// private Default9x9Solver solver; +// private Solver solver; // private SudokuGenerator generator; - public GameController() { - this(GameType.Default_9x9); + public GameController(SharedPreferences pref) { + this(GameType.Default_9x9, pref); } - public GameController(GameType type) { + public GameController() { + this(null); + } + + public GameController(GameType type, SharedPreferences pref) { this.gameType = type; setGameType(type); gameField = new GameField(size, sectionHeight, sectionWidth); + setSettings(pref); setValue(0, 1, 8); setValue(0, 4, 2); setValue(0, 5, 6); setValue(0, 6, 7); setValue(0, 7, 3); setValue(0, 8, 4); @@ -53,10 +58,31 @@ public class GameController { setNote(7, 3, 9); } + public void loadLevel(int size, int sectionHeight, int sectionWidth, int[] fixedValues, int[] setValues, int[][] setNotes) { + this.size = size; + this.sectionHeight = sectionHeight; + this.sectionWidth = sectionWidth; + this.gameField = new GameField(size, sectionHeight, sectionWidth); + gameField.initCells(fixedValues); + + // now set the values that are not fixed + for(int i = 0; i < size*size; i++) { + int row = (int)Math.floor(i/size); + int col = i%size; + setValue(row, col, setValues[i]); + } + } + + public void setSettings(SharedPreferences pref) { + settings = pref; + } + private GameField solve(GameField gameField) { switch(gameType) { case Default_9x9: - solver = new Default9x9Solver(gameField); + case Default_6x6: + case Default_12x12: + solver = new Solver(gameField); break; default: throw new UnsupportedOperationException("No Solver for this GameType defined."); @@ -116,7 +142,7 @@ public class GameController { cell.deleteNotes(); cell.setValue(value); - if(settings.getEnableAutomaticNoteDeletion()) { + if(settings != null && settings.getBoolean("pref_automatic_note_deletion",true)) { LinkedList updateList = new LinkedList(); updateList.addAll(gameField.getRow(cell.getRow())); updateList.addAll(gameField.getColumn(cell.getCol())); @@ -126,7 +152,7 @@ public class GameController { } } - public LinkedList getConnectedCells(int row, int col, boolean connectedSec, boolean connectedRow, boolean connectedCol) { + public LinkedList getConnectedCells(int row, int col, boolean connectedRow, boolean connectedCol, boolean connectedSec) { LinkedList list = new LinkedList<>(); if(connectedRow) list.addAll(gameField.getRow(row)); diff --git a/app/src/main/java/tu_darmstadt/sudoku/game/GameField.java b/app/src/main/java/tu_darmstadt/sudoku/game/GameField.java index 43a4ef3..7b1ddeb 100644 --- a/app/src/main/java/tu_darmstadt/sudoku/game/GameField.java +++ b/app/src/main/java/tu_darmstadt/sudoku/game/GameField.java @@ -23,7 +23,7 @@ public class GameField implements Cloneable { this.size = size; field = new GameCell[size][size]; - initCells(null); + initCells(new int[][]{{1}}); } public void reset() { @@ -58,6 +58,18 @@ public class GameField implements Cloneable { } } + public void initCells(int[] level) { + if(level.length != size*size) { + throw new IllegalArgumentException("Levelarray must have length of "+size*size+"."); + } + // Initit the game field with a 1 dimension array + for(int i = 0; i < size*size; i++) { + int row = (int)Math.floor(i/size); + int col = i%size; + field[row][col] = new GameCell(row,col,size,level[i]); + } + } + public GameCell getCell(int row, int col) { return field[row][col]; } diff --git a/app/src/main/java/tu_darmstadt/sudoku/game/solver/Default9x9Solver.java b/app/src/main/java/tu_darmstadt/sudoku/game/solver/Solver.java similarity index 57% rename from app/src/main/java/tu_darmstadt/sudoku/game/solver/Default9x9Solver.java rename to app/src/main/java/tu_darmstadt/sudoku/game/solver/Solver.java index 668783c..3c2cfbd 100644 --- a/app/src/main/java/tu_darmstadt/sudoku/game/solver/Default9x9Solver.java +++ b/app/src/main/java/tu_darmstadt/sudoku/game/solver/Solver.java @@ -1,5 +1,7 @@ package tu_darmstadt.sudoku.game.solver; +import java.util.ArrayList; +import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -11,11 +13,11 @@ import tu_darmstadt.sudoku.game.ICellAction; /** * Created by Chris on 10.11.2015. */ -public class Default9x9Solver implements ISolver { +public class Solver implements ISolver { private GameField gameField = null; - public Default9x9Solver(GameField gf) { + public Solver(GameField gf) { try { if(gf == null) { throw new IllegalArgumentException("GameField may not be null."); @@ -31,6 +33,17 @@ public class Default9x9Solver implements ISolver { throw new IllegalArgumentException("This GameField is not solveable."); } + setNotes(gameField); + } + + public void setNotes(GameField gameField) { + for(int i = 0; i < gameField.getSize(); i++) { + for(int j = 0; j < gameField.getSize(); j++) { + for(int k = 0; k < gameField.getSize(); k++) { + gameField.getCell(i,j).setNote(k); + } + } + } } public boolean isSolvable(GameField gameField) { @@ -110,6 +123,69 @@ public class Default9x9Solver implements ISolver { return false; } + private boolean searchHiddenSingles() { + boolean foundHiddenSingles = false; + + LinkedList list = new LinkedList<>(); + + for(int i = 0; i < gameField.getSize()*3; i++) { + + int index = i % gameField.getSize(); + int listSelector = (int)Math.floor(i / gameField.getSize()); + + if(listSelector == 0) list = gameField.getRow(index); + if(listSelector == 1) list = gameField.getColumn(index); + if(listSelector == 2) list = gameField.getSection(index); + + LinkedList possibles = new LinkedList<>(); + LinkedList notPossibles = new LinkedList(); + + for(GameCell c : list) { // check all gameCells in Row + + if(c.hasValue()) { + notPossibles.add(c.getValue()); + continue; + } + + for(int k = 0; k < gameField.getSize(); k++) { // check all nodes + if(c.getNotes()[k]) { // if k note active + for(int p = 0; p < possibles.size(); p++) { // check possible list + if(possibles.get(p)[2] == k+1) { // is value in possible list? + // value already exists in possible list + // add to impossibles + if(!notPossibles.contains(k+1)) { + notPossibles.add(k + 1); + } + } + } + if(!notPossibles.contains(k+1)){ // if k node is possible + possibles.add(new Integer[] {c.getRow(), c.getCol(), k+1}); + } + } + } + } + // we checked a section/row/column + // now set the remaining possibles that are not impossible + boolean possible = true; + for(int p = 0; p < possibles.size(); p++) { + possible = true; + for(int np = 0; np < notPossibles.size(); np++) { + if(possibles.get(p)[2] == notPossibles.get(np)) { + // found that current possible is impossible + possible = false; + } + } + // if this is still possible then SET IT :D YAY + if(possible) { + gameField.getCell(possibles.get(p)[0],possibles.get(p)[1]).setValue(possibles.get(p)[2]); + foundHiddenSingles = true; + } + } + } + + return foundHiddenSingles; + } + public boolean searchNakedPairsTriples() { return false; } @@ -145,9 +221,5 @@ public class Default9x9Solver implements ISolver { }}, false); } - private boolean searchHiddenSingles() { - return false; - } - } diff --git a/app/src/main/java/tu_darmstadt/sudoku/ui/AboutActivity.java b/app/src/main/java/tu_darmstadt/sudoku/ui/AboutActivity.java new file mode 100644 index 0000000..757637c --- /dev/null +++ b/app/src/main/java/tu_darmstadt/sudoku/ui/AboutActivity.java @@ -0,0 +1,35 @@ +package tu_darmstadt.sudoku.ui; + +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.MenuItem; + +import tu_darmstadt.sudoku.ui.view.R; + +public class AboutActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_about); + + android.support.v7.app.ActionBar actionBar = getSupportActionBar(); + actionBar.setTitle(R.string.about); + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#024265"))); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + // Respond to the action bar's Up/Home button + case android.R.id.home: + finish(); + return true; + } + return super.onOptionsItemSelected(item); + } + +} diff --git a/app/src/main/java/tu_darmstadt/sudoku/view/AppCompatPreferenceActivity.java b/app/src/main/java/tu_darmstadt/sudoku/ui/AppCompatPreferenceActivity.java similarity index 98% rename from app/src/main/java/tu_darmstadt/sudoku/view/AppCompatPreferenceActivity.java rename to app/src/main/java/tu_darmstadt/sudoku/ui/AppCompatPreferenceActivity.java index 958a856..513ea9a 100644 --- a/app/src/main/java/tu_darmstadt/sudoku/view/AppCompatPreferenceActivity.java +++ b/app/src/main/java/tu_darmstadt/sudoku/ui/AppCompatPreferenceActivity.java @@ -1,4 +1,4 @@ -package tu_darmstadt.sudoku.view; +package tu_darmstadt.sudoku.ui; import android.content.res.Configuration; import android.os.Bundle; diff --git a/app/src/main/java/tu_darmstadt/sudoku/view/GameActivity.java b/app/src/main/java/tu_darmstadt/sudoku/ui/GameActivity.java similarity index 73% rename from app/src/main/java/tu_darmstadt/sudoku/view/GameActivity.java rename to app/src/main/java/tu_darmstadt/sudoku/ui/GameActivity.java index 738a416..dbb86af 100644 --- a/app/src/main/java/tu_darmstadt/sudoku/view/GameActivity.java +++ b/app/src/main/java/tu_darmstadt/sudoku/ui/GameActivity.java @@ -1,8 +1,9 @@ -package tu_darmstadt.sudoku.view; +package tu_darmstadt.sudoku.ui; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; -import android.support.annotation.Nullable; +import android.preference.PreferenceManager; import android.support.design.widget.NavigationView; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; @@ -11,26 +12,31 @@ import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; -import android.view.ViewGroup; import tu_darmstadt.sudoku.controller.GameController; import tu_darmstadt.sudoku.game.*; +import tu_darmstadt.sudoku.ui.view.R; +import tu_darmstadt.sudoku.ui.view.SudokuFieldLayout; public class GameActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { - GameController gameController = new GameController(GameType.Default_9x9); + GameController gameController; SudokuFieldLayout layout; - - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); + setContentView(R.layout.activity_game_view); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); layout = (SudokuFieldLayout)findViewById(R.id.sudokuLayout); + + gameController = new GameController(GameType.Default_9x9, sharedPref); layout.setGame(gameController); + layout.setSettings(sharedPref); /* // DEBUG String debug = gameController.getFieldAsString(); @@ -75,8 +81,11 @@ public class GameActivity extends AppCompatActivity implements NavigationView.On if (id == R.id.nav_newgame) { //create new game + //intent = new Intent(this, NewGameActivity.class); + //startActivity(intent); + } else if (id == R.id.nav_mainmenu) { - //new Game + //go to main menu intent = new Intent(this, MainActivity.class); startActivity(intent); @@ -85,15 +94,19 @@ public class GameActivity extends AppCompatActivity implements NavigationView.On intent = new Intent(this,SettingsActivity.class); startActivity(intent); - - } else if (id == R.id.nav_highscore) { - //open highscore - - // } else if (id == R.id.nav_share) { - - // } else if (id == R.id.nav_send) { + // see highscore list + //intent = new Intent(this, HighscoreActivity.class); + //startActivity(intent); + } else if (id == R.id.nav_about) { + //open about page + intent = new Intent(this,AboutActivity.class); + startActivity(intent); + } else if (id == R.id.nav_help) { + //open about page + //intent = new Intent(this,HelpActivity.class); + //startActivity(intent); } DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); diff --git a/app/src/main/java/tu_darmstadt/sudoku/view/MainActivity.java b/app/src/main/java/tu_darmstadt/sudoku/ui/MainActivity.java similarity index 87% rename from app/src/main/java/tu_darmstadt/sudoku/view/MainActivity.java rename to app/src/main/java/tu_darmstadt/sudoku/ui/MainActivity.java index 8c4129c..ecf1d93 100644 --- a/app/src/main/java/tu_darmstadt/sudoku/view/MainActivity.java +++ b/app/src/main/java/tu_darmstadt/sudoku/ui/MainActivity.java @@ -1,10 +1,11 @@ -package tu_darmstadt.sudoku.view; +package tu_darmstadt.sudoku.ui; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; -import android.widget.TextView; + +import tu_darmstadt.sudoku.ui.view.R; public class MainActivity extends AppCompatActivity { diff --git a/app/src/main/java/tu_darmstadt/sudoku/view/SettingsActivity.java b/app/src/main/java/tu_darmstadt/sudoku/ui/SettingsActivity.java similarity index 63% rename from app/src/main/java/tu_darmstadt/sudoku/view/SettingsActivity.java rename to app/src/main/java/tu_darmstadt/sudoku/ui/SettingsActivity.java index 029335f..680d1f7 100644 --- a/app/src/main/java/tu_darmstadt/sudoku/view/SettingsActivity.java +++ b/app/src/main/java/tu_darmstadt/sudoku/ui/SettingsActivity.java @@ -1,4 +1,4 @@ -package tu_darmstadt.sudoku.view; +package tu_darmstadt.sudoku.ui; import android.annotation.TargetApi; @@ -19,9 +19,8 @@ import android.preference.PreferenceManager; import android.preference.RingtonePreference; import android.text.TextUtils; import android.view.MenuItem; -import android.support.v4.app.NavUtils; -import tu_darmstadt.sudoku.view.R; +import tu_darmstadt.sudoku.ui.view.R; import java.util.List; @@ -59,7 +58,8 @@ public class SettingsActivity extends AppCompatPreferenceActivity { int id = item.getItemId(); if (id == android.R.id.home) { if (!super.onMenuItemSelected(featureId, item)) { - NavUtils.navigateUpFromSameTask(this); + finish(); + //NavUtils.navigateUpFromSameTask(this); } return true; } @@ -114,28 +114,6 @@ public class SettingsActivity extends AppCompatPreferenceActivity { ? listPreference.getEntries()[index] : null); - } else if (preference instanceof RingtonePreference) { - // For ringtone preferences, look up the correct display value - // using RingtoneManager. - if (TextUtils.isEmpty(stringValue)) { - // Empty values correspond to 'silent' (no ringtone). - preference.setSummary(R.string.pref_ringtone_silent); - - } else { - Ringtone ringtone = RingtoneManager.getRingtone( - preference.getContext(), Uri.parse(stringValue)); - - if (ringtone == null) { - // Clear the summary if there was a lookup error. - preference.setSummary(null); - } else { - // Set the summary to reflect the new ringtone display - // name. - String name = ringtone.getTitle(preference.getContext()); - preference.setSummary(name); - } - } - } else { // For all other preferences, set the summary to the value's // simple string representation. @@ -172,9 +150,8 @@ public class SettingsActivity extends AppCompatPreferenceActivity { */ protected boolean isValidFragment(String fragmentName) { return PreferenceFragment.class.getName().equals(fragmentName) - || GeneralPreferenceFragment.class.getName().equals(fragmentName) - || DataSyncPreferenceFragment.class.getName().equals(fragmentName) - || NotificationPreferenceFragment.class.getName().equals(fragmentName); + || GamePreferenceFragment.class.getName().equals(fragmentName) + || HighlightingPreferenceFragment.class.getName().equals(fragmentName); } /** @@ -182,7 +159,7 @@ public class SettingsActivity extends AppCompatPreferenceActivity { * activity is showing a two-pane settings UI. */ @TargetApi(Build.VERSION_CODES.HONEYCOMB) - public static class GeneralPreferenceFragment extends PreferenceFragment { + public static class GamePreferenceFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -193,8 +170,9 @@ public class SettingsActivity extends AppCompatPreferenceActivity { // to their values. When their values change, their summaries are // updated to reflect the new value, per the Android Design // guidelines. - bindPreferenceSummaryToValue(findPreference("example_text")); - bindPreferenceSummaryToValue(findPreference("example_list")); + + //bindPreferenceSummaryToValue(findPreference("example_text")); + //bindPreferenceSummaryToValue(findPreference("example_list")); } @@ -202,7 +180,8 @@ public class SettingsActivity extends AppCompatPreferenceActivity { public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == android.R.id.home) { - startActivity(new Intent(getActivity(), SettingsActivity.class)); + getActivity().finish(); + //startActivity(new Intent(getActivity(), SettingsActivity.class)); return true; } return super.onOptionsItemSelected(item); @@ -214,64 +193,9 @@ public class SettingsActivity extends AppCompatPreferenceActivity { * activity is showing a two-pane settings UI. */ @TargetApi(Build.VERSION_CODES.HONEYCOMB) - public static class NotificationPreferenceFragment extends PreferenceFragment { + public static class HighlightingPreferenceFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - addPreferencesFromResource(R.xml.pref_notification); - setHasOptionsMenu(true); - - // Bind the summaries of EditText/List/Dialog/Ringtone preferences - // to their values. When their values change, their summaries are - // updated to reflect the new value, per the Android Design - // guidelines. - bindPreferenceSummaryToValue(findPreference("notifications_new_message_ringtone")); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - int id = item.getItemId(); - if (id == android.R.id.home) { - startActivity(new Intent(getActivity(), SettingsActivity.class)); - return true; - } - return super.onOptionsItemSelected(item); - } - } - - /** - * This fragment shows data and sync preferences only. It is used when the - * activity is showing a two-pane settings UI. - */ - @TargetApi(Build.VERSION_CODES.HONEYCOMB) - public static class DataSyncPreferenceFragment extends PreferenceFragment { - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - addPreferencesFromResource(R.xml.pref_data_sync); - setHasOptionsMenu(true); - - // Bind the summaries of EditText/List/Dialog/Ringtone preferences - // to their values. When their values change, their summaries are - // updated to reflect the new value, per the Android Design - // guidelines. - bindPreferenceSummaryToValue(findPreference("sync_frequency")); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - int id = item.getItemId(); - if (id == android.R.id.home) { - startActivity(new Intent(getActivity(), SettingsActivity.class)); - return true; - } - return super.onOptionsItemSelected(item); - } - } - @TargetApi(Build.VERSION_CODES.HONEYCOMB) - public static class TestFragment extends PreferenceFragment { - @Override - public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.pref_highlighting); setHasOptionsMenu(true); @@ -280,18 +204,21 @@ public class SettingsActivity extends AppCompatPreferenceActivity { // to their values. When their values change, their summaries are // updated to reflect the new value, per the Android Design // guidelines. - //bindPreferenceSummaryToValue(findPreference("")); + + //bindPreferenceSummaryToValue(findPreference("highlighting_connected_rows")); + //bindPreferenceSummaryToValue(findPreference("highlighting_connected_columns")); + //bindPreferenceSummaryToValue(findPreference("highlighting_connected_sections")); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == android.R.id.home) { - startActivity(new Intent(getActivity(), SettingsActivity.class)); + getActivity().finish(); + //startActivity(new Intent(getActivity(), SettingsActivity.class)); return true; } return super.onOptionsItemSelected(item); } - } } diff --git a/app/src/main/java/tu_darmstadt/sudoku/view/highlighting/CellHighlightTypes.java b/app/src/main/java/tu_darmstadt/sudoku/ui/view/CellHighlightTypes.java similarity index 81% rename from app/src/main/java/tu_darmstadt/sudoku/view/highlighting/CellHighlightTypes.java rename to app/src/main/java/tu_darmstadt/sudoku/ui/view/CellHighlightTypes.java index 0fbd9fa..12a03b5 100644 --- a/app/src/main/java/tu_darmstadt/sudoku/view/highlighting/CellHighlightTypes.java +++ b/app/src/main/java/tu_darmstadt/sudoku/ui/view/CellHighlightTypes.java @@ -1,4 +1,4 @@ -package tu_darmstadt.sudoku.view.highlighting; +package tu_darmstadt.sudoku.ui.view; /** * Created by Chris on 12.11.2015. diff --git a/app/src/main/java/tu_darmstadt/sudoku/view/SudokuCellView.java b/app/src/main/java/tu_darmstadt/sudoku/ui/view/SudokuCellView.java similarity index 88% rename from app/src/main/java/tu_darmstadt/sudoku/view/SudokuCellView.java rename to app/src/main/java/tu_darmstadt/sudoku/ui/view/SudokuCellView.java index afdebcf..cea8d3b 100644 --- a/app/src/main/java/tu_darmstadt/sudoku/view/SudokuCellView.java +++ b/app/src/main/java/tu_darmstadt/sudoku/ui/view/SudokuCellView.java @@ -1,4 +1,4 @@ -package tu_darmstadt.sudoku.view; +package tu_darmstadt.sudoku.ui.view; import android.content.Context; import android.graphics.Canvas; @@ -7,16 +7,10 @@ import android.graphics.Paint; import android.graphics.RectF; import android.graphics.Typeface; import android.util.AttributeSet; -import android.view.MotionEvent; import android.view.View; import android.widget.RelativeLayout; -import android.widget.TextView; -import android.widget.Toast; - -import java.util.jar.Attributes; import tu_darmstadt.sudoku.game.GameCell; -import tu_darmstadt.sudoku.view.highlighting.CellHighlightTypes; /** * Created by TMZ_LToP on 10.11.2015. @@ -98,7 +92,10 @@ public class SudokuCellView extends View { p.setColor(Color.GREEN); break; case Connected: - p.setColor(Color.argb(55, 255, 255, 0)); + p.setColor(Color.WHITE); + drawBackground(canvas, 3, 3, mWidth - 3, mHeight - 3, p); + p.setColor(Color.YELLOW); + p.setAlpha(100); break; case Highlighted: p.setColor(Color.YELLOW); @@ -128,9 +125,9 @@ public class SudokuCellView extends View { for (int i = 0; i < mGameCell.getNotes().length; i++) { if (mGameCell.getNotes()[i]) { p.setTypeface(Typeface.SANS_SERIF); - p.setTextSize(mWidth * 3 / 12); + p.setTextSize(mWidth/4); p.setTextAlign(Paint.Align.RIGHT); - canvas.drawText(String.valueOf(i+1),(mWidth*1/12)*k,(mWidth*1/12)*j,p); + canvas.drawText(String.valueOf(i+1),(mWidth/12)*k,(mWidth/12)*j,p); k+=4; if (k > 11) { k = 3; @@ -151,7 +148,7 @@ public class SudokuCellView extends View { p.setAntiAlias(true); p.setTextSize(Math.min(mHeight * 3 / 4, mHeight * 3 / 4)); p.setTextAlign(Paint.Align.CENTER); - canvas.drawText(String.valueOf(mGameCell.getValue()), mHeight/2, mHeight/2 + mHeight/4, p); + canvas.drawText(String.valueOf(mGameCell.getValue()), mHeight / 2, mHeight / 2 + mHeight / 4, p); } public int getRow() { @@ -160,4 +157,11 @@ public class SudokuCellView extends View { public int getCol() { return mCol; } + + /*@Override + public Parcelable onSaveInstanceState() { + Parcelable state = super.onSaveInstanceState(); + + return state; + }*/ } diff --git a/app/src/main/java/tu_darmstadt/sudoku/view/SudokuFieldLayout.java b/app/src/main/java/tu_darmstadt/sudoku/ui/view/SudokuFieldLayout.java similarity index 85% rename from app/src/main/java/tu_darmstadt/sudoku/view/SudokuFieldLayout.java rename to app/src/main/java/tu_darmstadt/sudoku/ui/view/SudokuFieldLayout.java index a6de84b..cefd49d 100644 --- a/app/src/main/java/tu_darmstadt/sudoku/view/SudokuFieldLayout.java +++ b/app/src/main/java/tu_darmstadt/sudoku/ui/view/SudokuFieldLayout.java @@ -1,6 +1,7 @@ -package tu_darmstadt.sudoku.view; +package tu_darmstadt.sudoku.ui.view; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; @@ -9,12 +10,8 @@ import android.view.MotionEvent; import android.view.View; import android.widget.RelativeLayout; -import java.util.List; - import tu_darmstadt.sudoku.controller.GameController; import tu_darmstadt.sudoku.game.GameCell; -import tu_darmstadt.sudoku.game.GameSettings; -import tu_darmstadt.sudoku.view.highlighting.CellHighlightTypes; /** * Created by Timm Lippert on 11.11.2015. @@ -26,6 +23,7 @@ public class SudokuFieldLayout extends RelativeLayout { private int sectionWidth; private int gameCellWidth; private int gameCellHeight; + private SharedPreferences settings; public SudokuCellView [][] gamecells; AttributeSet attrs; @@ -36,6 +34,10 @@ public class SudokuFieldLayout extends RelativeLayout { setBackgroundColor(Color.argb(255, 200, 200, 200)); } + public void setSettings(SharedPreferences sharedPref) { + settings = sharedPref; + } + public void setGame(GameController gc) { if (gc == null) throw new IllegalArgumentException("GameController may not be null."); gameController = gc; @@ -58,7 +60,13 @@ public class SudokuFieldLayout extends RelativeLayout { } } // Set connected Fields - for(GameCell c : gameController.getConnectedCells(row,col, GameSettings.getHighlightConnectedRow(), GameSettings.getHighlightConnectedColumn(), GameSettings.getHighlightConnectedSection())) { + + //String syncConnPref = sharedPref.getString(SettingsActivity., ""); + boolean highlightConnectedRow = settings.getBoolean("pref_highlight_rows", true); + boolean highlightConnectedColumn = settings.getBoolean("pref_highlight_cols", true); + boolean highlightConnectedSection = settings.getBoolean("pref_highlight_secs", true); + + for(GameCell c : gameController.getConnectedCells(row,col, highlightConnectedRow, highlightConnectedColumn, highlightConnectedSection)) { gamecells[c.getRow()][c.getCol()].setHighlightType(CellHighlightTypes.Connected); } // Select touched Cell diff --git a/app/src/main/res/drawable-hdpi/privacyfriendlyappslogo.png b/app/src/main/res/drawable-hdpi/privacyfriendlyappslogo.png new file mode 100644 index 0000000000000000000000000000000000000000..69f63a8dad65c0d7bbb39c6792ef5574c35247a5 GIT binary patch literal 75215 zcmeEugFG`fB}*!DcvE`4N_7HBHaSg&CmlPASDeBt(0_kN(w{QPyx1;{^y~ZZ?t}dc9G=BvB z_n&{S)7Ig?1=%_Odso2zINgmMIJr5vIRAeiatp}y>R-Y{0M!Ud zJDC}~*gL(ox3>|K{G&T+1zTeaGc_~g_Z}jgf8X&xD;4?kl|rgcmS(_S|LjPNTZHp} zUHkX_BAkD=`ybo?mu~;L3Mf|$7m)N{2PKBf%+W83h9-fg@KW-vJNh<4*`7|*ZQ;r* zQ{JQTQN{1mB*F9yExy?YB`jH-)K;FnkyqhbuW^Qo74La*6_}UYZy@cT!+DJ(qdc<| zFE>US^|8Qz=4+26m7&R+W%`2&@Yh{%1ke=pt zqW!tlPYdP)fu?H&=YteCE9s)4H%?pMT8G7(g`v6_tZxX3J?wG;|DniU0XwBmsh4wS1|L6|uRyr?x@D zxOMkMHM`4--gIBe(cP{2h5*$xk)*1qJIW;Z0vF<(Id(fg-3XSO_Q)|WK;|~(FR5#J z&L0X!QTe`)^u1U%>PcuEE0;Jsh4sKR&#P50tBE$$6)ZAW;yyIbgDhfvNj{37HBq$; zdflXzWx0d#?yJ)NjVrCT{)ShlOs-q6tgq#cHroC3`Q6!6N$&+9R*P_}}qBhs6_%tA$l2h53?^H+lu zdrr(T&qwX#m!^@;7;DWATjv#Wk!gJwbBV>PH;0DJ%iTiy6e-+m#IwH(?)t7FA;;Gn zkDoBjML3Ra@ciu%NbJi^`GA)}i)3oS?c?^3{4?OxD@p7{T8p z^WT=t#KfhLo^x1mWSRCU@1C9FwL{vkV)b)-^=noq;c&7Zg;Mo3gk?;y>Dol3#Z+#t zjGH+baPS$H{)R0ANsZpD9kJh28ttE^pXOty^dOH<4X>wY&wW?k$t|o?8QOU5A)&UK za?w7?1W_$T(7@bJS64NLc6FDBUJ!L=I%E7&!YFO`ExgO>n_(1BgKRyq_JE{=^nWi; z!e|y0>teAu8}LF^Z&NzvRnN}1Z@=nNTz(PkJx@g0B=~eG$VuBs(fUbn`?s7oWU`-c z!`@pLJF16=7YWfWq|2k*xA1Hnvqfh@E=}NG$gs3*<$COtPnzeanc_Z9xH7!{dp9Rk zZYfBwa{hVLIQCQlg}-y+*>Mq7lX&P&aE?2CK$7q4JH`z;;h(|9kfHQ@XDehnDslQ( zhln~TY{}U=_wu4?^7mwWSy~TUFw9ZaNlxr%{I~sUAteQq1nf9Ho6>>QvzU{dNdE>;-CzrtrTI2X+VSjaI zfzns_#ex?KepgQWSy(|l4GVHGcxQdn%u!W^fWna2!@#V<2Eym(o9AjQVM?L=Fo4K0 zc7dmkQ!$Zy=Gk|)`X^sdQ|J7Hxna{bn{^&f4P?xQZgk29BuXacEsg5mP{9+4HH8&KW=TS-Dr^WwDx@!=gQQ+dZ06Nr0 zbsAotQ|;VuOlCoZ!E25XsPe(PW=K;n3?WARw%Bi^ z`!NIGVqZsMaO8--a?{Q~$U>M3zBzTSV?re!!q)Bi=g!y9cEIAZVT@S`I|6BNES?F+ zUzD((X}l~gl+?9wXlIDP9mOusH7l$xcUf0g)&4FYXV;k~#G<1;PfP6CcvZ8I=2&g4 z84NGBilV3W`+h|aGO~YCR`a}1{Ij@N=sc$Ek|zIo_kr-M=5&=MusXu%6xAY9Wkrkh z?PhU{bzFIW$P;^d=wL;Vn2|}4;lQ8&o6_6DjQ10s?@7(g{PlvcPDKFGt`(@$R|SR>!K3)I3)9%SCSdUo_?+T0EQ` zx0P#;K;Zq=EG32scP1^sMJ6? z*Cs9a=)8X%FT{;Of7_2u#>XfT9x%pH?XxV>17_2S{+RczPNu74JIRk|ciHRu@F`ed zF~S@F2fKqtE2?GC>h4n`KbZCG`P^lcr5~+C;x@)AX5-C~i4|NHLOW=|cyfFbe6gjn z`T(Z`G*@HTJ73-2@TQS$?&}DxF1mK_W`5~tWOktqHx{LSX!S1X!6#0cM&mD)eIEp? z*R^-s#%SzDxwD6i$0F|$B6EBec}KI9!=_#&>PKfAVx0$D#4f!^w*}*WL{+V5@s8&f zP!SZtB0tyHW+7pBSnp~JInS`T5jvX9Djljyaq-x<1@cW3pPhtdh7j#O?`hliDnw9@ z2!WhFdEIRN2}C*|)oM zr%I$8eN^!Fe9M)SP^Fl9BiZ!lk@OslRYmPisJp&M$OKV4)AUrWb_bbEq})gko$43% zdKN~j8n(r1{G&3-WDCa-(STa^Pu}s}x_GFDQ)Q zufWU(czq46J*W|Dl}#=!ZsQ+`d(KntiGkARou_0)cu2R4(xAAt*52he=^VU-dAyM zCt5#Md)NNLzC<&zf-=hp`ObxDkkfO!uaTET>`7-y0viCWGn*t_XTeCgo zeJzjW>^JB^;@BeBm z0{aM)v&Ca)%_3aenxCPx@BKWv5GbemIK!?-yxUbp{x%WUJx9^vsXqVi>7y*v`lcND z&&8L_isqXS$A5hfY>IaMx=Z80OwBU^E-5|{5Q{2Ud5#$DhC6$P`^`T-I)pmbDb)>7 z%%d6~busT-2|$k28p+n4DV6MCyk{=h|ER6))=Ck^2Foc{MBiJo>^`JP{Rnz4&B$77 znb%(!YM34KqoPcEczv-}MMr;%p941elB0Z9k#^_BFzFUwmIEWamQ3^a?(}iKAH0v- z1F`CJ^OPgC?n(Dqvs=UYWx*ItNox$0q%iX{bH%P(R_3X=$df>Z)a`GrU7Z&WD$DT) zs^su%mZi?>c7j?xv7>Z@toBWfvbn~-_F@~svvK)Q%hK_6jQ3p|D}AHrE-8x$G^}V2 z7gg$kUQbkNE(!q)4?o6S42Rt-4#>ruk?)|xW9Xzizb{X=;rE92P+Sm;vFA!51!@}S zRAEebFFjB{%G&2($uICZe_FV#T5GSJ2ycDEq4cK!J95?pMT=EopQn?v!M0)E+RsO& zT-mreRTm?&D~<{M`7xFo4g*>)P?;NKocGT{Xqk0>MT#*^94JKU;*Nt|PBBvkygGHikC8 z88x_=$5c<(5kz#;SFP-|B42H*xu_@fv9WZz)nKev?2fg}*z>mC!SJLmJ+;!4+2$r; z_jGt1W6}<&q+rpt>3V|4T<62N6W+OO#_hC)& z@pg~|+d@y@-C}=md)5*7Pv9N1TqpUxyhB$!60?B*8R1?bZZ=kXjYyVvwLSa1)ZVyA z51F+h=hiAs)75UU*8o&cv#?I(M->sJoAH!gLpD!)yImg#+jFC>8JTL9hKLkzA*Ker z8CnN=uHuiFnO|CcK&DAP-GvRPFQ7E4%+{~CQ%Blhs&K~?AThDWzHf9&(b>Q+8_$S8 zMEqItLvMH?1>(octskxCjaUY9&a_1+%rAS8ya85gUDs1PTSH)tN5({ZtDOP;IbGd% z=LeU5pl4`(AfZYKs52J5NzPm`?XufYO4PHNU$?W^>y3ft$vCk=Ex!p}er>tfc_Tte zhMIfY%p|(q&>A2DnLvsW^@^)@4G&5^wt3-(evUr2lnGFy5LPhV9$f9n^fBSZWPa-^ z&q=?wA<6~{D(U~E6aX2SgyUMQOI_ASPa3lsFb_2i+js1!Ih)^NcboIdKF!pJfH zdDJC*HZV^nxnkSH{87#MSI(NJc1MowJ104U9(%h;hAAw<2#E8G$yqXGZI09@ALl(X ze?Am@R^iNkeK(q(M_6FON1mDPw>H%wog79I;d(b%fg(~XYk%(j`Kpj*87F85SLCsr zUzqN1mSS1Bt=!8G1}cx@`x~YV?IF zW)ukqTW-cneloQ@7S|G)6$xv-0=4)$zKGUjFK%&%WHx@3Kw|P;UqC1xpl-$|DDO8w z5aM0GN&`UUQk@I)q(@I=HzC1p4gv}|{%xRVwa8Ui56N7vBAHs_*2sq_SSw~*yNE}r z@V?4OQ=P)RHz4??eGoanN1y|%o=zpsC16hE+;RuLqWJ__V%hH1VbSmO zALLt;BYU18v163xS%Ihc@paLrcnNLk>(++;%=xDEt(#2F?GXfH6CML3c+NJs8~a#U zBB5`0$17k_fBp;K;ZBuABOe~j;?xrxM%NOJs%m;JTxu%}s@NV?w>;NtIoW?Lo@3i_ zelj~orf|ts4CW7h!)aFx8Vn#izIk7~d4qtjr59a(Kj!G$=}xvCXs*x`QZHtNZ`>Tj zOd&URzPhYE;Jq=YCI=z0>4cGuTyeR= zSK!0fQ5$kM7>!8FoATz~uZ#MIa$g#~ScgulK6u`Pw|A5z40

a-9rkv%#XxNK$v_ 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 Hn7;Tw3y0y# literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/secuso_logo_blau_blau.png b/app/src/main/res/drawable-hdpi/secuso_logo_blau_blau.png new file mode 100644 index 0000000000000000000000000000000000000000..43a4df6c4003c64326f710f6e26c59026a7f0f56 GIT binary patch literal 13625 zcmd6O^;eW((?3c}gS3Qzpfs#>H%du&EwCtEONY`(2?*?xN=YsP(%rQzBHbk{z2MRa zyzBFP&w0=HKX}ic-FvV5hkN3lnQP`VbH%;URwH@D@CXYFi{zEMvK|)JgF4LrI08J( zZ%NS1CFX+TsGy~Qg;kSG^w$;_vnKRVH}%HC;%EE!eNeu!oQk zfjTRFbVTQ*DY3Y3$agIR-5-X(P9gmj|Ne2A-shDdRQm;60ULTTzZu?KcL5DKl0fDK zJ*pf;qKB4)&JRL-p(uEki1V#nF+Yz2IgY}RgEAaPfjlxttxxmcGT{H}GTh=$@lejo zLd(3(j3i51?Qkwk*&i>aG)hpIU%a?OJd*_bM6+jWQ z3ZyyMcWfpuWs%ZFWnuGWA(K{zy4z zyPDGjyZfE__-V4d@}fKB5t4EvQ0MsW7vzM%5(D-|j46Ut17V%&O*Le5>m9p^lXc$VB+T9|3=M7=}GnOTT3E9~)cQWbH+J zzKjL@q1*+W1mT}v!(Is8oYsv`o%UC>r~D!~dp+1uzWI~T34WmBv>Sc6ciN0b*byUT zJJu4{l1lsc8_Ql18I|6pfht6?SM?1g&y162QKg~io{GK2vjkSIE8NIDMy?TJT<#Zrb$dVNgY9$I={QN_sry4@YyKY4*N!bKmkm z)n|I6qHcaOF9^a}AHxj=K$-lOe{kM)GQ4z1DnFT#2OCdk?6oGhSHe0kaQV1r1K7)w zjogOh2B;t}h>Xj_j9kiL0vX159S7--{D*4&JQY&hB9lOa&OyQHv*j|UjlWw?XET<2 zb7cUtFKl4T4;1TJuC0dS7qV|07SG@K8Mwfh%NDKN9q&JmNu8A*4ddlbMdt>!YfXSL z91*Nr)B_vrdqoY4y~FrqYqne5LRzvUz4^x{u#c6M*DM@}HZ(3|tKIy6JAfV2Y04F2 zWXsX9ublP@44uZm7OuP%Y>oLN=cdIc3a(S?hZ}@nZN;U+*}BA z8bei#EyZr{QPhoEmtHxGmgURnE5&y=N}pV=Y*vf+_rIT?fSh(5-zCpAjZotf?ADF7 ziZjWB_$@1#D`pikZC6N;X*Tr#3_HI<5q|vWK+rz?dL+bQYEo)+&}6I4co&&SrR+_+T&Mne!Af z?>UQ1fLZ;4oLR_s|HNtw(H^4JFN1<-70A6Ef)}vWY$w4NcFdp;lDcLa?|63)f^XLU zAg(_$Y#W^fVuX7zZc6iK)v~@=RF_LCIs17qqjlJt%Gn_8euWYCfcV%tKZM738d)&f zs-FYyQ$i5}a=Su9br zUlqu&uDVXhFVjlANzQw7le*(t5)U1np&rh$E3k0_8SJ;HDyjCvgH~$#5=bdg_4{)^ z==MRL(r1iIsCF&b$9YOr_CV`AI9T#&&(D^_pq$yaN>Uy=^+pIu;Rmiq<$SFOj+Z`pw2O{3+H9L*lTp)Ji=MzB}!}|z=iW_GoIwp>5MkM z#0wC?yg*)6v77&ow%NLclF&QNv7y9U&p7Uuua{c8Egg(*mpYqb!C;XinO~;-L*9I? zS4l*FH0v632KzOjGwy18J^ZfKo^|Wk{hu>jpVpX|t+lLZen4whsvMc}fHFIOg1lxu zp${j2Md#iu%?3qTJgz&#xKr}z<2KsvH-QSFH$4>yI{+aHUtbcouf-+71)4kF)e`Cn z^qW!CQEs_(<3?-Ec^ziEt~u1i^lA18v#fJFEA^UuB3zqYAxNox`3V*BLs={XzAPv< zxFclZ_-SpZnpMB&Fb@Lwmcd66J9OMhI2PN zCG6n2MUuWZKlX#Xf7?4Yv `rlOiy{f};2UlUno2pV{ulfs~Tl~sIg;+8D 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%0D;7wDbrSR1 z)w#~8PAD;C$=E>uctx-SF=s + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 886738c..c6cecfa 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -5,7 +5,7 @@ android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" - tools:context="tu_darmstadt.sudoku.view.MainActivity"> + tools:context="tu_darmstadt.sudoku.activity.MainActivity"> + tools:context="tu_darmstadt.sudoku.activity.GameActivity"> diff --git a/app/src/main/res/layout/content_game_view.xml b/app/src/main/res/layout/content_game_view.xml index fc2461d..4150aec 100644 --- a/app/src/main/res/layout/content_game_view.xml +++ b/app/src/main/res/layout/content_game_view.xml @@ -9,8 +9,8 @@ android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" - tools:showIn="@layout/app_bar_game_view" tools:context="tu_darmstadt.sudoku.view.GameActivity"> - + + android:text="@string/description" android:id="@+id/textView" /> diff --git a/app/src/main/res/menu/activity_game_view_drawer.xml b/app/src/main/res/menu/activity_game_view_drawer.xml index 7e17bf4..6400c4a 100644 --- a/app/src/main/res/menu/activity_game_view_drawer.xml +++ b/app/src/main/res/menu/activity_game_view_drawer.xml @@ -2,23 +2,22 @@

- - - - - + - + - - + \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 60cf80b..df3235d 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -17,7 +17,13 @@ Einstellungen - Auswahl + Feld Auswahl Werte + + Diese App gehört zur Gruppe der Privacy Friendly Apps. + Mehr Informationen unter: + In Zusammenarbeit mit: + Autor: \nChristopher Beckmann, Timm Lippert + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 3ab3e9c..06aeefe 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,6 +1,6 @@ - #3F51B5 - #303F9F + #024265 + #024265 #FF4081 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0ec2a5a..c25e113 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,7 +2,7 @@ Sudoku Sudoku - + New Game Settings Highscore @@ -11,31 +11,49 @@ Help About + a privacy friendly logic puzzle + Open navigation drawer Close navigation drawer - + Settings Settings + + Highlighting - - Selection - Values + Selection highlight + Connected rows + Connected columns + Connected sections + + Value highlight + Same values + Notes + + + Game + + Game settings + Note deletion + Automatically remove notes when setting values on connected cells - - General + + Privacy friendly Sudoku + v0.1 + Author: Christopher Beckmann, Timm Lippert + In affiliation with: + This application belongs to the Privacy Friendly Apps. + More information can be found on: + https://www.secuso.org - Enable social recommendations - Recommendations for people to contact - based on your message history - - Display DeineMudda - Anonymous + - Add friends to messages + + - Data & sync - Sync frequency 15 minutes @@ -66,17 +81,5 @@ 180 360 -1 - - - System sync settings - - - Notifications - - New message notifications - - Ringtone - Silent - - Vibrate + --> diff --git a/app/src/main/res/xml/pref_data_sync.xml b/app/src/main/res/xml/pref_data_sync.xml deleted file mode 100644 index ffda831..0000000 --- a/app/src/main/res/xml/pref_data_sync.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - diff --git a/app/src/main/res/xml/pref_general.xml b/app/src/main/res/xml/pref_general.xml index d7cfdc5..3e70e0f 100644 --- a/app/src/main/res/xml/pref_general.xml +++ b/app/src/main/res/xml/pref_general.xml @@ -1,14 +1,16 @@ - + + + - + android:maxLines="1" /> --> - + android:positiveButtonText="@null" /> --> diff --git a/app/src/main/res/xml/pref_headers.xml b/app/src/main/res/xml/pref_headers.xml index e94b4ce..59d1dfe 100644 --- a/app/src/main/res/xml/pref_headers.xml +++ b/app/src/main/res/xml/pref_headers.xml @@ -2,15 +2,12 @@ -
+
-
- diff --git a/app/src/main/res/xml/pref_highlighting.xml b/app/src/main/res/xml/pref_highlighting.xml index ff4be12..14f8851 100644 --- a/app/src/main/res/xml/pref_highlighting.xml +++ b/app/src/main/res/xml/pref_highlighting.xml @@ -1,11 +1,33 @@ - - + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/pref_notification.xml b/app/src/main/res/xml/pref_notification.xml deleted file mode 100644 index 298ecfb..0000000 --- a/app/src/main/res/xml/pref_notification.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - diff --git a/app/src/test/java/tu_darmstadt/sudoku/ExampleUnitTest.java b/app/src/test/java/tu_darmstadt/sudoku/ExampleUnitTest.java index 8d1e3e6..3dcb8fd 100644 --- a/app/src/test/java/tu_darmstadt/sudoku/ExampleUnitTest.java +++ b/app/src/test/java/tu_darmstadt/sudoku/ExampleUnitTest.java @@ -1,4 +1,4 @@ -package tu_darmstadt.sudoku.view; +package tu_darmstadt.sudoku.ui.view; import org.junit.Test; diff --git a/app/src/test/java/tu_darmstadt/sudoku/game/solver/SolverTest.java b/app/src/test/java/tu_darmstadt/sudoku/game/solver/SolverTest.java index f2c3a46..9745627 100644 --- a/app/src/test/java/tu_darmstadt/sudoku/game/solver/SolverTest.java +++ b/app/src/test/java/tu_darmstadt/sudoku/game/solver/SolverTest.java @@ -28,6 +28,10 @@ public class SolverTest { { 7, 0, 0, 0, 1, 0, 3, 0, 5 }}; } + //000041000060000200000000000320600000000050041700000000000200300048000000501000000 + + //501900000200004950390700026030001072006057000072009041000070409640000000700010305 + @Test public void solveTest() { }