Project

General

Profile

« Previous | Next » 

Revision b88cdd91

Added by Leszek Koltunski almost 3 years ago

Download Update icons.

View differences:

src/main/java/org/distorted/dialogs/RubikDialogUpdateView.java
20 20
package org.distorted.dialogs;
21 21

  
22 22
import android.app.Activity;
23
import android.graphics.Bitmap;
23 24
import android.util.TypedValue;
24 25
import android.view.View;
25 26
import android.widget.Button;
......
37 38

  
38 39
public class RubikDialogUpdateView
39 40
  {
40
  public RubikDialogUpdateView()
41
    {
42

  
43
    }
41
  private ImageView mIcon;
44 42

  
45 43
///////////////////////////////////////////////////////////////////////////////////////////////////
46 44

  
......
54 52
    TextView description = view.findViewById(R.id.updates_pane_description);
55 53
    description.setText(info.mDescription);
56 54

  
57
    ImageView image = view.findViewById(R.id.updates_pane_image);
58
    image.setBackgroundResource(R.drawable.unknown_icon);
55
    mIcon = view.findViewById(R.id.updates_pane_image);
56
    mIcon.setImageResource(R.drawable.unknown_icon);
59 57

  
60
    image.setLayoutParams(pImage);
58
    mIcon.setLayoutParams(pImage);
61 59
    view.setLayoutParams(pView);
62 60

  
63 61
    title.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize);
......
95 93

  
96 94
    return view;
97 95
    }
96

  
97
///////////////////////////////////////////////////////////////////////////////////////////////////
98

  
99
  void setIcon(Bitmap icon)
100
    {
101
    mIcon.setImageBitmap(icon);
102
    }
98 103
  }
src/main/java/org/distorted/dialogs/RubikDialogUpdates.java
19 19

  
20 20
package org.distorted.dialogs;
21 21

  
22
import java.util.ArrayList;
23

  
22 24
import android.app.Dialog;
23 25
import android.content.DialogInterface;
26
import android.graphics.Bitmap;
24 27
import android.os.Bundle;
25 28
import android.util.DisplayMetrics;
26 29
import android.util.TypedValue;
......
49 52
  private LinearLayout mLayout;
50 53
  private int mMargin, mSize, mFontSize, mPadding;
51 54

  
55
  private ArrayList<RubikDialogUpdateView> mPanes;
56

  
52 57
///////////////////////////////////////////////////////////////////////////////////////////////////
53 58

  
54 59
  private View createView(FragmentActivity act, LayoutInflater inflater, float size, int minH)
......
72 77
  @Override
73 78
  public Dialog onCreateDialog(Bundle savedInstanceState)
74 79
    {
80
    if( mPanes==null ) mPanes = new ArrayList<>();
81

  
75 82
    FragmentActivity act = getActivity();
76 83
    LayoutInflater inflater = act.getLayoutInflater();
77 84
    AlertDialog.Builder builder = new AlertDialog.Builder(act);
......
166 173
          RubikDialogUpdateView rubikView = new RubikDialogUpdateView();
167 174
          View pane = rubikView.createView(act,info,mFontSize,mPadding,pI,pV,pT,pB);
168 175
          mLayout.addView(pane);
176
          mPanes.add(rubikView);
169 177
          }
170 178

  
171 179
        int numS = updates.getStartedNumber();
......
176 184
          RubikDialogUpdateView rubikView = new RubikDialogUpdateView();
177 185
          View pane = rubikView.createView(act,info,mFontSize,mPadding,pI,pV,pT,pB);
178 186
          mLayout.addView(pane);
187
          mPanes.add(rubikView);
179 188
          }
180 189

  
181 190
        RubikNetwork network = RubikNetwork.getInstance();
......
216 225

  
217 226
///////////////////////////////////////////////////////////////////////////////////////////////////
218 227

  
219
  public void iconDownloaded()
228
  public void iconDownloaded(int ordinal, Bitmap icon)
