Project

General

Profile

« Previous | Next » 

Revision 22fdfc36

Added by Leszek Koltunski over 4 years ago

RubikCube: major progress with a separate RubikSettingsEnum enum - has been introduced into RubikSettings.

View differences:

src/main/java/org/distorted/magic/RubikSettings.java
28 28
import android.support.v4.app.FragmentActivity;
29 29
import android.support.v7.app.AlertDialog;
30 30
import android.support.v7.app.AppCompatDialogFragment;
31
import android.view.Gravity;
31 32
import android.view.LayoutInflater;
32 33
import android.view.View;
33 34
import android.widget.AdapterView;
34 35
import android.widget.ArrayAdapter;
36
import android.widget.LinearLayout;
35 37
import android.widget.SeekBar;
36 38
import android.widget.Spinner;
37 39
import android.widget.TextView;
38 40

  
39
import org.distorted.effect.SizeChangeEffect;
40
import org.distorted.effect.SolveEffect;
41
import org.distorted.effect.ScrambleEffect;
42

  
43 41
///////////////////////////////////////////////////////////////////////////////////////////////////
44 42

  
45 43
public class RubikSettings extends AppCompatDialogFragment implements SeekBar.OnSeekBarChangeListener, AdapterView.OnItemSelectedListener
46 44
  {
47 45
  public interface OnCompleteListener
48 46
    {
49
    void onComplete(int sizeP, int uscrP, int scraP, int sizeT, int unscT, int scraT);
47
    void onComplete(int sizeP, int solvP, int scraP, int sizeT, int solvT, int scraT);
50 48
    }
51 49

  
52 50
  private OnCompleteListener mListener;
53
  private int mSizeChangePos, mSolvePos, mScramblePos;
54
  private int mSizeChangeType, mSolveType, mScrambleType;
55
  private TextView mSizeChangeDuration, mSolveDuration, mScrambleDuration;
51

  
52
  private TextView[] mDurationText;
53
  private int[] mSeekBarID;
54
  private int[] mSpinnerID;
55
  private int[] mPos;
56
  private int[] mType;
57

  
58
///////////////////////////////////////////////////////////////////////////////////////////////////
59

  
60
  public RubikSettings()
61
    {
62
    mDurationText = new TextView[RubikSettingsEnum.LENGTH];
63
    mSeekBarID    = new int[RubikSettingsEnum.LENGTH];
64
    mSpinnerID    = new int[RubikSettingsEnum.LENGTH];
65
    mPos          = new int[RubikSettingsEnum.LENGTH];
66
    mType         = new int[RubikSettingsEnum.LENGTH];
67
    }
56 68

  
57 69
///////////////////////////////////////////////////////////////////////////////////////////////////
58 70

  
......
80 92

  
81 93
    Bundle args = getArguments();
82 94

  
83
    try
84
      {
85
      mSizeChangePos = args.getInt("sizechangePos");
86
      mSolvePos      = args.getInt("solvePos");
87
      mScramblePos   = args.getInt("scramblePos");
88
      mSizeChangeType= args.getInt("sizechangeType");
89
      mSolveType     = args.getInt("solveType");
90
      mScrambleType  = args.getInt("scrambleType");
91
      }
92
    catch(NullPointerException ex)
95
    String name;
96

  
97
    for (int i=0; i<RubikSettingsEnum.LENGTH; i++)
93 98
      {
94
      mSizeChangePos = RubikActivity.DEFAULT_SIZECHANGE_POS;
95
      mSolvePos      = RubikActivity.DEFAULT_SOLVE_POS;
96
      mScramblePos   = RubikActivity.DEFAULT_SCRAMBLE_POS;
97
      mSizeChangeType= RubikActivity.DEFAULT_SIZECHANGE_TYPE;
98
      mSolveType     = RubikActivity.DEFAULT_SOLVE_TYPE;
99
      mScrambleType  = RubikActivity.DEFAULT_SCRAMBLE_TYPE;
99
      RubikSettingsEnum rse = RubikSettingsEnum.getEnum(i);
100
      name = rse.name();
101

  
102
      try
103
        {
104
        mPos[i]  = args.getInt(name+"_Pos" );
105
        mType[i] = args.getInt(name+"_Type");
106
        }
107
      catch(NullPointerException ex)
108
        {
109
        mPos[i]  = rse.getDefaultPos();
110
        mType[i] = rse.getDefaultType();
111
        }
100 112
      }
101 113
    }
102 114

  
......
123 135
    final View view = inflater.inflate(R.layout.settings, null);
124 136
    builder.setView(view);
125 137

  
126
    mSizeChangeDuration = view.findViewById(R.id.sizechangeDurationText);
