Project

General

Profile

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

magiccube / src / main / java / org / distorted / dialogs / RubikDialogWhatsNew.java @ 76856be3

1
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2022 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// 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
///////////////////////////////////////////////////////////////////////////////////////////////////
9

    
10
package org.distorted.dialogs;
11

    
12
import android.app.Dialog;
13
import android.content.pm.PackageInfo;
14
import android.content.pm.PackageManager;
15
import android.view.View;
16
import android.view.Window;
17
import android.view.WindowManager;
18
import android.widget.LinearLayout;
19
import android.widget.TextView;
20

    
21
import androidx.fragment.app.FragmentActivity;
22

    
23
import org.distorted.main.R;
24
import org.distorted.main.RubikActivity;
25

    
26
///////////////////////////////////////////////////////////////////////////////////////////////////
27

    
28
public class RubikDialogWhatsNew extends RubikDialogAbstract
29
  {
30
  private static final String[] MESSAGES =
31
      {
32
      "1.12.1",
33

    
34
      "1. This dialog :)\n" +
35
      "2. UI ready for NEW SOLVERS\n" +
36
      "3. Important fix for a bug which used to let players solve any scramble with just one move\n" +
37
      "4. Support for curved walls of cubies (preparation for Penrose Cubes)\n" +
38
      "5. Support for scrambling algorithms (preparation for AI Cube & Camouflage Cubes)",
39

    
40
      "1.12.2",
41

    
42
      "1. Fixes for two critical crashers that appeared in the previous version.",
43

    
44
      "1.12.3",
45

    
46
      "1. Implement the first two solvers - Pyraminx Duo & Ivy Cube\n" +
47
      "2. Implement AI Cube and Burr Cube\n" +
48
      "3. Many fixes - for Trajber 4x4, touch control, creation of Bandaged Cuboids, scores dialog...",
49

    
50
      "1.12.4",
51

    
52
      "1. Implement 2x2x3, Pyraminx & Skewb Diamond solvers.\n" +
53
      "2. Connect the solvers to the scrambling engine. Which means: from now on, " +
54
       "all puzzles which have a solver implemented will be perfectly scrambled. " +
55
       "Perfectly - i.e. any scramble at Level 7 will always require exactly 7 moves to solve. " +
56
       "No more 'lucky' scrambles! Which also means that in some point in the future, we'll have to " +
57
       "clear the High Scores Table.\n" +
58
      "3. Implement Icosamate & Master Icosamate",
59

    
60
      "Coming",
61

    
62
      "1. Implemented Pocket Cube, Skewb solvers.\n" +
63
      "2. Support for adjustable stickers.\n" +
64
      "3. In-game currency (stars)\n" +
65
      "4. More objects (Penrose Cubes, the Double-Crazy, Ghost Cubes, more Mirrors, more Mixups, Clover Cube)"
66
      };
67

    
68
///////////////////////////////////////////////////////////////////////////////////////////////////
69

    
70
  @Override
71
  public void onResume()
72
    {
73
    super.onResume();
74

    
75
    Window window = getDialog().getWindow();
76

    
77
    if( window!=null )
78
      {
79
      WindowManager.LayoutParams params = window.getAttributes();
80
      params.width  = (int)Math.min( mHeight*0.65f,mWidth*0.98f );
81
      window.setAttributes(params);
82
      }
83
    }
84

    
85
///////////////////////////////////////////////////////////////////////////////////////////////////
86

    
87
  public int getResource()      { return R.layout.dialog_scrollable_panes; }
88
  public int getTitleResource() { return R.string.whatsnew; }
89
  public boolean hasArgument()  { return true; }
90
  public int getPositive()      { return R.string.ok; }
91
  public int getNegative()      { return -1; }
92

    
93
///////////////////////////////////////////////////////////////////////////////////////////////////
94

    
95
  public void positiveAction()
96
    {
97

    
98
    }
99

    
100
///////////////////////////////////////////////////////////////////////////////////////////////////
101

    
102
  public void negativeAction()
103
    {
104

    
105
    }
106

    
107
///////////////////////////////////////////////////////////////////////////////////////////////////
108

    
109
  public void prepareBody(Dialog dialog, View view, FragmentActivity act, float size)
110
    {
111
    int margin= (int)(mHeight*0.010f);
112
    int titleH= (int)(mHeight*0.035f);
113
    int padd  = (int)(mHeight*0.010f);
114

    
115
    LinearLayout layout= view.findViewById(R.id.dialog_scrollable_main_layout);
116
    TextView text  = view.findViewById(R.id.dialog_scrollable_message);
117
    text.setVisibility(View.GONE);
118

    
119
    LinearLayout.LayoutParams pV = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT );
120
    pV.setMargins(margin, margin, margin, 0);
121
    LinearLayout.LayoutParams pL = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT );
122
    pL.setMargins(margin, margin, margin, margin);
123
    LinearLayout.LayoutParams pT = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, titleH );
124
    LinearLayout.LayoutParams pM = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT );
125
    pM.setMargins(0,2*margin,0,0);
126

    
127
    RubikActivity ract = (RubikActivity) getContext();
128
    int numMessages= MESSAGES.length/2;
129
    String thisVersion = findCurrentVersion(ract);
130

    
131
    for(int i=0; i<numMessages; i++)
132
      {
133
      String version = MESSAGES[2*i];
134
      String message = MESSAGES[2*i+1];
135
      boolean isCurrent = version.equals(thisVersion);
136

    
137
      RubikDialogWhatsNewView pane = new RubikDialogWhatsNewView(ract,version,message,padd, isCurrent, (i==(numMessages-1) ? pL:pV),pT,pM);
138
      layout.addView(pane.getView());
139
      }
140
    }
141

    
142
///////////////////////////////////////////////////////////////////////////////////////////////////
143

    
144
  private String findCurrentVersion(RubikActivity act)
145
    {
146
    String version;
147
    try
148
      {
149
      PackageInfo pInfo = act.getPackageManager().getPackageInfo( act.getPackageName(), 0);
150
      version= pInfo.versionName;
151
      }
152
    catch (PackageManager.NameNotFoundException e)
153
      {
154
      version= "unknown";
155
      }
156

    
157
    return version;
158
    }
159

    
160
///////////////////////////////////////////////////////////////////////////////////////////////////
161

    
162
  private int findVersion(String version)
163
    {
164
    int len = MESSAGES.length;
165

    
166
    for(int i=0; i<len; i++)
167
      {
168
      if( MESSAGES[i].equals(version) ) return i;
169
      }
170

    
171
    return 0;
172
    }
173

    
174
///////////////////////////////////////////////////////////////////////////////////////////////////
175

    
176
  public static String getDialogTag()
177
    {
178
    return "DialogSolvers";
179
    }
180
  }
(26-26/27)