Project

General

Profile

« Previous | Next » 

Revision 7fe62d1f

Added by Leszek Koltunski almost 3 years ago

Download the icons only once and save to local storage.

View differences:

src/main/java/org/distorted/dialogs/RubikDialogUpdateView.java
19 19

  
20 20
package org.distorted.dialogs;
21 21

  
22
import java.lang.ref.WeakReference;
23

  
22 24
import android.app.Activity;
23 25
import android.graphics.Bitmap;
24 26
import android.graphics.Color;
......
36 38
import org.distorted.external.RubikUpdates;
37 39
import org.distorted.objects.RubikObjectList;
38 40

  
39
import java.io.IOException;
40
import java.lang.ref.WeakReference;
41

  
42 41
///////////////////////////////////////////////////////////////////////////////////////////////////
43 42

  
44 43
public class RubikDialogUpdateView implements RubikNetwork.Downloadee
......
48 47
  private ProgressBar mBar;
49 48
  private Button mButton;
50 49
  private TextView mDescription;
51

  
52 50
  private WeakReference<Activity> mAct;
51
  private boolean mIconSaved;
53 52

  
54 53
///////////////////////////////////////////////////////////////////////////////////////////////////
55 54

  
56 55
  public View createView(Activity act, RubikUpdates.UpdateInfo info, int fontSize, int padding,
57 56
                         LinearLayout.LayoutParams pView, LinearLayout.LayoutParams pText, LinearLayout.LayoutParams pButt )
58 57
    {
58
    mIconSaved=false;
59 59
    mAct = new WeakReference<>(act);
60 60
    mInfo = info;
61 61
    final RubikNetwork.Downloadee downloadee = this;
......
111 111

  
112 112
///////////////////////////////////////////////////////////////////////////////////////////////////
113 113

  
114
  void setIcon(Bitmap icon)
114
  void setIcon(Bitmap icon, boolean downloaded)
115 115
    {
116 116
    mIcon.setImageBitmap(icon);
117

  
118
    if( downloaded )
119
      {
120
      String name = mInfo.mObjectShortName + ".png";
121
      Activity act = mAct.get();
122
      RubikFiles files = RubikFiles.getInstance();
123
      mIconSaved = files.saveIcon(act,mInfo.mIcon, name);
124
      }
117 125
    }
118 126

  
119 127
///////////////////////////////////////////////////////////////////////////////////////////////////
......
141 149
      mDescription.setText(R.string.installing);
142 150

  
143 151
      RubikFiles files = RubikFiles.getInstance();
144
      boolean iSuccess=true,oSuccess=true, eSuccess=true;
145

  
146
      if( mInfo.mIcon!=null )
147
        {
148
        String name = mInfo.mObjectShortName + ".png";
149
        Activity act = mAct.get();
150
        iSuccess = files.saveFile(act,mInfo.mIcon, name);
151
        }
152
      boolean oSuccess=true, eSuccess=true;
152 153

  
153 154
      if( mInfo.mObjectStream!=null )
154 155
        {
......
164 165
        eSuccess = files.saveFile(act,mInfo.mExtrasStream, name);
165 166
        }
166 167

  
167
      if( iSuccess && oSuccess )
168
      if( mIconSaved || oSuccess || eSuccess )
168 169
        {
169 170
        mBar.setProgress(75);
170 171
        mDescription.setText(R.string.configuring);
171
        RubikObjectList.addDownloadedObject(mInfo.mObjectShortName,iSuccess,oSuccess,eSuccess);
172
        RubikObjectList.addDownloadedObject(mInfo.mObjectShortName,mIconSaved,oSuccess,eSuccess);
172 173
        mBar.setProgress(100);
173 174
        mDescription.setText(R.string.success);
174 175

  
src/main/java/org/distorted/dialogs/RubikDialogUpdates.java
186 186
          }
187 187

  
188 188
        RubikNetwork network = RubikNetwork.getInstance();
189
        network.downloadIcons(this);
189
        network.downloadIcons(act,this);
190 190
        }
191 191
      else
192 192
        {
......
224 224

  
225 225
///////////////////////////////////////////////////////////////////////////////////////////////////
226 226

  
227
  public void iconDownloaded(int ordinal, Bitmap icon)
227
  public void iconDownloaded(int ordinal, Bitmap icon, boolean downloaded)
228 228
    {
229 229
    FragmentActivity act = getActivity();
230 230

  
......
236 236
        public void run()
237 237
          {
238 238
          RubikDialogUpdateView view = mPanes.get(ordinal);
239
          if( view!=null ) view.setIcon(icon);
239
          if( view!=null ) view.setIcon(icon,downloaded);
240 240
          }
241 241
        });
242 242
      }
src/main/java/org/distorted/external/RubikFiles.java
27 27

  
28 28
import android.content.Context;
29 29
import android.graphics.Bitmap;
30
import android.graphics.BitmapFactory;
30 31

  
31 32
///////////////////////////////////////////////////////////////////////////////////////////////////
32 33

  
......
51 52
    return mThis;
52 53
    }
53 54

  
55
///////////////////////////////////////////////////////////////////////////////////////////////////
56

  
57
  public Bitmap getIcon(Context context, String name)
58
    {
59
    File file = new File(context.getFilesDir(), name);
60

  
61
    if( file.exists() )
62
      {
63
      String fname = context.getFilesDir().getAbsolutePath()+"/"+name;
64
      return BitmapFactory.decodeFile(fname);
65
      }
66

  
67
    return null;
68
    }
69

  
54 70
///////////////////////////////////////////////////////////////////////////////////////////////////
55 71

  
56 72
  public boolean saveFile(Context context, InputStream stream, String name)
