Project

General

Profile

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

magiccube / src / main / java / org / distorted / screens / RubikScreenPattern.java @ 2011391d

1 4f470e00 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 4f470e00 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
9
10 fcd5b990 Leszek Koltunski
package org.distorted.screens;
11 4f470e00 Leszek Koltunski
12
import android.content.SharedPreferences;
13 66e777b0 Leszek Koltunski
import androidx.fragment.app.FragmentManager;
14 e3c74c0f Leszek Koltunski
import android.util.TypedValue;
15 11877284 Leszek Koltunski
import android.view.Gravity;
16 4f470e00 Leszek Koltunski
import android.view.LayoutInflater;
17 a6d3b158 Leszek Koltunski
import android.view.View;
18 4f470e00 Leszek Koltunski
import android.widget.LinearLayout;
19
import android.widget.TextView;
20
21 2afc6754 Leszek Koltunski
import org.distorted.objectlib.main.ObjectControl;
22 3f7a4363 Leszek Koltunski
23
import org.distorted.main.R;
24 1f9772f3 Leszek Koltunski
import org.distorted.dialogs.RubikDialogPattern;
25 55e6be1d Leszek Koltunski
import org.distorted.helpers.TransparentImageButton;
26 1f9772f3 Leszek Koltunski
import org.distorted.main.RubikActivity;
27 400ff34d Leszek Koltunski
import org.distorted.objects.RubikObjectList;
28 53f23b64 Leszek Koltunski
import org.distorted.patterns.RubikPattern;
29 b498f3f6 Leszek Koltunski
import org.distorted.patterns.RubikPatternList;
30 4f470e00 Leszek Koltunski
31
///////////////////////////////////////////////////////////////////////////////////////////////////
32
33 fcd5b990 Leszek Koltunski
public class RubikScreenPattern extends RubikScreenAbstract
34 4f470e00 Leszek Koltunski
  {
35 3a9d19ed Leszek Koltunski
  private TextView mText;
36 dd874ae8 Leszek Koltunski
  private TransparentImageButton mPrevButton, mNextButton, mBackButton;
37 0a57000c Leszek Koltunski
  private TextView mMovesText;
38 8becce57 Leszek Koltunski
  private int mNumMoves;
39 b498f3f6 Leszek Koltunski
  private int mPatternOrdinal, mCategory, mPattern;
40 da768c35 Leszek Koltunski
  private float mButtonSize;
41 4f470e00 Leszek Koltunski
42
///////////////////////////////////////////////////////////////////////////////////////////////////
43
44 fcd5b990 Leszek Koltunski
  RubikScreenPattern()
45 4f470e00 Leszek Koltunski
    {
46
47
    }
48
49
///////////////////////////////////////////////////////////////////////////////////////////////////
50
51 f5da732a Leszek Koltunski
  void leaveScreen(RubikActivity act)
52 4f470e00 Leszek Koltunski
    {
53 d433b50e Leszek Koltunski
    int object = RubikPatternList.getObject(mPatternOrdinal);
54 b498f3f6 Leszek Koltunski
55 1088a219 Leszek Koltunski
    if( !RubikObjectList.setCurrObject(object) )
56 53f23b64 Leszek Koltunski
      {
57 d433b50e Leszek Koltunski
      act.changeObject(object,false);
58 53f23b64 Leszek Koltunski
      }
59 4f470e00 Leszek Koltunski
    }
60
61
///////////////////////////////////////////////////////////////////////////////////////////////////
62
63 f5da732a Leszek Koltunski
  void enterScreen(final RubikActivity act)
64 4f470e00 Leszek Koltunski
    {
65 e3c74c0f Leszek Koltunski
    float width = act.getScreenWidthInPixels();
66
    mButtonSize = width*RubikActivity.BUTTON_TEXT_SIZE;
67 da768c35 Leszek Koltunski
    float titleSize  = width*RubikActivity.TITLE_TEXT_SIZE;
68 4f470e00 Leszek Koltunski
    LayoutInflater inflater = act.getLayoutInflater();
69
70
    // TOP ////////////////////////////
71 7289fd6c Leszek Koltunski
    LinearLayout layoutTop = act.findViewById(R.id.upperBar);
72 4f470e00 Leszek Koltunski
    layoutTop.removeAllViews();
73 de44c2b4 Leszek Koltunski
    mText = (TextView)inflater.inflate(R.layout.upper_pattern_text, null);
74 da768c35 Leszek Koltunski
    mText.setTextSize(TypedValue.COMPLEX_UNIT_PX, titleSize);
75 3a9d19ed Leszek Koltunski
    mText.setText(R.string.patterns);
76
    layoutTop.addView(mText);
77 4f470e00 Leszek Koltunski
78
    // BOT ////////////////////////////
79 92843d3b Leszek Koltunski
    LinearLayout layoutBot = act.findViewById(R.id.lowerBar);
80
    layoutBot.removeAllViews();
81 53f23b64 Leszek Koltunski
82 dd874ae8 Leszek Koltunski
    setupPrevButton(act);
83
    setupNextButton(act);
84 ad0c8e0e Leszek Koltunski
    setupTextView(act,width);
85 0a57000c Leszek Koltunski
86 4b4e6837 Leszek Koltunski
    setTrioState(false);
87
88 af133d41 Leszek Koltunski
    LinearLayout.LayoutParams paramsL = new LinearLayout.LayoutParams((int)(width/2),LinearLayout.LayoutParams.MATCH_PARENT);
89
    LinearLayout.LayoutParams paramsM = new LinearLayout.LayoutParams((int)(width/6),LinearLayout.LayoutParams.MATCH_PARENT);
90
    LinearLayout.LayoutParams paramsR = new LinearLayout.LayoutParams((int)(width/3),LinearLayout.LayoutParams.MATCH_PARENT);
91 92843d3b Leszek Koltunski
92
    LinearLayout layoutLeft = new LinearLayout(act);
93 af133d41 Leszek Koltunski
    layoutLeft.setLayoutParams(paramsL);
94
    LinearLayout layoutMid = new LinearLayout(act);
95
    layoutMid.setLayoutParams(paramsM);
96 4fb1fc0d Leszek Koltunski
    LinearLayout layoutRight = new LinearLayout(act);
97 af133d41 Leszek Koltunski
    layoutRight.setLayoutParams(paramsR);
98 92843d3b Leszek Koltunski
99 0a57000c Leszek Koltunski
    layoutLeft.addView(mPrevButton);
100
    layoutLeft.addView(mMovesText);
101
    layoutLeft.addView(mNextButton);
102
103 dd874ae8 Leszek Koltunski
    setupBackButton(act);
104 53f23b64 Leszek Koltunski
105
    layoutRight.addView(mBackButton);
106 92843d3b Leszek Koltunski
107
    layoutBot.addView(layoutLeft);
108 af133d41 Leszek Koltunski
    layoutBot.addView(layoutMid);
109 92843d3b Leszek Koltunski
    layoutBot.addView(layoutRight);
110 53f23b64 Leszek Koltunski
    }
111 4f470e00 Leszek Koltunski
112 53f23b64 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
113 a6d3b158 Leszek Koltunski
114 e108b57e Leszek Koltunski
  private void showDialog(FragmentManager manager)
115 53f23b64 Leszek Koltunski
    {
116 e108b57e Leszek Koltunski
    RubikDialogPattern diag = new RubikDialogPattern();
117
    diag.show( manager, RubikDialogPattern.getDialogTag() );
118 53f23b64 Leszek Koltunski
    }
119
120 4b4e6837 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
121
122
  private void setTrioState(boolean enable)
123
    {
124
    int state = enable ? View.VISIBLE : View.INVISIBLE;
125
126
    if( mPrevButton!=null ) mPrevButton.setVisibility(state);
127
    if( mNextButton!=null ) mNextButton.setVisibility(state);
128
    if( mMovesText !=null ) mMovesText.setVisibility(state);
129
    }
130
131 53f23b64 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
132
133 dd874ae8 Leszek Koltunski
  private void setupBackButton(final RubikActivity act)
134 53f23b64 Leszek Koltunski
    {
135 4fb1fc0d Leszek Koltunski
    final int icon = RubikActivity.getDrawable(R.drawable.ui_small_back,R.drawable.ui_medium_back, R.drawable.ui_big_back, R.drawable.ui_huge_back);
136 b600ccd9 Leszek Koltunski
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
137
    mBackButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_MIDDLE, params);
138 53f23b64 Leszek Koltunski
139
    mBackButton.setOnClickListener( new View.OnClickListener()
140 a6d3b158 Leszek Koltunski
      {
141
      @Override
142
      public void onClick(View v)
143
        {
144 e108b57e Leszek Koltunski
        FragmentManager mana = act.getSupportFragmentManager();
145 fcd5b990 Leszek Koltunski
        ScreenList.goBack(act);
146 a8576d91 Leszek Koltunski
        showDialog(mana);
147 e108b57e Leszek Koltunski
        }
148
      });
149 4f470e00 Leszek Koltunski
    }
