Project

General

Profile

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

magiccube / src / main / java / org / distorted / solverui / SolverActivity.java @ a5972f92

1
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2023 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.solverui;
11

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

    
19
import androidx.preference.PreferenceManager;
20

    
21
import org.distorted.dialogs.RubikDialogError;
22
import org.distorted.dialogs.RubikDialogMessage;
23
import org.distorted.helpers.BaseActivity;
24
import org.distorted.library.main.DistortedLibrary;
25
import org.distorted.library.main.DistortedScreen;
26
import org.distorted.main.R;
27
import org.distorted.objectlib.helpers.OperatingSystemInterface;
28
import org.distorted.objectlib.main.InitAssets;
29
import org.distorted.objectlib.main.ObjectControl;
30
import org.distorted.objectlib.main.TwistyObject;
31
import org.distorted.objects.RubikObject;
32
import org.distorted.objects.RubikObjectList;
33
import org.distorted.os.OSInterface;
34
import org.distorted.solvers.ImplementedSolversList;
35

    
36
import java.io.InputStream;
37

    
38
///////////////////////////////////////////////////////////////////////////////////////////////////
39

    
40
public class SolverActivity extends BaseActivity
41
{
42
    public static final float RATIO_UPP       = 0.100f;
43
    public static final float PADDING         = 0.010f;
44
    public static final float SMALL_MARGIN    = 0.004f;
45
    public static final float BUTTON_TEXT_SIZE= 0.050f;
46
    public static final float TITLE_TEXT_SIZE = 0.060f;
47

    
48
    private static final int ACTIVITY_NUMBER = 4;
49
    private static final float RATIO_INSET= 0.09f;
50

    
51
    private int mSolverOrdinal;
52
    private int mObjectOrdinal;
53
    private boolean mDisplayMessageDialog;
54

    
55
///////////////////////////////////////////////////////////////////////////////////////////////////
56

    
57
    @Override
58
    protected void onCreate(Bundle savedState)
59
      {
60
      super.onCreate(savedState);
61
      DistortedLibrary.onCreate(ACTIVITY_NUMBER);
62
      setContentView(R.layout.solver);
63

    
64
      Bundle b = getIntent().getExtras();
65
      mObjectOrdinal = b!=null ? b.getInt("obj") : 0;
66
      mSolverOrdinal = ImplementedSolversList.getSolverOrdinal(mObjectOrdinal);
67
      mDisplayMessageDialog = true;
68

    
69
      computeScreenDimensions();
70
      hideNavigationBar();
71
      cutoutHack();
72
      computeUpperBarHeight(RATIO_UPP);
73
      computeLowerBarHeight(RATIO_BAR);
74
      }
75

    
76
///////////////////////////////////////////////////////////////////////////////////////////////////
77

    
78
    @Override
79
    public void onAttachedToWindow()
80
      {
81
      super.onAttachedToWindow();
82

    
83
      if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.P )
84
        {
85
        DisplayCutout cutout = getWindow().getDecorView().getRootWindowInsets().getDisplayCutout();
86
        int insetHeight = cutout!=null ? cutout.getSafeInsetTop() : 0;
87

    
88
        LinearLayout layoutHid = findViewById(R.id.hiddenBar);
89
        ViewGroup.LayoutParams paramsHid = layoutHid.getLayoutParams();
90
        paramsHid.height = (int)(insetHeight*RATIO_INSET);
91
        layoutHid.setLayoutParams(paramsHid);
92
        }
93
      }
94

    
95
///////////////////////////////////////////////////////////////////////////////////////////////////
96
    
97
    @Override
98
    protected void onPause() 
99
      {
100
      super.onPause();
101
      SolverSurfaceView view = findViewById(R.id.solverSurfaceView);
102
      view.onPause();
103
      DistortedLibrary.onPause(ACTIVITY_NUMBER);
104
      savePreferences();
105
      }
106

    
107
///////////////////////////////////////////////////////////////////////////////////////////////////
108
    
109
    @Override
110
    protected void onResume() 
111
      {
112
      super.onResume();
113
      DistortedLibrary.onResume(ACTIVITY_NUMBER);
114
      SolverSurfaceView view = findViewById(R.id.solverSurfaceView);
115
      view.onResume();
116

    
117
      createObject();
118

    
119
      SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
120
      restorePreferences(preferences);
121
      ScreenList.setScreen(this);
122
      }
123

    
124
///////////////////////////////////////////////////////////////////////////////////////////////////
125
    
126
    @Override
127
    protected void onDestroy() 
128
      {
129
      DistortedLibrary.onDestroy(ACTIVITY_NUMBER);
130
      super.onDestroy();
131
      }
