commit d6e7c7fba38dbadbac06fb7b54bf4a22c492ac32
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Fri Jan 21 23:42:31 2022 +0100

    Progress downloading updates.

diff --git a/src/main/java/org/distorted/screens/RubikScreenPlay.java b/src/main/java/org/distorted/screens/RubikScreenPlay.java
index a248245e..52766c75 100644
--- a/src/main/java/org/distorted/screens/RubikScreenPlay.java
+++ b/src/main/java/org/distorted/screens/RubikScreenPlay.java
@@ -34,6 +34,7 @@ import android.widget.GridLayout;
 import android.widget.ImageButton;
 import android.widget.LinearLayout;
 import android.widget.PopupWindow;
+import android.widget.RelativeLayout;
 
 import org.distorted.network.RubikNetwork;
 import org.distorted.network.RubikUpdates;
@@ -231,9 +232,6 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
     mObjectSize = (int)(cubeWidth + 2*margin + 0.5f);
     mMaxRowCount = (int)((height-1.8f*mUpperBarHeight)/mObjectSize);
 
-    RubikNetwork network = RubikNetwork.getInstance();
-    network.signUpForUpdates(this);
-
     LinearLayout view = (LinearLayout)inflate( act, R.layout.popup_object, null);
     GridLayout objectGrid = view.findViewById(R.id.objectGrid);
 
@@ -243,8 +241,8 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
     objectGrid.setColumnCount(mColCount);
     objectGrid.setRowCount(mRowCount);
 
-    LinearLayout bottomLayout = view.findViewById(R.id.bottomLayout);
-    setupBottomLayout(act,bottomLayout,(NUM_COLUMNS-2)*mObjectSize);
+    RelativeLayout bottomLayout = view.findViewById(R.id.bottomLayout);
+    setupBottomLayout(act,bottomLayout);
 
     mObjectPopup = new PopupWindow(act);
     mObjectPopup.setFocusable(true);
@@ -307,29 +305,29 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private void setupBottomLayout(final RubikActivity act, final LinearLayout layout, int width)
+  private void setupBottomLayout(final RubikActivity act, final RelativeLayout layout)
     {
-    int iconD = RubikActivity.getDrawable(R.drawable.ui_small_info,R.drawable.ui_medium_info, R.drawable.ui_big_info, R.drawable.ui_huge_info);
     int iconT = RubikActivity.getDrawable(R.drawable.ui_small_tutorial,R.drawable.ui_medium_tutorial, R.drawable.ui_big_tutorial, R.drawable.ui_huge_tutorial);
+    int iconD = RubikActivity.getDrawable(R.drawable.ui_small_download,R.drawable.ui_medium_download, R.drawable.ui_big_download, R.drawable.ui_huge_download);
+    int iconI = RubikActivity.getDrawable(R.drawable.ui_small_info,R.drawable.ui_medium_info, R.drawable.ui_big_info, R.drawable.ui_huge_info);
 
     ImageButton buttonTut = layout.findViewById(R.id.buttonTut);
-         Button buttonNul = layout.findViewById(R.id.buttonNul);
-    ImageButton buttonDet = layout.findViewById(R.id.buttonDet);
+    ImageButton buttonDow = layout.findViewById(R.id.buttonDow);
+    ImageButton buttonInf = layout.findViewById(R.id.buttonInf);
 
     buttonTut.setImageResource(iconT);
-    buttonDet.setImageResource(iconD);
-    buttonNul.setVisibility(View.INVISIBLE);
-
-    buttonNul.setWidth(width);
+    buttonDow.setImageResource(iconD);
+    buttonInf.setImageResource(iconI);
 
     Resources res = act.getResources();
-    BitmapDrawable bd = (BitmapDrawable)res.getDrawable(iconD);
+    BitmapDrawable bd = (BitmapDrawable)res.getDrawable(iconI);
     mBottomHeight = bd.getIntrinsicHeight();
 
     TypedValue outValue = new TypedValue();
     act.getTheme().resolveAttribute(android.R.attr.selectableItemBackgroundBorderless, outValue, true);
     buttonTut.setBackgroundResource(outValue.resourceId);
-    buttonDet.setBackgroundResource(outValue.resourceId);
+    buttonDow.setBackgroundResource(outValue.resourceId);
+    buttonInf.setBackgroundResource(outValue.resourceId);
 
     buttonTut.setOnClickListener( new View.OnClickListener()
       {
@@ -342,7 +340,16 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
         }
       });
 