150
151 0a57000c Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
152
153 dd874ae8 Leszek Koltunski
  private void setupPrevButton(final RubikActivity act)
154 0a57000c Leszek Koltunski
    {
155 31a9f38d Leszek Koltunski
    int icon = RubikActivity.getDrawable(R.drawable.ui_small_left,R.drawable.ui_medium_left, R.drawable.ui_big_left, R.drawable.ui_huge_left);
156 b600ccd9 Leszek Koltunski
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
157
    mPrevButton = new TransparentImageButton(act,icon,TransparentImageButton.GRAVITY_MIDDLE,params);
158 0a57000c Leszek Koltunski
159
    mPrevButton.setOnClickListener( new View.OnClickListener()
160
      {
161
      @Override
162
      public void onClick(View v)
163
        {
164 8becce57 Leszek Koltunski
        RubikPattern pattern = RubikPattern.getInstance();
165 2afc6754 Leszek Koltunski
        ObjectControl control = act.getControl();
166
        pattern.backMove( control, mPatternOrdinal, mCategory, mPattern);
167 b498f3f6 Leszek Koltunski
        int currMove = pattern.getCurMove(mPatternOrdinal, mCategory, mPattern);
168 8becce57 Leszek Koltunski
        mMovesText.setText(act.getString(R.string.mo_placeholder,currMove,mNumMoves));
169 0a57000c Leszek Koltunski
        }
170
      });
171
    }
