1) report all solved levels to Analytics2) automatically dismiss the NewRecord and Solved dialogs when one backs from the Done state.
Make the RubikScores class thread-safe.
New meshes for the Diamond and the Pyraminxes.
Icons for the Diamond.
Add a CubitFactory and convert all objects to use it. Biggest change is thr Pyramiinx which now uses a lattice of Octahedrons and Tetrahedrons, just like the Diamond.
Fix Diamond's isSolved()
Progress with the Diamond. Everything working except for the isSolved(): turns out the center cubits can end up rotated along the face by multitudes of 120 degrees.
Progress with the Diamond. Everything working, expect one thing: half of the faces are upside down, and computing offset doesn't work on those faces properly.
Make the top and bottom bars transparent, above the GLSurfaceView.
Progress with the Skewb Diamond.
Progress with the Skewb Diamond - it is rendered correctly now.
Rename some classes.
Rename 'RubikMovement' to 'Movement'
1) correction for Dino4's isSolved() [ remember about the mirror! ]2) beginnings of support for the Skewb Diamond
Fully support the 4-color Dino.
Add the 4-color Dino.
Still one thing needs to be done about it: randomization of Moves (now sometimes in Level 1 the randomized move leads to an already solved position)
Add lock button.
Slight correction for devices which have scrWidth>scrHeight ( Huawei Mate Xs! )
Do not forget the amount an Object has been changed in size when we switch between Objects.
Compute the size of the Solver icon correctly.
Apply a hack so that the App enters fullscreen modee on some Huawei devices.
Remove LAYOUT_STABLE from the UI flags since that was causing trembling of the Scores dialog in some platforms.
Progress with UI
Make the keyboard visible again
Rework the bottom pane
Remove Navigation Bar in the last case, when we were popping out a PopupWindow!Navigation Bar fully gone now!
Make it so that the Navigation Bar does not re-appear when we pop up a DialogFragment.
Now there's noly 1 case when it still reappears: it's when we pop up a PopupWindow.
Progress with Play state.
Add hiding the Navigation bar (still unfinished, the bar re-appears when a DialogFragment or a PopupWindow appears)Integrate the Level Spinner and the Play button into oneMove the Menu button up
DMesh for the Helicopter.
Icons for the Helicopter.
Fix rotations of the Helicopter.
More support for the Helicopter.
Beginnings of support for the Helicopter.
Correct the Dino mesh.
Minor.
Skewb finished?
Skewb Mesh.
Icons for the Skewb.
Progress with the Skewb.
Beginnings of support for the Skewb.
Make the ObjectPopup a 2D grid - corrections.
Make the ObjectPopup a 2D grid.
Improve the Scores dialog: now level sections are added one-by-one.
New meshes.
Improve Pyraminx Mesh
Convert RubikDino to the new Polygon mesh.
Tweaks for the new RubikPyraminx mesh so it looks better.
Convert RubikPyraminx to the new MeshPolygon - better quality of the mesh and less vertices!
Convert RubikCubes to the new MeshPolygon - better quality of the mesh and less vertices!
Fix for a crasher.
Rename Meshes.
Fix: nwo we need to explicitly set mesh center to negative Z if we want to GLOW a flat object.
Fix for Samsung Android 5
Fix for one bug seen in Firebase and additional debugging for another.
Finally fix the Dino's 'isSolved()' - Dino can be mirrored and then it is also solved!
Fix detecting if an Object is solved. Before, the generic Cubit.thereIsNoVisibleDifference(0 would not work correctly in case of the Dino.
Adjust randomizing new rotations so that:
1) it works for basicAngle=5 (Megaminx) (so now basicAngle=2,3,4,5 supported)2) it leaves the decision as to what can be the next rotation to the Object class, as in case of certain Objects (the Dino, or the Helicopter, the Megaminx) the next rotation doesn't have to 'intersect' the old rotation always when oldRotAxis != newRotAxis (that's so simple only in case of the Cube and - only partly - the Pyraminx!)
Add the Dino dmesh file.
Fix the way we continue rotation: when rotating a layer, we need to be doing it with respect to the RotAxis which has been first casted to the touched face, and only then this casted one is casted to the surface of the screen.
Before we were casting the rotAxis directly to the screen without the intermediate casting to the face, which doesn't really work in case of the Dino: if the touched face is rotated away by quite a lot, the rotAxis is then completely counterintuitive.
Major progress with Dino; rotations (almost?) work now.
A bit less Sink effect (1.25) when creating the individual cubits of the Dino - with the previous 1.30 there was a bit of an artifact visible when rotating.
Fix the bug reported by Antonio Campos Galán: sometimes the app would not detect that the Cube is solved.
Progress with Dino Movement
Introduce separate ROT_AXIS and FACE_AXIS ( step 2 )
Introduce separate ROT_AXIS and FACE_AXIS ( step 1 )
Correct Dino row chances ( the middle row should never move! )
New Dino images.
Move the knowledge about colors of individual cubit faces down to each Object subclass.
Stop crashing when the last installed version has an Object remembered, then we install a new version without this Object in the RubikObjectList.
Progress with RubikDino.
Progress with the Dino.
Beginnings of support for a new Object: the Dino.
We need to up the version to 1.3.5 - new release to AppInChina because of the previous commit
Catch possible exceptions setting up the Renderer (possible on very old devices) and display the OpenGL error popup.
We need to pause an Activity in the following way:
1) Activity.onPause()2) View.onPause()3) Library.onPause()
otherwise sometimes there are artifacts when pausing!
Display the 'Privacy Policy' dialog (only if locale is set to ZH - chinese requirement)
Correction of the size of '3x3x3 Solver' bitmaps.
Solving time - display it more accurately.
Make the Scores Dialog screen-size invariant.
Reinvent the Pattern Dialog (Part 3)
Reinvent the Pattern Dialog (Part 2)
Reinvent the Pattern Dialog (Part 1)
Introduce HUGE ui version.
Catch an error that sometimes happens in the field.
Introduce three sizes of UI images: small, medium, large.
Re-introduce possibility to dynamically create object mesh: part 2.
Re-introduce possibility to dynamically create object mesh.
Save the name of the current state to Shared Prefs (and not the ordinal which might change in the future!)
Speed up WinEffectGlow - MEDIUM quality is fully enough.
Introduce two-fingered object resize.
Make the margins and paddings proportional to screen size.
Shorten some strings