Project

General

Profile

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

magiccube / src / main / java / org / distorted / screens / RubikScreenSolving.java @ 4483b119

1 ad9e8bb3 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2020 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6 3782bd44 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 ad9e8bb3 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
9
10 fcd5b990 Leszek Koltunski
package org.distorted.screens;
11 ad9e8bb3 Leszek Koltunski
12 3f7a4363 Leszek Koltunski
import java.util.Timer;
13
import java.util.TimerTask;
14
15 ad9e8bb3 Leszek Koltunski
import android.content.SharedPreferences;
16 e3c74c0f Leszek Koltunski
import android.util.TypedValue;
17 ad9e8bb3 Leszek Koltunski
import android.view.LayoutInflater;
18 a6d3b158 Leszek Koltunski
import android.view.View;
19 ad9e8bb3 Leszek Koltunski
import android.widget.LinearLayout;
20
import android.widget.TextView;
21
22 9f006481 Leszek Koltunski
import org.distorted.dialogs.RubikDialogAbandon;
23 55e6be1d Leszek Koltunski
import org.distorted.helpers.TransparentImageButton;
24 1f9772f3 Leszek Koltunski
import org.distorted.main.R;
25
import org.distorted.main.RubikActivity;
26 acabdd83 Leszek Koltunski
import org.distorted.external.RubikScores;
27 400ff34d Leszek Koltunski
import org.distorted.objects.RubikObjectList;
28 ad9e8bb3 Leszek Koltunski
29
///////////////////////////////////////////////////////////////////////////////////////////////////
30
31 fcd5b990 Leszek Koltunski
public class RubikScreenSolving extends RubikScreenBase
32 ad9e8bb3 Leszek Koltunski
  {
33 9f006481 Leszek Koltunski
  private static final int MOVES_THRESHHOLD = 10;
34
35 0333d81e Leszek Koltunski
  private TextView mTime;
36
  private Timer mTimer;
37
  private long mStartTime;
38
  private boolean mRunning;
39 cc88f2fa Leszek Koltunski
  private final RubikScores mScores;
40 2e8ec627 Leszek Koltunski
  private long mElapsed;
41 dd874ae8 Leszek Koltunski
  private TransparentImageButton mBackButton;
42 329c0aeb Leszek Koltunski
43 0333d81e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
44
45 fcd5b990 Leszek Koltunski
  RubikScreenSolving()
46 329c0aeb Leszek Koltunski
    {
47 714292f1 Leszek Koltunski
    mScores = RubikScores.getInstance();
48 329c0aeb Leszek Koltunski
    }
49
50
///////////////////////////////////////////////////////////////////////////////////////////////////
51
52 f5da732a Leszek Koltunski
  void leaveScreen(RubikActivity act)
53 ad9e8bb3 Leszek Koltunski
    {
54 807d82b7 Leszek Koltunski
    stopCounting();
55 ad9e8bb3 Leszek Koltunski
    }
56
57
///////////////////////////////////////////////////////////////////////////////////////////////////
58
59 f5da732a Leszek Koltunski
  void enterScreen(final RubikActivity act)
60 ad9e8bb3 Leszek Koltunski
    {
61 e3c74c0f Leszek Koltunski
    float width = act.getScreenWidthInPixels();
62
    float titleSize  = width*RubikActivity.TITLE_TEXT_SIZE;
63
64 2e8ec627 Leszek Koltunski
    startCounting(act);
65
66 ad9e8bb3 Leszek Koltunski
    LayoutInflater inflater = act.getLayoutInflater();
67
68
    // TOP ////////////////////////////
69 7289fd6c Leszek Koltunski
    LinearLayout layoutTop = act.findViewById(R.id.upperBar);
70 ad9e8bb3 Leszek Koltunski
    layoutTop.removeAllViews();
71 0333d81e Leszek Koltunski
    mTime = (TextView)inflater.inflate(R.layout.upper_text, null);
72 2e8ec627 Leszek Koltunski
    int elapsed = (int)mElapsed/1000;
73 e3c74c0f Leszek Koltunski
    mTime.setTextSize(TypedValue.COMPLEX_UNIT_PX, titleSize);
74 2e8ec627 Leszek Koltunski
    mTime.setText(act.getString(R.string.tm_placeholder,elapsed/60,elapsed%60));
75 0333d81e Leszek Koltunski
    layoutTop.addView(mTime);
76 ad9e8bb3 Leszek Koltunski
77 dd874ae8 Leszek Koltunski
    setupBackButton(act);
78 c95b37a4 Leszek Koltunski
    createBottomPane(act,mBackButton);
79 46405bb4 Leszek Koltunski
    }
80
81
///////////////////////////////////////////////////////////////////////////////////////////////////
82
83 dd874ae8 Leszek Koltunski
  private void setupBackButton(final RubikActivity act)
84 46405bb4 Leszek Koltunski
    {
85 a8576d91 Leszek Koltunski
    int icon = RubikActivity.getDrawable(R.drawable.ui_small_back,R.drawable.ui_medium_back, R.drawable.ui_big_back, R.drawable.ui_huge_back);
86 b600ccd9 Leszek Koltunski
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
87
    mBackButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_MIDDLE, params);
88 4fb1fc0d Leszek Koltunski
89 46405bb4 Leszek Koltunski
    mBackButton.setOnClickListener( new View.OnClickListener()
90 a6d3b158 Leszek Koltunski
      {
91
      @Override
92
      public void onClick(View v)
93
        {
94 dd1a65c1 Leszek Koltunski
        if( mMovesController.getNumMoves() > MOVES_THRESHHOLD )
95 9f006481 Leszek Koltunski
          {
96
          RubikDialogAbandon abaDiag = new RubikDialogAbandon();
97
          abaDiag.show(act.getSupportFragmentManager(), null);
98
          }
99
        else
100
          {
101
          ScreenList.goBack(act);
102
          }
103 a6d3b158 Leszek Koltunski
        }
104
      });
105 46405bb4 Leszek Koltunski
    }