127
    mSolveDuration      = view.findViewById(R.id.solveDurationText);
128
    mScrambleDuration   = view.findViewById(R.id.scrambleDurationText);
129

  
130
    /// SIZE CHANGE ///////////////////////////////////////////////////////
131
    Spinner sizechangeTypeSpinner  = view.findViewById(R.id.sizechangeType);
138
    LinearLayout linearLayout = view.findViewById(R.id.main_settings_layout);
132 139

  
133
    if( sizechangeTypeSpinner!=null )
140
    if( linearLayout!=null )
134 141
      {
135
      sizechangeTypeSpinner.setOnItemSelectedListener(this);
136
      String[] appear = SizeChangeEffect.getNames();
137
      ArrayAdapter<String> adapterType = new ArrayAdapter<>(act,android.R.layout.simple_spinner_item, appear);
138
      adapterType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
139
      sizechangeTypeSpinner.setAdapter(adapterType);
140

  
141
      if(mSizeChangeType>=0 && mSizeChangeType<appear.length)
142
      for (int i=0; i<RubikSettingsEnum.LENGTH; i++)
142 143
        {
143
        sizechangeTypeSpinner.setSelection(mSizeChangeType);
144
        createSettingsSection(act,linearLayout,i);
144 145
        }
145 146
      }
146 147
    else
147 148
      {
148
      android.util.Log.e("dialog", "SIZE CHANGE TYPE SPINNER NULL!!");
149
      android.util.Log.e("settings", "linearLayout NULL!");
149 150
      }
150 151

  
151
    SeekBar sizechangeBar = view.findViewById(R.id.sizechangeDuration);
152
    sizechangeBar.setOnSeekBarChangeListener(this);
153
    sizechangeBar.setProgress(mSizeChangePos);
152
    return builder.create();
153
    }
154 154

  
155
    /// SOLVE /////////////////////////////////////////////////////////////
156
    Spinner solveTypeSpinner  = view.findViewById(R.id.solveType);
155
///////////////////////////////////////////////////////////////////////////////////////////////////
157 156

  
158
    if( solveTypeSpinner!=null )
157
    private void createSettingsSection(FragmentActivity act, LinearLayout layout, int index)
159 158
      {
160
      solveTypeSpinner.setOnItemSelectedListener(this);
161
      String[] solve = SolveEffect.getNames();
162
      ArrayAdapter<String> adapterType = new ArrayAdapter<>(act,android.R.layout.simple_spinner_item, solve);
159
      RubikSettingsEnum rsEnum = RubikSettingsEnum.getEnum(index);
160
      float scale = act.getResources().getDisplayMetrics().density;
161

  
162
      ///// TEXT ///////////////////////////////////////////////////////////////////////////
163

  
164
      int layoutHeight = (int)(scale*48 + 0.5f);
165
      int padding      = (int)(scale*15 + 0.5f);
166

  
167
      LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,layoutHeight);
168

  
169
      TextView textView = new TextView(act);
170
      textView.setText(rsEnum.getText());
171
      textView.setLayoutParams(textParams);
172
      textView.setGravity(Gravity.START|Gravity.CENTER);
173
      textView.setPadding(padding,0,padding,0);
174
      textView.setTextAppearance(android.R.style.TextAppearance_Medium);
175
      layout.addView(textView);
176

  
177
      ///// OUTER LAYOUT ///////////////////////////////////////////////////////////////////
178

  
179
      int margin = (int)(scale*10 + 0.5f);
180
      int color  = act.getResources().getColor(R.color.grey);
181
      LinearLayout outerLayout = new LinearLayout(act);
182
      LinearLayout.LayoutParams outerLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT, 0.5f);
183
      outerLayoutParams.bottomMargin = margin;
184
      outerLayoutParams.leftMargin   = margin;
185
      outerLayoutParams.rightMargin  = margin;
186

  
187
      outerLayout.setLayoutParams(outerLayoutParams);
188
      outerLayout.setGravity(Gravity.CENTER|Gravity.FILL_HORIZONTAL);
189
      outerLayout.setBackgroundColor(color);
190
      outerLayout.setOrientation(LinearLayout.VERTICAL);
191
      layout.addView(outerLayout);
192

  
193
      ///// INNER LAYOUT1 //////////////////////////////////////////////////////////////////
194

  
195
      int innerLayout1Height = (int)(scale*36 + 0.5f);
196
      LinearLayout innerLayout1 = new LinearLayout(act);
197
      LinearLayout.LayoutParams innerLayout1Params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,innerLayout1Height);
198

  
199
      innerLayout1.setLayoutParams(innerLayout1Params);
