Project

General

Profile

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

magiccube / src / main / java / org / distorted / dialogs / RubikDialogUpdateView.java @ 988e3d33

1 9c39179e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2022 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6 68191e7d Leszek Koltunski
// 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 9c39179e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
9
10
package org.distorted.dialogs;
11
12 ce31f774 Leszek Koltunski
import java.io.File;
13
import java.io.FileInputStream;
14
import java.io.InputStream;
15 7fe62d1f Leszek Koltunski
import java.lang.ref.WeakReference;
16
17 9c39179e Leszek Koltunski
import android.app.Activity;
18 b88cdd91 Leszek Koltunski
import android.graphics.Bitmap;
19 46be3ddf Leszek Koltunski
import android.graphics.Color;
20 c651024f Leszek Koltunski
import android.util.TypedValue;
21 9c39179e Leszek Koltunski
import android.view.View;
22
import android.widget.Button;
23 7bee6064 Leszek Koltunski
import android.widget.ImageView;
24 c651024f Leszek Koltunski
import android.widget.LinearLayout;
25 2c9ab085 Leszek Koltunski
import android.widget.ProgressBar;
26 9c39179e Leszek Koltunski
import android.widget.TextView;
27
28 35161021 Leszek Koltunski
import org.distorted.external.RubikFiles;
29 9c39179e Leszek Koltunski
import org.distorted.main.R;
30 acabdd83 Leszek Koltunski
import org.distorted.external.RubikNetwork;
31
import org.distorted.external.RubikUpdates;
32 84d746d7 Leszek Koltunski
import org.distorted.objectlib.json.JsonReader;
33 806329e3 Leszek Koltunski
import org.distorted.objects.RubikObjectList;
34
35 7bb30586 leszek
import static org.distorted.objects.RubikObjectList.SHOW_DOWNLOADED_DEBUG;
36 e847c553 Leszek Koltunski
37 9c39179e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
38
39 46be3ddf Leszek Koltunski
public class RubikDialogUpdateView implements RubikNetwork.Downloadee
40 9c39179e Leszek Koltunski
  {
41 b88cdd91 Leszek Koltunski
  private ImageView mIcon;
42 46be3ddf Leszek Koltunski
  private RubikUpdates.UpdateInfo mInfo;
43
  private ProgressBar mBar;
44
  private Button mButton;
45
  private TextView mDescription;
46 806329e3 Leszek Koltunski
  private WeakReference<Activity> mAct;
47 7fe62d1f Leszek Koltunski
  private boolean mIconSaved;
48 806329e3 Leszek Koltunski
49 9c39179e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
50
51 2c9ab085 Leszek Koltunski
  public View createView(Activity act, RubikUpdates.UpdateInfo info, int fontSize, int padding,
52 06ba394a Leszek Koltunski
                         LinearLayout.LayoutParams pView, LinearLayout.LayoutParams pText, LinearLayout.LayoutParams pButt )
53 9c39179e Leszek Koltunski
    {
54 7fe62d1f Leszek Koltunski
    mIconSaved=false;
55 806329e3 Leszek Koltunski
    mAct = new WeakReference<>(act);
56 46be3ddf Leszek Koltunski
    mInfo = info;
57
    final RubikNetwork.Downloadee downloadee = this;
58 9fde123a Leszek Koltunski
    View view = act.getLayoutInflater().inflate(R.layout.dialog_updates_pane, null);
59 2c9ab085 Leszek Koltunski
    TextView title = view.findViewById(R.id.updates_pane_title);
60 9c39179e Leszek Koltunski
    title.setText(info.mObjectLongName);
61 46be3ddf Leszek Koltunski
    mDescription = view.findViewById(R.id.updates_pane_description);
62
    mDescription.setText(info.mDescription);
63 9c39179e Leszek Koltunski
64 b88cdd91 Leszek Koltunski
    mIcon = view.findViewById(R.id.updates_pane_image);
65
    mIcon.setImageResource(R.drawable.unknown_icon);
66 7bee6064 Leszek Koltunski
67 2c9ab085 Leszek Koltunski
    view.setLayoutParams(pView);
68 c651024f Leszek Koltunski
69
    title.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize);
70 46be3ddf Leszek Koltunski
    mDescription.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize);
71 c651024f Leszek Koltunski
72
    title.setLayoutParams(pText);
73 46be3ddf Leszek Koltunski
    mDescription.setLayoutParams(pText);