172
173
///////////////////////////////////////////////////////////////////////////////////////////////////
174
175 dd874ae8 Leszek Koltunski
  private void setupNextButton(final RubikActivity act)
176 0a57000c Leszek Koltunski
    {
177 31a9f38d Leszek Koltunski
    int icon = RubikActivity.getDrawable(R.drawable.ui_small_right,R.drawable.ui_medium_right, R.drawable.ui_big_right, R.drawable.ui_huge_right);
178 b600ccd9 Leszek Koltunski
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
179
    mNextButton = new TransparentImageButton(act,icon,TransparentImageButton.GRAVITY_MIDDLE,params);
180 0a57000c Leszek Koltunski
181
    mNextButton.setOnClickListener( new View.OnClickListener()
182
      {
183
      @Override
184
      public void onClick(View v)
185
        {
186 8becce57 Leszek Koltunski
        RubikPattern pattern = RubikPattern.getInstance();
187 2afc6754 Leszek Koltunski
        ObjectControl control = act.getControl();
188
        pattern.makeMove( control, mPatternOrdinal, mCategory, mPattern);
189 b498f3f6 Leszek Koltunski
        int currMove = pattern.getCurMove(mPatternOrdinal, mCategory, mPattern);
190 8becce57 Leszek Koltunski
        mMovesText.setText(act.getString(R.string.mo_placeholder,currMove,mNumMoves));
191 0a57000c Leszek Koltunski
        }
192
      });
193
    }
194
195
///////////////////////////////////////////////////////////////////////////////////////////////////
196
197 ad0c8e0e Leszek Koltunski
  private void setupTextView(final RubikActivity act, final float width)
198 0a57000c Leszek Koltunski
    {
199 ad0c8e0e Leszek Koltunski
    int padding = (int)(width*RubikActivity.PADDING);
200 c651024f Leszek Koltunski
    int margin  = (int)(width*RubikActivity.SMALL_MARGIN);
201 ad0c8e0e Leszek Koltunski
202 11877284 Leszek Koltunski
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,2.0f);
203 ad0c8e0e Leszek Koltunski
    params.topMargin    = margin;
204
    params.bottomMargin = margin;
205
    params.leftMargin   = margin;
206
    params.rightMargin  = margin;
207 0a57000c Leszek Koltunski
208
    mMovesText = new TextView(act);
209 aa171dee Leszek Koltunski
    mMovesText.setTextSize(20);
210 0a57000c Leszek Koltunski
    mMovesText.setLayoutParams(params);
211
    mMovesText.setPadding(padding,0,padding,0);
212 11877284 Leszek Koltunski
    mMovesText.setGravity(Gravity.CENTER);
213 e3c74c0f Leszek Koltunski
    mMovesText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mButtonSize);
214 8a64eaa4 Leszek Koltunski
    mMovesText.setText(act.getString(R.string.mo_placeholder,0,0));
215 0a57000c Leszek Koltunski
    }
216
217 3a9d19ed Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
218
219 b498f3f6 Leszek Koltunski
  public void setPattern(final RubikActivity act, int ordinal, int category, int pattern)
220 3a9d19ed Leszek Koltunski
    {
221 b498f3f6 Leszek Koltunski
    mPatternOrdinal = ordinal;
222
    mCategory       = category;
223
    mPattern        = pattern;
224 044529c1 Leszek Koltunski
225 4b4e6837 Leszek Koltunski
    setTrioState(true);
226
227 e0e84674 Leszek Koltunski
    RubikPattern patt = RubikPattern.getInstance();
228 b498f3f6 Leszek Koltunski
    String patternName = patt.getPatternName(ordinal,category,pattern);
229 e0e84674 Leszek Koltunski
    mText.setText(patternName);
230 aa171dee Leszek Koltunski
231 b498f3f6 Leszek Koltunski
    mNumMoves   = patt.getNumMoves(ordinal,category,pattern);
232
    int currMove= patt.getCurMove(ordinal,category,pattern);
233 aa171dee Leszek Koltunski
234 8becce57 Leszek Koltunski
    mMovesText.setText(act.getString(R.string.mo_placeholder,currMove,mNumMoves));
235 3a9d19ed Leszek Koltunski
    }
236
237 4f470e00 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
238
239
  public void savePreferences(SharedPreferences.Editor editor)
240
    {
241 4f36e418 Leszek Koltunski
242 4f470e00 Leszek Koltunski
    }
243
244
///////////////////////////////////////////////////////////////////////////////////////////////////
245
246
  public void restorePreferences(SharedPreferences preferences)
247
    {
248
249
    }
250
  }