Project

General

Profile

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

magiccube / src / main / java / org / distorted / bandaged / BandagedActivity.java @ a5972f92

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
package org.distorted.bandaged;
11
12 2ceeb6b5 Leszek Koltunski
import static android.view.View.LAYOUT_DIRECTION_RTL;
13
14 707f79ff Leszek Koltunski
import java.io.InputStream;
15
16 88b94310 Leszek Koltunski
import android.content.Intent;
17 a41e3c94 Leszek Koltunski
import android.content.SharedPreferences;
18 2ceeb6b5 Leszek Koltunski
import android.content.res.Configuration;
19 7cb8d4b0 Leszek Koltunski
import android.graphics.Bitmap;
20 9530f6b0 Leszek Koltunski
import android.os.Bundle;
21
import android.view.ViewGroup;
22
import android.widget.LinearLayout;
23
24 ada8ab26 leszek
import androidx.preference.PreferenceManager;
25 9530f6b0 Leszek Koltunski
26
import org.distorted.dialogs.RubikDialogError;
27 e1637420 leszek
import org.distorted.dialogs.RubikDialogMessage;
28 81493402 Leszek Koltunski
import org.distorted.external.RubikFiles;
29 a5972f92 leszek
import org.distorted.helpers.BaseActivity;
30 9530f6b0 Leszek Koltunski
import org.distorted.library.main.DistortedLibrary;
31
import org.distorted.main.R;
32 9234018b Leszek Koltunski
import org.distorted.objectlib.main.InitAssets;
33 707f79ff Leszek Koltunski
import org.distorted.objectlib.main.TwistyJson;
34
import org.distorted.objectlib.main.TwistyObject;
35 21a1bb5d Leszek Koltunski
import org.distorted.os.OSInterface;
36 7ee8337b leszek
import org.distorted.playui.PlayActivity;
37 9530f6b0 Leszek Koltunski
38
///////////////////////////////////////////////////////////////////////////////////////////////////
39
40 a5972f92 leszek
public class BandagedActivity extends BaseActivity
41 9530f6b0 Leszek Koltunski
{
42 7bb30586 leszek
    public static final float SPINNER_TEXT_SIZE = 0.03f;
43
    public static final float PADDING           = 0.010f;
44
    public static final float RATIO_SCROLL      = 0.30f;
45
46 c9f72ca3 leszek
    private static final int ACTIVITY_NUMBER    = 2;
47 ada8ab26 leszek
    private static final float RATIO_BUT        = 0.07f;
48 7ee8337b leszek
    private static final int NUM_SCRAMBLES      = 300;
49 9530f6b0 Leszek Koltunski
50 7ee8337b leszek
    private BandagedScreen mScreen;
51 2ceeb6b5 Leszek Koltunski
    private boolean mRTL;
52 5a4ee169 leszek
    private int mObjectOrdinal;
53 e1637420 leszek
    private boolean mDisplayMessageDialog;
54 9530f6b0 Leszek Koltunski
55
///////////////////////////////////////////////////////////////////////////////////////////////////
56
57
    @Override
58
    protected void onCreate(Bundle savedState)
59
      {
60
      super.onCreate(savedState);
61 5597ccee leszek
62 9530f6b0 Leszek Koltunski
      DistortedLibrary.onCreate(ACTIVITY_NUMBER);
63
      setContentView(R.layout.bandaged);
64
65 a5972f92 leszek
      Bundle b = getIntent().getExtras();
66
      mObjectOrdinal = (b != null) ? b.getInt("obj") : 0;
67 e1637420 leszek
      mDisplayMessageDialog = true;
68
69 2ceeb6b5 Leszek Koltunski
      final Configuration config = getResources().getConfiguration();
70
      final int layoutDirection = config.getLayoutDirection();
71
      mRTL = layoutDirection==LAYOUT_DIRECTION_RTL;
72
73 a5972f92 leszek
      computeScreenDimensions();
74 9530f6b0 Leszek Koltunski
      hideNavigationBar();
75
      cutoutHack();
76
      computeHeights();
77
      }
78
79
///////////////////////////////////////////////////////////////////////////////////////////////////
80
// this does not include possible insets
81
82
    private void computeHeights()
83
      {
84
      int barHeight    = (int)(mScreenHeight*RATIO_BAR);
85 b9d062cf Leszek Koltunski
      int butHeight    = (int)(mScreenHeight*RATIO_BUT);
86 48314d6a Leszek Koltunski
      int viewHeight   = (int)(mScreenHeight*RATIO_SCROLL);
87 bc7e49ec Leszek Koltunski
      int objectHeight = (int)(mScreenHeight*(1-RATIO_SCROLL+RATIO_BAR));
88 7ee8337b leszek
      int padding      = (int)(mScreenHeight*PADDING);
89 9530f6b0 Leszek Koltunski
90 b9d062cf Leszek Koltunski
      LinearLayout botLayout = findViewById(R.id.lowerBar);
91
      ViewGroup.LayoutParams paramsL = botLayout.getLayoutParams();
92 9530f6b0 Leszek Koltunski
      paramsL.height = barHeight;
93 b9d062cf Leszek Koltunski
      botLayout.setLayoutParams(paramsL);
94
95
      LinearLayout butLayout = findViewById(R.id.bandagedCreatorButtons);
96
      ViewGroup.LayoutParams paramsB = butLayout.getLayoutParams();
97
      paramsB.height = butHeight;
98
      butLayout.setPadding(padding,0,padding,padding);
99
      butLayout.setLayoutParams(paramsB);
100 9530f6b0 Leszek Koltunski
101 9f8d4c92 Leszek Koltunski
      LinearLayout topLayout = findViewById(R.id.bandagedCreatorTopView);
102
      ViewGroup.LayoutParams paramsT = topLayout.getLayoutParams();
103
      paramsT.height = viewHeight;
104 b9d062cf Leszek Koltunski
      topLayout.setPadding(padding,padding,padding,padding);
105 9f8d4c92 Leszek Koltunski
      topLayout.setLayoutParams(paramsT);
106 48314d6a Leszek Koltunski
107 7ee8337b leszek
      BandagedView creator = findViewById(R.id.bandagedCreatorObjectView);
108 48314d6a Leszek Koltunski
      ViewGroup.LayoutParams paramsC = creator.getLayoutParams();
109
      paramsC.height = objectHeight;
110
      creator.setLayoutParams(paramsC);
111 9530f6b0 Leszek Koltunski
      }
112
113
///////////////////////////////////////////////////////////////////////////////////////////////////
114
    
115
    @Override
116
    protected void onPause() 
117
      {
118
      super.onPause();
119 7ee8337b leszek
      BandagedView view = findViewById(R.id.bandagedCreatorObjectView);
120 9530f6b0 Leszek Koltunski
      view.onPause();
121
      DistortedLibrary.onPause(ACTIVITY_NUMBER);
122 13a3dfa9 Leszek Koltunski
      savePreferences();
123 9530f6b0 Leszek Koltunski
      }
124
125
///////////////////////////////////////////////////////////////////////////////////////////////////
126
    
127
    @Override
128
    protected void onResume() 
129
      {
130
      super.onResume();
131 b3786da4 leszek
132 9530f6b0 Leszek Koltunski
      DistortedLibrary.onResume(ACTIVITY_NUMBER);
133 7ee8337b leszek
      BandagedView view = findViewById(R.id.bandagedCreatorObjectView);
134 9530f6b0 Leszek Koltunski
      view.onResume();
135
136 7da27d2b leszek
      if( mScreen==null )
137
        {
138
        int ordinal = getObjectOrdinal();
139 7ee8337b leszek
        mScreen = new BandagedScreen(ordinal);
140 7da27d2b leszek
        }
141
142 bebd7af5 Leszek Koltunski
      mScreen.onAttachedToWindow(this);
143 7cb8d4b0 Leszek Koltunski
144 a41e3c94 Leszek Koltunski
      restorePreferences();
145 7ee8337b leszek
      BandagedWorkerThread.create(this);
146 9530f6b0 Leszek Koltunski
      }
147
148
///////////////////////////////////////////////////////////////////////////////////////////////////
149
    
150
    @Override
151
    protected void onDestroy() 
152
      {
153
      super.onDestroy();
154
      DistortedLibrary.onDestroy(ACTIVITY_NUMBER);
155
      }
156
157
///////////////////////////////////////////////////////////////////////////////////////////////////
158
159
    void OpenGLError()
160
      {
161
      RubikDialogError errDiag = new RubikDialogError();
162
      errDiag.show(getSupportFragmentManager(), null);
163
      }
164
165 13a3dfa9 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
166
167
    private void savePreferences()
168
      {
169
      SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
170
      SharedPreferences.Editor editor = preferences.edit();
171 b9d062cf Leszek Koltunski
      mScreen.savePreferences(editor);
172 e1637420 leszek
173
      editor.putBoolean("bandageDisplayDialog", mDisplayMessageDialog );
174
175 13a3dfa9 Leszek Koltunski
      editor.apply();
176
      }
177
178
///////////////////////////////////////////////////////////////////////////////////////////////////
179
180
    private void restorePreferences()
181
      {
182
      SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
183 b9d062cf Leszek Koltunski
      mScreen.restorePreferences(this,preferences);
184 e1637420 leszek
185
      mDisplayMessageDialog = preferences.getBoolean("bandageDisplayDialog",true);
186
187
      if( mDisplayMessageDialog )
188
        {
189
        Bundle bundle = new Bundle();
190
        bundle.putString("argument", getString(R.string.bandage_message) );
191
        RubikDialogMessage diag = new RubikDialogMessage();
192
        diag.setArguments(bundle);
193
        diag.show( getSupportFragmentManager(), RubikDialogMessage.getDialogTag() );
194
        }
195
      }
196
197
///////////////////////////////////////////////////////////////////////////////////////////////////
198
199
    void doNotShowDialogAnymore()
200
      {
201
      mDisplayMessageDialog = false;
202 13a3dfa9 Leszek Koltunski
      }
203
204 9530f6b0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
205
// PUBLIC API
206 b9d062cf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
207
208
    public void changeObject(int x, int y, int z)
209
      {
210 7ee8337b leszek
      BandagedRenderer renderer = getRenderer();
211 b9d062cf Leszek Koltunski
      renderer.changeObject(x,y,z);
212
      }
213
214 2ceeb6b5 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
215
216
    public boolean isRTL()
217
      {
218
      return mRTL;
219
      }
220
221 50ec342b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
222
223 7ee8337b leszek
    public BandagedRenderer getRenderer()
224 50ec342b Leszek Koltunski
      {
225 7ee8337b leszek
      BandagedView view = findViewById(R.id.bandagedCreatorObjectView);
226 50ec342b Leszek Koltunski
      return view.getRenderer();
227
      }
228
229 bfb59352 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
230
231
    public boolean objectDoesntExist(String name)
232
      {
233
      return mScreen.objectDoesntExist(name);
234
      }
235
236 e48ad1af Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
237
238
    public void addObject(String name)
239
      {
240 bfb59352 Leszek Koltunski
      mScreen.addObject(this,name);
241 e48ad1af Leszek Koltunski
      }
242
243 d3d639b1 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
244
245 85770de9 Leszek Koltunski
    public void deleteObject(String name)
246 d3d639b1 Leszek Koltunski
      {
247 81493402 Leszek Koltunski
      RubikFiles files = RubikFiles.getInstance();
248 707f79ff Leszek Koltunski
      InputStream jsonStream = files.openFile(this,name+"_object.json");
249 2876aeb6 Leszek Koltunski
      InitAssets assets = new InitAssets(jsonStream,null,null);
250 707f79ff Leszek Koltunski
251 9234018b Leszek Koltunski
      if( !assets.noJsonStream() )
252 213c15de Leszek Koltunski
        {
253 337f4660 leszek
        TwistyObject object = new TwistyJson( TwistyObject.MODE_NORM, null, null, 1.0f, assets);
254 a8be1a23 Leszek Koltunski
255
        if( !object.getError() )
256
          {
257
          SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
258
          SharedPreferences.Editor editor = preferences.edit();
259 88451205 Leszek Koltunski
          OSInterface os = new OSInterface(this,null);
260 05e4c778 Leszek Koltunski
          os.setEditor(editor);
261 21a1bb5d Leszek Koltunski
          object.removePreferences(os);
262 a8be1a23 Leszek Koltunski
          editor.apply();
263
          }
264 213c15de Leszek Koltunski
        }
265 707f79ff Leszek Koltunski
266
      mScreen.deleteObject(this,name);
267
      files.deleteIcon(this,name);
268
      files.deleteJsonObject(this,name);
269 d3d639b1 Leszek Koltunski
      }
270
271
///////////////////////////////////////////////////////////////////////////////////////////////////
272
273
    public void playObject(String name)
274
      {
275 7ee8337b leszek
      Intent intent = new Intent(this, PlayActivity.class);
276 97201782 leszek
      intent.putExtra("level", -1);
277 88b94310 Leszek Koltunski
      intent.putExtra("name", name);
278 7ee8337b leszek
      intent.putExtra("scrambles", NUM_SCRAMBLES);
279
      intent.putExtra("local", true);
280
      intent.putExtra("ordinal", 0);
281 88b94310 Leszek Koltunski
      startActivity(intent);
282 d3d639b1 Leszek Koltunski
      }
283
284 9530f6b0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
285
286 7cb8d4b0 Leszek Koltunski
    public void iconCreationDone(Bitmap bmp)
287 9530f6b0 Leszek Koltunski
      {
288 20b60ad9 Leszek Koltunski
      mScreen.iconCreationDone(this,bmp);
289 9530f6b0 Leszek Koltunski
      }
290
291 7da27d2b leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
292
293
    public int getObjectOrdinal()
294
      {
295 5a4ee169 leszek
      return mObjectOrdinal;
296 7da27d2b leszek
      }
297 9530f6b0 Leszek Koltunski
}