220 229
    {
230
    FragmentActivity act = getActivity();
221 231

  
232
    if( act!=null )
233
      {
234
      act.runOnUiThread(new Runnable()
235
        {
236
        @Override
237
        public void run()
238
          {
239
          RubikDialogUpdateView view = mPanes.get(ordinal);
240
          if( view!=null ) view.setIcon(icon);
241
          }
242
        });
243
      }
222 244
    }
223 245

  
224 246
///////////////////////////////////////////////////////////////////////////////////////////////////
src/main/java/org/distorted/network/RubikNetwork.java
20 20
package org.distorted.network;
21 21

  
22 22
import java.io.BufferedReader;
23
import java.io.IOException;
23 24
import java.io.InputStream;
24 25
import java.io.InputStreamReader;
25 26
import java.net.HttpURLConnection;
......
30 31

  
31 32
import android.content.pm.PackageInfo;
32 33
import android.content.pm.PackageManager;
34
import android.graphics.Bitmap;
35
import android.graphics.BitmapFactory;
33 36

  
34 37
import androidx.fragment.app.FragmentActivity;
35 38

  
......
52 55

  
53 56
  public interface Updatee
54 57
    {
55
    void iconDownloaded();
58
    void iconDownloaded(int ordinal, Bitmap bitmap);
56 59
    void receiveUpdate(RubikUpdates update);
57 60
    void errorUpdate();
58 61
    }
......
655 658
      }
656 659
    }
657 660

  
661
///////////////////////////////////////////////////////////////////////////////////////////////////
662

  
663
  private Bitmap downloadIcon(String url)
664
    {
665
    try
666
      {
667
      java.net.URL connectURL = new URL(url);
668
      HttpURLConnection conn = (HttpURLConnection) connectURL.openConnection();
669
      conn.setDoInput(true);
670
      conn.connect();
671
      InputStream input = conn.getInputStream();
672
      return BitmapFactory.decodeStream(input);
673
      }
674
    catch (IOException e)
675
      {
676
      android.util.Log.e("D", "Failed to download "+url);
677
      android.util.Log.e("D", e.getMessage() );
678
      return null;
679
      }
680
    }
681

  
682
///////////////////////////////////////////////////////////////////////////////////////////////////
683

  
684
  private void iconThread()
685
    {
686
    int numC = mUpdates.getCompletedNumber();
687
    int numS = mUpdates.getStartedNumber();
688

  
689
    for(int c=0; c<numC; c++)
690
      {
691
      Bitmap icon = mUpdates.getCompletedIcon(c);
692

  
693
      if( icon==null )
694
        {
695
        String url = mUpdates.getCompletedURL(c);
696
        icon = downloadIcon(url);
697
        }
698
      if( icon!=null )
699
        {
700
        mUpdates.setCompletedIcon(c,icon);
701
        mUpdatee.iconDownloaded(c,icon);
702
        }
703
      }
704

  
705
    for(int s=0; s<numS; s++)
706
      {
707
      Bitmap icon = mUpdates.getStartedIcon(s);
708

  
709
      if( icon==null )
710
        {
711
        String url = mUpdates.getStartedURL(s);
712
        icon = downloadIcon(url);
713
        }
714
      if( icon!=null )
715
        {
716
        mUpdates.setStartedIcon(s,icon);
717
        mUpdatee.iconDownloaded(numC+s,icon);
718
        }
719
      }
720
    }
721

  
658 722
///////////////////////////////////////////////////////////////////////////////////////////////////
659 723

  
660 724
  private RubikNetwork()
......
778 842

  
779 843
  public void downloadIcons(Updatee updatee)
780 844
    {
845
    initializeStatics();
846
    mUpdatee = updatee;
847

  
848
    Thread thread = new Thread()
849
      {
850
      public void run()
851
        {
852
        iconThread();
853
        }
854
      };
781 855

  
856
    thread.start();
782 857
    }
