From 98bacc4dc385142d5b0e492c328552554821b749 Mon Sep 17 00:00:00 2001 From: Christopher Beckmann Date: Wed, 4 Nov 2020 16:09:22 +0100 Subject: [PATCH] Fixed green button color for API<21. Fixed #60 --- .../ui/MainActivity.java | 6 ++ .../view/CreateSudokuSpecialButtonLayout.java | 13 +++- .../ui/view/SudokuKeyboardLayout.java | 12 +++- .../ui/view/SudokuSpecialButtonLayout.java | 11 +++- .../res/drawable-hdpi/numpad_highlighted.xml | 11 ++++ .../drawable-hdpi/numpad_highlighted_four.xml | 11 ++++ .../numpad_highlighted_three.xml | 11 ++++ .../numpad_selected_complete.xml | 11 ++++ .../numpad_highlighted_four.xml | 11 ++++ .../numpad_highlighted_four.xml | 2 +- .../res/drawable-v21/numpad_highlighted.xml | 2 +- .../drawable-v21/numpad_highlighted_four.xml | 2 +- .../drawable-v21/numpad_highlighted_three.xml | 2 +- .../drawable-v21/numpad_selected_complete.xml | 2 +- app/src/main/res/drawable/numfirst.png | Bin 3689 -> 11938 bytes app/src/main/res/drawable/numfull.png | Bin 4492 -> 9003 bytes .../main/res/drawable/numpad_highlighted.xml | 2 +- .../res/drawable/numpad_highlighted_four.xml | 2 +- .../res/drawable/numpad_highlighted_three.xml | 2 +- .../res/drawable/numpad_selected_complete.xml | 2 +- .../drawable/numpad_unselected_complete.xml | 2 +- .../res/layout-hdpi/content_game_view.xml | 59 ++++++++++++++++++ .../content_game_view_create_sudoku.xml | 59 ++++++++++++++++++ app/src/main/res/layout/content_game_view.xml | 23 +++---- .../content_game_view_create_sudoku.xml | 23 +++---- app/src/main/res/values-hdpi/styles.xml | 15 +++++ app/src/main/res/values-night/styles.xml | 6 +- app/src/main/res/values/attrs.xml | 14 +++++ app/src/main/res/values/styles.xml | 10 ++- 29 files changed, 285 insertions(+), 41 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/numpad_highlighted.xml create mode 100644 app/src/main/res/drawable-hdpi/numpad_highlighted_four.xml create mode 100644 app/src/main/res/drawable-hdpi/numpad_highlighted_three.xml create mode 100644 app/src/main/res/drawable-hdpi/numpad_selected_complete.xml create mode 100644 app/src/main/res/drawable-night-hdpi/numpad_highlighted_four.xml create mode 100644 app/src/main/res/layout-hdpi/content_game_view.xml create mode 100644 app/src/main/res/layout-hdpi/content_game_view_create_sudoku.xml create mode 100644 app/src/main/res/values-hdpi/styles.xml diff --git a/app/src/main/java/org/secuso/privacyfriendlysudoku/ui/MainActivity.java b/app/src/main/java/org/secuso/privacyfriendlysudoku/ui/MainActivity.java index 4350307..4b6578f 100644 --- a/app/src/main/java/org/secuso/privacyfriendlysudoku/ui/MainActivity.java +++ b/app/src/main/java/org/secuso/privacyfriendlysudoku/ui/MainActivity.java @@ -23,6 +23,7 @@ import android.app.DialogFragment; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; +import android.content.res.Configuration; import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; @@ -198,6 +199,11 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig difficultyBar.setRating(GameDifficulty.getValidDifficultyList().indexOf(lastChosenDifficulty) + 1); } + if(Configuration.SCREENLAYOUT_SIZE_SMALL == (getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK)) { + difficultyBar.setScaleX(0.75f); + difficultyBar.setScaleY(0.75f); + } + // on first create always check for loadable levels! SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("savesChanged", true); diff --git a/app/src/main/java/org/secuso/privacyfriendlysudoku/ui/view/CreateSudokuSpecialButtonLayout.java b/app/src/main/java/org/secuso/privacyfriendlysudoku/ui/view/CreateSudokuSpecialButtonLayout.java index 299cca3..60c65da 100644 --- a/app/src/main/java/org/secuso/privacyfriendlysudoku/ui/view/CreateSudokuSpecialButtonLayout.java +++ b/app/src/main/java/org/secuso/privacyfriendlysudoku/ui/view/CreateSudokuSpecialButtonLayout.java @@ -23,6 +23,7 @@ import android.app.DialogFragment; import android.app.FragmentManager; import android.content.Context; import android.content.DialogInterface; +import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.drawable.Drawable; @@ -58,6 +59,7 @@ public class CreateSudokuSpecialButtonLayout extends LinearLayout implements IHi Canvas canvas; FragmentManager fragmentManager; Context context; + float buttonMargin; OnClickListener listener = new OnClickListener() { @Override @@ -95,6 +97,11 @@ public class CreateSudokuSpecialButtonLayout extends LinearLayout implements IHi public CreateSudokuSpecialButtonLayout(Context context, AttributeSet attrs) { super(context, attrs); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CreateSudokuSpecialButtonLayout); + buttonMargin = a.getDimension(R.styleable.CreateSudokuSpecialButtonLayout_createSudokuSpecialKeyboardMargin, 5f); + a.recycle(); + setWeightSum(fixedButtonsCount); this.context = context; } @@ -117,7 +124,7 @@ public class CreateSudokuSpecialButtonLayout extends LinearLayout implements IHi if(gameController != null) { gameController.registerHighlightChangedListener(this); } - fixedButtons = new CreateSudokuSpecialButton[fixedButtonsCount]; + fixedButtons = new CreateSudokuSpecialButton[fixedButtonsCount]; LayoutParams p; int i = 0; //ArrayList type = (ArrayList) SudokuButtonType.getSpecialButtons(); @@ -127,9 +134,9 @@ public class CreateSudokuSpecialButtonLayout extends LinearLayout implements IHi p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 1); } else { p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 1); - fixedButtons[i].setPadding(25, 0, 25, 0); + fixedButtons[i].setPadding((int)buttonMargin*5, 0, (int)buttonMargin*5, 0); } - p.setMargins(5, 5, 5, 5); + p.setMargins((int)buttonMargin, (int)buttonMargin, (int)buttonMargin, (int)buttonMargin); //int width2 =width/(fixedButtonsCount); //p.width= width2-15; 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 fa7149c..22fae0a 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 @@ -17,7 +17,9 @@ package org.secuso.privacyfriendlysudoku.ui.view; import android.content.Context; +import android.content.res.TypedArray; import android.graphics.Canvas; +import android.graphics.Color; import android.util.AttributeSet; import android.util.TypedValue; import android.view.Gravity; @@ -42,6 +44,7 @@ public class SudokuKeyboardLayout extends LinearLayout implements IHighlightChan Symbol symbolsToUse = Symbol.Default; float normalTextSize = 20; // in sp LinearLayout [] layouts = new LinearLayout[2]; + float buttonMargin; OnClickListener listener = new OnClickListener() { @Override @@ -58,6 +61,11 @@ public class SudokuKeyboardLayout extends LinearLayout implements IHighlightChan public SudokuKeyboardLayout(Context context, AttributeSet attrs) { super(context, attrs); this.attrs = attrs; + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SudokuKeyboardLayout); + buttonMargin = a.getDimension(R.styleable.SudokuKeyboardLayout_sudokuKeyboardMargin, 5f); + normalTextSize = a.getDimension(R.styleable.SudokuKeyboardLayout_sudokuKeyboardTextSize, 20f); + a.recycle(); } public void setSymbols(Symbol s) { @@ -85,7 +93,7 @@ public class SudokuKeyboardLayout extends LinearLayout implements IHighlightChan p = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT, 1); } //if (i == 0) p.bottomMargin=10; else p.topMargin=10; - p.setMargins(0, 5, 0, 5); + p.setMargins(0, (int) buttonMargin, 0, (int) buttonMargin); layouts[i] = new LinearLayout(getContext(),null); layouts[i].setLayoutParams(p); layouts[i].setWeightSum(numberOfButtonsPerRow); @@ -106,7 +114,7 @@ public class SudokuKeyboardLayout extends LinearLayout implements IHighlightChan } else { p = new LayoutParams(LayoutParams.MATCH_PARENT, 0, 1); } - p.setMargins(5,5,5,5); + p.setMargins((int) buttonMargin, (int) buttonMargin, (int) buttonMargin, (int) buttonMargin); buttons[buttonIndex].setLayoutParams(p); /* removed GridLayout because of bad scaling will use now a Linearlayout Spec rowSpec = spec(k,1); 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 b51d1fc..06316ec 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 @@ -23,6 +23,7 @@ import android.app.DialogFragment; import android.app.FragmentManager; import android.content.Context; import android.content.DialogInterface; +import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.drawable.Drawable; @@ -59,6 +60,7 @@ public class SudokuSpecialButtonLayout extends LinearLayout implements IHighligh Canvas canvas; FragmentManager fragmentManager; Context context; + float buttonMargin; OnClickListener listener = new OnClickListener() { @Override @@ -111,6 +113,11 @@ public class SudokuSpecialButtonLayout extends LinearLayout implements IHighligh public SudokuSpecialButtonLayout(Context context, AttributeSet attrs) { super(context, attrs); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SudokuSpecialButtonLayout); + buttonMargin = a.getDimension(R.styleable.SudokuSpecialButtonLayout_sudokuSpecialKeyboardMargin, 5f); + a.recycle(); + setWeightSum(fixedButtonsCount); this.context = context; } @@ -140,8 +147,8 @@ public class SudokuSpecialButtonLayout extends LinearLayout implements IHighligh } else { p = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 0, 1); } - fixedButtons[i].setPadding(25, 0, 25, 0); - p.setMargins(5, 5, 5, 5); + fixedButtons[i].setPadding((int)buttonMargin*5, 0, (int)buttonMargin*5, 0); + p.setMargins((int)buttonMargin, (int)buttonMargin, (int)buttonMargin, (int)buttonMargin); //int width2 =width/(fixedButtonsCount); //p.width= width2-15; diff --git a/app/src/main/res/drawable-hdpi/numpad_highlighted.xml b/app/src/main/res/drawable-hdpi/numpad_highlighted.xml new file mode 100644 index 0000000..7af2c1a --- /dev/null +++ b/app/src/main/res/drawable-hdpi/numpad_highlighted.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/numpad_highlighted_four.xml b/app/src/main/res/drawable-hdpi/numpad_highlighted_four.xml new file mode 100644 index 0000000..8b8e766 --- /dev/null +++ b/app/src/main/res/drawable-hdpi/numpad_highlighted_four.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/numpad_highlighted_three.xml b/app/src/main/res/drawable-hdpi/numpad_highlighted_three.xml new file mode 100644 index 0000000..fe0f0cf --- /dev/null +++ b/app/src/main/res/drawable-hdpi/numpad_highlighted_three.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/numpad_selected_complete.xml b/app/src/main/res/drawable-hdpi/numpad_selected_complete.xml new file mode 100644 index 0000000..889373e --- /dev/null +++ b/app/src/main/res/drawable-hdpi/numpad_selected_complete.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/app/src/main/res/drawable-night-hdpi/numpad_highlighted_four.xml b/app/src/main/res/drawable-night-hdpi/numpad_highlighted_four.xml new file mode 100644 index 0000000..29b7638 --- /dev/null +++ b/app/src/main/res/drawable-night-hdpi/numpad_highlighted_four.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-night-v21/numpad_highlighted_four.xml b/app/src/main/res/drawable-night-v21/numpad_highlighted_four.xml index 87ce8d9..17cc223 100644 --- a/app/src/main/res/drawable-night-v21/numpad_highlighted_four.xml +++ b/app/src/main/res/drawable-night-v21/numpad_highlighted_four.xml @@ -6,6 +6,6 @@ android:startColor="?attr/activeButtonColor" /> \ No newline at end of file diff --git a/app/src/main/res/drawable-v21/numpad_highlighted.xml b/app/src/main/res/drawable-v21/numpad_highlighted.xml index 2c00338..f63774f 100644 --- a/app/src/main/res/drawable-v21/numpad_highlighted.xml +++ b/app/src/main/res/drawable-v21/numpad_highlighted.xml @@ -6,6 +6,6 @@ android:startColor="?attr/activeButtonColor" /> \ No newline at end of file diff --git a/app/src/main/res/drawable-v21/numpad_highlighted_four.xml b/app/src/main/res/drawable-v21/numpad_highlighted_four.xml index 87ce8d9..17cc223 100644 --- a/app/src/main/res/drawable-v21/numpad_highlighted_four.xml +++ b/app/src/main/res/drawable-v21/numpad_highlighted_four.xml @@ -6,6 +6,6 @@ android:startColor="?attr/activeButtonColor" /> \ No newline at end of file diff --git a/app/src/main/res/drawable-v21/numpad_highlighted_three.xml b/app/src/main/res/drawable-v21/numpad_highlighted_three.xml index 05aa808..80e1a27 100644 --- a/app/src/main/res/drawable-v21/numpad_highlighted_three.xml +++ b/app/src/main/res/drawable-v21/numpad_highlighted_three.xml @@ -6,6 +6,6 @@ android:startColor="?attr/activeButtonColor" /> \ No newline at end of file diff --git a/app/src/main/res/drawable-v21/numpad_selected_complete.xml b/app/src/main/res/drawable-v21/numpad_selected_complete.xml index 62dd7f4..f2863e2 100644 --- a/app/src/main/res/drawable-v21/numpad_selected_complete.xml +++ b/app/src/main/res/drawable-v21/numpad_selected_complete.xml @@ -6,6 +6,6 @@ android:startColor="?attr/completedButtonColor" /> diff --git a/app/src/main/res/drawable/numfirst.png b/app/src/main/res/drawable/numfirst.png index 5e3d2e5301e14a73b5215e26dec24e2cb9d19609..867fcf3483d5d43bb4570a37942773e375fec6c4 100644 GIT binary patch literal 11938 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

