Project

General

Profile

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

magiccube / src / main / java / org / distorted / config / ConfigActivity.java @ c9f72ca3

1 1237d25d Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2019 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6 9d51b9d6 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 1237d25d Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
9
10
package org.distorted.config;
11
12 314e9ff0 Leszek Koltunski
import java.io.InputStream;
13
14 1237d25d Leszek Koltunski
import android.os.Build;
15
import android.os.Bundle;
16
import android.util.DisplayMetrics;
17
import android.view.View;
18
import android.view.ViewGroup;
19
import android.view.WindowManager;
20
import android.widget.LinearLayout;
21
import androidx.appcompat.app.AppCompatActivity;
22
23
import org.distorted.library.main.DistortedLibrary;
24 1c04d054 leszek
import org.distorted.main.MainActivity;
25
import org.distorted.main_old.RubikActivity;
26 50e6c5d6 Leszek Koltunski
import org.distorted.objectlib.main.InitAssets;
27 1237d25d Leszek Koltunski
import org.distorted.objectlib.main.ObjectControl;
28 314e9ff0 Leszek Koltunski
import org.distorted.main.R;
29
import org.distorted.dialogs.RubikDialogError;
30 7cb8d4b0 Leszek Koltunski
import org.distorted.objectlib.main.TwistyObject;
31 d433b50e Leszek Koltunski
import org.distorted.objects.RubikObject;
32
import org.distorted.objects.RubikObjectList;
33 1237d25d Leszek Koltunski
34
///////////////////////////////////////////////////////////////////////////////////////////////////
35
36
public class ConfigActivity extends AppCompatActivity
37
{
38 c9f72ca3 leszek
    private static final int ACTIVITY_NUMBER = 1;
39 1c04d054 leszek
    private static final float RATIO_BAR  = MainActivity.RATIO_BAR;
40 ada8ab26 leszek
    public static final int FLAGS = RubikActivity.FLAGS;
41 1237d25d Leszek Koltunski
42
    private static int mScreenWidth, mScreenHeight;
43
    private int mCurrentApiVersion;
44
    private ConfigScreen mScreen;
45
    private int mObjectOrdinal;
46 97a4ae23 Leszek Koltunski
    private int mHeightBar;
47 1237d25d Leszek Koltunski
48
///////////////////////////////////////////////////////////////////////////////////////////////////
49
50
    @Override
51
    protected void onCreate(Bundle savedState)
52
      {
53
      super.onCreate(savedState);
54
      DistortedLibrary.onCreate(ACTIVITY_NUMBER);
55
      setTheme(R.style.MaterialThemeNoActionBar);
56
      setContentView(R.layout.config);
57
58
      Bundle b = getIntent().getExtras();
59
60
      if(b != null) mObjectOrdinal = b.getInt("obj");
61
62
      DisplayMetrics displaymetrics = new DisplayMetrics();
63 7fe59aa5 Leszek Koltunski
      getWindowManager().getDefaultDisplay().getRealMetrics(displaymetrics);
64 1237d25d Leszek Koltunski
      mScreenWidth =displaymetrics.widthPixels;
65
      mScreenHeight=displaymetrics.heightPixels;
66 7fe59aa5 Leszek Koltunski
67 1237d25d Leszek Koltunski
      hideNavigationBar();
68
      cutoutHack();
69 97a4ae23 Leszek Koltunski
      computeBarHeights();
70
      }
71
72
///////////////////////////////////////////////////////////////////////////////////////////////////
73
// this does not include possible insets
74
75
    private void computeBarHeights()
76
      {
77
      int barHeight = (int)(mScreenHeight*RATIO_BAR);
78
      mHeightBar = barHeight;
79
80
      LinearLayout layout = findViewById(R.id.lowerBar);
81
      ViewGroup.LayoutParams params = layout.getLayoutParams();
82
      params.height = barHeight;
83
      layout.setLayoutParams(params);
84 1237d25d Leszek Koltunski
      }
85
86
///////////////////////////////////////////////////////////////////////////////////////////////////
87
88
    private void hideNavigationBar()
89
      {
90
      mCurrentApiVersion = Build.VERSION.SDK_INT;
91
92
      if(mCurrentApiVersion >= Build.VERSION_CODES.KITKAT)
93
        {
94
        final View decorView = getWindow().getDecorView();
95
96
        decorView.setSystemUiVisibility(FLAGS);
97
98
        decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener()
99
          {
100
          @Override
101
          public void onSystemUiVisibilityChange(int visibility)
102
            {
103
            if((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0)
104
              {
105
              decorView.setSystemUiVisibility(FLAGS);
106
              }
107
            }
108
          });
109
        }
110
      }
111
112
///////////////////////////////////////////////////////////////////////////////////////////////////
113
// do not avoid cutouts
114
115
    private void cutoutHack()
116
      {
117
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
118
        {
119
        getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
120
        }
121
      }
122
123
///////////////////////////////////////////////////////////////////////////////////////////////////
124
125
    @Override
126
    public void onWindowFocusChanged(boolean hasFocus)
127
      {
128
      super.onWindowFocusChanged(hasFocus);
129
130
      if(mCurrentApiVersion >= Build.VERSION_CODES.KITKAT && hasFocus)
131
        {
132
        getWindow().getDecorView().setSystemUiVisibility(FLAGS);
133
        }
134
      }
135
136
///////////////////////////////////////////////////////////////////////////////////////////////////
137
    
138
    @Override
139
    protected void onPause() 
140
      {
141
      super.onPause();
142
      ConfigSurfaceView view = findViewById(R.id.configSurfaceView);
143
      view.onPause();
144
      DistortedLibrary.onPause(ACTIVITY_NUMBER);
145
      }
146
147
///////////////////////////////////////////////////////////////////////////////////////////////////
148
    
149
    @Override
150
    protected void onResume() 
151
      {
152
      super.onResume();
153
      DistortedLibrary.onResume(ACTIVITY_NUMBER);
154
      ConfigSurfaceView view = findViewById(R.id.configSurfaceView);
155
      view.onResume();
156
157 280dc794 Leszek Koltunski
      if( mScreen==null ) mScreen = new ConfigScreen();
158
      mScreen.onAttachedToWindow(this,mObjectOrdinal);
159
160 d433b50e Leszek Koltunski
      if( mObjectOrdinal>=0 && mObjectOrdinal< RubikObjectList.getNumObjects() )
161 1237d25d Leszek Koltunski
        {
162 d433b50e Leszek Koltunski
        RubikObject object = RubikObjectList.getObject(mObjectOrdinal);
163 d36d8517 Leszek Koltunski
        changeIfDifferent(object,mObjectOrdinal,view.getObjectControl());
164 1237d25d Leszek Koltunski
        }
165
      }
166
167
///////////////////////////////////////////////////////////////////////////////////////////////////
168
    
169
    @Override
170
    protected void onDestroy() 
171
      {
172
      super.onDestroy();
173
      DistortedLibrary.onDestroy(ACTIVITY_NUMBER);
174
      }
175
176
///////////////////////////////////////////////////////////////////////////////////////////////////
177
178
    void OpenGLError()
179
      {
180
      RubikDialogError errDiag = new RubikDialogError();
181
      errDiag.show(getSupportFragmentManager(), null);
182
      }
183
184
///////////////////////////////////////////////////////////////////////////////////////////////////
185
186 d36d8517 Leszek Koltunski
    private void changeIfDifferent(RubikObject object,int ordinal,ObjectControl control)
187 1237d25d Leszek Koltunski
      {
188 d433b50e Leszek Koltunski
      if( object!=null )
189
        {
190 7cb8d4b0 Leszek Koltunski
        int iconMode           = TwistyObject.MODE_NORM;
191 314e9ff0 Leszek Koltunski
        InputStream jsonStream = object.getObjectStream(this);
192
        InputStream meshStream = object.getMeshStream(this);
193 aec421fd Leszek Koltunski
        String name            = object.getUpperName();
194 2876aeb6 Leszek Koltunski
        InitAssets asset       = new InitAssets(jsonStream,meshStream,null);
195 337f4660 leszek
        control.changeIfDifferent(ordinal,name,iconMode,asset);
196 d433b50e Leszek Koltunski
        }
197 1237d25d Leszek Koltunski
      }
198
199
///////////////////////////////////////////////////////////////////////////////////////////////////
200
// PUBLIC API
201 09cf2a36 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
202
203 280dc794 Leszek Koltunski
    public void changeObject(int ordinal)
204 09cf2a36 Leszek Koltunski
      {
205 280dc794 Leszek Koltunski
      mObjectOrdinal = ordinal;
206
      RubikObject object = RubikObjectList.getObject(ordinal);
207 09cf2a36 Leszek Koltunski
      ConfigSurfaceView view = findViewById(R.id.configSurfaceView);
208
      ObjectControl control = view.getObjectControl();
209 d36d8517 Leszek Koltunski
      changeIfDifferent(object,ordinal,control);
210 09cf2a36 Leszek Koltunski
      }
211
212 1237d25d Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
213
214 97a4ae23 Leszek Koltunski
    public int getHeightBar()
215 1237d25d Leszek Koltunski
      {
216 97a4ae23 Leszek Koltunski
      return mHeightBar;
217 1237d25d Leszek Koltunski
      }
218
219
///////////////////////////////////////////////////////////////////////////////////////////////////
220
221
    public int getScreenWidthInPixels()
222
      {
223
      return mScreenWidth;
224
      }
225
226 97a4ae23 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
227
228
    public int getScreenHeightInPixels()
229
      {
230
      return mScreenHeight;
231
      }
232
233 1237d25d Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
234
235
    public ObjectControl getControl()
236
      {
237
      ConfigSurfaceView view = findViewById(R.id.configSurfaceView);
238
      return view.getObjectControl();
239
      }
240
}