Merge remote-tracking branch 'origin/master'

# Conflicts:
#	app/src/main/res/xml/pref_help_general.xml
This commit is contained in:
Gongxter 2016-02-01 16:25:18 +01:00
commit 3819a4e006
16 changed files with 324 additions and 224 deletions

View file

@ -1,2 +1,20 @@
# privacy-friendly-sudoku
This is a Sudoku App, that needs no permissions to run at all.
## Privacy Friendly Sudoku
Privacy Friendly Sudoku is a logic based game.
It does not use any permission, as the app can provide its full functionality without the usage of permissions.
It also does neither include advertisement nor tracking mechanisms.
## Motivation
As it is part of the Privacy Friendly Apps developed by the SECUSO research group of the Technische
Universtität Darmstadt in Germany it is optimized due to user's privacy.
## Installation
Further development requires Android Studio.
## License
Privacy Friendly Sudoku is lisenced under the GPLv3.

View file

@ -67,9 +67,11 @@
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/coverage-instrumented-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/debug" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />
@ -80,15 +82,19 @@
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/libs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/mockable-android-23.jar" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/tmp" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
</content>

View file

@ -516,8 +516,7 @@ public class GameController implements IModelChangedListener, Parcelable {
}
} else {
// notifyErrorListener();
// TODO: errorList now holds all the errors
// TODO: display errors .. notify some view?
// TODO: errorList now holds all the errors => display errors .. notify some view?
}
} else {
notifiedOnSolvedListeners = false;
@ -709,10 +708,6 @@ public class GameController implements IModelChangedListener, Parcelable {
out.writeParcelable(difficulty, 0);
out.writeParcelable(gameBoard, 0);
out.writeParcelable(undoRedoManager, 0);
// delete lists, in case we get the same object back from Parcel
removeAllListeners();
}
public static final Parcelable.Creator<GameController> CREATOR = new Parcelable.Creator<GameController>() {

View file

@ -72,9 +72,9 @@ public class QQWingController {
opts.threads = 1;
opts.gameType = gameBoard.getGameType();
doAction();
if(solveImpossible) {
// TODO: do something else.
}
//if(solveImpossible) {
// Can not occur with normal use of the app.
//}
return solution;
}

View file

@ -162,7 +162,7 @@ public class GameInfoContainer {
public static String getGameInfo(GameController controller) {
StringBuilder sb = new StringBuilder();
Date today = new Date();
// TODO add some game information
sb.append(controller.getGameType().name());
sb.append("/");
sb.append(controller.getTime());

View file

@ -452,7 +452,6 @@ public class QQWing {
// Some hack to make easy levels on 12x12 .. because the generator wasn't able to create some
if(gameType == GameType.Default_12x12 && difficulty == GameDifficulty.Easy ) {
i += 4; // skip every 2nd round to find "easy" levels more frequent. Still takes about 20 Seconds.
// TODO . save games be4 hand to load them when needed
}
}
}
@ -741,7 +740,6 @@ public class QQWing {
return false;
}
// TODO: checked
private boolean colBoxReduction(int round) {
for (int valIndex = 0; valIndex < ROW_COL_SEC_SIZE; valIndex++) {
for (int col = 0; col < ROW_COL_SEC_SIZE; col++) {

View file

@ -11,7 +11,6 @@ import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.graphics.Point;
import android.os.Bundle;
import android.os.Parcelable;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.support.design.widget.NavigationView;
@ -42,7 +41,7 @@ import org.secuso.privacyfriendlysudoku.game.listener.IGameSolvedListener;
import org.secuso.privacyfriendlysudoku.game.listener.ITimerListener;
import org.secuso.privacyfriendlysudoku.ui.listener.IHintDialogFragmentListener;
import org.secuso.privacyfriendlysudoku.ui.listener.IResetDialogFragmentListener;
import org.secuso.privacyfriendlysudoku.ui.view.DialogActivity;
import org.secuso.privacyfriendlysudoku.ui.view.WinDialog;
import org.secuso.privacyfriendlysudoku.ui.view.R;
import org.secuso.privacyfriendlysudoku.ui.view.SudokuFieldLayout;
import org.secuso.privacyfriendlysudoku.ui.view.SudokuKeyboardLayout;
@ -59,7 +58,7 @@ public class GameActivity extends AppCompatActivity implements NavigationView.On
RatingBar ratingBar;
private boolean gameSolved = false;
SaveLoadStatistics statistics = new SaveLoadStatistics(this);
DialogActivity dialog = null;
WinDialog dialog = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -177,7 +176,8 @@ public class GameActivity extends AppCompatActivity implements NavigationView.On
// start the game
gameController.startTimer();
}
onTick(gameController.getTime());
gameController.notifyHighlightChangedListeners();
gameController.notifyTimerListener(gameController.getTime());
}
@Override
@ -291,13 +291,10 @@ public class GameActivity extends AppCompatActivity implements NavigationView.On
statistics.saveGameStats();
boolean isNewBestTime = gameController.getUsedHints() == 0
&& statistics.loadStats(gameController.getGameType(),gameController.getDifficulty()).getMinTime() >= gameController.getTime();
if (gameController.getUsedHints() == 0){
if (statistics.loadStats(gameController.getGameType(),gameController.getDifficulty()).getMinTime() >= gameController.getTime()) {
// ((TextView) dialog.findViewById(R.id.win_new_besttime)).setVisibility(View.VISIBLE);
dialog = new DialogActivity(this,R.style.WinDialog,timeToString(gameController.getTime()),String.valueOf(gameController.getUsedHints()),true);
}
}else dialog = new DialogActivity(this,R.style.WinDialog,timeToString(gameController.getTime()),String.valueOf(gameController.getUsedHints()),true);
dialog = new WinDialog(this, R.style.WinDialog , timeToString(gameController.getTime()), String.valueOf(gameController.getUsedHints()), isNewBestTime);
dialog.getWindow().setContentView(R.layout.win_screen_layout);
//dialog.setContentView(getLayoutInflater().inflate(R.layout.win_screen_layout,null));
@ -315,8 +312,10 @@ public class GameActivity extends AppCompatActivity implements NavigationView.On
@Override
public void onClick(View v) {
dialog.dismiss();
Intent intent = new Intent(activity, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
activity.finish();
startActivity(new Intent(activity,MainActivity.class));
}
});
((Button)dialog.findViewById(R.id.win_button2)).setOnClickListener(new View.OnClickListener() {
@ -345,9 +344,8 @@ public class GameActivity extends AppCompatActivity implements NavigationView.On
@Override
public void onTick(int time) {
if(gameSolved) return;
//do something not so awesome
// display the time
timerView.setText(timeToString(time));
if(gameSolved) return;

View file

@ -100,29 +100,6 @@ public class HelpActivity extends AppCompatPreferenceActivity {
index >= 0
? 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.

View file

@ -1,48 +0,0 @@
package org.secuso.privacyfriendlysudoku.ui.view;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
/**
* Created by TMZ_LToP on 30.01.2016.
*/
public class DialogActivity extends Dialog {
private String time="";
private String hints="";
private boolean newBest=false;
public DialogActivity(Context context, int themeResId) {
super(context, themeResId);
}
public DialogActivity(Context context,int themeResId,String t,String h, boolean newB) {
super(context,themeResId);
setParam(t,h,newB);
}
public void setParam(String t,String h, boolean newB){
time = t;
hints=h;
newBest=newB;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((TextView)findViewById(R.id.win_hints)).setText(hints);
((TextView)findViewById(R.id.win_time)).setText(time);
if(newBest){
((TextView)findViewById(R.id.win_new_besttime)).setVisibility(View.VISIBLE);
}
}
}

View file

@ -0,0 +1,48 @@
package org.secuso.privacyfriendlysudoku.ui.view;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
/**
* Created by TMZ_LToP on 30.01.2016.
*/
public class WinDialog extends Dialog {
private String timeString = "";
private String hintString = "";
private boolean isNewBestTime = false;
public WinDialog(Context context, int themeResId) {
super(context, themeResId);
}
public WinDialog(Context context, int themeResId, String timeString, String hintString, boolean isNewBestTime) {
super(context,themeResId);
setParam(timeString, hintString, isNewBestTime);
}
public void setParam(String timeString, String hintString, boolean isNewBestTime){
this.timeString = timeString;
this.hintString = hintString;
this.isNewBestTime = isNewBestTime;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((TextView)findViewById(R.id.win_hints)).setText(hintString);
((TextView)findViewById(R.id.win_time)).setText(timeString);
if(isNewBestTime){
((TextView)findViewById(R.id.win_new_besttime)).setVisibility(View.VISIBLE);
}
}
}

View file

@ -25,7 +25,6 @@
<string name="about_qqwing">Diese App benutzt eine modifizierte Version des QQWing v1.3.4.</string>
<string name="average_time">Durchschnittliche Zeit:</string>
<string name="cancel">Abbrechen</string>
<string name="description">eine privacy friendly App</string>
<string name="gametype_unspecified">Unspezifiziert</string>
<string name="generating">Generiere neue Level im Hintergrund&#8230;</string>
<string name="hint_confirmation">Bist du sicher, dass du einen Hinweis verwenden möchtest? Wenn Hinweise benutzt wurden, kann in dem Spiel keine Bestzeit mehr erreicht werden.</string>
@ -45,20 +44,41 @@
<string name="pref_group_highlight_value">Wert hervorheben</string>
<string name="pref_header_game">Spiel</string>
<string name="pref_header_highlight">Hervorhebung</string>
<string name="pref_highlight_cols">Verbundene Spalten</string>
<string name="pref_highlight_notes">Notizen</string>
<string name="pref_highlight_rows">Verbundene Reihen</string>
<string name="pref_highlight_secs">Verbundene Sektionen</string>
<string name="pref_highlight_vals">Gleiche Werte</string>
<string name="pref_symbols">Symbole</string>
<string name="title_activity_load_game">Spiel laden</string>
<string name="stats_name">Statistik</string>
<string name="reset_stats">Alles zurücksetzen</string>
<string name="reset_confirmation_confirm">zurücksetzen</string>
<string name="reset_confirmation_confirm">Zurücksetzen</string>
<string name="reset_confirmation">Bist du dir sicher, dass du das komplette Spielfeld zurücksetzen möchtest?</string>
<string name="total_of_time">Gesamtspielzeit:</string>
<string name="win_button_text">fortsetzen</string>
<string name="win_text">Glückwunsch!</string>
<string name="app_name" translatable="false">Sudoku</string>
<string name="win_best_time">Neue Bestzeit!</string>
<string name="win_hint">Hinweise:</string>
<string name="win_show_game">Zeige Spielfeld</string>
<string name="win_time">Zeit:</string>
<string name="title_activity_help">Hilfe</string>
<string name="pref_highlight_connected">Verbundene Felder</string>
<string name="help_undo_summary">Macht die letzte Aktion rückgängig</string>
<string name="help_undo">Rückgängig</string>
<string name="help_permissions_summary">Privacy Friendly Sudoku verwendet keine Berechtigungen.</string>
<string name="help_permissions">Berechtigungen</string>
<string name="help_notes_summary">Schaltet zwischen Notizen- und Werteingabe hin und her</string>
<string name="help_notes">Notizen</string>
<string name="help_keyhighlighted_yellow_summary">Zeigt an, ob die korrekte Anzahl des Wertes im Spielfeld vorkommt.</string>
<string name="help_keyhighlighted_summary">Zeigt an, dass der Wert ausgewählt ist. Jede Berührung eines Feldes setzt in diesem Modus die Zahl direkt, ohne das Feld vorher auszuwählen.</string>
<string name="help_keyboard">Tastatur</string>
<string name="help_hint_summary">Zeige die korrekte Lösung für das ausgewählte Feld</string>
<string name="help_hint">Hinweis</string>
<string name="help_gamefield">Spielfeld</string>
<string name="help_do_summary">Stellt die letzte rückgängig gemachte Aktion wieder her</string>
<string name="help_do">Wiederherstellen</string>
<string name="help_delete_summary">Löscht das ausgewählte Feld</string>
<string name="help_delete">Löschen</string>
<string name="header_help">Hilfe</string>
<string name="help_privacyInfo">Privatsphäre Information</string>
</resources>

View file

@ -1,4 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Sudoku</string>
<string name="about_affiliation">En conjunción con:</string>
<string name="header_help">Ayuda</string>
<string name="about_author">Autor:</string>
<string name="about_qqwing">Está Aplicación utiliza una versión modificada de QQWing v1.3.4</string>
<string name="average_time">Tiempo promedio:</string>
<string name="cancel">Cancelar</string>
<string name="difficulty_easy">Fácil</string>
<string name="difficulty_hard">Difícil</string>
<string name="difficulty_moderate">Normal</string>
<string name="gametype_unspecified">No especificado </string>
<string name="generating">Generando nuevo nivel en segundo plano…</string>
<string name="help_delete">Borrar</string>
<string name="help_delete_summary">Borrar el campo seleccionado</string>
<string name="help_do">Rehacer</string>
<string name="help_do_summary">Rehacer la acción pasada</string>
<string name="help_gamefield">Campo de juego</string>
<string name="help_hint">Consejo</string>
<string name="help_hint_summary">Revelar el campo seleccionado\nAtención: Si se utiliza, el juego actual no va a valer como mejor tiempo.</string>
<string name="help_keyboard">Teclado</string>
<string name="help_keyhighlighted_summary">Indica el valor de botón seleccionado. Al tocar en el campo se pondra el valor directamente.</string>
<string name="help_keyhighlighted_yellow_summary">Indica el número correcto de valores que se ha utilizado.</string>
<string name="help_notes">Notas</string>
<string name="help_notes_summary">Cambia, si los números se muestran como notas o valores en el campo</string>
<string name="help_permissions">Permisos</string>
<string name="help_permissions_summary">Privacy Friendly Sudoku no utiliza permisos</string>
<string name="help_undo">Deshacer</string>
<string name="help_undo_summary">Deshacer la acción pasada</string>
<string name="hint_confirmation">Está seguro que quiere utilizar este consejo? Si lo utiliza no sera posible mejorar su tiempo personal.</string>
<string name="hint_confirmation_confirm">Usar</string>
<string name="hint_usage">Escoja un campo válido y presione en consejo para que aparezca la solución.</string>
<string name="loadgame_delete_confirm">Borrar</string>
<string name="loadgame_delete_confirmation">Está seguro que quiere borrar el juego actual?</string>
<string name="menu_about">Sobre nosotros</string>
<string name="menu_continue_game">Continuar juego</string>
<string name="menu_group">Grupo</string>
<string name="menu_help">Ayuda</string>
<string name="menu_highscore">Estadísticas</string>
<string name="menu_main">Menu principal</string>
<string name="menu_reset">Resetear tabla</string>
<string name="menu_settings">Configuraciones</string>
<string name="min_time">Mejor tiempo:</string>
<string name="more_info">Más información puede encontrarlo:</string>
<string name="new_game">Nuevo juego</string>
<string name="number_of_games">Juego completados:</string>
<string name="number_of_hints">Consejos utilizados:</string>
<string name="pref_automatic_note_deletion">Borrar nota</string>
<string name="pref_automatic_note_deletion_summary">Borrado automático de notas, cuando se ponen los valores las celdas conectadas.</string>
<string name="pref_group_game">Configuraciones de juego</string>
<string name="pref_group_highlight_selection">Resaltar de las celdas conectadas.</string>
<string name="pref_group_highlight_value">Resaltar de los valores.</string>
<string name="pref_header_game">Juego</string>
<string name="pref_header_highlight">Resaltar</string>
<string name="pref_highlight_connected">Celdas conectadas</string>
<string name="pref_highlight_notes">Notas</string>
<string name="pref_highlight_vals">Valores iguales</string>
<string name="pref_symbols">Símbolos</string>
<string name="privacy_friendly">Esta aplicación pertenece a Privacy Friendly Apps.</string>
<string name="reset_confirmation">Está seguro que quiere reiniciar el juego actual?</string>
<string name="reset_confirmation_confirm">Resetear</string>
<string name="reset_stats">Resetear todo</string>
<string name="stats_name">Estadísticas</string>
<string name="title_activity_help">Ayuda</string>
<string name="title_activity_load_game">Cargar juego</string>
<string name="title_activity_settings">Configuraciones</string>
<string name="total_of_time">Tiempo total jugado:</string>
<string name="win_best_time">Nuevo mejor tiempo!</string>
<string name="win_button_text">Continuar</string>
<string name="win_hint">Consejos:</string>
<string name="win_show_game">Mostrar campo de juego</string>
<string name="win_text">Felicitaciones!</string>
<string name="win_time">Tiempo:</string>
<string name="help_privacyInfo"> Información de Privacidad</string>
</resources>

View file

@ -1,4 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Sudoku</string>
<string name="about_affiliation">Совместно с:</string>
<string name="about_author">Авторы:</string>
<string name="about_qqwing">Данное приложение использует модифицированную версию QQWing v1.3.4.</string>
<string name="average_time">Среднее время:</string>
<string name="cancel">Отмена</string>
<string name="description"></string>
<string name="difficulty_easy">Легкий</string>
<string name="difficulty_hard">Сложный</string>
<string name="difficulty_moderate">Средний</string>
<string name="gametype_unspecified">Необычный</string>
<string name="generating">Генерирую новый уровень на заднем плане…</string>
<string name="header_help">Помощь</string>
<string name="help_delete">Удалить</string>
<string name="help_delete_summary">Удаляет выбранное поле</string>
<string name="help_do">Вернуть</string>
<string name="help_do_summary">Возвращает отменённое действие</string>
<string name="help_gamefield">Игровое поле</string>
<string name="help_hint">Подсказка</string>
<string name="help_hint_summary">Показывает правильное решение для указанного поля</string>
<string name="help_keyboard">Клавиатура</string>
<string name="help_keyhighlighted_summary">Показывает что значение выбрано. Последущий выбор поля устанавливает значение поля.</string>
<string name="help_keyhighlighted_yellow_summary">Показывает правильное ли количество данного значение установлено на поле.</string>
<string name="help_notes">Заметки</string>
<string name="win_time">Время:</string>
<string name="win_text">Поздравления!</string>
<string name="win_show_game">Показать поле</string>
<string name="win_hint">Подсказки:</string>
<string name="win_button_text">продолжить</string>
<string name="win_best_time">Новый рекорд!</string>
<string name="help_notes_summary">Переключает между заметками и вводом значений.</string>
<string name="help_permissions">Права</string>
<string name="help_permissions_summary">Это прилажение не использует дополнительных прав.</string>
<string name="help_undo">Назад</string>
<string name="help_undo_summary">Отменяет последнее действие.</string>
<string name="hint_confirmation">Ты уверен?</string>
<string name="hint_confirmation_confirm">Использовать</string>
<string name="hint_usage">Выбери поле которое должно быть решено.</string>
<string name="loadgame_delete_confirm">Удалить</string>
<string name="loadgame_delete_confirmation">Ты уверен что хочеш удалить эту игру?</string>
<string name="menu_about">О</string>
<string name="menu_continue_game">Продолжить игру</string>
<string name="total_of_time">Общее время:</string>
<string name="title_activity_settings">Настройки</string>
<string name="title_activity_load_game">Загрузить игру</string>
<string name="title_activity_help">Помощь</string>
<string name="stats_name">Статистика</string>
<string name="reset_stats">Сбросить всё.</string>
<string name="reset_confirmation_confirm">Сброс</string>
<string name="reset_confirmation">Ты уверен что хочеш сбросить поле?</string>
<string name="privacy_friendly">Это приложение пренадлежит группе Privacy Friendly Apps.</string>
<string name="pref_symbols">Симболы</string>
<string name="pref_highlight_vals">Одинаковые значения</string>
<string name="pref_highlight_notes">Заметки</string>
<string name="pref_highlight_connected">Связанные поля</string>
<string name="pref_header_highlight">Выделение</string>
<string name="pref_header_game">Игра</string>
<string name="pref_group_highlight_value">Выделить поле</string>
<string name="new_game">Новая игра</string>
<string name="number_of_games">Оконченые игры:</string>
<string name="number_of_hints">Использованные подсказки:</string>
<string name="pref_automatic_note_deletion">Удаление заметок</string>
<string name="pref_automatic_note_deletion_summary">Автоматическое удаление заметок при вводе поля.</string>
<string name="pref_group_game">Настройки</string>
<string name="pref_group_highlight_selection">Выделить выбор</string>
<string name="menu_group">Група</string>
<string name="menu_help">Помощь</string>
<string name="menu_highscore">Статистика</string>
<string name="menu_main">Главное меню</string>
<string name="menu_reset">Возврат</string>
<string name="menu_settings">Настройки</string>
<string name="min_time">Лучшее время:</string>
<string name="more_info">Больше информации на:</string>
</resources>

View file

@ -1,4 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Sudoku</string>
<string name="win_time">时间:</string>
<string name="win_button_text">继续</string>
<string name="about_author">作者:</string>
<string name="average_time">平均时间:</string>
<string name="cancel">退出</string>
<string name="difficulty_easy">简单</string>
<string name="difficulty_hard"></string>
<string name="difficulty_moderate">普通</string>
<string name="gametype_unspecified">不明</string>
<string name="help_delete">删除</string>
<string name="win_text">祝贺!</string>
<string name="win_hint">提示:</string>
<string name="win_show_game">显示游戏版</string>
<string name="win_best_time">新纪录!</string>
<string name="about_affiliation"></string>
</resources>

View file

@ -15,8 +15,6 @@
<string name="menu_reset">Reset Board</string>
<string name="menu_continue_game">Continue Game</string>
<string name="description">a privacy friendly app</string>
<string name="navigation_drawer_open" translatable="false">Open navigation drawer</string>
<string name="navigation_drawer_close" translatable="false">Close navigation drawer</string>
@ -74,10 +72,10 @@
<!--###GameActivity -->
<string name="Sudoku" translatable="false">Sudoku</string>
<string name="gametype_default_9x9" translatable="false">Standard Sudoku 9x9</string>
<string name="gametype_default_6x6" translatable="false">Standard Sudoku 6x6</string>
<string name="gametype_default_9x9" translatable="false">Sudoku 9x9</string>
<string name="gametype_default_6x6" translatable="false">Sudoku 6x6</string>
<string name="gametype_unspecified">Unspecified</string>
<string name="gametype_default_12x12" translatable="false">Standard Sudoku 12x12</string>
<string name="gametype_default_12x12" translatable="false">Sudoku 12x12</string>
<string name="gametype_x_9x9" translatable="false">X Sudoku 9x9</string>
<string name="gametype_hyper_9x9" translatable="false">Hyper Sudoku 9x9</string>
<string name="hint_usage">Select a valid field and then press the hint button to reveal the solution.</string>
@ -95,99 +93,38 @@
<string name="number_of_hints"># used hints:</string>
<string name="number_of_games"># completed games:</string>
<string name="total_of_time">Total time played:</string>
<string name="average_time">average time:</string>
<string name="min_time">best time:</string>
<string name="average_time">Average time:</string>
<string name="min_time">Best time:</string>
<string name="reset_stats">Reset All</string>
<!--### Win Strings -->
<string name="win_text">Congratulations!</string>
<string name="win_button_text">continue</string>
<string name="win_button_text">Continue</string>
<string name="title_activity_help">Help</string>
<string name="win_time">needed time:</string>
<string name="win_hint">hints used:</string>
<string name="win_time">Time:</string>
<string name="win_hint">Hints:</string>
<string name="win_show_game">Show gamefield</string>
<string name="win_best_time">New best time !</string>
<!-- Strings related to Settings -->
<!-- Example General settings -->
<string name="pref_header_general">General</string>
<string name="pref_title_social_recommendations">Enable social recommendations</string>
<string name="pref_description_social_recommendations">Recommendations for people to contact
based on your message history
</string>
<string name="pref_title_display_name">Display name</string>
<string name="pref_default_display_name">John Smith</string>
<string name="pref_title_add_friends_to_messages">Add friends to messages</string>
<string-array name="pref_example_list_titles">
<item>Always</item>
<item>When possible</item>
<item>Never</item>
</string-array>
<string-array name="pref_example_list_values">
<item>1</item>
<item>0</item>
<item>-1</item>
</string-array>
<!-- Example settings for Data & Sync -->
<string name="pref_header_data_sync">Data &amp; sync</string>
<string name="pref_title_sync_frequency">Sync frequency</string>
<string-array name="pref_sync_frequency_titles">
<item>15 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>3 hours</item>
<item>6 hours</item>
<item>Never</item>
</string-array>
<string-array name="pref_sync_frequency_values">
<item>15</item>
<item>30</item>
<item>60</item>
<item>180</item>
<item>360</item>
<item>-1</item>
</string-array>
<string name="pref_title_system_sync_settings">System sync settings</string>
<!-- Example settings for Notifications -->
<string name="pref_header_notifications">Notifications</string>
<string name="pref_title_new_message_notifications">New message notifications</string>
<string name="pref_title_ringtone">Ringtone</string>
<string name="pref_ringtone_silent">Silent</string>
<string name="pref_title_vibrate">Vibrate</string>
<string name="header_help">Help</string>
<string name="win_best_time">New personal best time!</string>
<!-- ### HELP prefs ###-->
<string name="pref_help_keyboard">Keyboard</string>
<string name="pref_help_gamefield">Game field</string>
<string name="pref_help_statusbar">Statusbar</string>
<string name="pref_help_keyheighlited">Key Heighlighted with black border</string>
<string name="pref_help_keyheighlited_summary">Indicates that the number is selected and will be set in every clicked field</string>
<string name="pref_help_keyheighlited_yellow">Key Heighlighted with yellow border</string>
<string name="pref_help_keyheighlited_yellow_summary">Indicates that all numbers have been set</string>
<string name="header_help">Help</string>
<string name="help_keyboard">Keyboard</string>
<string name="help_gamefield">Game field</string>
<string name="help_keyhighlighted_summary">Indicates that the value is selected and will be set in every clicked field</string>
<string name="help_keyhighlighted_yellow_summary">Indicates that the correct number of values for this number have been placed.</string>
<!-- ### Special buttons description ###-->
<string name="pref_help_do">Do button</string>
<string name="pref_help_do_summary">Redoes the last action</string>
<string name="pref_help_undo">Undo button</string>
<string name="pref_help_undo_summary">Undoes the last action</string>
<string name="pref_help_hint">Hint button</string>
<string name="pref_help_hint_summary">Unveals the selected field Warning:When used the game is not appear as best in the Statistics</string>
<string name="pref_help_delete">Delete button</string>
<string name="pref_help_delete_summary">deletes a selected cell</string>
<string name="pref_help_notes">Toggle notes button</string>
<string name="pref_help_notes_summary">toggles if numbers should be set as notes or as value in a cell</string>
<string name="help_do">Do button</string>
<string name="help_do_summary">Redoes the last undone action</string>
<string name="help_undo">Undo button</string>
<string name="help_undo_summary">Undoes the last action</string>
<string name="help_hint">Hint button</string>
<string name="help_hint_summary">Unveals the selected field\nWarning: When used, the current game can not count towards a new best time.</string>
<string name="help_delete">Delete button</string>
<string name="help_delete_summary">Deletes a selected field</string>
<string name="help_notes">Note toggle button</string>
<string name="help_notes_summary">toggles if numbers should be set as notes or as values in a field</string>
<string name="help_privacyInfo">Privacy Info</string>
<string name="help_permissions">Permissions</string>
<string name="help_permissions_summary">Privacy Friendly Sudoku does not use any permissions.</string>
</resources>

View file

@ -1,49 +1,41 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="@string/pref_help_keyboard">
<Preference android:title="@string/pref_help_keyheighlited"
android:selectable="false"
android:icon="@drawable/numfirst"
android:summary="@string/pref_help_keyheighlited_summary"/>
<Preference android:title="@string/pref_help_keyheighlited_yellow"
android:selectable="false"
android:icon="@drawable/numfull"
android:summary="@string/pref_help_keyheighlited_yellow_summary"/>
<PreferenceCategory android:title="@string/help_keyboard">
<Preference android:title="@string/pref_help_do"
<Preference android:title=""
android:selectable="false"
android:icon="@drawable/numpad_highlighted"
android:summary="@string/help_keyhighlighted_summary"/>
<Preference android:title=""
android:selectable="false"
android:icon="@drawable/numpad_highlighted_three"
android:summary="@string/help_keyhighlighted_yellow_summary"/>
<Preference android:title="@string/help_do"
android:selectable="false"
android:icon="@drawable/ic_redo_black_48dp"
android:summary="@string/pref_help_do_summary"/>
<Preference android:title="@string/pref_help_undo"
android:summary="@string/help_do_summary"/>
<Preference android:title="@string/help_undo"
android:selectable="false"
android:icon="@drawable/ic_undo_black_48dp"
android:summary="@string/pref_help_undo_summary"/>
<Preference android:title="@string/pref_help_hint"
android:summary="@string/help_undo_summary"/>
<Preference android:title="@string/help_hint"
android:selectable="false"
android:icon="@drawable/ic_lightbulb_outline_black_48dp"
android:summary="@string/pref_help_hint_summary"/>
<Preference android:title="@string/pref_help_delete"
android:summary="@string/help_hint_summary"/>
<Preference android:title="@string/help_delete"
android:selectable="false"
android:icon="@drawable/ic_delete_black_48dp"
android:summary="@string/pref_help_delete_summary"/>
<Preference android:title="@string/pref_help_notes"
android:summary="@string/help_delete_summary"/>
<Preference android:title="@string/help_notes"
android:selectable="false"
android:icon="@drawable/ic_create_black_48dp"
android:summary="@string/pref_help_notes_summary"/>
android:summary="@string/help_notes_summary"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/pref_help_gamefield">
</PreferenceCategory>
<PreferenceCategory android:title="@string/pref_help_statusbar">
</PreferenceCategory>
<PreferenceCategory android:title="Privacy Info">
<Preference android:title="Privacy Friendly Sudoku" android:summary=""/>
<Preference android:title="Permissions" android:summary="Privacy Friendly Sudoku app whiche does not need any permission."/>
<PreferenceCategory android:title="@string/help_privacyInfo">
<Preference
android:title="@string/help_permissions"
android:summary="@string/help_permissions_summary"/>
</PreferenceCategory>
<!-- NOTE: EditTextPreference accepts EditText attributes. -->