-    buttonDet.setOnClickListener( new View.OnClickListener()
+    buttonDow.setOnClickListener( new View.OnClickListener()
+      {
+      @Override
+      public void onClick(View v)
+        {
+        android.util.Log.e("D", "Download!!");
+        }
+      });
+
+    buttonInf.setOnClickListener( new View.OnClickListener()
       {
       @Override
       public void onClick(View v)
@@ -352,6 +359,9 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
         act.switchConfig(currObject);
         }
       });
+
+    RubikNetwork network = RubikNetwork.getInstance();
+    network.signUpForUpdates(this);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/res/drawable-nodpi/ui_big_download.png b/src/main/res/drawable-nodpi/ui_big_download.png
new file mode 100644
index 00000000..9e9ea55f
Binary files /dev/null and b/src/main/res/drawable-nodpi/ui_big_download.png differ
diff --git a/src/main/res/drawable-nodpi/ui_huge_download.png b/src/main/res/drawable-nodpi/ui_huge_download.png
new file mode 100644
index 00000000..b8afb355
Binary files /dev/null and b/src/main/res/drawable-nodpi/ui_huge_download.png differ
diff --git a/src/main/res/drawable-nodpi/ui_medium_download.png b/src/main/res/drawable-nodpi/ui_medium_download.png
new file mode 100644
index 00000000..08fe1f46
Binary files /dev/null and b/src/main/res/drawable-nodpi/ui_medium_download.png differ
diff --git a/src/main/res/drawable-nodpi/ui_small_download.png b/src/main/res/drawable-nodpi/ui_small_download.png
new file mode 100644
index 00000000..8458009e
Binary files /dev/null and b/src/main/res/drawable-nodpi/ui_small_download.png differ
diff --git a/src/main/res/drawable/badge_circle.xml b/src/main/res/drawable/badge_circle.xml
new file mode 100644
index 00000000..2b9c03b6
--- /dev/null
+++ b/src/main/res/drawable/badge_circle.xml
@@ -0,0 +1,17 @@
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+  android:shape="rectangle">
+  <corners
+    android:radius="10dip"/>
+  <solid
+    android:color="#F00" />
+  <stroke
+    android:width="2dip"
+    android:color="#FFF" />
+  <padding
+    android:left="8dip"
+    android:right="8dip"
+    android:top="5dip"
+    android:bottom="5dip" />
+</shape>
+
+
diff --git a/src/main/res/layout/popup_object.xml b/src/main/res/layout/popup_object.xml
index 6637f1c1..29656e0c 100644
--- a/src/main/res/layout/popup_object.xml
+++ b/src/main/res/layout/popup_object.xml
@@ -18,33 +18,43 @@
 
    </ScrollView>
 
-   <LinearLayout
+   <RelativeLayout
        android:id="@+id/bottomLayout"
-       android:background="@color/grey"
        android:layout_width="match_parent"
+       android:background="@color/grey"
        android:layout_height="wrap_content"
-       android:paddingEnd="5dp"
-       android:paddingStart="5dp"
-       android:orientation="horizontal">
+       android:paddingEnd="10dp"
+       android:paddingStart="10dp">
 
        <ImageButton
            android:id="@+id/buttonTut"
+           android:layout_alignParentStart="true"
            android:layout_width="wrap_content"
-           android:layout_height="wrap_content"
-           android:layout_weight="1.0"/>
+           android:layout_height="wrap_content"/>
 
-       <Button
-           android:id="@+id/buttonNul"
+       <ImageButton
+           android:id="@+id/buttonDow"
+           android:layout_centerHorizontal="true"
+           android:layout_width="wrap_content"
+           android:layout_height="wrap_content"/>
+       <TextView
+           android:id="@+id/bubbleUpdates"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
-           android:layout_weight="1.0"/>
+           android:layout_alignTop="@+id/buttonDow"
+           android:layout_alignEnd="@+id/buttonDow"
+           android:text="4"
+           android:textColor="#FFF"
+           android:textSize="16sp"
+           android:textStyle="bold"
+           android:background="@drawable/badge_circle"/>
 
        <ImageButton
-           android:id="@+id/buttonDet"
+           android:id="@+id/buttonInf"
+           android:layout_alignParentEnd="true"
            android:layout_width="wrap_content"
-           android:layout_height="wrap_content"
-           android:layout_weight="1.0"/>
+           android:layout_height="wrap_content"/>
 
-   </LinearLayout>
+     </RelativeLayout>
 
 </LinearLayout>
