Project

General

Profile

« Previous | Next » 

Revision 6222afef

Added by Leszek Koltunski 2 days ago

progress with remembering solves.

View differences:

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