Project

General

Profile

Download (10.1 KB) Statistics
| Branch: | Tag: | Revision:

magiccube / src / main / java / org / distorted / playui / PlayActivity.java @ 9881dc03

1 9530f6b0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2 da56b12f Leszek Koltunski
// Copyright 2022 Leszek Koltunski                                                               //
3 9530f6b0 Leszek Koltunski
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6 44fec653 Leszek Koltunski
// Magic Cube is proprietary software licensed under an EULA which you should have received      //
7
// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html        //
8 9530f6b0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
9
10 7ee8337b leszek
package org.distorted.playui;
11
12
import java.io.InputStream;
13 9530f6b0 Leszek Koltunski
14 972f9eae Leszek Koltunski
import android.content.SharedPreferences;
15 9530f6b0 Leszek Koltunski
import android.os.Build;
16
import android.os.Bundle;
17 f3563327 Leszek Koltunski
import android.view.DisplayCutout;
18 9530f6b0 Leszek Koltunski
import android.view.ViewGroup;
19
import android.widget.LinearLayout;
20
21 18b0ae9c leszek
import com.google.firebase.analytics.FirebaseAnalytics;
22
23 c02235d5 leszek
import org.distorted.dialogs.RubikDialogScores;
24 88913ad4 leszek
import org.distorted.external.RubikScores;
25 a5972f92 leszek
import org.distorted.helpers.BaseActivity;
26 9530f6b0 Leszek Koltunski
import org.distorted.library.main.DistortedLibrary;
27 50e6c5d6 Leszek Koltunski
import org.distorted.objectlib.main.InitAssets;
28 9530f6b0 Leszek Koltunski
import org.distorted.objectlib.main.ObjectControl;
29 7cb8d4b0 Leszek Koltunski
import org.distorted.objectlib.main.TwistyObject;
30 7ee8337b leszek
import org.distorted.dialogs.RubikDialogError;
31
import org.distorted.external.RubikFiles;
32
import org.distorted.main.R;
33
import org.distorted.objects.RubikObject;
34
import org.distorted.objects.RubikObjectList;
35
import org.distorted.os.OSInterface;
36 9530f6b0 Leszek Koltunski
37
///////////////////////////////////////////////////////////////////////////////////////////////////
38
39 a5972f92 leszek
public class PlayActivity extends BaseActivity implements RubikDialogScores.ScoresInvoker
40 9530f6b0 Leszek Koltunski
{
41 15ed3429 leszek
    public static final float TITLE_TEXT_SIZE= 0.060f;
42 c9f72ca3 leszek
    private static final int ACTIVITY_NUMBER = 6;
43 ada8ab26 leszek
    private static final float RATIO_INSET   = 0.09f;
44 15ed3429 leszek
45
    private static final String KEY_FREE = "movesController_free";
46
    private static final String KEY_SOLV = "movesController_solv";
47 9530f6b0 Leszek Koltunski
48 88b94310 Leszek Koltunski
    private String mObjectName;
49 7ee8337b leszek
    private int mNumScrambles;
50
    private boolean mObjectLocal;
51
    private int mObjectOrdinal;
52 7bb30586 leszek
    private int mLevel;
53 7ee8337b leszek
    private boolean mModeFree;
54 e9397ae9 leszek
    private boolean mJustStarted;
55 18b0ae9c leszek
    private FirebaseAnalytics mFirebaseAnalytics;
56 9530f6b0 Leszek Koltunski
57
///////////////////////////////////////////////////////////////////////////////////////////////////
58
59
    @Override
60
    protected void onCreate(Bundle savedState)
61
      {
62
      super.onCreate(savedState);
63
      DistortedLibrary.onCreate(ACTIVITY_NUMBER);
64 7ee8337b leszek
      setContentView(R.layout.play);
65 9530f6b0 Leszek Koltunski
66 e9397ae9 leszek
      mJustStarted = true;
67 18b0ae9c leszek
      mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
68
69 9530f6b0 Leszek Koltunski
      Bundle b = getIntent().getExtras();
70 7ee8337b leszek
71
      if( b!=null )
72
        {
73 7bb30586 leszek
        mLevel         = b.getInt("level");
74 7ee8337b leszek
        mObjectName    = b.getString("name");
75
        mNumScrambles  = b.getInt("scrambles");
76
        mObjectLocal   = b.getBoolean("local");
77
        mObjectOrdinal = b.getInt("ordinal");
78
        }
79
      else
80
        {
81 97201782 leszek
        mLevel = -1;
82 7ee8337b leszek
        mObjectName = "";
83
        mNumScrambles = 0;
84
        mObjectLocal = true;
85
        mObjectOrdinal = 0;
86
        }
87 9530f6b0 Leszek Koltunski
88 97201782 leszek
      mModeFree = (mLevel<0);
89
90 a5972f92 leszek
      computeScreenDimensions();
91 9530f6b0 Leszek Koltunski
      hideNavigationBar();
92
      cutoutHack();
93 a5972f92 leszek
      computeUpperBarHeight(RATIO_BAR);
94
      computeLowerBarHeight(RATIO_BAR);
95 9530f6b0 Leszek Koltunski
      }
96
97 f3563327 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
98
99
    @Override
100
    public void onAttachedToWindow()
101
      {
102
      super.onAttachedToWindow();
103
104
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
105
        {
106
        DisplayCutout cutout = getWindow().getDecorView().getRootWindowInsets().getDisplayCutout();
107
        int insetHeight = cutout!=null ? cutout.getSafeInsetTop() : 0;
108
109
        LinearLayout layoutHid = findViewById(R.id.hiddenBar);
110
        ViewGroup.LayoutParams paramsHid = layoutHid.getLayoutParams();
111
        paramsHid.height = (int)(insetHeight*RATIO_INSET);
112
        layoutHid.setLayoutParams(paramsHid);
113 9530f6b0 Leszek Koltunski
        }
114
      }
115
116
///////////////////////////////////////////////////////////////////////////////////////////////////
117
    
118
    @Override
119
    protected void onPause() 
120
      {
121
      super.onPause();
122 7ee8337b leszek
      PlayView view = findViewById(R.id.playView);
123 9530f6b0 Leszek Koltunski
      view.onPause();
124 972f9eae Leszek Koltunski
      savePreferences();
125 9530f6b0 Leszek Koltunski
      DistortedLibrary.onPause(ACTIVITY_NUMBER);
126
      }
127
128
///////////////////////////////////////////////////////////////////////////////////////////////////
129
    
130
    @Override
131
    protected void onResume() 
132
      {
133
      super.onResume();
134
      DistortedLibrary.onResume(ACTIVITY_NUMBER);
135 7ee8337b leszek
      PlayView view = findViewById(R.id.playView);
136 e9397ae9 leszek
      ObjectControl control = view.getObjectControl();
137 9530f6b0 Leszek Koltunski
      view.onResume();
138
139 9881dc03 leszek
      restorePreferences();
140 9530f6b0 Leszek Koltunski
141 7bb30586 leszek
      ScreenList sl =  mJustStarted ?
142
                      (mModeFree ? ScreenList.FREE : ScreenList.SCRA) :
143
                      ScreenList.getCurrentScreen();
144
145
      ScreenList.switchScreen(this,sl);
146
147 9881dc03 leszek
      if( !mJustStarted ) restoreMoves();
148 e9397ae9 leszek
149 88b94310 Leszek Koltunski
      if( mObjectName.length()>0 )
150 9530f6b0 Leszek Koltunski
        {
151 e9397ae9 leszek
        changeIfDifferent(mObjectName,mObjectLocal,mObjectOrdinal,control);
152 9530f6b0 Leszek Koltunski
        }
153 18b0ae9c leszek
154 88d8ccb6 leszek
      if( mJustStarted && !mModeFree )
155 18b0ae9c leszek
        {
156
        control.scrambleObject(mNumScrambles);
157
        }
158 88d8ccb6 leszek
159
      mJustStarted = false;
160 9530f6b0 Leszek Koltunski
      }
161
162
///////////////////////////////////////////////////////////////////////////////////////////////////
163
    
164
    @Override
165
    protected void onDestroy() 
166
      {
167
      super.onDestroy();
168
      DistortedLibrary.onDestroy(ACTIVITY_NUMBER);
169
      }
170
171 972f9eae Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
172
173
  private void savePreferences()
174
    {
175 9881dc03 leszek
    SharedPreferences.Editor editor = mPreferences.edit();
176 15ed3429 leszek
177
    for( int i=0; i<ScreenList.LENGTH; i++ )
178
      {
179
      ScreenList.getScreen(i).getScreenClass().savePreferences(editor);
180
      }
181
182
    ScreenList.savePreferences(editor);
183
184
    ScreenList curr = ScreenList.getCurrentScreen();
185
186
    if( curr==ScreenList.FREE )
187
      {
188
      ScreenFree free = (ScreenFree) ScreenList.FREE.getScreenClass();
189
      free.saveMovePreferences(KEY_FREE,editor);
190
      }
191
    if( curr==ScreenList.SOLV )
192
      {
193
      ScreenSolving solv = (ScreenSolving) ScreenList.SOLV.getScreenClass();
194
      solv.saveMovePreferences(KEY_SOLV,editor);
195
      }
196 972f9eae Leszek Koltunski
197 953f5ac9 leszek
    PlayView view = findViewById(R.id.playView);
198
    OSInterface os = view.getInterface();
199
    os.setEditor(editor);
200
    view.getObjectControl().savePreferences();
201
202 88913ad4 leszek
    RubikScores scores = RubikScores.getInstance();
203
    scores.savePreferences(editor);
204
205 972f9eae Leszek Koltunski
    editor.apply();
206
    }
207
208
///////////////////////////////////////////////////////////////////////////////////////////////////
209
210 9881dc03 leszek
  private void restorePreferences()
211 972f9eae Leszek Koltunski
    {
212 15ed3429 leszek
    for( int i=0; i<ScreenList.LENGTH; i++)
213
      {
214 9881dc03 leszek
      ScreenList.getScreen(i).getScreenClass().restorePreferences(mPreferences);
215 15ed3429 leszek
      }
216
217 9881dc03 leszek
    if( !mJustStarted ) ScreenList.restorePreferences(mPreferences);
218 953f5ac9 leszek
219
    PlayView view = findViewById(R.id.playView);
220
    OSInterface os = view.getInterface();
221 9881dc03 leszek
    os.setPreferences(mPreferences);
222 953f5ac9 leszek
    view.getObjectControl().restorePreferences();
223 15ed3429 leszek
    }
224
225
///////////////////////////////////////////////////////////////////////////////////////////////////
226
227 9881dc03 leszek
  private void restoreMoves()
228 15ed3429 leszek
    {
229
    ScreenList curr = ScreenList.getCurrentScreen();
230
231
    if( curr==ScreenList.FREE )
232
      {
233
      ScreenFree free = (ScreenFree) ScreenList.FREE.getScreenClass();
234 9881dc03 leszek
      free.restoreMovePreferences(this,KEY_FREE,mPreferences);
235 15ed3429 leszek
      }
236
    if( curr==ScreenList.SOLV )
237
      {
238
      ScreenSolving solv = (ScreenSolving) ScreenList.SOLV.getScreenClass();
239 9881dc03 leszek
      solv.restoreMovePreferences(this,KEY_SOLV,mPreferences);
240 15ed3429 leszek
      }
241 972f9eae Leszek Koltunski
    }
242
243 9530f6b0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
244
245
    void OpenGLError()
246
      {
247
      RubikDialogError errDiag = new RubikDialogError();
248
      errDiag.show(getSupportFragmentManager(), null);
249
      }
250
251
///////////////////////////////////////////////////////////////////////////////////////////////////
252
253 5a2a7682 leszek
    private void changeIfDifferent(String name, boolean local, int ordinal, ObjectControl control)
254 9530f6b0 Leszek Koltunski
      {
255 7ee8337b leszek
      if( local )
256
        {
257
        RubikFiles files = RubikFiles.getInstance();
258
        int iconMode = TwistyObject.MODE_NORM;
259 5a2a7682 leszek
        InputStream jsonStream = files.openFile(this, name+"_object.json");
260 7ee8337b leszek
        InitAssets asset = new InitAssets(jsonStream, null, null);
261 5a2a7682 leszek
        control.changeIfDifferent(ordinal,name,iconMode,asset);
262 7ee8337b leszek
        }
263
      else
264
        {
265
        RubikObject object = RubikObjectList.getObject(ordinal);
266
        int iconMode = TwistyObject.MODE_NORM;
267
        InputStream jsonStream = object==null ? null : object.getObjectStream(this);
268
        InputStream meshStream = object==null ? null : object.getMeshStream(this);
269
        PlayView view = findViewById(R.id.playView);
270
        OSInterface os = view.getInterface();
271
        InitAssets asset = new InitAssets(jsonStream, meshStream, os);
272 5a2a7682 leszek
        control.changeIfDifferent(ordinal, name, iconMode, asset);
273 7ee8337b leszek
        }
274 9530f6b0 Leszek Koltunski
      }
275
276
///////////////////////////////////////////////////////////////////////////////////////////////////
277
// PUBLIC API
278 18b0ae9c leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
279
280
    public FirebaseAnalytics getAnalytics()
281
      {
282
      return mFirebaseAnalytics;
283
      }
284
285 7ee8337b leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
286
287
    public int getNumScrambles()
288
      {
289
      return mNumScrambles;
290
      }
291
292 7bb30586 leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
293
294
    public int getLevel()
295
      {
296
      return mLevel;
297
      }
298
299 c02235d5 leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
300
301
    public int getObjectOrdinal()
302
      {
303
      return mObjectOrdinal;
304
      }
305
306 9530f6b0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
307
308
    public ObjectControl getControl()
309
      {
310 7ee8337b leszek
      PlayView view = findViewById(R.id.playView);
311 9530f6b0 Leszek Koltunski
      return view.getObjectControl();
312
      }
313
}