200
      innerLayout1.setGravity(Gravity.CENTER|Gravity.FILL_HORIZONTAL);
201
      innerLayout1.setOrientation(LinearLayout.HORIZONTAL);
202
      outerLayout.addView(innerLayout1);
203

  
204
      ///// STUFF INSIDE INNER LAYOUT1 /////////////////////////////////////////////////////
205

  
206
      int text1Padding = (int)(scale*5 + 0.5f);
207
      LinearLayout.LayoutParams text1LayoutParams = new LinearLayout.LayoutParams(0,layoutHeight,0.2f);
208

  
209
      TextView text1View = new TextView(act);
210
      text1View.setText(R.string.duration);
211
      text1View.setLayoutParams(text1LayoutParams);
212
      text1View.setGravity(Gravity.START|Gravity.CENTER);
213
      text1View.setPadding(text1Padding,0,text1Padding,0);
214
      text1View.setTextAppearance(android.R.style.TextAppearance_Small);
215
      innerLayout1.addView(text1View);
216
      //////////////////////////////////////////////////////////////////
217
      int text2Padding = (int)(scale*5 + 0.5f);
218
      LinearLayout.LayoutParams text2LayoutParams = new LinearLayout.LayoutParams(0,layoutHeight,0.2f);
219

  
220
      mDurationText[index] = new TextView(act);
221
      mDurationText[index].setLayoutParams(text2LayoutParams);
222
      mDurationText[index].setGravity(Gravity.END|Gravity.CENTER);
223
      mDurationText[index].setPadding(text2Padding,0,text2Padding,0);
224
      mDurationText[index].setTextAppearance(android.R.style.TextAppearance_Small);
225
      innerLayout1.addView(mDurationText[index]);
226
      //////////////////////////////////////////////////////////////////
227
      int seekPadding = (int)(scale*10 + 0.5f);
228
      LinearLayout.LayoutParams seekLayoutParams = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,0.6f);
229

  
230
      SeekBar seekBar = new SeekBar(act);
231
      seekBar.setLayoutParams(seekLayoutParams);
232
      seekBar.setPadding(seekPadding,0,seekPadding,0);
233
      seekBar.setId(index);
234
      innerLayout1.addView(seekBar);
235

  
236
      mSeekBarID[index] = seekBar.getId();
237

  
238
      seekBar.setOnSeekBarChangeListener(this);
239
      seekBar.setProgress(mPos[index]);
240

  
241
      ///// INNER LAYOUT2 //////////////////////////////////////////////////////////////////
242

  
243
      int innerLayout2Height = (int)(scale*36 + 0.5f);
244
      LinearLayout innerLayout2 = new LinearLayout(act);
245
      LinearLayout.LayoutParams innerLayout2Params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,innerLayout2Height);
246

  
247
      innerLayout2.setLayoutParams(innerLayout2Params);
248
      innerLayout2.setGravity(Gravity.CENTER|Gravity.FILL_HORIZONTAL);
249
      innerLayout2.setOrientation(LinearLayout.HORIZONTAL);
250
      outerLayout.addView(innerLayout2);
251

  
252
      ///// STUFF INSIDE INNER LAYOUT2 /////////////////////////////////////////////////////
253

  
254
      int text3Padding = (int)(scale*5 + 0.5f);
255
      LinearLayout.LayoutParams text3LayoutParams = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,0.4f);
256

  
257
      TextView text3View = new TextView(act);
258
      text3View.setText(R.string.type);
259
      text3View.setLayoutParams(text3LayoutParams);
260
      text3View.setGravity(Gravity.START|Gravity.CENTER);
261
      text3View.setPadding(text3Padding,0,text3Padding,0);
262
      text3View.setTextAppearance(android.R.style.TextAppearance_Small);
263
      innerLayout2.addView(text3View);
264
      //////////////////////////////////////////////////////////////////
265
      int spinnerPadding = (int)(scale*10 + 0.5f);
266
      LinearLayout.LayoutParams spinnerLayoutParams = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,0.6f);
267

  
268
      Spinner spinner = new Spinner(act);
269
      spinner.setLayoutParams(spinnerLayoutParams);
270
      spinner.setPadding(spinnerPadding,0,spinnerPadding,0);
271
      spinner.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
272
      spinner.setId(index);
273
      innerLayout2.addView(spinner);
274

  
275
      mSpinnerID[index] = spinner.getId();
276

  
277
      spinner.setOnItemSelectedListener(this);
278
      String[] appear = RubikSettingsEnum.getNames(index);
279
      ArrayAdapter<String> adapterType = new ArrayAdapter<>(act,android.R.layout.simple_spinner_item, appear);
