Updated Launcher Icon

Added darkmode to game field
Fixed a crash on low density devices
Fixed a crash in the DailySudoku
Fixed the marking of custom levels in LoadGameActivity
Version increase to v3.0.0
This commit is contained in:
Christopher Beckmann 2020-10-01 01:14:05 +02:00
parent 94025a7fac
commit 74a739dfba
17 changed files with 245 additions and 120 deletions

View file

@ -11,8 +11,8 @@ android {
applicationId "org.secuso.privacyfriendlysudoku"
minSdkVersion 16
targetSdkVersion 29
versionCode 8
versionName "2.2.1"
versionCode 9
versionName "3.0.0"
vectorDrawables.useSupportLibrary = true
}
buildTypes {

View file

@ -23,19 +23,19 @@
<activity
android:name="org.secuso.privacyfriendlysudoku.ui.MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar"></activity>
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name="org.secuso.privacyfriendlysudoku.ui.TutorialActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar"></activity>
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name="org.secuso.privacyfriendlysudoku.ui.DailySudokuActivity"
android:label="@string/Sudoku"
android:theme="@style/AppTheme.NoActionBar"></activity>
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name="org.secuso.privacyfriendlysudoku.ui.CreateSudokuActivity"
android:label="@string/Sudoku"
android:theme="@style/AppTheme.NoActionBar"></activity>
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name="org.secuso.privacyfriendlysudoku.ui.SettingsActivity"
android:label="@string/title_activity_settings"
@ -47,15 +47,12 @@
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="sudoku" />
<data android:scheme="sudoku" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
@ -74,7 +71,6 @@
<activity
android:name="org.secuso.privacyfriendlysudoku.ui.HelpActivity"
android:label="@string/title_activity_help" />
<service
android:name="org.secuso.privacyfriendlysudoku.controller.GeneratorService"
android:enabled="true"

View file

@ -23,7 +23,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.Menu;
@ -43,15 +42,17 @@ import org.secuso.privacyfriendlysudoku.controller.database.DatabaseHelper;
import org.secuso.privacyfriendlysudoku.controller.database.model.DailySudoku;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import org.secuso.privacyfriendlysudoku.controller.SaveLoadStatistics;
import org.secuso.privacyfriendlysudoku.controller.qqwing.QQWing;
import org.secuso.privacyfriendlysudoku.game.GameDifficulty;
import org.secuso.privacyfriendlysudoku.game.GameType;
import org.secuso.privacyfriendlysudoku.ui.view.R;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;
import java.util.TimeZone;
/**
*The DailySudokuActivity is an activity that extends the AppCompatActivity.
@ -60,16 +61,12 @@ import java.util.Locale;
*/
public class DailySudokuActivity<Database> extends AppCompatActivity {
public class DailySudokuActivity extends AppCompatActivity {
List<DailySudoku> sudokuList;
SharedPreferences settings;
private final DatabaseHelper dbHelper = new DatabaseHelper(this);
RatingBar difficultyBar;
static final int MAIN_CONTENT_FADEOUT_DURATION = 150;
static final int MAIN_CONTENT_FADEIN_DURATION = 250;
private Handler mHandler;
private StatsActivity.SectionsPagerAdapter mSectionsPagerAdapter;
private SudokuListAdapter sudokuListAdapter;
private int dailyId;
@ -111,11 +108,9 @@ public class DailySudokuActivity<Database> extends AppCompatActivity {
difficultyBar = findViewById(R.id.first_diff_bar);
settings = PreferenceManager.getDefaultSharedPreferences(this);
mHandler = new Handler();
ListView listView = (ListView)findViewById(R.id.sudoku_list);
sudokuListAdapter = new DailySudokuActivity.SudokuListAdapter(this, sudokuList);
sudokuListAdapter = new SudokuListAdapter(this, sudokuList);
listView.setAdapter(sudokuListAdapter);
// Calculate the current date as an int id
@ -157,8 +152,6 @@ public class DailySudokuActivity<Database> extends AppCompatActivity {
difficultyBar.setNumStars(GameDifficulty.getValidDifficultyList().size());
difficultyBar.setMax(GameDifficulty.getValidDifficultyList().size());
difficultyBar.setRating(GameDifficulty.getValidDifficultyList().indexOf(dailyDifficulty)+1);
}
public void onClick(View view) {
@ -196,11 +189,7 @@ public class DailySudokuActivity<Database> extends AppCompatActivity {
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_stats, menu);
//getMenuInflater().inflate(R.menu.menu_stats, menu);
return true;
//return false;
return false;
}
@Override
@ -210,20 +199,15 @@ public class DailySudokuActivity<Database> extends AppCompatActivity {
// as you specify a parent activity in AndroidManifest.xml.
//noinspection SimplifiableIfStatement
switch(item.getItemId()) {
case R.id.action_reset:
SaveLoadStatistics.resetStats(this);
mSectionsPagerAdapter.refresh(this);
return true;
case android.R.id.home:
finish();
return true;
if (item.getItemId() == android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
private class SudokuListAdapter extends BaseAdapter {
private static class SudokuListAdapter extends BaseAdapter {
private Context context;
private List<DailySudoku> sudokuList;
@ -263,7 +247,7 @@ public class DailySudokuActivity<Database> extends AppCompatActivity {
TextView playedTime = (TextView)convertView.findViewById(R.id.loadgame_listentry_timeplayed);
TextView lastTimePlayed = (TextView)convertView.findViewById(R.id.loadgame_listentry_lasttimeplayed);
ImageView image = (ImageView)convertView.findViewById(R.id.loadgame_listentry_gametypeimage);
ImageView customImage = (ImageView)convertView.findViewById(R.id.loadgame_listentry_custom_label);
ImageView customImage = (ImageView)convertView.findViewById(R.id.loadgame_listentry_custom_icon);
image.setImageResource(R.drawable.icon_default_9x9);
@ -276,18 +260,16 @@ public class DailySudokuActivity<Database> extends AppCompatActivity {
customImage.setVisibility(View.INVISIBLE);
Calendar currentDate = Calendar.getInstance();
//int id = currentDate.get(Calendar.DAY_OF_MONTH) * 1000000
// + (currentDate.get(Calendar.MONTH) + 1) * 10000 + currentDate.get(Calendar.YEAR);
int id = sudoku.getId();
int dayOfMonth = id/1000000;
int month = (id/10000) % 100;
int year = id%10000;
Calendar cal = Calendar.getInstance();
cal.set(id%10000, (id/10000) % 100, id/1000000, 0, 0, 0 );
String str = String.format("%02d.%02d.%02d", dayOfMonth, month, year);
lastTimePlayed.setText(str);
DateFormat format = DateFormat.getDateInstance();
format.setTimeZone(TimeZone.getDefault());
lastTimePlayed.setText(format.format(cal.getTime()));
playedTime.setText(sudoku.getTimeNeeded());
return convertView;
}

View file

@ -42,7 +42,6 @@ import android.widget.TextView;
import org.secuso.privacyfriendlysudoku.controller.GameController;
import org.secuso.privacyfriendlysudoku.controller.GameStateManager;
import org.secuso.privacyfriendlysudoku.controller.NewLevelManager;
import org.secuso.privacyfriendlysudoku.controller.helper.GameInfoContainer;
import org.secuso.privacyfriendlysudoku.game.GameDifficulty;
import org.secuso.privacyfriendlysudoku.ui.listener.IDeleteDialogFragmentListener;
@ -229,7 +228,8 @@ public class LoadGameActivity extends BaseActivity implements IDeleteDialogFragm
TextView playedTime = (TextView)convertView.findViewById(R.id.loadgame_listentry_timeplayed);
TextView lastTimePlayed = (TextView)convertView.findViewById(R.id.loadgame_listentry_lasttimeplayed);
ImageView image = (ImageView)convertView.findViewById(R.id.loadgame_listentry_gametypeimage);
ImageView customImage = (ImageView)convertView.findViewById(R.id.loadgame_listentry_custom_label);
ImageView customImage = (ImageView)convertView.findViewById(R.id.loadgame_listentry_custom_icon);
TextView customLabel = (TextView) convertView.findViewById(R.id.loadgame_listentry_custom_label);
switch(gic.getGameType()) {
case Default_6x6:
@ -250,11 +250,8 @@ public class LoadGameActivity extends BaseActivity implements IDeleteDialogFragm
difficultyBar.setMax(GameDifficulty.getValidDifficultyList().size());
difficultyBar.setRating(GameDifficulty.getValidDifficultyList().indexOf(gic.getDifficulty())+1);
if(!gic.isCustom()) {
customImage.setVisibility(View.INVISIBLE);
} else {
customImage.setVisibility(View.VISIBLE);
}
customImage.setImageResource(gic.isCustom() ? R.drawable.ic_circle_blue_36dp : R.drawable.ic_circle_grey_36dp);
customLabel.setVisibility(gic.isCustom() ? View.VISIBLE : View.GONE);
int time = gic.getTimePlayed();
int seconds = time % 60;

View file

@ -16,7 +16,6 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.secuso.privacyfriendlysudoku.ui.view;
/**

View file

@ -20,6 +20,8 @@
package org.secuso.privacyfriendlysudoku.ui.view;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
@ -50,15 +52,32 @@ public class SudokuCellView extends View {
Symbol symbolsToUse = Symbol.Default;
RelativeLayout.LayoutParams params;
public SudokuCellView(Context context) {
super(context);
}
int backgroundColor;
int backgroundErrorColor;
int backgroundSelectedColor;
int backgroundConnectedOuterColor;
int backgroundConnectedInnerColor;
int backgroundValueHighlightedColor;
int backgroundValueHighlightedSelectedColor;
int textColor;
public SudokuCellView(Context context, AttributeSet attrs){
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SudokuCellView);
backgroundColor = a.getColor(R.styleable.SudokuCellView_sudokuCellBackgroundColor, Color.argb(255, 200, 200, 200));
backgroundErrorColor = a.getColor(R.styleable.SudokuCellView_sudokuCellBackgroundErrorColor, Color.argb(255, 200, 200, 200));
backgroundSelectedColor = a.getColor(R.styleable.SudokuCellView_sudokuCellBackgroundSelectedColor, Color.argb(255, 200, 200, 200));
backgroundConnectedOuterColor = a.getColor(R.styleable.SudokuCellView_sudokuCellBackgroundConnectedOuterColor, Color.argb(255, 200, 200, 200));
backgroundConnectedInnerColor = a.getColor(R.styleable.SudokuCellView_sudokuCellBackgroundConnectedInnerColor, Color.argb(255, 200, 200, 200));
backgroundValueHighlightedColor = a.getColor(R.styleable.SudokuCellView_sudokuCellBackgroundValueHighlightedColor, Color.argb(255, 200, 200, 200));
backgroundValueHighlightedSelectedColor = a.getColor(R.styleable.SudokuCellView_sudokuCellBackgroundValueHighlightedSelectedColor, Color.argb(255, 200, 200, 200));
textColor = a.getColor(R.styleable.SudokuCellView_sudokuCellTextColor, Color.argb(255, 200, 200, 200));
a.recycle();
}
public void setSelected(boolean b) {
this.selected = b;
}
@ -108,13 +127,6 @@ public class SudokuCellView extends View {
return true;
}*/
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
@ -127,27 +139,28 @@ public class SudokuCellView extends View {
Paint p = new Paint();
switch(highlightType) {
case Default:
p.setColor(Color.WHITE);
p.setColor(backgroundColor);
break;
case Error:
p.setColor(Color.LTGRAY);
p.setColor(backgroundErrorColor);
break;
case Selected:
p.setColor(Color.GREEN);
p.setColor(backgroundSelectedColor);
break;
case Connected:
p.setColor(Color.WHITE);
p.setColor(backgroundConnectedOuterColor);
drawBackground(canvas, 3, 3, mWidth - 3, mHeight - 3, p);
p.setColor(Color.YELLOW);
p.setColor(backgroundConnectedInnerColor);
p.setAlpha(100);
break;
case Value_Highlighted:
p.setColor(Color.YELLOW);
p.setColor(backgroundValueHighlightedColor);
break;
case Value_Highlighted_Selected:
p.setColor(Color.CYAN);
p.setColor(backgroundValueHighlightedSelectedColor);
break;
default:
p.setColor(Color.WHITE);
p.setColor(backgroundColor);
}
@ -166,6 +179,7 @@ public class SudokuCellView extends View {
public void drawValue(Canvas canvas) {
Paint p = new Paint();
p.setColor(textColor);
int root = (int) Math.sqrt(size);
int j= root+1;
int k = root;

View file

@ -21,6 +21,8 @@ package org.secuso.privacyfriendlysudoku.ui.view;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
@ -50,6 +52,9 @@ public class SudokuFieldLayout extends RelativeLayout implements IHighlightChang
private int gameCellHeight;
private SharedPreferences settings;
private Paint p = new Paint();
int backgroundColor;
int errorColor;
int sectionLineColor;
private OnTouchListener listener = new OnTouchListener() {
@Override
@ -74,8 +79,15 @@ public class SudokuFieldLayout extends RelativeLayout implements IHighlightChang
public SudokuFieldLayout(Context context, AttributeSet attrs) {
super(context, attrs);
this.attrs=attrs;
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SudokuFieldLayout);
backgroundColor = a.getColor(R.styleable.SudokuFieldLayout_sudokuFieldGridColor, Color.argb(255, 200, 200, 200));
errorColor = a.getColor(R.styleable.SudokuFieldLayout_sudokuFieldErrorColor, Color.RED);
sectionLineColor = a.getColor(R.styleable.SudokuFieldLayout_sudokuFieldSectionLineColor, Color.BLACK);
a.recycle();
setWillNotDraw(false);
setBackgroundColor(Color.argb(255, 200, 200, 200));
setBackgroundColor(backgroundColor);
}
public void setSettingsAndGame(SharedPreferences sharedPref, GameController gc) {
@ -117,7 +129,7 @@ public class SudokuFieldLayout extends RelativeLayout implements IHighlightChang
if(gameController == null) return;
p.setColor(Color.BLACK);
p.setColor(sectionLineColor);
p.setStrokeWidth(5);
int horizontalSections = gameController.getSize() / sectionWidth;
@ -241,7 +253,7 @@ public class SudokuFieldLayout extends RelativeLayout implements IHighlightChang
p = new Paint(Paint.ANTI_ALIAS_FLAG);
p.setStyle(Paint.Style.STROKE);
p.setStrokeWidth(4);
p.setColor(Color.RED);
p.setColor(errorColor);
float offsetX = 0;
float offsetY = 0;

View file

@ -2,16 +2,16 @@
xmlns:aapt="http://schemas.android.com/aapt"
android:width="512dp"
android:height="512dp"
android:viewportWidth="512"
android:viewportHeight="512">
android:viewportWidth="600"
android:viewportHeight="600">
<path
android:pathData="M510.91,471.7V216.47L336.27,41.83H323.68V93.05L289.26,58.62H275.82v40.3l-40.3,-40.3H222.09l0,16.77L188.51,41.83H175.07l0.12,54.69L134.35,55.68 88.6,62 71.8,76.25l2.52,17.64 5,6.71 -5.88,-0.84 38.62,38.62 -44.49,-2.52V149.3l27,27 -53.83,-0.1V189.6L174.23,323.09H40.74v14.28l26.87,26.86v94L121.34,512H470.61A40.42,40.42 0,0 0,510.91 471.7Z">
android:pathData="M659,552.9V364.5L336.3,41.8h-12.6V93l-34.4,-34.4h-13.4v40.3l-40.3,-40.3h-13.4v16.8l-33.6,-33.6h-13.4l0.1,54.7l-40.8,-40.8L88.6,62L71.8,76.2l2.5,17.6l5,6.7l-5.9,-0.8l38.6,38.6l-44.5,-2.5v13.4l27,27l-53.8,-0.1v13.4l133.5,133.5H40.7v14.3l26.9,26.9v94l141.5,141.6L633,611.9C655.2,611.8 658.9,575.1 659,552.9z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="43.94"
android:startX="119.85"
android:endY="551.52"
android:endX="412.9"
android:startY="30.4022"
android:startX="143.3293"
android:endY="680.6151"
android:endX="518.728"
android:type="linear">
<item android:offset="0" android:color="#FF004492"/>
<item android:offset="0.22" android:color="#F9004593"/>
@ -25,33 +25,33 @@
</aapt:attr>
</path>
<path
android:pathData="M174.65,41.63h13.43v429.87h-13.43z"
android:fillColor="#fff"/>
android:pathData="M174.6,41.6h13.4v429.9h-13.4z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M322.42,41.63h13.43v429.87h-13.43z"
android:fillColor="#fff"/>
android:pathData="M322.4,41.6h13.4v429.9h-13.4z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M40.31,337.17l0,-13.43l429.87,-0l0,13.43z"
android:fillColor="#fff"/>
android:pathData="M40.3,323.7h429.9v13.4h-429.9z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M40.31,189.4l0,-13.43l429.87,-0l0,13.43z"
android:fillColor="#fff"/>
android:pathData="M40.3,176h429.9v13.4h-429.9z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M94.05,68.49h40.3V55.06H94.05a26.87,26.87 0,0 0,0 53.73h13.43a13.44,13.44 0,1 1,0 26.87H67.18v13.43h40.3a26.87,26.87 0,0 0,0 -53.73H94.05a13.44,13.44 0,0 1,0 -26.87Z"
android:fillColor="#fff"/>
android:pathData="M94.1,68.5h40.3V55.1H94.1c-14.8,0.3 -26.6,12.5 -26.3,27.4c0.3,14.4 11.9,26.1 26.3,26.3h13.4c7.4,-0.2 13.6,5.6 13.8,13.1c0.2,7.4 -5.6,13.6 -13.1,13.8c-0.2,0 -0.5,0 -0.7,0H67.2v13.4h40.3c14.8,-0.3 26.6,-12.5 26.3,-27.4c-0.3,-14.4 -11.9,-26.1 -26.3,-26.3H94.1C86.6,95.2 80.8,89 81,81.6C81.2,74.4 86.9,68.7 94.1,68.5z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M262,206.19h-40.3v94L262,300.19a26.86,26.86 0,0 0,26.86 -26.87v-40.3A26.86,26.86 0,0 0,262 206.19ZM262,286.79L235.1,286.79L235.1,219.62L262,219.62a13.43,13.43 0,0 1,13.43 13.43v40.3A13.43,13.43 0,0 1,262 286.79Z"
android:fillColor="#fff"/>
android:pathData="M262,206.2h-40.3v94H262c14.8,0 26.9,-12 26.9,-26.9c0,0 0,0 0,0V233C288.8,218.2 276.8,206.2 262,206.2zM262,286.8h-26.9v-67.2H262c7.4,0 13.4,6 13.4,13.4v40.3C275.4,280.8 269.4,286.8 262,286.8C262,286.8 262,286.8 262,286.8z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M406.38,206.19L392.94,206.19a26.86,26.86 0,0 0,-26.86 26.86v40.3a26.86,26.86 0,0 0,26.86 26.87h13.44a26.87,26.87 0,0 0,26.86 -26.87v-40.3A26.87,26.87 0,0 0,406.38 206.19ZM419.81,273.35a13.48,13.48 0,0 1,-13.43 13.44L392.94,286.79a13.47,13.47 0,0 1,-13.43 -13.44v-40.3a13.47,13.47 0,0 1,13.43 -13.43h13.44a13.48,13.48 0,0 1,13.43 13.43Z"
android:fillColor="#fff"/>
android:pathData="M406.4,206.2h-13.4c-14.8,0 -26.9,12 -26.9,26.9v40.3c0,14.8 12,26.9 26.9,26.9c0,0 0,0 0,0h13.4c14.8,0 26.9,-12 26.9,-26.9v-40.3C433.2,218.2 421.2,206.2 406.4,206.2zM419.8,273.4c0,7.4 -6,13.4 -13.4,13.4h-13.4c-7.4,0 -13.4,-6 -13.4,-13.4v-40.3c0,-7.4 6,-13.4 13.4,-13.4h13.4c7.4,0 13.4,6 13.4,13.4V273.4z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M134.35,374.01l0,0l0,0l0,0l0,-9.5l-9.36,0l-0.04,0.1l-0.1,-0.1l-37.91,37.91l-6.32,6.32l0,-12.56l0,-31.67l-13.44,0l0,19.82l0,17.34l0,20.51l0,17.64l0,18.72l13.44,0l0,-30.8l6.45,-6.45l37.78,37.25l0,0l9.5,0l0,-9.36l-37.85,-37.33l37.84,-37.84l0.01,0z"
android:fillColor="#fff"/>
android:pathData="M134.4,374l0,0l0,0l0,0l0,-9.5l-9.4,0l-0.1,0.1l-0.1,-0.1l-37.9,37.9l-6.3,6.3l0,-12.5l0,-31.7l-13.4,0l0,19.8l0,17.4l0,20.5l0,17.6l0,18.7l13.4,0l0,-30.8l6.5,-6.4l37.7,37.2l0,0l9.6,0l0,-9.3l-37.9,-37.3l37.8,-37.9z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M275.4,58.42v60.45a20.15,20.15 0,1 1,-40.3 0V58.42H221.67v60.45a33.58,33.58 0,1 0,67.16 0V58.42Z"
android:fillColor="#fff"/>
android:pathData="M275.4,58.4v60.4c0,11.1 -9,20.2 -20.1,20.2s-20.2,-9 -20.2,-20.2l0,0V58.4h-13.4v60.4c0,18.5 15,33.6 33.6,33.6c18.5,0 33.6,-15 33.6,-33.6V58.4H275.4z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M275.4,364.51V425a20.15,20.15 0,1 1,-40.3 0V364.51H221.67V425a33.58,33.58 0,1 0,67.16 0V364.51Z"
android:fillColor="#fff"/>
android:pathData="M275.4,364.5V425c0,11.1 -9,20.1 -20.1,20.1s-20.2,-9 -20.2,-20.1l0,0v-60.5h-13.4V425c0,18.5 15,33.6 33.6,33.6c18.5,0 33.6,-15 33.6,-33.6v-60.5H275.4z"
android:fillColor="#FFFFFF"/>
</vector>

View file

@ -0,0 +1,57 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="512dp"
android:height="512dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:pathData="M510.91,471.7V216.47L336.27,41.83H323.68V93.05L289.26,58.62H275.82v40.3l-40.3,-40.3H222.09l0,16.77L188.51,41.83H175.07l0.12,54.69L134.35,55.68 88.6,62 71.8,76.25l2.52,17.64 5,6.71 -5.88,-0.84 38.62,38.62 -44.49,-2.52V149.3l27,27 -53.83,-0.1V189.6L174.23,323.09H40.74v14.28l26.87,26.86v94L121.34,512H470.61A40.42,40.42 0,0 0,510.91 471.7Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="43.94"
android:startX="119.85"
android:endY="551.52"
android:endX="412.9"
android:type="linear">
<item android:offset="0" android:color="#FF004492"/>
<item android:offset="0.22" android:color="#F9004593"/>
<item android:offset="0.39" android:color="#E8024894"/>
<item android:offset="0.55" android:color="#C9044E97"/>
<item android:offset="0.7" android:color="#A007569B"/>
<item android:offset="0.84" android:color="#6B0A60A0"/>
<item android:offset="0.97" android:color="#280F6CA6"/>
<item android:offset="1" android:color="#19106FA8"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M174.65,41.63h13.43v429.87h-13.43z"
android:fillColor="#fff"/>
<path
android:pathData="M322.42,41.63h13.43v429.87h-13.43z"
android:fillColor="#fff"/>
<path
android:pathData="M40.31,337.17l0,-13.43l429.87,-0l0,13.43z"
android:fillColor="#fff"/>
<path
android:pathData="M40.31,189.4l0,-13.43l429.87,-0l0,13.43z"
android:fillColor="#fff"/>
<path
android:pathData="M94.05,68.49h40.3V55.06H94.05a26.87,26.87 0,0 0,0 53.73h13.43a13.44,13.44 0,1 1,0 26.87H67.18v13.43h40.3a26.87,26.87 0,0 0,0 -53.73H94.05a13.44,13.44 0,0 1,0 -26.87Z"
android:fillColor="#fff"/>
<path
android:pathData="M262,206.19h-40.3v94L262,300.19a26.86,26.86 0,0 0,26.86 -26.87v-40.3A26.86,26.86 0,0 0,262 206.19ZM262,286.79L235.1,286.79L235.1,219.62L262,219.62a13.43,13.43 0,0 1,13.43 13.43v40.3A13.43,13.43 0,0 1,262 286.79Z"
android:fillColor="#fff"/>
<path
android:pathData="M406.38,206.19L392.94,206.19a26.86,26.86 0,0 0,-26.86 26.86v40.3a26.86,26.86 0,0 0,26.86 26.87h13.44a26.87,26.87 0,0 0,26.86 -26.87v-40.3A26.87,26.87 0,0 0,406.38 206.19ZM419.81,273.35a13.48,13.48 0,0 1,-13.43 13.44L392.94,286.79a13.47,13.47 0,0 1,-13.43 -13.44v-40.3a13.47,13.47 0,0 1,13.43 -13.43h13.44a13.48,13.48 0,0 1,13.43 13.43Z"
android:fillColor="#fff"/>
<path
android:pathData="M134.35,374.01l0,0l0,0l0,0l0,-9.5l-9.36,0l-0.04,0.1l-0.1,-0.1l-37.91,37.91l-6.32,6.32l0,-12.56l0,-31.67l-13.44,0l0,19.82l0,17.34l0,20.51l0,17.64l0,18.72l13.44,0l0,-30.8l6.45,-6.45l37.78,37.25l0,0l9.5,0l0,-9.36l-37.85,-37.33l37.84,-37.84l0.01,0z"
android:fillColor="#fff"/>
<path
android:pathData="M275.4,58.42v60.45a20.15,20.15 0,1 1,-40.3 0V58.42H221.67v60.45a33.58,33.58 0,1 0,67.16 0V58.42Z"
android:fillColor="#fff"/>
<path
android:pathData="M275.4,364.51V425a20.15,20.15 0,1 1,-40.3 0V364.51H221.67V425a33.58,33.58 0,1 0,67.16 0V364.51Z"
android:fillColor="#fff"/>
</vector>

View file

@ -15,7 +15,7 @@
android:layout_height="match_parent"
android:layout_marginRight="10dp"
android:adjustViewBounds="true"
android:src="@drawable/icon_default_9x9" />
app:srcCompat="@drawable/icon_default_9x9" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/relativeLayout2"
@ -23,16 +23,13 @@
android:layout_height="wrap_content">
<ImageView
android:id="@+id/loadgame_listentry_custom_label"
android:layout_width="10dp"
android:id="@+id/loadgame_listentry_custom_icon"
android:layout_width="12dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
app:layout_constraintBottom_toBottomOf="@+id/loadgame_listentry_gametype"
app:layout_constraintEnd_toEndOf="@+id/loadgame_listentry_difficultytext"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toEndOf="@+id/loadgame_listentry_gametype"
app:layout_constraintTop_toTopOf="@+id/loadgame_listentry_gametype"
app:layout_constraintStart_toStartOf="@id/loadgame_listentry_gametype"
app:layout_constraintEnd_toStartOf="@+id/loadgame_listentry_difficultybar"
app:layout_constraintTop_toTopOf="@id/loadgame_listentry_difficultybar"
app:layout_constraintBottom_toBottomOf="@id/loadgame_listentry_difficultybar"
app:srcCompat="@drawable/create_game_src" />
<TextView
@ -47,6 +44,17 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1.0" />
<TextView
android:id="@+id/loadgame_listentry_custom_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="@string/difficulty_custom"
android:visibility="gone"
app:layout_constraintStart_toEndOf="@id/loadgame_listentry_gametype"
app:layout_constraintTop_toTopOf="@id/loadgame_listentry_gametype"
app:layout_constraintBottom_toBottomOf="@id/loadgame_listentry_gametype"
android:layout_marginLeft="16dp" />
<RatingBar
android:id="@+id/loadgame_listentry_difficultybar"
@ -54,12 +62,12 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:numStars="3"
android:numStars="4"
android:rating="3"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintStart_toEndOf="@id/loadgame_listentry_custom_icon"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
@ -67,11 +75,12 @@
android:id="@+id/loadgame_listentry_difficultytext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="Difficulty"
app:layout_constraintBottom_toBottomOf="@+id/loadgame_listentry_difficultybar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/loadgame_listentry_difficultybar"
app:layout_constraintTop_toTopOf="@+id/loadgame_listentry_difficultybar" />
app:layout_constraintTop_toTopOf="@+id/loadgame_listentry_difficultybar"
android:layout_marginLeft="8dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -3,6 +3,10 @@
<background android:drawable="@color/ic_launcher_background"/>
<foreground>
<inset android:drawable="@drawable/ic_launcher_foreground_shadow"
android:inset="21%"/>
android:insetTop="22%"
android:insetLeft="22%"
android:insetRight="11%"
android:insetBottom="11%"
/>
</foreground>
</adaptive-icon>

View file

@ -26,6 +26,19 @@
<item name="backgroundTutorialStars">@color/colorPrimaryDark</item>
<item name="menuTextColor">@color/white</item>
<item name="blueHighlight">@color/colorAccent</item>
<item name="sudokuFieldGridColor">@color/vdarkgrey</item>
<item name="sudokuFieldSectionLineColor">@color/white</item>
<!-- SudokuCellView -->
<item name="sudokuCellBackgroundColor">@color/darkgrey</item>
<item name="sudokuCellBackgroundErrorColor">@color/vdarkgrey</item>
<item name="sudokuCellBackgroundSelectedColor">@color/darkgreen</item>
<item name="sudokuCellBackgroundConnectedOuterColor">@color/darkgrey</item>
<item name="sudokuCellBackgroundConnectedInnerColor">@color/yellow</item>
<item name="sudokuCellBackgroundValueHighlightedColor">@color/darkyellow</item>
<item name="sudokuCellBackgroundValueHighlightedSelectedColor">@color/darkcyan</item>
<item name="sudokuCellTextColor">@color/white</item>
</style>
<style name="ToolbarStyle" parent="Widget.AppCompat.ActionBar">
@ -85,6 +98,7 @@
</style>
<!-- <style name="FontStyle">
<item name="android:fontFamily"></item>
</style> -->

View file

@ -19,4 +19,21 @@
<attr name="backgroundTutorialStars" format="color"/>
<attr name="blueHighlight" format="color"/>
</declare-styleable>
<declare-styleable name="SudokuCellView">
<attr name="sudokuCellBackgroundColor" format="color" />
<attr name="sudokuCellBackgroundErrorColor" format="color" />
<attr name="sudokuCellBackgroundSelectedColor" format="color" />
<attr name="sudokuCellBackgroundConnectedOuterColor" format="color" />
<attr name="sudokuCellBackgroundConnectedInnerColor" format="color" />
<attr name="sudokuCellBackgroundValueHighlightedColor" format="color" />
<attr name="sudokuCellBackgroundValueHighlightedSelectedColor" format="color" />
<attr name="sudokuCellTextColor" format="color" />
</declare-styleable>
<declare-styleable name="SudokuFieldLayout">
<attr name="sudokuFieldGridColor" format="color" />
<attr name="sudokuFieldSectionLineColor" format="color" />
<attr name="sudokuFieldErrorColor" format="color" />
</declare-styleable>
</resources>

View file

@ -11,6 +11,16 @@
<color name="white">#ffffff</color>
<color name="black">#000000</color>
<color name="darkgrey">#121212</color>
<color name="red">#ffff0000</color>
<color name="vlightgrey">#CCCCCC</color>
<color name="vdarkgrey">#333333</color>
<color name="darkgreen">#FF004400</color>
<color name="darkyellow">#FF444400</color>
<color name="darkcyan">#FF004444</color>
<color name="lightgreen">#FF00FF00</color>
<color name="green">#388E3C</color>
<color name="cyan">#FF00FFFF</color>
<!-- dots inactive colors -->
<color name="dot_dark_screen">#026499</color>

View file

@ -24,6 +24,21 @@
<item name="backgroundTutorialStars">@color/white</item>
<item name="menuTextColor">@null</item>
<item name="blueHighlight">@color/colorPrimaryDark</item>
<!-- SudokuFieldLayout -->
<item name="sudokuFieldGridColor">@color/vlightgrey</item>
<item name="sudokuFieldErrorColor">@color/red</item>
<item name="sudokuFieldSectionLineColor">@color/black</item>
<!-- SudokuCellView -->
<item name="sudokuCellBackgroundColor">@color/white</item>
<item name="sudokuCellBackgroundErrorColor">@color/vlightgrey</item>
<item name="sudokuCellBackgroundSelectedColor">@color/lightgreen</item>
<item name="sudokuCellBackgroundConnectedOuterColor">@color/white</item>
<item name="sudokuCellBackgroundConnectedInnerColor">@color/yellow</item>
<item name="sudokuCellBackgroundValueHighlightedColor">@color/yellow</item>
<item name="sudokuCellBackgroundValueHighlightedSelectedColor">@color/cyan</item>
<item name="sudokuCellTextColor">@color/black</item>
</style>
<style name="ToolbarStyle" parent="Widget.AppCompat.ActionBar">
@ -82,7 +97,6 @@
<item name="android:windowNoTitle">true</item>
</style>
<!-- <style name="FontStyle">
<item name="android:fontFamily"></item>
</style> -->