9+%w1vFIbtS6hVbEF3v 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 literal 3689 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 diff --git a/app/src/main/res/drawable/numpad_highlighted.xml b/app/src/main/res/drawable/numpad_highlighted.xml index 7af2c1a..dccbe96 100644 --- a/app/src/main/res/drawable/numpad_highlighted.xml +++ b/app/src/main/res/drawable/numpad_highlighted.xml @@ -6,6 +6,6 @@ android:startColor="@color/lightblue" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/numpad_highlighted_four.xml b/app/src/main/res/drawable/numpad_highlighted_four.xml index 8b8e766..79da624 100644 --- a/app/src/main/res/drawable/numpad_highlighted_four.xml +++ b/app/src/main/res/drawable/numpad_highlighted_four.xml @@ -6,6 +6,6 @@ android:startColor="@color/lightblue" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/numpad_highlighted_three.xml b/app/src/main/res/drawable/numpad_highlighted_three.xml index fe0f0cf..c05857e 100644 --- a/app/src/main/res/drawable/numpad_highlighted_three.xml +++ b/app/src/main/res/drawable/numpad_highlighted_three.xml @@ -6,6 +6,6 @@ android:startColor="@color/lightblue" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/numpad_selected_complete.xml b/app/src/main/res/drawable/numpad_selected_complete.xml index 889373e..3c9dd64 100644 --- a/app/src/main/res/drawable/numpad_selected_complete.xml +++ b/app/src/main/res/drawable/numpad_selected_complete.xml @@ -6,6 +6,6 @@ android:startColor="@color/green" /> diff --git a/app/src/main/res/drawable/numpad_unselected_complete.xml b/app/src/main/res/drawable/numpad_unselected_complete.xml index 5bcd57c..a449008 100644 --- a/app/src/main/res/drawable/numpad_unselected_complete.xml +++ b/app/src/main/res/drawable/numpad_unselected_complete.xml @@ -1,5 +1,5 @@ - + diff --git a/app/src/main/res/layout-hdpi/content_game_view.xml b/app/src/main/res/layout-hdpi/content_game_view.xml new file mode 100644 index 0000000..134c0bf --- /dev/null +++ b/app/src/main/res/layout-hdpi/content_game_view.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout-hdpi/content_game_view_create_sudoku.xml b/app/src/main/res/layout-hdpi/content_game_view_create_sudoku.xml new file mode 100644 index 0000000..cb69830 --- /dev/null +++ b/app/src/main/res/layout-hdpi/content_game_view_create_sudoku.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/content_game_view.xml b/app/src/main/res/layout/content_game_view.xml index 134c0bf..62b1709 100644 --- a/app/src/main/res/layout/content_game_view.xml +++ b/app/src/main/res/layout/content_game_view.xml @@ -1,17 +1,17 @@ - + tools:context="org.secuso.privacyfriendlysudoku.ui.GameActivity" + tools:layout_editor_absoluteY="56dp"> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/sudokuLayout"> - + tools:context="org.secuso.privacyfriendlysudoku.ui.GameActivity" + tools:layout_editor_absoluteY="56dp"> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/sudokuLayout"> + + + + + + + + diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml index 3dfda28..478412b 100644 --- a/app/src/main/res/values-night/styles.xml +++ b/app/src/main/res/values-night/styles.xml @@ -1,7 +1,7 @@ - + + + +