......
79 95

  
80 96
///////////////////////////////////////////////////////////////////////////////////////////////////
81 97

  
82
  public boolean saveFile(Context context, Bitmap bmp, String name)
98
  public boolean saveIcon(Context context, Bitmap bmp, String name)
83 99
    {
84 100
    try
85 101
      {
src/main/java/org/distorted/external/RubikNetwork.java
29 29
import java.security.MessageDigest;
30 30
import java.security.NoSuchAlgorithmException;
31 31

  
32
import android.content.Context;
32 33
import android.content.pm.PackageInfo;
33 34
import android.content.pm.PackageManager;
34 35
import android.graphics.Bitmap;
......
55 56

  
56 57
  public interface IconReceiver
57 58
    {
58
    void iconDownloaded(int ordinal, Bitmap bitmap);
59
    void iconDownloaded(int ordinal, Bitmap bitmap, boolean downloaded);
59 60
    }
60 61

  
61 62
  public interface Updatee
......
693 694

  
694 695
///////////////////////////////////////////////////////////////////////////////////////////////////
695 696

  
696
  private void iconThread(IconReceiver receiver)
697
  private void iconThread(Context context, IconReceiver receiver)
697 698
    {
698 699
    int numC = mUpdates.getCompletedNumber();
699 700
    int numS = mUpdates.getStartedNumber();
......
704 705

  
705 706
      if( iconPresent!=0 )
706 707
        {
707
        Bitmap icon = mUpdates.getCompletedIcon(c);
708
        boolean downloaded = false;
709
        Bitmap icon = mUpdates.getCompletedIcon(context,c);
708 710

  
709 711
        if( icon==null )
710 712
          {
711 713
          String url = mUpdates.getCompletedURL(c);
712 714
          icon = downloadIcon(url);
715
          downloaded = true;
713 716
          }
714 717
        if( icon!=null )
715 718
          {
716 719
          mUpdates.setCompletedIcon(c,icon);
717
          receiver.iconDownloaded(c,icon);
720
          receiver.iconDownloaded(c,icon,downloaded);
718 721
          }
719 722
        }
720 723
      }
......
725 728

  
726 729
      if( iconPresent!=0 )
727 730
        {
728
        Bitmap icon = mUpdates.getStartedIcon(s);
731
        boolean downloaded = false;
732
        Bitmap icon = mUpdates.getStartedIcon(context,s);
729 733

  
730 734
        if( icon==null )
731 735
          {
732 736
          String url = mUpdates.getStartedURL(s);
733 737
          icon = downloadIcon(url);
738
          downloaded = true;
734 739
          }
735 740
        if( icon!=null )
736 741
          {
737 742
          mUpdates.setStartedIcon(s,icon);
738
          receiver.iconDownloaded(numC+s,icon);
743
          receiver.iconDownloaded(numC+s,icon,downloaded);
739 744
          }
740 745
        }
741 746
      }
......
905 910

  
906 911
///////////////////////////////////////////////////////////////////////////////////////////////////
907 912

  
908
  public void downloadIcons(final IconReceiver receiver)
913
  public void downloadIcons(final Context context, final IconReceiver receiver)
909 914
    {
910 915
    initializeStatics();
911 916

  
......
913 918
      {
914 919
      public void run()
915 920
        {
916
        iconThread(receiver);
921
        iconThread(context,receiver);
917 922
        }
918 923
      };
919 924

  
src/main/java/org/distorted/external/RubikUpdates.java
21 21

  
22 22
import java.io.InputStream;
23 23
import java.util.ArrayList;
24

  
25
import android.content.Context;
24 26
import android.graphics.Bitmap;
25 27
import org.distorted.objects.RubikObjectList;
26 28

  
......
158 160

  
159 161
  public void updateDone(String shortName)
160 162
    {
161
    for( UpdateInfo info : mCompleted)
163
    for( UpdateInfo info : mCompleted )
162 164
      {
163 165
      if( info.mObjectShortName.equals(shortName) )
164 166
        {
......
198 200

  
199 201
///////////////////////////////////////////////////////////////////////////////////////////////////
200 202

  
201
  public Bitmap getCompletedIcon(int ordinal)
203
  public Bitmap getCompletedIcon(Context context, int ordinal)
202 204
    {
203
    return mCompleted.get(ordinal).mIcon;
205
    UpdateInfo info = mCompleted.get(ordinal);
206
    Bitmap bmp = info.mIcon;
207
    if( bmp!=null ) return bmp;
208

  
209
    RubikFiles files = RubikFiles.getInstance();
210
    bmp = files.getIcon(context,info.mObjectShortName+".png");
211
    info.mIcon = bmp;
212
    return bmp;
204 213
    }
205 214

  
206 215
///////////////////////////////////////////////////////////////////////////////////////////////////
207 216

  
208
  public Bitmap getStartedIcon(int ordinal)
217
  public Bitmap getStartedIcon(Context context, int ordinal)
209 218
    {
210
    return mStarted.get(ordinal).mIcon;
219
    UpdateInfo info = mStarted.get(ordinal);
220
    Bitmap bmp = info.mIcon;
221
    if( bmp!=null ) return bmp;
222

  
223
    RubikFiles files = RubikFiles.getInstance();
224
    bmp = files.getIcon(context,info.mObjectShortName+".png");
225
    info.mIcon = bmp;
226
    return bmp;
211 227
    }
212 228

  
213 229
///////////////////////////////////////////////////////////////////////////////////////////////////
src/main/java/org/distorted/solvers/SolverMain.java
125 125
        }
126 126
      }
127 127

  
128
    if( cubit>19) return 4;
128
    if( cubit>19 ) return 4;
129 129

  
130 130
    switch(face)
131 131
      {

Also available in: Unified diff