106 a6d3b158 Leszek Koltunski
107 ad9e8bb3 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
108
109
  public void savePreferences(SharedPreferences.Editor editor)
110
    {
111 7358df36 Leszek Koltunski
    stopCounting();
112
113 2e8ec627 Leszek Koltunski
    mElapsed = System.currentTimeMillis()-mStartTime;
114
    editor.putLong("stateSolving_elapsed" , mElapsed);
115 f0e87514 Leszek Koltunski
    mScores.savePreferences(editor);
116 ad9e8bb3 Leszek Koltunski
    }
117
118
///////////////////////////////////////////////////////////////////////////////////////////////////
119
120
  public void restorePreferences(SharedPreferences preferences)
121
    {
122 2e8ec627 Leszek Koltunski
    mElapsed = preferences.getLong("stateSolving_elapsed" , 0 );
123 f0e87514 Leszek Koltunski
    mScores.restorePreferences(preferences);
124 ad9e8bb3 Leszek Koltunski
    }
125 0333d81e Leszek Koltunski
126
///////////////////////////////////////////////////////////////////////////////////////////////////
127
128 2e8ec627 Leszek Koltunski
  private void startCounting(final RubikActivity act)
129 0333d81e Leszek Koltunski
    {
130
    if( !mRunning )
131
      {
132
      mRunning = true;
133 2e8ec627 Leszek Koltunski
      mStartTime = System.currentTimeMillis() - mElapsed;
134 0333d81e Leszek Koltunski
      mTimer = new Timer();
135
136
      mTimer.scheduleAtFixedRate(new TimerTask()
137
        {
138
        @Override
139
        public void run()
140
          {
141
          act.runOnUiThread(new Runnable()
142
            {
143
            @Override
144
            public void run()
145
              {
146
              int elapsed = (int)(System.currentTimeMillis()-mStartTime)/1000;
147
              mTime.setText(act.getString(R.string.tm_placeholder,elapsed/60,elapsed%60));
148
              }
149
            });
150
          }
151
        }, 0, 1000);
152
      }
153
    }
154
155
///////////////////////////////////////////////////////////////////////////////////////////////////
156
157 1f894991 Leszek Koltunski
  private void stopCounting()
158
    {
159
    if( mTimer!=null )
160
      {
161
      mTimer.cancel();
162
      mTimer = null;
163
      }
164
165
    mRunning = false;
166
    }
167
168
///////////////////////////////////////////////////////////////////////////////////////////////////
169
170 4483b119 Leszek Koltunski
  public int stopTimerAndGetRecord()
171 0333d81e Leszek Koltunski
    {
172
    if( mRunning )
173
      {
174 1f894991 Leszek Koltunski
      stopCounting();
175 2e8ec627 Leszek Koltunski
      mElapsed = System.currentTimeMillis()-mStartTime;
176 4483b119 Leszek Koltunski
      return (int)mElapsed;
177 0333d81e Leszek Koltunski
      }
178
179
    return 0;
180
    }
181 0e5ad27c Leszek Koltunski
182 0c233a9a Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
183
184
  public int setRecord()
185
    {
186
    RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
187
    int object = RubikObjectList.getCurrObject();
188
    int level = play.getLevel()-1;
189 65bc1da3 Leszek Koltunski
    return mScores.setRecord(object, level, (int)mElapsed);
190 0c233a9a Leszek Koltunski
    }
191
192 2e8ec627 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
193
194
  public void resetElapsed()
195
    {
196
    mElapsed = 0;
197
    }
198 ad9e8bb3 Leszek Koltunski
  }