74 c651024f Leszek Koltunski
75 2c9ab085 Leszek Koltunski
    view.setPadding(padding,padding,padding,padding);
76
77 46be3ddf Leszek Koltunski
    mBar    = view.findViewById(R.id.updates_pane_bar);
78
    mButton = view.findViewById(R.id.updates_pane_button);
79 2c9ab085 Leszek Koltunski
80 9fde123a Leszek Koltunski
    if( info.mPercent>=100 )
81
      {
82 acabdd83 Leszek Koltunski
      mBar.setVisibility(View.GONE);
83 46be3ddf Leszek Koltunski
      mButton.setOnClickListener( new View.OnClickListener()
84 2c9ab085 Leszek Koltunski
        {
85
        @Override
86
        public void onClick(View v)
87
          {
88 46be3ddf Leszek Koltunski
          startDownload();
89
          RubikNetwork network = RubikNetwork.getInstance();
90
          network.downloadJSON(info,downloadee);
91 2c9ab085 Leszek Koltunski
          }
92
        });
93
94 46be3ddf Leszek Koltunski
      mButton.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize);
95
      mButton.setLayoutParams(pButt);
96
      mBar.setLayoutParams(pButt);
97 2c9ab085 Leszek Koltunski
      }
98
    else
99
      {
100 acabdd83 Leszek Koltunski
      mButton.setVisibility(View.GONE);
101 46be3ddf Leszek Koltunski
      mBar.setLayoutParams(pButt);
102
      mBar.setProgress(info.mPercent);
103 2c9ab085 Leszek Koltunski
      }
104 99b8a069 Leszek Koltunski
105 2c9ab085 Leszek Koltunski
    return view;
106 9c39179e Leszek Koltunski
    }
107 b88cdd91 Leszek Koltunski
108
///////////////////////////////////////////////////////////////////////////////////////////////////
109
110 7fe62d1f Leszek Koltunski
  void setIcon(Bitmap icon, boolean downloaded)
111 b88cdd91 Leszek Koltunski
    {
112
    mIcon.setImageBitmap(icon);
113 7fe62d1f Leszek Koltunski
114
    if( downloaded )
115
      {
116
      String name = mInfo.mObjectShortName + ".png";
117
      Activity act = mAct.get();
118
      RubikFiles files = RubikFiles.getInstance();
119
      mIconSaved = files.saveIcon(act,mInfo.mIcon, name);
120 84d746d7 Leszek Koltunski
121 e847c553 Leszek Koltunski
      if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Saving icon "+name+" to a file "+mIconSaved);
122 7fe62d1f Leszek Koltunski
      }
123 c89c3b1b Leszek Koltunski
    else
124
      {
125
      mIconSaved = true;
126
      }
127 b88cdd91 Leszek Koltunski
    }
128 46be3ddf Leszek Koltunski
129
///////////////////////////////////////////////////////////////////////////////////////////////////
130
131
  private void startDownload()
132
    {
133
    mDescription.setText(R.string.downloading);
134
    mBar.setProgress(20);
135 acabdd83 Leszek Koltunski
    mButton.setVisibility(View.GONE);
136
    mBar.setVisibility(View.VISIBLE);
137 46be3ddf Leszek Koltunski
    }
138
139 32fbd026 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
140
141
  private void displayError(int error)
142
    {
143
    Activity act = mAct.get();
144
145
    act.runOnUiThread(new Runnable()
146
      {
147
      @Override
148
      public void run()
149
        {
150
        mDescription.setTextColor(Color.parseColor("#ff0000"));
151
        mDescription.setText(error);
152
        }
153
      });
154
    }
155
156
///////////////////////////////////////////////////////////////////////////////////////////////////
157
158
  private void makeProgress(int progress, int message)
159
    {
160
    Activity act = mAct.get();
161
162
    act.runOnUiThread(new Runnable()
163
      {
164
      @Override
165
      public void run()
166
        {
167
        mBar.setProgress(progress);
168
        mDescription.setText(message);
169
        }
170
      });
171
    }
172
173 46be3ddf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
174
175
  public void jsonDownloaded()