132

    
133
///////////////////////////////////////////////////////////////////////////////////////////////////
134

    
135
    private void savePreferences()
136
      {
137
      SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
138
      SharedPreferences.Editor editor = preferences.edit();
139

    
140
      for( int i=0; i< ScreenList.LENGTH; i++ )
141
        {
142
        ScreenList.getScreen(i).getScreenClass().savePreferences(editor);
143
        }
144

    
145
      ScreenList.savePreferences(editor);
146

    
147
      editor.putBoolean("solverDisplayDialog", mDisplayMessageDialog );
148

    
149
      boolean success = editor.commit();
150
      if( !success ) android.util.Log.e("D", "Failed to save preferences");
151
      }
152

    
153
///////////////////////////////////////////////////////////////////////////////////////////////////
154

    
155
    private void restorePreferences(SharedPreferences preferences)
156
      {
157
      for( int i=0; i<ScreenList.LENGTH; i++ )
158
        {
159
        ScreenList.getScreen(i).getScreenClass().restorePreferences(preferences);
160
        }
161

    
162
      ScreenList.restorePreferences(preferences);
163

    
164
      mDisplayMessageDialog = preferences.getBoolean("solverDisplayDialog",true);
165

    
166
      if( mDisplayMessageDialog )
167
        {
168
        Bundle bundle = new Bundle();
169
        bundle.putString("argument", getString(R.string.solver_message) );
170
        RubikDialogMessage diag = new RubikDialogMessage();
171
        diag.setArguments(bundle);
172
        diag.show( getSupportFragmentManager(), RubikDialogMessage.getDialogTag() );
173
        }
174
      }
175

    
176
///////////////////////////////////////////////////////////////////////////////////////////////////
177

    
178
    void doNotShowDialogAnymore()
179
      {
180
      mDisplayMessageDialog = false;
181
      }
182

    
183
///////////////////////////////////////////////////////////////////////////////////////////////////
184

    
185
    void OpenGLError()
186
      {
187
      RubikDialogError errDiag = new RubikDialogError();
188
      errDiag.show(getSupportFragmentManager(), null);
189
      }
190

    
191
///////////////////////////////////////////////////////////////////////////////////////////////////
192
// PUBLIC API
193
///////////////////////////////////////////////////////////////////////////////////////////////////
194

    
195
    public TwistyObject getObject()
196
      {
197
      SolverSurfaceView view = findViewById(R.id.solverSurfaceView);
198
      return view.getObjectControl().getObject();
199
      }
200

    
201
///////////////////////////////////////////////////////////////////////////////////////////////////
202

    
203
    public DistortedScreen getScreen()
204
      {
205
      SolverSurfaceView view = findViewById(R.id.solverSurfaceView);
206
      return view.getRenderer().getScreen();
207
      }
208

    
209
///////////////////////////////////////////////////////////////////////////////////////////////////
210

    
211
    public ObjectControl getControl()
212
      {
213
      SolverSurfaceView view = findViewById(R.id.solverSurfaceView);
214
      return view.getObjectControl();
215
      }
216

    
217
///////////////////////////////////////////////////////////////////////////////////////////////////
218

    
219
    public int getSolverOrdinal()
220
      {
221
      return mSolverOrdinal;
222
      }
223

    
224
///////////////////////////////////////////////////////////////////////////////////////////////////
225

    
226
    public int getObjectOrdinal()
227
      {
228
      return mObjectOrdinal;
229
      }
230

    
231
///////////////////////////////////////////////////////////////////////////////////////////////////
232

    
233
    public void createObject()
234
      {
235
      SolverSurfaceView view = findViewById(R.id.solverSurfaceView);
236
      ObjectControl control = view.getObjectControl();
237
      RubikObject object = RubikObjectList.getObject(mObjectOrdinal);
238
      InputStream jsonStream = object==null ? null : object.getObjectStream(this);
239
      InputStream meshStream = object==null ? null : object.getMeshStream(this);
240
      String name = object==null ? "NULL" : object.getUpperName();
241
      OSInterface os = view.getInterface();
242
      InitAssets asset = new InitAssets(jsonStream,meshStream,os);
243
      control.changeIfDifferent(mObjectOrdinal,name,TwistyObject.MODE_NORM,asset);
244
      }
245

    
246
///////////////////////////////////////////////////////////////////////////////////////////////////
247

    
248
    public OperatingSystemInterface getInterface()
249
      {
250
      SolverSurfaceView view  = findViewById(R.id.solverSurfaceView);
251
      return view.getInterface();
252
      }
253
}
(5-5/8)