Project

General

Profile

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

magiccube / src / main / java / org / distorted / magic / RubikSettings.java @ f6fcf06a

1
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2019 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Distorted.                                                               //
5
//                                                                                               //
6
// Distorted is free software: you can redistribute it and/or modify                             //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Distorted is distributed in the hope that it will be useful,                                  //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19

    
20
package org.distorted.magic;
21

    
22
import android.app.Dialog;
23
import android.content.Context;
24
import android.content.DialogInterface;
25
import android.os.Bundle;
26
import android.support.annotation.NonNull;
27
import android.support.annotation.Nullable;
28
import android.support.v4.app.FragmentActivity;
29
import android.support.v7.app.AlertDialog;
30
import android.support.v7.app.AppCompatDialogFragment;
31
import android.view.LayoutInflater;
32
import android.view.View;
33
import android.widget.AdapterView;
34
import android.widget.ArrayAdapter;
35
import android.widget.SeekBar;
36
import android.widget.Spinner;
37

    
38
import org.distorted.effect.AppearEffect;
39
import org.distorted.effect.DisappearEffect;
40

    
41
///////////////////////////////////////////////////////////////////////////////////////////////////
42

    
43
public class RubikSettings extends AppCompatDialogFragment implements SeekBar.OnSeekBarChangeListener, AdapterView.OnItemSelectedListener
44
  {
45
  public interface OnCompleteListener
46
    {
47
    void onComplete(int aP, int dP, int aT, int dT);
48
    }
49

    
50
  private OnCompleteListener mListener;
51

    
52
  private int mAppearPos, mDisappearPos;
53
  private int mAppearType, mDisappearType;
54

    
55
///////////////////////////////////////////////////////////////////////////////////////////////////
56

    
57
  @Override
58
  public void onAttach(Context context)
59
    {
60
    super.onAttach(context);
61

    
62
    try
63
      {
64
      mListener = (OnCompleteListener)context;
65
      }
66
    catch (final ClassCastException e)
67
      {
68
      throw new ClassCastException(context.toString() + " must implement OnCompleteListener");
69
      }
70
    }
71

    
72
///////////////////////////////////////////////////////////////////////////////////////////////////
73

    
74
  @Override
75
  public void onCreate(@Nullable Bundle savedInstanceState)
76
    {
77
    super.onCreate(savedInstanceState);
78

    
79
    Bundle args = getArguments();
80

    
81
    mAppearPos     = args.getInt("appearPos");
82
    mDisappearPos  = args.getInt("disappearPos");
83
    mAppearType    = args.getInt("appearType");
84
    mDisappearType = args.getInt("disappearType");
85
    }
86

    
87
///////////////////////////////////////////////////////////////////////////////////////////////////
88

    
89
  @NonNull
90
  @Override
91
  public Dialog onCreateDialog(Bundle savedInstanceState)
92
    {
93
    FragmentActivity act = getActivity();
94
    AlertDialog.Builder builder = new AlertDialog.Builder(act);
95

    
96
    builder.setCancelable(false);
97
    builder.setPositiveButton( R.string.save, new DialogInterface.OnClickListener()
98
      {
99
      @Override
100
      public void onClick(DialogInterface dialog, int which)
101
        {
102
        saveOptions();
103
        }
104
      });
105

    
106
    LayoutInflater inflater = act.getLayoutInflater();
107
    final View view = inflater.inflate(R.layout.settings, null);
108
    builder.setView(view);
109

    
110
    Spinner appearTypeSpinner  = view.findViewById(R.id.appearType);
111

    
112
    if( appearTypeSpinner!=null )
113
      {
114
      appearTypeSpinner.setOnItemSelectedListener(this);
115
      String[] appear = getAppearEffectNames();
116
      ArrayAdapter<String> adapterType = new ArrayAdapter<>(act,android.R.layout.simple_spinner_item, appear);
117
      adapterType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
118
      appearTypeSpinner.setAdapter(adapterType);
119

    
120
      if(mAppearType>=0 && mAppearType<appear.length)
121
        {
122
        appearTypeSpinner.setSelection(mAppearType);
123
        }
124
      }
125
    else
126
      {
127
      android.util.Log.e("dialog", "APPEAR TYPE SPINNER NULL!!");
128
      }
129

    
130
    SeekBar appearBar = view.findViewById(R.id.appearDuration);
131
    appearBar.setOnSeekBarChangeListener(this);
132
    appearBar.setProgress(mAppearPos);
133

    
134
    Spinner disappearTypeSpinner  = view.findViewById(R.id.disappearType);
135

    
136
    if( disappearTypeSpinner!=null )
137
      {
138
      disappearTypeSpinner.setOnItemSelectedListener(this);
139
      String[] disappear = getDisappearEffectNames();
140
      ArrayAdapter<String> adapterType = new ArrayAdapter<>(act,android.R.layout.simple_spinner_item, disappear);
141
      adapterType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
142
      disappearTypeSpinner.setAdapter(adapterType);
143

    
144
      if(mDisappearType>=0 && mDisappearType<disappear.length)
145
        {
146
        disappearTypeSpinner.setSelection(mDisappearType);
147
        }
148
      }
149
    else
150
      {
151
      android.util.Log.e("dialog", "DISAPPEAR TYPE SPINNER NULL!!");
152
      }
153

    
154
    SeekBar disappearBar = view.findViewById(R.id.disappearDuration);
155
    disappearBar.setOnSeekBarChangeListener(this);
156
    disappearBar.setProgress(mDisappearPos);
157

    
158
    return builder.create();
159
    }
160

    
161
///////////////////////////////////////////////////////////////////////////////////////////////////
162

    
163
    private String[] getAppearEffectNames()
164
      {
165
      int length = AppearEffect.NUM_EFFECTS;
166
      AppearEffect.Type[] types = AppearEffect.Type.values();
167
      String[] names = new String[length];
168

    
169
      for( int i=0; i<length; i++)
170
        {
171
        names[i] = types[i].name();
172
        }
173

    
174
      return names;
175
      }
176

    
177
///////////////////////////////////////////////////////////////////////////////////////////////////
178

    
179
    private String[] getDisappearEffectNames()
180
      {
181
      int length = DisappearEffect.NUM_EFFECTS;
182
      DisappearEffect.Type[] types = DisappearEffect.Type.values();
183
      String[] names = new String[length];
184

    
185
      for( int i=0; i<length; i++)
186
        {
187
        names[i] = types[i].name();
188
        }
189

    
190
      return names;
191
      }
192

    
193
///////////////////////////////////////////////////////////////////////////////////////////////////
194

    
195
    private void saveOptions()
196
      {
197
      mListener.onComplete(mAppearPos, mDisappearPos, mAppearType, mDisappearType);
198
      }
199

    
200
///////////////////////////////////////////////////////////////////////////////////////////////////
201

    
202
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
203
      {
204
      switch(parent.getId())
205
        {
206
        case R.id.appearType   : mAppearType   = pos; break;
207
        case R.id.disappearType: mDisappearType= pos; break;
208
        }
209
      }
210

    
211
///////////////////////////////////////////////////////////////////////////////////////////////////
212

    
213
    public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
214
      {
215
      switch (bar.getId())
216
        {
217
        case R.id.appearDuration   : mAppearPos   = progress; break;
218
        case R.id.disappearDuration: mDisappearPos= progress; break;
219
        }
220
      }
221

    
222
///////////////////////////////////////////////////////////////////////////////////////////////////
223

    
224
    public void onNothingSelected(AdapterView<?> parent) { }
225
    public void onStartTrackingTouch(SeekBar bar) { }
226
    public void onStopTrackingTouch(SeekBar bar)  { }
227
  }
(4-4/5)