176
    {
177
    if( mInfo.mUpdateObject && mInfo.mObjectStream==null )
178
      {
179 32fbd026 Leszek Koltunski
      displayError(R.string.networkError);
180 46be3ddf Leszek Koltunski
      }
181
    else
182
      {
183 32fbd026 Leszek Koltunski
      makeProgress(50,R.string.installing);
184 35161021 Leszek Koltunski
      RubikFiles files = RubikFiles.getInstance();
185 05fb345c Leszek Koltunski
      boolean oSuccess, eSuccess=false;
186 35161021 Leszek Koltunski
187
      if( mInfo.mObjectStream!=null )
188
        {
189 05fb345c Leszek Koltunski
        String objectName = mInfo.mObjectShortName + "_object.json";
190 806329e3 Leszek Koltunski
        Activity act = mAct.get();
191 05fb345c Leszek Koltunski
        oSuccess = files.saveFile(act,mInfo.mObjectStream, objectName);
192 84d746d7 Leszek Koltunski
193 05fb345c Leszek Koltunski
        if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Saving JSON "+objectName+" to a file "+oSuccess);
194 84d746d7 Leszek Koltunski
195 c020555e Leszek Koltunski
        try
196
          {
197 ce31f774 Leszek Koltunski
          File file = new File(act.getFilesDir(), objectName);
198
          InputStream stream = new FileInputStream(file);
199 5305fdc8 Leszek Koltunski
          JsonReader reader = new JsonReader();
200 ff4a2a13 leszek
          reader.parseJsonFileMetadata(stream);
201 ce31f774 Leszek Koltunski
          stream.close();
202
203 80f574a1 Leszek Koltunski
          mInfo.mNumScrambles = reader.getNumScrambles();
204 e9e744f7 Leszek Koltunski
          mInfo.mPrice        = reader.getPrice();
205 ff4a2a13 leszek
          float diff          = reader.getDifficulty();
206
          int category        = reader.getCategory();
207
          int year            = reader.getYearOfInvention();
208
          String author       = reader.getAuthor();
209 988e3d33 leszek
          boolean adjColors   = reader.getAdjustableColors();
210 ff4a2a13 leszek
211 e9e744f7 Leszek Koltunski
          if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Read from JSON numScrambles="+mInfo.mNumScrambles+" price="+mInfo.mPrice);
212 35161021 Leszek Koltunski
213 05fb345c Leszek Koltunski
          if( mInfo.mExtrasStream!=null )
214
            {
215
            String name = mInfo.mObjectShortName + "_extras.json";
216
            eSuccess = files.saveFile(act,mInfo.mExtrasStream, name);
217 84d746d7 Leszek Koltunski
218 05fb345c Leszek Koltunski
            if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Saving Extras "+name+" to a file "+eSuccess);
219
            }
220 35161021 Leszek Koltunski
221 05fb345c Leszek Koltunski
          if( mIconSaved || oSuccess || eSuccess )
222
            {
223
            makeProgress(75,R.string.configuring);
224 32fbd026 Leszek Koltunski
225 05fb345c Leszek Koltunski
            if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "1");
226 32fbd026 Leszek Koltunski
227 ff4a2a13 leszek
            boolean success = RubikObjectList.addDownloadedObject(act, mInfo.mObjectShortName, mInfo.mNumScrambles, mInfo.mPrice, mInfo.mObjectMinorVersion,
228 988e3d33 leszek
                                                                  mInfo.mExtrasMinorVersion, mIconSaved, oSuccess, eSuccess, diff, category, year, author,adjColors);
229 ac1900c3 Leszek Koltunski
            if( success )
230
              {
231 fad10885 Leszek Koltunski
              if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "2");
232 32fbd026 Leszek Koltunski
233 fad10885 Leszek Koltunski
              RubikNetwork network = RubikNetwork.getInstance();
234
              network.updateDone(mInfo.mObjectShortName);
235 84d746d7 Leszek Koltunski
236 fad10885 Leszek Koltunski
              if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "3");
237 32fbd026 Leszek Koltunski
238 fad10885 Leszek Koltunski
              makeProgress(100,R.string.success);
239 32fbd026 Leszek Koltunski
240 1c04d054 leszek
              if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "4");
241 fad10885 Leszek Koltunski
              }
242
            else
243
              {
244
              displayError(R.string.saveError);
245
              }
246 05fb345c Leszek Koltunski
            }
247
          else
248
            {
249
            displayError(R.string.saveError);
250
            }
251
          }
252
        catch(Exception ex)
253
          {
254
          displayError(R.string.saveError);
255 4c3fd041 Leszek Koltunski
          files.deleteJsonObject(act,mInfo.mObjectShortName);
256 05fb345c Leszek Koltunski
          if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Error reading numScrambles");
257
          }
258 35161021 Leszek Koltunski
        }
259 46be3ddf Leszek Koltunski
      }
260
    }
261 9c39179e Leszek Koltunski
  }