Revision 6222afef
Added by Leszek Koltunski 2 days ago
| src/main/java/org/distorted/helpers/RubikRememberedSolves.java | ||
|---|---|---|
| 18 | 18 |
import org.json.JSONObject; |
| 19 | 19 |
|
| 20 | 20 |
import java.io.BufferedReader; |
| 21 |
import java.io.BufferedWriter; |
|
| 22 |
import java.io.FileOutputStream; |
|
| 21 | 23 |
import java.io.IOException; |
| 22 | 24 |
import java.io.InputStream; |
| 23 | 25 |
import java.io.InputStreamReader; |
| 26 |
import java.io.OutputStreamWriter; |
|
| 24 | 27 |
import java.nio.charset.StandardCharsets; |
| 25 | 28 |
|
| 26 | 29 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 66 | 69 |
|
| 67 | 70 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 68 | 71 |
|
| 69 |
public JSONArray readFile(Activity act, String filename)
|
|
| 72 |
public JSONArray readFile(Activity act, String objname)
|
|
| 70 | 73 |
{
|
| 71 | 74 |
RubikFiles files = RubikFiles.getInstance(); |
| 72 |
InputStream file = files.openFile(act, filename); |
|
| 75 |
InputStream file = files.openFile(act,objname.toLowerCase()+"_solves.json"); |
|
| 76 |
|
|
| 77 |
if( file==null ) return null; |
|
| 73 | 78 |
|
| 74 | 79 |
try |
| 75 | 80 |
{
|
| ... | ... | |
| 97 | 102 |
return contents.toString(); |
| 98 | 103 |
} |
| 99 | 104 |
|
| 105 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 106 |
|
|
| 107 |
public void rememberSolve(Activity act, String objname, int level, long time, Static4D rot, int[] quats) |
|
| 108 |
{
|
|
| 109 |
String filename = objname.toLowerCase()+"_solves.json"; |
|
| 110 |
RubikFiles files = RubikFiles.getInstance(); |
|
| 111 |
InputStream file = files.openFile(act,filename); |
|
| 112 |
RubikRememberedSolves solves = RubikRememberedSolves.getInstance(); |
|
| 113 |
String contents = solves.addInfo(file,level,time,rot,quats); |
|
| 114 |
|
|
| 115 |
try |
|
| 116 |
{
|
|
| 117 |
FileOutputStream fos = new FileOutputStream(filename); |
|
| 118 |
OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8); |
|
| 119 |
BufferedWriter bw = new BufferedWriter(osw); |
|
| 120 |
bw.write(contents); |
|
| 121 |
bw.flush(); |
|
| 122 |
} |
|
| 123 |
catch(IOException ex) |
|
| 124 |
{
|
|
| 125 |
android.util.Log.e("D", "failed to save file "+filename);
|
|
| 126 |
} |
|
| 127 |
} |
|
| 128 |
|
|
| 100 | 129 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 101 | 130 |
|
| 102 | 131 |
private void debug(int level, long time, Static4D rot, int[] quats) |
| src/main/java/org/distorted/main/MainObjectPopup.java | ||
|---|---|---|
| 283 | 283 |
|
| 284 | 284 |
if( numSolves>0 ) |
| 285 | 285 |
{
|
| 286 |
MainSolvesPopup popup = new MainSolvesPopup(act,object,json,width,height,darkC);
|
|
| 286 |
MainSolvesPopup popup = new MainSolvesPopup(act,object,json,width,height); |
|
| 287 | 287 |
popup.show(v); |
| 288 | 288 |
} |
| 289 | 289 |
else act.switchToPlay(object,mObjectOrdinal,scrambles,ll); |
| src/main/java/org/distorted/main/MainSolvesPopup.java | ||
|---|---|---|
| 12 | 12 |
import android.content.Context; |
| 13 | 13 |
import android.content.res.Resources; |
| 14 | 14 |
import android.graphics.drawable.ColorDrawable; |
| 15 |
import android.util.TypedValue; |
|
| 15 | 16 |
import android.view.Gravity; |
| 16 | 17 |
import android.view.LayoutInflater; |
| 17 | 18 |
import android.view.View; |
| 19 |
import android.widget.Button; |
|
| 18 | 20 |
import android.widget.LinearLayout; |
| 19 | 21 |
import android.widget.PopupWindow; |
| 22 |
import android.widget.TextView; |
|
| 20 | 23 |
|
| 21 | 24 |
import org.distorted.objects.RubikObject; |
| 22 | 25 |
import org.json.JSONArray; |
| 23 | 26 |
import org.json.JSONException; |
| 24 | 27 |
import org.json.JSONObject; |
| 25 | 28 |
|
| 26 |
import java.lang.ref.WeakReference; |
|
| 27 |
|
|
| 28 | 29 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 29 | 30 |
|
| 30 | 31 |
public class MainSolvesPopup |
| 31 | 32 |
{
|
| 32 | 33 |
private final int mWidth, mHeight; |
| 33 | 34 |
private final PopupWindow mPopup; |
| 34 |
private final WeakReference<MainActivity> mAct; |
|
| 35 | 35 |
private final LinearLayout mLayout; |
| 36 |
private int mMargin, mSize, mFontSize, mPadding; |
|
| 36 |
private final int mMargin, mSize, mFontSize, mPadding;
|
|
| 37 | 37 |
|
| 38 | 38 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 39 | 39 |
|
| 40 |
MainSolvesPopup(MainActivity act, RubikObject object, JSONArray array, int popupWidth, int popupHeight, int darkC)
|
|
| 40 |
MainSolvesPopup(MainActivity act, RubikObject object, JSONArray array, int popupWidth, int popupHeight) |
|
| 41 | 41 |
{
|
| 42 |
mAct = new WeakReference<>(act); |
|
| 43 |
|
|
| 44 | 42 |
mWidth = popupWidth; |
| 45 | 43 |
mHeight= popupHeight; |
| 46 | 44 |
|
| ... | ... | |
| 61 | 59 |
|
| 62 | 60 |
mLayout= layout.findViewById(R.id.dialog_scrollable_main_layout); |
| 63 | 61 |
|
| 64 |
fillLayout(array); |
|
| 62 |
fillLayout(act,array);
|
|
| 65 | 63 |
} |
| 66 | 64 |
|
| 67 | 65 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 68 | 66 |
|
| 69 |
private void fillLayout(JSONArray array) |
|
| 67 |
private void fillLayout(MainActivity act, JSONArray array)
|
|
| 70 | 68 |
{
|
| 71 | 69 |
int textH = (int)(mSize*0.27f); |
| 72 | 70 |
int buttH = (int)(mSize*0.35f); |
| ... | ... | |
| 86 | 84 |
{
|
| 87 | 85 |
JSONObject object = array.getJSONObject(s); |
| 88 | 86 |
long time = object.getLong("time");
|
| 89 |
View pane = createPane(time, pL, pT, pB);
|
|
| 87 |
View pane = createOldPane(act, time, pL, pT, pB);
|
|
| 90 | 88 |
mLayout.addView(pane); |
| 91 | 89 |
} |
| 92 | 90 |
} |
| ... | ... | |
| 95 | 93 |
android.util.Log.e("D", "fillLayout: JSON error: "+jex.getMessage());
|
| 96 | 94 |
} |
| 97 | 95 |
|
| 98 |
View pane = createNewPane(pL,pT,pB); |
|
| 96 |
View pane = createNewPane(act, pL,pT,pB);
|
|
| 99 | 97 |
mLayout.addView(pane); |
| 100 | 98 |
} |
| 101 | 99 |
|
| 102 | 100 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 103 | 101 |
|
| 104 |
private View createPane(long time, LinearLayout.LayoutParams pView, LinearLayout.LayoutParams pText, LinearLayout.LayoutParams pButt)
|
|
| 102 |
private View createOldPane(MainActivity act, long time, LinearLayout.LayoutParams pView, LinearLayout.LayoutParams pText, LinearLayout.LayoutParams pButt)
|
|
| 105 | 103 |
{
|
| 104 |
View view = act.getLayoutInflater().inflate(R.layout.dialog_solve_old_pane, null); |
|
| 105 |
TextView title = view.findViewById(R.id.solves_pane_title); |
|
| 106 |
TextView tm = view.findViewById(R.id.solves_pane_time); |
|
| 107 |
tm.setText(Long.toString(time)); |
|
| 108 |
|
|
| 109 |
view.setLayoutParams(pView); |
|
| 110 |
view.setPadding(mPadding,mPadding,mPadding,mPadding); |
|
| 111 |
|
|
| 112 |
title.setTextSize(TypedValue.COMPLEX_UNIT_PX, mFontSize); |
|
| 113 |
tm.setTextSize(TypedValue.COMPLEX_UNIT_PX, mFontSize); |
|
| 114 |
title.setLayoutParams(pText); |
|
| 115 |
tm.setLayoutParams(pText); |
|
| 116 |
|
|
| 117 |
Button but1 = view.findViewById(R.id.solves_pane_delete); |
|
| 118 |
|
|
| 119 |
but1.setOnClickListener( new View.OnClickListener() |
|
| 120 |
{
|
|
| 121 |
@Override |
|
| 122 |
public void onClick(View v) |
|
| 123 |
{
|
|
| 124 |
android.util.Log.e("D", "DELETE");
|
|
| 125 |
} |
|
| 126 |
}); |
|
| 127 |
|
|
| 128 |
but1.setTextSize(TypedValue.COMPLEX_UNIT_PX, mFontSize); |
|
| 129 |
but1.setLayoutParams(pButt); |
|
| 130 |
|
|
| 131 |
Button but2 = view.findViewById(R.id.solves_pane_resume); |
|
| 106 | 132 |
|
| 133 |
but2.setOnClickListener( new View.OnClickListener() |
|
| 134 |
{
|
|
| 135 |
@Override |
|
| 136 |
public void onClick(View v) |
|
| 137 |
{
|
|
| 138 |
android.util.Log.e("D", "RESUME");
|
|
| 139 |
} |
|
| 140 |
}); |
|
| 141 |
|
|
| 142 |
but2.setTextSize(TypedValue.COMPLEX_UNIT_PX, mFontSize); |
|
| 143 |
but2.setLayoutParams(pButt); |
|
| 144 |
|
|
| 145 |
return view; |
|
| 107 | 146 |
} |
| 108 | 147 |
|
| 109 | 148 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 110 | 149 |
|
| 111 |
private View createNewPane(LinearLayout.LayoutParams pView, LinearLayout.LayoutParams pText, LinearLayout.LayoutParams pButt) |
|
| 150 |
private View createNewPane(MainActivity act, LinearLayout.LayoutParams pView, LinearLayout.LayoutParams pText, LinearLayout.LayoutParams pButt)
|
|
| 112 | 151 |
{
|
| 152 |
View view = act.getLayoutInflater().inflate(R.layout.dialog_solve_new_pane, null); |
|
| 153 |
TextView title = view.findViewById(R.id.solves_pane_title); |
|
| 154 |
|
|
| 155 |
view.setLayoutParams(pView); |
|
| 156 |
view.setPadding(mPadding,mPadding,mPadding,mPadding); |
|
| 157 |
|
|
| 158 |
title.setTextSize(TypedValue.COMPLEX_UNIT_PX, mFontSize); |
|
| 159 |
title.setLayoutParams(pText); |
|
| 160 |
|
|
| 161 |
Button but = view.findViewById(R.id.solves_pane_play); |
|
| 162 |
|
|
| 163 |
but.setOnClickListener( new View.OnClickListener() |
|
| 164 |
{
|
|
| 165 |
@Override |
|
| 166 |
public void onClick(View v) |
|
| 167 |
{
|
|
| 168 |
android.util.Log.e("D", "PLAY");
|
|
| 169 |
} |
|
| 170 |
}); |
|
| 171 |
|
|
| 172 |
but.setTextSize(TypedValue.COMPLEX_UNIT_PX, mFontSize); |
|
| 173 |
but.setLayoutParams(pButt); |
|
| 113 | 174 |
|
| 175 |
return view; |
|
| 114 | 176 |
} |
| 115 | 177 |
|
| 116 | 178 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| src/main/java/org/distorted/play/PlayActivity.java | ||
|---|---|---|
| 9 | 9 |
|
| 10 | 10 |
package org.distorted.play; |
| 11 | 11 |
|
| 12 |
import java.io.BufferedWriter; |
|
| 13 |
import java.io.FileOutputStream; |
|
| 14 |
import java.io.IOException; |
|
| 15 | 12 |
import java.io.InputStream; |
| 16 |
import java.io.OutputStreamWriter; |
|
| 17 |
import java.nio.charset.StandardCharsets; |
|
| 18 | 13 |
|
| 14 |
import android.app.Activity; |
|
| 19 | 15 |
import android.content.SharedPreferences; |
| 20 | 16 |
import android.os.Build; |
| 21 | 17 |
import android.os.Bundle; |
| ... | ... | |
| 304 | 300 |
return mObjectOrdinal; |
| 305 | 301 |
} |
| 306 | 302 |
|
| 307 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 308 |
|
|
| 309 |
private void rememberSolveThread(String name, int level, long time, Static4D rot, int[] quats) |
|
| 310 |
{
|
|
| 311 |
String filename = name+"_solves.json"; |
|
| 312 |
RubikFiles files = RubikFiles.getInstance(); |
|
| 313 |
InputStream file = files.openFile(this, filename); |
|
| 314 |
RubikRememberedSolves solves = RubikRememberedSolves.getInstance(); |
|
| 315 |
String contents = solves.addInfo(file,level,time,rot,quats); |
|
| 316 |
|
|
| 317 |
try |
|
| 318 |
{
|
|
| 319 |
FileOutputStream fos = new FileOutputStream(filename); |
|
| 320 |
OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8); |
|
| 321 |
BufferedWriter bw = new BufferedWriter(osw); |
|
| 322 |
bw.write(contents); |
|
| 323 |
bw.flush(); |
|
| 324 |
} |
|
| 325 |
catch(IOException ex) |
|
| 326 |
{
|
|
| 327 |
android.util.Log.e("D", "failed to save file "+filename);
|
|
| 328 |
} |
|
| 329 |
} |
|
| 330 |
|
|
| 331 | 303 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 332 | 304 |
|
| 333 | 305 |
public void rememberSolve() |
| ... | ... | |
| 342 | 314 |
int[] quats = new int[numCubits]; |
| 343 | 315 |
for(int c=0; c<numCubits; c++) quats[c] = object.getCubitQuatIndex(c); |
| 344 | 316 |
Static4D rotQuat = control.getQuat(); |
| 317 |
Activity act = this; |
|
| 345 | 318 |
|
| 346 | 319 |
Thread thread = new Thread() |
| 347 | 320 |
{
|
| 348 | 321 |
public void run() |
| 349 | 322 |
{
|
| 350 |
rememberSolveThread(name,level,time,rotQuat,quats); |
|
| 323 |
RubikRememberedSolves solves = RubikRememberedSolves.getInstance(); |
|
| 324 |
solves.rememberSolve(act,name,level,time,rotQuat,quats); |
|
| 351 | 325 |
} |
| 352 | 326 |
}; |
| 353 | 327 |
|
| src/main/res/layout/dialog_solve_new_pane.xml | ||
|---|---|---|
| 1 |
<?xml version="1.0" encoding="utf-8"?> |
|
| 2 |
<LinearLayout |
|
| 3 |
xmlns:android="http://schemas.android.com/apk/res/android" |
|
| 4 |
android:layout_width="match_parent" |
|
| 5 |
android:layout_height="wrap_content" |
|
| 6 |
android:background="?mediumC" |
|
| 7 |
android:padding="8dp" |
|
| 8 |
android:orientation="horizontal" |
|
| 9 |
android:baselineAligned="false"> |
|
| 10 |
|
|
| 11 |
<LinearLayout |
|
| 12 |
android:layout_width="0dp" |
|
| 13 |
android:layout_height="match_parent" |
|
| 14 |
android:orientation="horizontal" |
|
| 15 |
android:layout_weight="1.0"> |
|
| 16 |
|
|
| 17 |
<TextView |
|
| 18 |
android:id="@+id/solves_pane_title" |
|
| 19 |
android:gravity="center_vertical|start" |
|
| 20 |
android:layout_width="match_parent" |
|
| 21 |
android:layout_height="wrap_content" |
|
| 22 |
android:text="@string/new_solve" |
|
| 23 |
android:singleLine="true" |
|
| 24 |
android:textStyle="bold"/> |
|
| 25 |
|
|
| 26 |
</LinearLayout> |
|
| 27 |
|
|
| 28 |
<LinearLayout |
|
| 29 |
android:layout_width="0dp" |
|
| 30 |
android:layout_height="match_parent" |
|
| 31 |
android:orientation="vertical" |
|
| 32 |
android:layout_marginStart="8dp" |
|
| 33 |
android:layout_weight="0.5"> |
|
| 34 |
|
|
| 35 |
<Button |
|
| 36 |
android:id="@+id/solves_pane_play" |
|
| 37 |
android:layout_width="match_parent" |
|
| 38 |
android:layout_height="match_parent" |
|
| 39 |
android:backgroundTint="?veryDarkC" |
|
| 40 |
android:minHeight="0dp" |
|
| 41 |
android:minWidth="0dp" |
|
| 42 |
android:insetTop="0dp" |
|
| 43 |
android:insetBottom="0dp" |
|
| 44 |
android:text="@string/play"/> |
|
| 45 |
|
|
| 46 |
</LinearLayout> |
|
| 47 |
</LinearLayout> |
|
| src/main/res/layout/dialog_solve_old_pane.xml | ||
|---|---|---|
| 1 |
<?xml version="1.0" encoding="utf-8"?> |
|
| 2 |
<LinearLayout |
|
| 3 |
xmlns:android="http://schemas.android.com/apk/res/android" |
|
| 4 |
android:layout_width="match_parent" |
|
| 5 |
android:layout_height="wrap_content" |
|
| 6 |
android:background="?mediumC" |
|
| 7 |
android:padding="8dp" |
|
| 8 |
android:orientation="horizontal" |
|
| 9 |
android:baselineAligned="false"> |
|
| 10 |
|
|
| 11 |
<LinearLayout |
|
| 12 |
android:layout_width="0dp" |
|
| 13 |
android:layout_height="match_parent" |
|
| 14 |
android:orientation="horizontal" |
|
| 15 |
android:layout_weight="1.0"> |
|
| 16 |
|
|
| 17 |
<TextView |
|
| 18 |
android:id="@+id/solves_pane_title" |
|
| 19 |
android:gravity="center_vertical|start" |
|
| 20 |
android:layout_width="match_parent" |
|
| 21 |
android:layout_height="wrap_content" |
|
| 22 |
android:text="@string/old_solve" |
|
| 23 |
android:singleLine="true" |
|
| 24 |
android:textStyle="bold"/> |
|
| 25 |
|
|
| 26 |
<TextView |
|
| 27 |
android:id="@+id/solves_pane_time" |
|
| 28 |
android:gravity="center_vertical|start" |
|
| 29 |
android:layout_width="wrap_content" |
|
| 30 |
android:layout_height="wrap_content" |
|
| 31 |
android:singleLine="true"/> |
|
| 32 |
|
|
| 33 |
</LinearLayout> |
|
| 34 |
|
|
| 35 |
<LinearLayout |
|
| 36 |
android:layout_width="0dp" |
|
| 37 |
android:layout_height="match_parent" |
|
| 38 |
android:orientation="vertical" |
|
| 39 |
android:layout_marginStart="8dp" |
|
| 40 |
android:layout_weight="0.5"> |
|
| 41 |
|
|
| 42 |
<Button |
|
| 43 |
android:id="@+id/solves_pane_delete" |
|
| 44 |
android:layout_width="match_parent" |
|
| 45 |
android:layout_height="wrap_content" |
|
| 46 |
android:backgroundTint="?veryDarkC" |
|
| 47 |
android:minHeight="0dp" |
|
| 48 |
android:minWidth="0dp" |
|
| 49 |
android:insetTop="0dp" |
|
| 50 |
android:insetBottom="0dp" |
|
| 51 |
android:text="@string/delete"/> |
|
| 52 |
<Button |
|
| 53 |
android:id="@+id/solves_pane_resume" |
|
| 54 |
android:layout_width="match_parent" |
|
| 55 |
android:layout_height="wrap_content" |
|
| 56 |
android:backgroundTint="?veryDarkC" |
|
| 57 |
android:minHeight="0dp" |
|
| 58 |
android:minWidth="0dp" |
|
| 59 |
android:insetTop="0dp" |
|
| 60 |
android:insetBottom="0dp" |
|
| 61 |
android:text="@string/resume"/> |
|
| 62 |
|
|
| 63 |
</LinearLayout> |
|
| 64 |
</LinearLayout> |
|
| src/main/res/values-de/strings.xml | ||
|---|---|---|
| 67 | 67 |
<string name="object_info">Info</string> |
| 68 | 68 |
<string name="object_config">Konfig</string> |
| 69 | 69 |
|
| 70 |
<string name="old_solve">Alter Solve</string> |
|
| 71 |
<string name="new_solve">Neuer Solve</string> |
|
| 70 | 72 |
<string name="stars">Sterne</string> |
| 71 | 73 |
<string name="scores">Highscores</string> |
| 72 | 74 |
<string name="patterns">Hübsche Muster</string> |
| ... | ... | |
| 262 | 264 |
<string name="lv_placeholder">Level %1$d</string> |
| 263 | 265 |
<string name="ti_placeholder">%1$s Sekunden</string> |
| 264 | 266 |
<string name="ab_placeholder">Über Version %1$s</string> |
| 267 |
<string name="delete">Löschen</string> |
|
| 268 |
<string name="resume">Fortsetzen</string> |
|
| 265 | 269 |
|
| 266 | 270 |
</resources> |
| src/main/res/values-es/strings.xml | ||
|---|---|---|
| 67 | 67 |
<string name="object_info">Información</string> |
| 68 | 68 |
<string name="object_config">Config</string> |
| 69 | 69 |
|
| 70 |
<string name="old_solve">Intento anterior</string> |
|
| 71 |
<string name="new_solve">Nuevo intento</string> |
|
| 70 | 72 |
<string name="stars">Estrellas</string> |
| 71 | 73 |
<string name="scores">Leaderboard</string> |
| 72 | 74 |
<string name="patterns">Patrones</string> |
| ... | ... | |
| 262 | 264 |
<string name="lv_placeholder">Nivel %1$d</string> |
| 263 | 265 |
<string name="ti_placeholder">%1$s segundos</string> |
| 264 | 266 |
<string name="ab_placeholder">Acerca de %1$s</string> |
| 267 |
<string name="delete">Eliminar</string> |
|
| 268 |
<string name="resume">Reanudar</string> |
|
| 265 | 269 |
|
| 266 | 270 |
</resources> |
| src/main/res/values-fr/strings.xml | ||
|---|---|---|
| 66 | 66 |
<string name="object_info">Info</string> |
| 67 | 67 |
<string name="object_config">Config</string> |
| 68 | 68 |
|
| 69 |
<string name="old_solve">Ancienne résolution</string> |
|
| 70 |
<string name="new_solve">Nouvelle résolution</string> |
|
| 69 | 71 |
<string name="stars">Étoiles</string> |
| 70 | 72 |
<string name="scores">Meilleurs scores</string> |
| 71 | 73 |
<string name="patterns">Jolis motifs</string> |
| ... | ... | |
| 262 | 264 |
<string name="ti_placeholder">%1$s secondes</string> |
| 263 | 265 |
<string name="ab_placeholder">À propos de %1$s</string> |
| 264 | 266 |
<string name="abandon_solve">Souvenez-vous de cette solution</string> |
| 267 |
<string name="delete">Supprimer</string> |
|
| 268 |
<string name="resume">Reprendre</string> |
|
| 265 | 269 |
|
| 266 | 270 |
</resources> |
| src/main/res/values-ja/strings.xml | ||
|---|---|---|
| 67 | 67 |
<string name="object_info">情報</string> |
| 68 | 68 |
<string name="object_config">構成</string> |
| 69 | 69 |
|
| 70 |
<string name="old_solve">古い解答</string> |
|
| 71 |
<string name="new_solve">新しい解答</string> |
|
| 70 | 72 |
<string name="stars">星</string> |
| 71 | 73 |
<string name="scores">ハイスコア</string> |
| 72 | 74 |
<string name="patterns">プリティパターン</string> |
| ... | ... | |
| 262 | 264 |
<string name="lv_placeholder">レベル %1$d</string> |
| 263 | 265 |
<string name="ti_placeholder">%1$s 秒</string> |
| 264 | 266 |
<string name="ab_placeholder">バージョン%1$sについて</string> |
| 267 |
<string name="delete">削除</string> |
|
| 268 |
<string name="resume">再開</string> |
|
| 265 | 269 |
|
| 266 | 270 |
</resources> |
| src/main/res/values-ko/strings.xml | ||
|---|---|---|
| 67 | 67 |
<string name="object_info">정보</string> |
| 68 | 68 |
<string name="object_config">구성</string> |
| 69 | 69 |
|
| 70 |
<string name="old_solve">이전 풀이</string> |
|
| 71 |
<string name="new_solve">새 풀이</string> |
|
| 70 | 72 |
<string name="stars">별</string> |
| 71 | 73 |
<string name="scores">고득점</string> |
| 72 | 74 |
<string name="patterns">예쁜 패턴</string> |
| ... | ... | |
| 262 | 264 |
<string name="lv_placeholder">레벨 %1$d</string> |
| 263 | 265 |
<string name="ti_placeholder">%1$s 초</string> |
| 264 | 266 |
<string name="ab_placeholder">버전 %1$s 정보</string> |
| 267 |
<string name="delete">삭제</string> |
|
| 268 |
<string name="resume">계속</string> |
|
| 265 | 269 |
</resources> |
| src/main/res/values-pl/strings.xml | ||
|---|---|---|
| 67 | 67 |
<string name="object_info">Info</string> |
| 68 | 68 |
<string name="object_config">Konfig</string> |
| 69 | 69 |
|
| 70 |
<string name="new_solve">Nowa próba</string> |
|
| 70 | 71 |
<string name="stars">Gwiazdki</string> |
| 71 | 72 |
<string name="scores">Lista najlepszych</string> |
| 72 | 73 |
<string name="patterns">Piękne Wzory</string> |
| ... | ... | |
| 262 | 263 |
<string name="lv_placeholder">Poziom %1$d</string> |
| 263 | 264 |
<string name="ti_placeholder">%1$s sekund</string> |
| 264 | 265 |
<string name="ab_placeholder">O wersji %1$s</string> |
| 266 |
<string name="delete">Usuń</string> |
|
| 267 |
<string name="resume">Wznów</string> |
|
| 268 |
<string name="old_solve">Stara próba</string> |
|
| 265 | 269 |
|
| 266 | 270 |
</resources> |
| src/main/res/values-ru/strings.xml | ||
|---|---|---|
| 67 | 67 |
<string name="object_info">Инфо</string> |
| 68 | 68 |
<string name="object_config">Конфиг</string> |
| 69 | 69 |
|
| 70 |
<string name="new_solve">Новая попытка</string> |
|
| 70 | 71 |
<string name="stars">Звезды</string> |
| 71 | 72 |
<string name="scores">Высокие баллы</string> |
| 72 | 73 |
<string name="patterns">Красивые узоры</string> |
| ... | ... | |
| 262 | 263 |
<string name="lv_placeholder">Уровень %1$d</string> |
| 263 | 264 |
<string name="ti_placeholder">%1$s сек.</string> |
| 264 | 265 |
<string name="ab_placeholder">О версии %1$s</string> |
| 266 |
<string name="delete">Удалить</string> |
|
| 267 |
<string name="resume">Продолжить</string> |
|
| 268 |
<string name="old_solve">Старая попытка</string> |
|
| 265 | 269 |
</resources> |
| src/main/res/values-zh-rCN/strings.xml | ||
|---|---|---|
| 66 | 66 |
<string name="object_info">信息</string> |
| 67 | 67 |
<string name="object_config">配置</string> |
| 68 | 68 |
|
| 69 |
<string name="old_solve">旧记录</string> |
|
| 70 |
<string name="new_solve">新记录</string> |
|
| 69 | 71 |
<string name="stars">星星</string> |
| 70 | 72 |
<string name="scores">高分</string> |
| 71 | 73 |
<string name="patterns">模式</string> |
| ... | ... | |
| 268 | 270 |
<string name="ti_placeholder">%1$s 秒</string> |
| 269 | 271 |
<string name="ab_placeholder">关于版本 %1$s</string> |
| 270 | 272 |
<string name="abandon_solve">记住这个解法</string> |
| 273 |
<string name="delete">删除</string> |
|
| 274 |
<string name="resume">继续</string> |
|
| 271 | 275 |
</resources> |
| src/main/res/values-zh-rTW/strings.xml | ||
|---|---|---|
| 66 | 66 |
<string name="object_info">資訊</string> |
| 67 | 67 |
<string name="object_config">配置</string> |
| 68 | 68 |
|
| 69 |
<string name="old_solve">舊紀錄</string> |
|
| 70 |
<string name="new_solve">新紀錄</string> |
|
| 69 | 71 |
<string name="stars">星星</string> |
| 70 | 72 |
<string name="scores">高分</string> |
| 71 | 73 |
<string name="patterns">模式</string> |
| ... | ... | |
| 262 | 264 |
<string name="ti_placeholder">%1$s 秒</string> |
| 263 | 265 |
<string name="ab_placeholder">關於版本 %1$s</string> |
| 264 | 266 |
<string name="abandon_solve">記住這個解法</string> |
| 267 |
<string name="delete">刪除</string> |
|
| 268 |
<string name="resume">繼續</string> |
|
| 265 | 269 |
|
| 266 | 270 |
</resources> |
| src/main/res/values/strings.xml | ||
|---|---|---|
| 60 | 60 |
<string name="email">Report a bug, suggest a feature:</string> |
| 61 | 61 |
<string name="exit_app">Exit App?</string> |
| 62 | 62 |
<string name="interrupt">Interrupt</string> |
| 63 |
<string name="delete">Delete</string> |
|
| 64 |
<string name="resume">Resume</string> |
|
| 65 |
<string name="old_solve">Old Solve</string> |
|
| 66 |
<string name="new_solve">New Solve</string> |
|
| 63 | 67 |
|
| 64 | 68 |
<string name="stars">Stars</string> |
| 65 | 69 |
<string name="scores">High Scores</string> |
Also available in: Unified diff
progress with remembering solves.