Project

General

Profile

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

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

1
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2022 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// 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
///////////////////////////////////////////////////////////////////////////////////////////////////
9

    
10
package org.distorted.playui;
11

    
12
import java.io.InputStream;
13

    
14
import android.content.SharedPreferences;
15
import android.os.Build;
16
import android.os.Bundle;
17
import android.view.DisplayCutout;
18
import android.view.ViewGroup;
19
import android.widget.LinearLayout;
20

    
21
import com.google.firebase.analytics.FirebaseAnalytics;
22

    
23
import org.distorted.dialogs.RubikDialogScores;
24
import org.distorted.external.RubikScores;
25
import org.distorted.helpers.BaseActivity;
26
import org.distorted.library.main.DistortedLibrary;
27
import org.distorted.objectlib.main.InitAssets;
28
import org.distorted.objectlib.main.ObjectControl;
29
import org.distorted.objectlib.main.TwistyObject;
30
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

    
37
///////////////////////////////////////////////////////////////////////////////////////////////////
38

    
39
public class PlayActivity extends BaseActivity implements RubikDialogScores.ScoresInvoker
40
{
41
    public static final float TITLE_TEXT_SIZE= 0.060f;
42
    private static final int ACTIVITY_NUMBER = 6;
43
    private static final float RATIO_INSET   = 0.09f;
44

    
45
    private static final String KEY_FREE = "movesController_free";
46
    private static final String KEY_SOLV = "movesController_solv";
47

    
48
    private String mObjectName;
49
    private int mNumScrambles;
50
    private boolean mObjectLocal;
51
    private int mObjectOrdinal;
52
    private int mLevel;
53
    private boolean mModeFree;
54
    private boolean mJustStarted;
55
    private FirebaseAnalytics mFirebaseAnalytics;
56

    
57
///////////////////////////////////////////////////////////////////////////////////////////////////
58

    
59
    @Override
60
    protected void onCreate(Bundle savedState)
61
      {
62
      super.onCreate(savedState);
63
      DistortedLibrary.onCreate(ACTIVITY_NUMBER);
64
      setContentView(R.layout.play);
65

    
66
      mJustStarted = true;
67
      mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
68

    
69
      Bundle b = getIntent().getExtras();
70

    
71
      if( b!=null )
72
        {
73
        mLevel         = b.getInt("level");
74
        mObjectName    = b.getString("name");
75
        mNumScrambles  = b.getInt("scrambles");
76
        mObjectLocal   = b.getBoolean("local");
77
        mObjectOrdinal = b.getInt("ordinal");
78
        }
79
      else
80
        {
81
        mLevel = -1;
82
        mObjectName = "";
83
        mNumScrambles = 0;
84
        mObjectLocal = true;
85
        mObjectOrdinal = 0;
86
        }
87

    
88
      mModeFree = (mLevel<0);
89

    
90
      computeScreenDimensions();
91
      hideNavigationBar();
92
      cutoutHack();
93
      computeUpperBarHeight(RATIO_BAR);
94
      computeLowerBarHeight(RATIO_BAR);
95
      }
96

    
97
///////////////////////////////////////////////////////////////////////////////////////////////////
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
        }
114
      }
115

    
116
///////////////////////////////////////////////////////////////////////////////////////////////////
117
    
118
    @Override
119
    protected void onPause() 
120
      {
121
      super.onPause();
122
      PlayView view = findViewById(R.id.playView);
123
      view.onPause();
124
      savePreferences();
125
      DistortedLibrary.onPause(ACTIVITY_NUMBER);
126
      }
127

    
128
///////////////////////////////////////////////////////////////////////////////////////////////////
129
    
130
    @Override
131
    protected void onResume() 
132
      {
133
      super.onResume();
134
      DistortedLibrary.onResume(ACTIVITY_NUMBER);
135
      PlayView view = findViewById(R.id.playView);
136
      ObjectControl control = view.getObjectControl();
137
      view.onResume();
138

    
139
      restorePreferences();
140

    
141
      ScreenList sl =  mJustStarted ?
142
                      (mModeFree ? ScreenList.FREE : ScreenList.SCRA) :
143
                      ScreenList.getCurrentScreen();
144

    
145
      ScreenList.switchScreen(this,sl);
146

    
147
      if( !mJustStarted ) restoreMoves();
148

    
149
      if( mObjectName.length()>0 )
150
        {
151
        changeIfDifferent(mObjectName,mObjectLocal,mObjectOrdinal,control);
152
        }
153

    
154
      if( mJustStarted && !mModeFree )
155
        {
156
        control.scrambleObject(mNumScrambles);
157
        }
158

    
159
      mJustStarted = false;
160
      }
