commit b600ccd902d10b963f33d95587b6ddda8085020b
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Fri Nov 19 22:24:17 2021 +0100

    Add info pane: part 1.

diff --git a/src/main/java/org/distorted/helpers/LockController.java b/src/main/java/org/distorted/helpers/LockController.java
index ade05930..94c8920f 100644
--- a/src/main/java/org/distorted/helpers/LockController.java
+++ b/src/main/java/org/distorted/helpers/LockController.java
@@ -154,7 +154,8 @@ public class LockController
     {
     boolean locked = control.retLocked();
     final int icon = getLockIcon(locked,false);
-    mLockButton = new TransparentImageButton(act, icon, LinearLayout.LayoutParams.MATCH_PARENT,TransparentImageButton.GRAVITY_MIDDLE);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mLockButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_MIDDLE, params);
 
     mLockButton.setOnClickListener( new View.OnClickListener()
       {
diff --git a/src/main/java/org/distorted/helpers/MovesController.java b/src/main/java/org/distorted/helpers/MovesController.java
index 45d5e955..362fa4f3 100644
--- a/src/main/java/org/distorted/helpers/MovesController.java
+++ b/src/main/java/org/distorted/helpers/MovesController.java
@@ -166,7 +166,8 @@ public class MovesController implements MovesFinished
   public void setupButton(final Activity act, ObjectControl control)
     {
     final int icon = getPrevIcon( !mMoves.isEmpty() );
-    mPrevButton = new TransparentImageButton(act, icon, LinearLayout.LayoutParams.MATCH_PARENT, TransparentImageButton.GRAVITY_MIDDLE);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mPrevButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_MIDDLE, params);
 
     mPrevButton.setOnClickListener( new View.OnClickListener()
       {
diff --git a/src/main/java/org/distorted/helpers/TransparentImageButton.java b/src/main/java/org/distorted/helpers/TransparentImageButton.java
index 0ac0f64b..ed27e7d1 100644
--- a/src/main/java/org/distorted/helpers/TransparentImageButton.java
+++ b/src/main/java/org/distorted/helpers/TransparentImageButton.java
@@ -37,12 +37,10 @@ public class TransparentImageButton extends MaterialButton
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public TransparentImageButton(Context context, int icon, int butWidth, int gravity)
+  public TransparentImageButton(Context context, int icon, int gravity, LinearLayout.LayoutParams params)
       {
       super(context);
 
-      LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(butWidth,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
-
       setLayoutParams(params);
       setPadding(0,0,0,0);
       setIconResource(icon);
diff --git a/src/main/java/org/distorted/screens/RubikScreenDone.java b/src/main/java/org/distorted/screens/RubikScreenDone.java
index 9b294389..9a4c2d53 100644
--- a/src/main/java/org/distorted/screens/RubikScreenDone.java
+++ b/src/main/java/org/distorted/screens/RubikScreenDone.java
@@ -87,7 +87,8 @@ public class RubikScreenDone extends RubikScreenAbstract
   private void setupBackButton(final RubikActivity act)
     {
     int icon = RubikActivity.getDrawable(R.drawable.ui_small_back,R.drawable.ui_medium_back, R.drawable.ui_big_back, R.drawable.ui_huge_back);
-    mBackButton = new TransparentImageButton(act, icon, LinearLayout.LayoutParams.MATCH_PARENT, TransparentImageButton.GRAVITY_MIDDLE);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mBackButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_MIDDLE, params);
 
     mBackButton.setOnClickListener( new View.OnClickListener()
       {
diff --git a/src/main/java/org/distorted/screens/RubikScreenPattern.java b/src/main/java/org/distorted/screens/RubikScreenPattern.java
index af154fbb..c845eda9 100644
--- a/src/main/java/org/distorted/screens/RubikScreenPattern.java
+++ b/src/main/java/org/distorted/screens/RubikScreenPattern.java
@@ -144,7 +144,8 @@ public class RubikScreenPattern extends RubikScreenAbstract
   private void setupBackButton(final RubikActivity act)
     {
     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);
-    mBackButton = new TransparentImageButton(act, icon, LinearLayout.LayoutParams.MATCH_PARENT, TransparentImageButton.GRAVITY_MIDDLE);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mBackButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_MIDDLE, params);
 
     mBackButton.setOnClickListener( new View.OnClickListener()
       {
@@ -163,7 +164,8 @@ public class RubikScreenPattern extends RubikScreenAbstract
   private void setupPrevButton(final RubikActivity act)
     {
     int icon = RubikActivity.getDrawable(R.drawable.ui_small_left,R.drawable.ui_medium_left, R.drawable.ui_big_left, R.drawable.ui_huge_left);
-    mPrevButton = new TransparentImageButton(act,icon,0,TransparentImageButton.GRAVITY_MIDDLE);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mPrevButton = new TransparentImageButton(act,icon,TransparentImageButton.GRAVITY_MIDDLE,params);
 
     mPrevButton.setOnClickListener( new View.OnClickListener()
       {
@@ -184,7 +186,8 @@ public class RubikScreenPattern extends RubikScreenAbstract
   private void setupNextButton(final RubikActivity act)
     {
     int icon = RubikActivity.getDrawable(R.drawable.ui_small_right,R.drawable.ui_medium_right, R.drawable.ui_big_right, R.drawable.ui_huge_right);
-    mNextButton = new TransparentImageButton(act,icon,0,TransparentImageButton.GRAVITY_MIDDLE);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mNextButton = new TransparentImageButton(act,icon,TransparentImageButton.GRAVITY_MIDDLE,params);
 
     mNextButton.setOnClickListener( new View.OnClickListener()
       {
diff --git a/src/main/java/org/distorted/screens/RubikScreenPlay.java b/src/main/java/org/distorted/screens/RubikScreenPlay.java
index 717784c1..69c6cfd0 100644
--- a/src/main/java/org/distorted/screens/RubikScreenPlay.java
+++ b/src/main/java/org/distorted/screens/RubikScreenPlay.java
@@ -21,6 +21,7 @@ package org.distorted.screens;
 
 import android.content.Context;
 import android.content.SharedPreferences;
+import android.content.res.Resources;
 import android.graphics.drawable.BitmapDrawable;
 import android.os.Build;
 import android.os.Bundle;
@@ -33,7 +34,6 @@ import android.widget.GridLayout;
 import android.widget.ImageButton;
 import android.widget.LinearLayout;
 import android.widget.PopupWindow;
-import android.widget.ScrollView;
 
 import org.distorted.objectlib.main.ObjectControl;
 import org.distorted.objectlib.main.ObjectType;
@@ -48,6 +48,7 @@ import org.distorted.helpers.TransparentButton;
 import org.distorted.helpers.TransparentImageButton;
 import org.distorted.network.RubikScores;
 
+import static android.view.View.inflate;
 import static org.distorted.objectlib.main.ObjectType.NUM_OBJECTS;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -69,7 +70,7 @@ public class RubikScreenPlay extends RubikScreenBase
   private static final float LAST_BUTTON = 1.5f;
   private static final int[] mLocation = new int[2];
 
-  private TransparentImageButton mObjButton, mMenuButton, mSolveButton, mScrambleButton;
+  private TransparentImageButton mObjButton, mMenuButton, mSolveButton, mScrambleButton, mDetailsButton;
   private TransparentButton mPlayButton;
   private PopupWindow mObjectPopup, mMenuPopup, mPlayPopup;
   private ObjectType mObject = DEF_OBJECT;
@@ -140,8 +141,8 @@ public class RubikScreenPlay extends RubikScreenBase
     {
     final int margin  = (int)(width*RubikActivity.MARGIN);
     final int icon = RubikActivity.getDrawable(R.drawable.ui_small_cube_menu,R.drawable.ui_medium_cube_menu, R.drawable.ui_big_cube_menu, R.drawable.ui_huge_cube_menu);
-
-    mObjButton = new TransparentImageButton(act, icon, LinearLayout.LayoutParams.MATCH_PARENT, TransparentImageButton.GRAVITY_MIDDLE);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mObjButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_MIDDLE, params);
 
     mObjButton.setOnClickListener( new View.OnClickListener()
       {
@@ -207,8 +208,8 @@ public class RubikScreenPlay extends RubikScreenBase
     {
     final int margin = (int)(width*RubikActivity.MARGIN);
     final int icon = RubikActivity.getDrawable(R.drawable.ui_small_menu,R.drawable.ui_medium_menu, R.drawable.ui_big_menu, R.drawable.ui_huge_menu);
-
-    mMenuButton = new TransparentImageButton(act, icon, LinearLayout.LayoutParams.MATCH_PARENT, TransparentImageButton.GRAVITY_MIDDLE);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mMenuButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_MIDDLE, params);
 
     mMenuButton.setOnClickListener( new View.OnClickListener()
       {
@@ -237,25 +238,16 @@ public class RubikScreenPlay extends RubikScreenBase
     {
     int icon = RubikActivity.getDrawable(R.drawable.cube_2s,R.drawable.cube_2m, R.drawable.cube_2b, R.drawable.cube_2h);
 
-    BitmapDrawable bd = (BitmapDrawable) act.getResources().getDrawable(icon);
+    Resources res = act.getResources();
+    BitmapDrawable bd = (BitmapDrawable)res.getDrawable(icon);
     int cubeWidth = bd.getIntrinsicWidth();
     int margin = (int)(width*RubikActivity.LARGE_MARGIN);
     mObjectSize = (int)(cubeWidth + 2*margin + 0.5f);
-    mMaxRowCount = (int)(0.9f*(height-mUpperBarHeight)/mObjectSize);
-    GridLayout objectGrid = new GridLayout(act);
-    mObjectPopup = new PopupWindow(act);
-    mObjectPopup.setFocusable(true);
+    mMaxRowCount = (int)((height-2.0f*mUpperBarHeight)/mObjectSize);
 
-    if( mMaxRowCount<mRowCount )
-      {
-      ScrollView scrollView = new ScrollView(act);
-      scrollView.addView(objectGrid);
-      mObjectPopup.setContentView(scrollView);
-      }
-    else
-      {
-      mObjectPopup.setContentView(objectGrid);
-      }
+    int viewID = mMaxRowCount<mRowCount ? R.layout.popup_object_withscroll : R.layout.popup_object_scrollless;
+    View view = inflate( act, viewID, null);
+    GridLayout objectGrid = view.findViewById(R.id.objectGrid);
 
     GridLayout.Spec[] rowSpecs = new GridLayout.Spec[mRowCount];
     GridLayout.Spec[] colSpecs = new GridLayout.Spec[mColCount];
@@ -263,6 +255,14 @@ public class RubikScreenPlay extends RubikScreenBase
     objectGrid.setColumnCount(mColCount);
     objectGrid.setRowCount(mRowCount);
 
+    LinearLayout bottomLayout = view.findViewById(R.id.bottomLayout);
+    setupDetailsButton(act);
+    bottomLayout.addView(mDetailsButton);
+
+    mObjectPopup = new PopupWindow(act);
+    mObjectPopup.setFocusable(true);
+    mObjectPopup.setContentView(view);
+
     int[] nextInRow = new int[mRowCount];
 
     for(int row=0; row<mRowCount; row++)
@@ -398,12 +398,32 @@ public class RubikScreenPlay extends RubikScreenBase
       }
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  void setupDetailsButton(final RubikActivity act)
+    {
+    int butWidth = 100;
+    int icon = RubikActivity.getDrawable(R.drawable.ui_small_cube_solve_new,R.drawable.ui_medium_cube_solve_new, R.drawable.ui_big_cube_solve_new, R.drawable.ui_huge_cube_solve_new);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(butWidth,LinearLayout.LayoutParams.MATCH_PARENT);
+    mDetailsButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_MIDDLE, params);
+
+    mDetailsButton.setOnClickListener( new View.OnClickListener()
+      {
+      @Override
+      public void onClick(View v)
+        {
+        android.util.Log.e("D", "DETAILS CLICKED!!");
+        }
+      });
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   void setupSolveButton(final RubikActivity act)
     {
     int icon = RubikActivity.getDrawable(R.drawable.ui_small_cube_solve_new,R.drawable.ui_medium_cube_solve_new, R.drawable.ui_big_cube_solve_new, R.drawable.ui_huge_cube_solve_new);
-    mSolveButton = new TransparentImageButton(act, icon, LinearLayout.LayoutParams.MATCH_PARENT, TransparentImageButton.GRAVITY_END);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mSolveButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_END,params);
 
     mSolveButton.setOnClickListener( new View.OnClickListener()
       {
@@ -421,7 +441,8 @@ public class RubikScreenPlay extends RubikScreenBase
   private void setupScrambleButton(final RubikActivity act)
     {
     int icon = RubikActivity.getDrawable(R.drawable.ui_small_cube_scramble_new,R.drawable.ui_medium_cube_scramble_new, R.drawable.ui_big_cube_scramble_new, R.drawable.ui_huge_cube_scramble_new);
-    mScrambleButton = new TransparentImageButton(act, icon, LinearLayout.LayoutParams.MATCH_PARENT, TransparentImageButton.GRAVITY_START);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mScrambleButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_START, params);
 
     mScrambleButton.setOnClickListener( new View.OnClickListener()
       {
diff --git a/src/main/java/org/distorted/screens/RubikScreenReady.java b/src/main/java/org/distorted/screens/RubikScreenReady.java
index 6655e45b..5f6e1c6e 100644
--- a/src/main/java/org/distorted/screens/RubikScreenReady.java
+++ b/src/main/java/org/distorted/screens/RubikScreenReady.java
@@ -68,7 +68,8 @@ public class RubikScreenReady extends RubikScreenBase
   private void setupBackButton(final RubikActivity act)
     {
     int icon = RubikActivity.getDrawable(R.drawable.ui_small_back,R.drawable.ui_medium_back, R.drawable.ui_big_back, R.drawable.ui_huge_back);
-    mBackButton = new TransparentImageButton(act, icon, LinearLayout.LayoutParams.MATCH_PARENT, TransparentImageButton.GRAVITY_MIDDLE);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mBackButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_MIDDLE, params);
 
     mBackButton.setOnClickListener( new View.OnClickListener()
       {
diff --git a/src/main/java/org/distorted/screens/RubikScreenSolution.java b/src/main/java/org/distorted/screens/RubikScreenSolution.java
index 63bb7835..69fbe9ed 100644
--- a/src/main/java/org/distorted/screens/RubikScreenSolution.java
+++ b/src/main/java/org/distorted/screens/RubikScreenSolution.java
@@ -112,7 +112,8 @@ public class RubikScreenSolution extends RubikScreenAbstract implements MovesFin
   private void setupPrevButton(final RubikActivity act)
     {
     int icon = RubikActivity.getDrawable(R.drawable.ui_small_left,R.drawable.ui_medium_left, R.drawable.ui_big_left, R.drawable.ui_huge_left);
-    mPrevButton = new TransparentImageButton(act,icon,0,TransparentImageButton.GRAVITY_MIDDLE);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mPrevButton = new TransparentImageButton(act,icon,TransparentImageButton.GRAVITY_MIDDLE,params);
 
     mPrevButton.setOnClickListener( new View.OnClickListener()
       {
@@ -131,7 +132,8 @@ public class RubikScreenSolution extends RubikScreenAbstract implements MovesFin
   private void setupNextButton(final RubikActivity act)
     {
     int icon = RubikActivity.getDrawable(R.drawable.ui_small_right,R.drawable.ui_medium_right, R.drawable.ui_big_right, R.drawable.ui_huge_right);
-    mNextButton = new TransparentImageButton(act,icon,0,TransparentImageButton.GRAVITY_MIDDLE);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mNextButton = new TransparentImageButton(act,icon,TransparentImageButton.GRAVITY_MIDDLE,params);
 
     mNextButton.setOnClickListener( new View.OnClickListener()
       {
@@ -171,7 +173,8 @@ public class RubikScreenSolution extends RubikScreenAbstract implements MovesFin
   private void setupBackButton(final RubikActivity act)
     {
     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);
-    mBackButton = new TransparentImageButton(act, icon, LinearLayout.LayoutParams.MATCH_PARENT, TransparentImageButton.GRAVITY_MIDDLE);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mBackButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_MIDDLE,params);
 
     mBackButton.setOnClickListener( new View.OnClickListener()
       {
diff --git a/src/main/java/org/distorted/screens/RubikScreenSolver.java b/src/main/java/org/distorted/screens/RubikScreenSolver.java
index 7328ae90..97afc01d 100644
--- a/src/main/java/org/distorted/screens/RubikScreenSolver.java
+++ b/src/main/java/org/distorted/screens/RubikScreenSolver.java
@@ -212,7 +212,8 @@ public class RubikScreenSolver extends RubikScreenAbstract
   private void setupSolveButton(final RubikActivity act)
     {
     final int icon = RubikActivity.getDrawable(R.drawable.ui_small_solve,R.drawable.ui_medium_solve, R.drawable.ui_big_solve, R.drawable.ui_huge_solve);
-    mSolveButton = new TransparentImageButton(act,icon,LinearLayout.LayoutParams.MATCH_PARENT,TransparentImageButton.GRAVITY_MIDDLE);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mSolveButton = new TransparentImageButton(act,icon,TransparentImageButton.GRAVITY_MIDDLE,params);
 
     mSolveButton.setOnClickListener( new View.OnClickListener()
       {
@@ -235,7 +236,8 @@ public class RubikScreenSolver extends RubikScreenAbstract
   private void setupBackButton(final RubikActivity act)
     {
     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);
-    mBackButton = new TransparentImageButton(act, icon, LinearLayout.LayoutParams.MATCH_PARENT, TransparentImageButton.GRAVITY_MIDDLE);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mBackButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_MIDDLE, params);
 
     mBackButton.setOnClickListener( new View.OnClickListener()
       {
diff --git a/src/main/java/org/distorted/screens/RubikScreenSolving.java b/src/main/java/org/distorted/screens/RubikScreenSolving.java
index 11e30978..2f26a081 100644
--- a/src/main/java/org/distorted/screens/RubikScreenSolving.java
+++ b/src/main/java/org/distorted/screens/RubikScreenSolving.java
@@ -93,7 +93,8 @@ public class RubikScreenSolving extends RubikScreenBase
   private void setupBackButton(final RubikActivity act)
     {
     int icon = RubikActivity.getDrawable(R.drawable.ui_small_back,R.drawable.ui_medium_back, R.drawable.ui_big_back, R.drawable.ui_huge_back);
-    mBackButton = new TransparentImageButton(act, icon, LinearLayout.LayoutParams.MATCH_PARENT, TransparentImageButton.GRAVITY_MIDDLE);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mBackButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_MIDDLE, params);
 
     mBackButton.setOnClickListener( new View.OnClickListener()
       {
diff --git a/src/main/java/org/distorted/tutorials/TutorialScreen.java b/src/main/java/org/distorted/tutorials/TutorialScreen.java
index 9ca90c7e..41ed0b01 100644
--- a/src/main/java/org/distorted/tutorials/TutorialScreen.java
+++ b/src/main/java/org/distorted/tutorials/TutorialScreen.java
@@ -46,7 +46,8 @@ public class TutorialScreen
   private void setupSolveButton(final TutorialActivity act)
     {
     int icon = RubikActivity.getDrawable(R.drawable.ui_small_cube_solve,R.drawable.ui_medium_cube_solve, R.drawable.ui_big_cube_solve, R.drawable.ui_huge_cube_solve);
-    mSolveButton = new TransparentImageButton(act, icon, LinearLayout.LayoutParams.MATCH_PARENT, TransparentImageButton.GRAVITY_MIDDLE);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mSolveButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_MIDDLE, params);
 
     mSolveButton.setOnClickListener( new View.OnClickListener()
       {
@@ -64,7 +65,8 @@ public class TutorialScreen
   private void setupScrambleButton(final TutorialActivity act)
     {
     int icon = RubikActivity.getDrawable(R.drawable.ui_small_cube_scramble,R.drawable.ui_medium_cube_scramble, R.drawable.ui_big_cube_scramble, R.drawable.ui_huge_cube_scramble);
-    mScrambleButton = new TransparentImageButton(act, icon, LinearLayout.LayoutParams.MATCH_PARENT, TransparentImageButton.GRAVITY_MIDDLE);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mScrambleButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_MIDDLE, params);
 
     mScrambleButton.setOnClickListener( new View.OnClickListener()
       {
@@ -83,7 +85,8 @@ public class TutorialScreen
   private void setupBackButton(final TutorialActivity act)
     {
     int icon = RubikActivity.getDrawable(R.drawable.ui_small_smallback,R.drawable.ui_medium_smallback, R.drawable.ui_big_smallback, R.drawable.ui_huge_smallback);
-    mBackButton = new TransparentImageButton(act, icon, LinearLayout.LayoutParams.MATCH_PARENT, TransparentImageButton.GRAVITY_MIDDLE);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
+    mBackButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_MIDDLE, params);
 
     mBackButton.setOnClickListener( new View.OnClickListener()
       {
diff --git a/src/main/res/layout/popup_object_scrollless.xml b/src/main/res/layout/popup_object_scrollless.xml
new file mode 100644
index 00000000..e2afeb32
--- /dev/null
+++ b/src/main/res/layout/popup_object_scrollless.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+   android:layout_width="match_parent"
+   android:layout_height="match_parent"
+   android:orientation="vertical">
+
+   <GridLayout
+       android:id="@+id/objectGrid"
+       android:layout_width="match_parent"
+       android:layout_height="match_parent"
+       android:layout_weight="1">
+   </GridLayout>
+
+   <LinearLayout
+       android:id="@+id/bottomLayout"
+       android:background="@color/grey"
+       android:layout_width="match_parent"
+       android:layout_height="100dp"
+       android:layout_weight="1"
+       android:paddingEnd="5dp"
+       android:paddingStart="5dp"
+       android:gravity="end"
+       android:orientation="horizontal">
+
+   </LinearLayout>
+
+</LinearLayout>
diff --git a/src/main/res/layout/popup_object_withscroll.xml b/src/main/res/layout/popup_object_withscroll.xml
new file mode 100644
index 00000000..1525f2a3
--- /dev/null
+++ b/src/main/res/layout/popup_object_withscroll.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+   android:layout_width="match_parent"
+   android:layout_height="match_parent"
+   android:orientation="vertical">
+
+   <ScrollView
+       android:id="@+id/objectScroll"
+       android:layout_width="match_parent"
+       android:layout_height="match_parent"
+       android:layout_weight="1">
+
+       <GridLayout
+           android:id="@+id/objectGrid"
+           android:layout_width="match_parent"
+           android:layout_height="wrap_content">
+       </GridLayout>
+
+   </ScrollView>
+
+   <LinearLayout
+       android:id="@+id/bottomLayout"
+       android:background="@color/grey"
+       android:layout_width="match_parent"
+       android:layout_height="100dp"
+       android:layout_weight="1"
+       android:paddingEnd="5dp"
+       android:paddingStart="5dp"
+       android:gravity="end"
+       android:orientation="horizontal">
+
+   </LinearLayout>
+
+</LinearLayout>