163 280
      adapterType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
164
      solveTypeSpinner.setAdapter(adapterType);
281
      spinner.setAdapter(adapterType);
165 282

  
166
      if(mSolveType>=0 && mSolveType<solve.length)
167
        {
168
        solveTypeSpinner.setSelection(mSolveType);
169
        }
170
      }
171
    else
172
      {
173
      android.util.Log.e("dialog", "SOLVE TYPE SPINNER NULL!!");
174
      }
175

  
176
    SeekBar solveBar = view.findViewById(R.id.solveDuration);
177
    solveBar.setOnSeekBarChangeListener(this);
178
    solveBar.setProgress(mSolvePos);
283
      int type = mType[index];
179 284

  
180
    /// SCRAMBLE //////////////////////////////////////////////////////////
181
    Spinner scrambleTypeSpinner  = view.findViewById(R.id.scrambleType);
182

  
183
    if( scrambleTypeSpinner!=null )
184
      {
185
      scrambleTypeSpinner.setOnItemSelectedListener(this);
186
      String[] scramble = ScrambleEffect.getNames();
187
      ArrayAdapter<String> adapterType = new ArrayAdapter<>(act,android.R.layout.simple_spinner_item, scramble);
188
      adapterType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
189
      scrambleTypeSpinner.setAdapter(adapterType);
190

  
191
      if(mScrambleType>=0 && mScrambleType<scramble.length)
285
      if(type>=0 && type<appear.length)
192 286
        {
193
        scrambleTypeSpinner.setSelection(mScrambleType);
287
        spinner.setSelection(type);
194 288
        }
195 289
      }
196
    else
197
      {
198
      android.util.Log.e("dialog", "SCRAMBLE TYPE SPINNER NULL!!");
199
      }
200 290

  
201
    SeekBar scrambleBar = view.findViewById(R.id.scrambleDuration);
202
    scrambleBar.setOnSeekBarChangeListener(this);
203
    scrambleBar.setProgress(mScramblePos);
204

  
205
    return builder.create();
206
    }
207 291

  
208 292
///////////////////////////////////////////////////////////////////////////////////////////////////
209 293

  
210 294
    private void saveOptions()
211 295
      {
212
      mListener.onComplete(mSizeChangePos, mSolvePos, mScramblePos, mSizeChangeType, mSolveType, mScrambleType);
296
      mListener.onComplete(mPos[0], mPos[1], mPos[2], mType[0], mType[1], mType[2]);
213 297
      }
214 298

  
215 299
///////////////////////////////////////////////////////////////////////////////////////////////////
216 300

  
217 301
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
218 302
      {
219
      switch(parent.getId())
303
      int parentID = parent.getId();
304

  
305
      for (int i=0; i<RubikSettingsEnum.LENGTH; i++)
220 306
        {
221
        case R.id.sizechangeType: mSizeChangeType= pos; break;
222
        case R.id.solveType     : mSolveType     = pos; break;
223
        case R.id.scrambleType  : mScrambleType  = pos; break;
307
        if( mSpinnerID[i] == parentID )
308
          {
309
          mType[i] = pos;
310
          break;
311
          }
224 312
        }
225 313
      }
226 314

  
......
228 316

  
229 317
    public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
230 318
      {
231
      switch (bar.getId())
319
      int barID = bar.getId();
320

  
321
      for (int i=0; i<RubikSettingsEnum.LENGTH; i++)
232 322
        {
233
        case R.id.sizechangeDuration: mSizeChangePos= progress;
234
                                      int sizechange_ms= RubikActivity.translateDuration(mSizeChangePos);
235
                                      mSizeChangeDuration.setText(getString(R.string.ms_placeholder,sizechange_ms));
236
                                      break;
237
        case R.id.solveDuration     : mSolvePos= progress;
238
                                      int solve_ms= RubikActivity.translateDuration(mSolvePos);
239
                                      mSolveDuration.setText(getString(R.string.ms_placeholder,solve_ms));
240
                                      break;
241
        case R.id.scrambleDuration  : mScramblePos= progress;
242
                                      int scramble_ms= RubikActivity.translateDuration(mScramblePos);
243
                                      mScrambleDuration.setText(getString(R.string.ms_placeholder,scramble_ms));
244
                                      break;
323
        if( mSeekBarID[i] == barID )
324
          {
325
          mPos[i] = progress;
326
          int ms = RubikActivity.translateDuration(mPos[i]);
327
          mDurationText[i].setText(getString(R.string.ms_placeholder,ms));
328
          break;
329
          }
245 330
        }
246 331
      }
247 332

  

Also available in: Unified diff