783 858

  
784 859
///////////////////////////////////////////////////////////////////////////////////////////////////
src/main/java/org/distorted/network/RubikUpdates.java
19 19

  
20 20
package org.distorted.network;
21 21

  
22
///////////////////////////////////////////////////////////////////////////////////////////////////
23

  
22
import java.util.ArrayList;
23
import android.graphics.Bitmap;
24 24
import org.distorted.objects.RubikObjectList;
25 25

  
26
import java.util.ArrayList;
26
///////////////////////////////////////////////////////////////////////////////////////////////////
27 27

  
28 28
public class RubikUpdates
29 29
{
......
37 37
    public final int mPercent;
38 38
    public final boolean mUpdateObject;
39 39
    public final boolean mUpdateExtras;
40
    public Bitmap mIcon;
40 41

  
41 42
    public UpdateInfo(String shortName, String longName, String description, int objectMinor,
42 43
                      int extrasMinor, int percent, boolean updateO, boolean updateE)
......
49 50
      mPercent            = percent;
50 51
      mUpdateObject       = updateO;
51 52
      mUpdateExtras       = updateE;
53

  
54
      mIcon = null;
52 55
      }
53 56
    }
54 57

  
......
133 136
    if( numLines>=1 )
134 137
      {
135 138
      mUrl = lines[0];
139
      if( !mUrl.endsWith("/") ) mUrl += "/";
140

  
136 141
      for(int line=1; line<numLines; line++)
137 142
        {
138 143
        String[] elements = lines[line].split(",");
......
183 188
    return mStarted.size();
184 189
    }
185 190

  
191
///////////////////////////////////////////////////////////////////////////////////////////////////
192

  
193
  public Bitmap getCompletedIcon(int ordinal)
194
    {
195
    return mCompleted.get(ordinal).mIcon;
196
    }
197

  
198
///////////////////////////////////////////////////////////////////////////////////////////////////
199

  
200
  public Bitmap getStartedIcon(int ordinal)
201
    {
202
    return mStarted.get(ordinal).mIcon;
203
    }
204

  
205
///////////////////////////////////////////////////////////////////////////////////////////////////
206

  
207
  public String getCompletedURL(int ordinal)
208
    {
209
    UpdateInfo info = mCompleted.get(ordinal);
210
    return info!=null ? mUrl + info.mObjectShortName + ".png" : null;
211
    }
212

  
213
///////////////////////////////////////////////////////////////////////////////////////////////////
214

  
215
  public String getStartedURL(int ordinal)
216
    {
217
    UpdateInfo info = mStarted.get(ordinal);
218
    return info!=null ? mUrl + info.mObjectShortName + ".png" : null;
219
    }
220

  
221
///////////////////////////////////////////////////////////////////////////////////////////////////
222

  
223
  public void setCompletedIcon(int ordinal, Bitmap icon)
224
    {
225
    UpdateInfo info = mCompleted.get(ordinal);
226
    info.mIcon = icon;
227
    }
228

  
229
///////////////////////////////////////////////////////////////////////////////////////////////////
230

  
231
  public void setStartedIcon(int ordinal, Bitmap icon)
232
    {
233
    UpdateInfo info = mStarted.get(ordinal);
234
    info.mIcon = icon;
235
    }
236

  
186 237
///////////////////////////////////////////////////////////////////////////////////////////////////
187 238

  
188 239
  public void showDebug()
src/main/java/org/distorted/screens/RubikScreenPlay.java
25 25
import android.content.Context;
26 26
import android.content.SharedPreferences;
27 27
import android.content.res.Resources;
28
import android.graphics.Bitmap;
28 29
import android.graphics.drawable.BitmapDrawable;
29 30
import android.os.Build;
30 31
import android.os.Bundle;
......
747 748

  
748 749
///////////////////////////////////////////////////////////////////////////////////////////////////
749 750

  
750
  public void iconDownloaded()
751
  public void iconDownloaded(int ordinal, Bitmap bitmap)
751 752
    {
752 753
    // empty
753 754
    }

Also available in: Unified diff