161

    
162
///////////////////////////////////////////////////////////////////////////////////////////////////
163
    
164
    @Override
165
    protected void onDestroy() 
166
      {
167
      super.onDestroy();
168
      DistortedLibrary.onDestroy(ACTIVITY_NUMBER);
169
      }
170

    
171
///////////////////////////////////////////////////////////////////////////////////////////////////
172

    
173
  private void savePreferences()
174
    {
175
    SharedPreferences.Editor editor = mPreferences.edit();
176

    
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

    
197
    PlayView view = findViewById(R.id.playView);
198
    OSInterface os = view.getInterface();
199
    os.setEditor(editor);
200
    view.getObjectControl().savePreferences();
201

    
202
    RubikScores scores = RubikScores.getInstance();
203
    scores.savePreferences(editor);
204

    
205
    editor.apply();
206
    }
207

    
208
///////////////////////////////////////////////////////////////////////////////////////////////////
209

    
210
  private void restorePreferences()
211
    {
212
    for( int i=0; i<ScreenList.LENGTH; i++)
213
      {
214
      ScreenList.getScreen(i).getScreenClass().restorePreferences(mPreferences);
215
      }
216

    
217
    if( !mJustStarted ) ScreenList.restorePreferences(mPreferences);
218

    
219
    PlayView view = findViewById(R.id.playView);
220
    OSInterface os = view.getInterface();
221
    os.setPreferences(mPreferences);
222
    view.getObjectControl().restorePreferences();
223
    }
224

    
225
///////////////////////////////////////////////////////////////////////////////////////////////////
226

    
227
  private void restoreMoves()
228
    {
229
    ScreenList curr = ScreenList.getCurrentScreen();
230

    
231
    if( curr==ScreenList.FREE )
232
      {
233
      ScreenFree free = (ScreenFree) ScreenList.FREE.getScreenClass();
234
      free.restoreMovePreferences(this,KEY_FREE,mPreferences);
235
      }
236
    if( curr==ScreenList.SOLV )
237
      {
238
      ScreenSolving solv = (ScreenSolving) ScreenList.SOLV.getScreenClass();
239
      solv.restoreMovePreferences(this,KEY_SOLV,mPreferences);
240
      }
241
    }
242

    
243
///////////////////////////////////////////////////////////////////////////////////////////////////
244

    
245
    void OpenGLError()
246
      {
247
      RubikDialogError errDiag = new RubikDialogError();
248
      errDiag.show(getSupportFragmentManager(), null);
249
      }
250

    
251
///////////////////////////////////////////////////////////////////////////////////////////////////
252

    
253
    private void changeIfDifferent(String name, boolean local, int ordinal, ObjectControl control)
254
      {
255
      if( local )
256
        {
257
        RubikFiles files = RubikFiles.getInstance();
258
        int iconMode = TwistyObject.MODE_NORM;
259
        InputStream jsonStream = files.openFile(this, name+"_object.json");
260
        InitAssets asset = new InitAssets(jsonStream, null, null);
261
        control.changeIfDifferent(ordinal,name,iconMode,asset);
262
        }
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
        control.changeIfDifferent(ordinal, name, iconMode, asset);
273
        }
274
      }
275

    
276
///////////////////////////////////////////////////////////////////////////////////////////////////
277
// PUBLIC API
278
///////////////////////////////////////////////////////////////////////////////////////////////////
279

    
280
    public FirebaseAnalytics getAnalytics()
281
      {
282
      return mFirebaseAnalytics;
283
      }
284

    
285
///////////////////////////////////////////////////////////////////////////////////////////////////
286

    
287
    public int getNumScrambles()
288
      {
289
      return mNumScrambles;
290
      }
291

    
292
///////////////////////////////////////////////////////////////////////////////////////////////////
293

    
294
    public int getLevel()
295
      {
296
      return mLevel;
297
      }
298

    
299
///////////////////////////////////////////////////////////////////////////////////////////////////
300

    
301
    public int getObjectOrdinal()
302
      {
303
      return mObjectOrdinal;
304
      }
305

    
306
///////////////////////////////////////////////////////////////////////////////////////////////////
307

    
308
    public ObjectControl getControl()
309
      {
310
      PlayView view = findViewById(R.id.playView);
311
      return view.getObjectControl();
312
      }
313
}
(1-1/12)