commit 1ae7c0336ccc66fd974db9a917b73ada01ff86ae
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Oct 27 22:59:53 2025 +0100

    Bugfix: make it possible to download tutorials for an object later.

diff --git a/src/main/java/org/distorted/dialogs/DialogUpdateView.java b/src/main/java/org/distorted/dialogs/DialogUpdateView.java
index 79223949..380f9754 100644
--- a/src/main/java/org/distorted/dialogs/DialogUpdateView.java
+++ b/src/main/java/org/distorted/dialogs/DialogUpdateView.java
@@ -229,14 +229,10 @@ public class DialogUpdateView implements RubikNetwork.Downloadee
             if( success )
               {
               if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "2");
-
               RubikNetwork network = RubikNetwork.getInstance();
               network.updateDone(mInfo.mObjectShortName);
-
               if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "3");
-
               makeProgress(100,R.string.success);
-
               if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "4");
               }
             else
@@ -256,6 +252,49 @@ public class DialogUpdateView implements RubikNetwork.Downloadee
           if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Error reading numScrambles");
           }
         }
+      else
+        {
+        if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Read from JSON numScrambles="+mInfo.mNumScrambles+" price="+mInfo.mPrice);
+
+        if( mInfo.mExtrasStream!=null )
+          {
+          Activity act = mAct.get();
+          String name = mInfo.mObjectShortName + "_extras.json";
+          eSuccess = files.saveFile(act,mInfo.mExtrasStream, name);
+          if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Saving Extras "+name+" to a file "+eSuccess);
+          makeProgress(75,R.string.configuring);
+
+          if( eSuccess )
+            {
+            if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "1a");
+
+            boolean success = RubikObjectList.addDownloadedExtras(mInfo.mObjectShortName, mInfo.mExtrasMinorVersion);
+            if( success )
+              {
+              if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "2a");
+              RubikNetwork network = RubikNetwork.getInstance();
+              network.updateDone(mInfo.mObjectShortName);
+              if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "3a");
+              makeProgress(100,R.string.success);
+              if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "4a");
+              }
+            else
+              {
+              displayError(R.string.saveError);
+              }
+            }
+          else
+            {
+            displayError(R.string.saveError);
+            }
+          }
+        else
+          {
+          makeProgress(100,R.string.tutorialsError);
+          RubikNetwork network = RubikNetwork.getInstance();
+          network.updateDone(mInfo.mObjectShortName);
+          }
+        }
       }
     }
   }
diff --git a/src/main/java/org/distorted/objects/RubikObject.java b/src/main/java/org/distorted/objects/RubikObject.java
index 5c8cc76e..9b817d3d 100644
--- a/src/main/java/org/distorted/objects/RubikObject.java
+++ b/src/main/java/org/distorted/objects/RubikObject.java
@@ -256,6 +256,7 @@ public class RubikObject
   public void markFree()                    { mIsFree=true; }
   public int getObjectVersion()             { return mObjectVersion; }
   public int getExtrasVersion()             { return mExtrasVersion; }
+  public void setExtrasVersion(int version) { mExtrasVersion = version; mExtrasID= -1; }
   public void setExtrasOrdinal(int ordinal) { mExtrasOrdinal = ordinal; }
   public int getExtrasOrdinal()             { return mExtrasOrdinal; }
   public boolean supportsAdjustableColors() { return mAdjColors; }
diff --git a/src/main/java/org/distorted/objects/RubikObjectList.java b/src/main/java/org/distorted/objects/RubikObjectList.java
index ef682b64..5321fd95 100644
--- a/src/main/java/org/distorted/objects/RubikObjectList.java
+++ b/src/main/java/org/distorted/objects/RubikObjectList.java
@@ -240,6 +240,27 @@ public class RubikObjectList
       }
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public static boolean addDownloadedExtras(String shortName, int extrasVersion)
+    {
+    if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "New downloaded extras for "+shortName);
+
+    for( RubikObject obj : mObjects )
+      {
+      if( obj.getLowerName().equals(shortName) )
+        {
+        obj.setExtrasOrdinal(mNumExtras);
+        obj.setExtrasVersion(extrasVersion);
+        mNumExtras++;
+
+        if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Downloaded object "+shortName+" now has extras");
+        return true;
+        }
+      }
+    return false;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public static boolean thereAreLockedObjects()
diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml
index 603d3667..b29783e9 100755
--- a/src/main/res/values-de/strings.xml
+++ b/src/main/res/values-de/strings.xml
@@ -33,6 +33,7 @@
     <string name="configuring">Konfigurieren…</string>
     <string name="solving">Lösen…</string>
     <string name="saveError">Fehler beim Speichern der Datei</string>
+    <string name="tutorialsError">Tutorials nicht gefunden</string>
     <string name="networkError">Netzwerkfehler</string>
     <string name="success">Erfolg</string>
     <string name="view">Sehen</string>
diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml
index 1ce15e2f..e09bc914 100755
--- a/src/main/res/values-es/strings.xml
+++ b/src/main/res/values-es/strings.xml
@@ -33,6 +33,7 @@
     <string name="configuring">Configurando…</string>
     <string name="solving">Resolviendo…</string>
     <string name="saveError">Error al guardar el archivo</string>
+    <string name="tutorialsError">No se encontraron tutoriales</string>
     <string name="networkError">Error de red</string>
     <string name="success">Éxito</string>
     <string name="view">Ver</string>
diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml
index 55590865..e6d8fad4 100755
--- a/src/main/res/values-fr/strings.xml
+++ b/src/main/res/values-fr/strings.xml
@@ -33,6 +33,7 @@
     <string name="configuring">Configuration…</string>
     <string name="solving">Résoudre…</string>
     <string name="saveError">Échec de l\'enregistrement du fichier</string>
+    <string name="tutorialsError">Tutoriels non trouvés</string>
     <string name="networkError">Erreur réseau</string>
     <string name="success">Succès</string>
     <string name="view">Regarder</string>
diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml
index bafe6930..994c8970 100755
--- a/src/main/res/values-ja/strings.xml
+++ b/src/main/res/values-ja/strings.xml
@@ -33,6 +33,7 @@
     <string name="configuring">構成…</string>
     <string name="solving">解決中…</string>
     <string name="saveError">ファイルの保存に失敗しました</string>
+    <string name="tutorialsError">チュートリアルが見つかりません</string>
     <string name="networkError">ネットワークエラー</string>
     <string name="success">成功</string>
     <string name="view">見る</string>
diff --git a/src/main/res/values-ko/strings.xml b/src/main/res/values-ko/strings.xml
index 9d1c9a97..8b3ded04 100755
--- a/src/main/res/values-ko/strings.xml
+++ b/src/main/res/values-ko/strings.xml
@@ -33,6 +33,7 @@
     <string name="configuring">구성…</string>
     <string name="solving">해결 중…</string>
     <string name="saveError">파일 저장 실패</string>
+    <string name="tutorialsError">튜토리얼을 찾을 수 없습니다</string>
     <string name="networkError">네트워크 오류</string>
     <string name="success">성공</string>
     <string name="view">보다</string>
diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml
index af04c473..5becb5c2 100644
--- a/src/main/res/values-pl/strings.xml
+++ b/src/main/res/values-pl/strings.xml
@@ -33,6 +33,7 @@
     <string name="solving">Rozwiązywanie…</string>
     <string name="configuring">Konfigurowanie…</string>
     <string name="saveError">Błąd zapisu pliku</string>
+    <string name="tutorialsError">Tutoriale nie znalezione</string>
     <string name="networkError">Błąd sieci</string>
     <string name="success">Sukces</string>
     <string name="view">Zobacz</string>
diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml
index 1f467988..14ff3193 100755
--- a/src/main/res/values-ru/strings.xml
+++ b/src/main/res/values-ru/strings.xml
@@ -33,6 +33,7 @@
     <string name="configuring">Настройка…</string>
     <string name="solving">Решение…</string>
     <string name="saveError">Не удалось сохранить файл</string>
+    <string name="tutorialsError">Учебники не найдены</string>
     <string name="networkError">Ошибка сети</string>
     <string name="success">Успех</string>
     <string name="view">Смотри</string>
diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml
index 72c3e534..1a7e5dfc 100644
--- a/src/main/res/values-zh-rCN/strings.xml
+++ b/src/main/res/values-zh-rCN/strings.xml
@@ -33,6 +33,7 @@
     <string name="configuring">配置…</string>
     <string name="solving">正在解决…</string>
     <string name="saveError">保存文件失败</string>
+    <string name="tutorialsError">未找到教程</string>
     <string name="networkError">網絡錯誤</string>
     <string name="success">成功</string>
     <string name="view">看</string>
diff --git a/src/main/res/values-zh-rTW/strings.xml b/src/main/res/values-zh-rTW/strings.xml
index c4128a4f..8eedd36a 100644
--- a/src/main/res/values-zh-rTW/strings.xml
+++ b/src/main/res/values-zh-rTW/strings.xml
@@ -33,6 +33,7 @@
     <string name="configuring">配置…</string>
     <string name="solving">解決…</string>
     <string name="saveError">保存文件失敗</string>
+    <string name="tutorialsError">未找到教程</string>
     <string name="networkError">網絡錯誤</string>
     <string name="success">成功</string>
     <string name="view">看</string>
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 361914f7..a932c868 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -35,6 +35,7 @@
     <string name="configuring">Configuring…</string>
     <string name="solving">Solving…</string>
     <string name="saveError">Failed to save file</string>
+    <string name="tutorialsError">Tutorials not found</string>
     <string name="networkError">Network Error</string>
     <string name="success">Success</string>
     <string name="view">View</string>
