diff --git a/src/com/derpfish/pinkielive/PinkiePieLiveWallpaper.java b/src/com/derpfish/pinkielive/PinkiePieLiveWallpaper.java index 806c20b..b37c49a 100644 --- a/src/com/derpfish/pinkielive/PinkiePieLiveWallpaper.java +++ b/src/com/derpfish/pinkielive/PinkiePieLiveWallpaper.java @@ -1,5 +1,7 @@ package com.derpfish.pinkielive; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; @@ -12,7 +14,6 @@ import com.derpfish.pinkielive.download.PonyDownloader; import android.app.WallpaperManager; import android.content.BroadcastReceiver; -import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; @@ -22,7 +23,6 @@ import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; -import android.net.Uri; import android.os.Handler; import android.os.SystemClock; import android.service.wallpaper.WallpaperService; @@ -96,7 +96,7 @@ public class PinkiePieLiveWallpaper extends WallpaperService drawFrame(); } }; - + private boolean mVisible; private final SharedPreferences mPreferences; private final BroadcastReceiver broadcastReceiver; @@ -155,7 +155,7 @@ public class PinkiePieLiveWallpaper extends WallpaperService { final WallpaperManager wmMan = WallpaperManager.getInstance(getApplicationContext()); final AssetManager assetManager = getAssets(); - + InputStream istr = assetManager.open("defaultbg.jpg"); final int sampleSize = BitmapLoader.getSampleSizeFromInputStream(istr, wmMan.getDesiredMinimumWidth(), wmMan.getDesiredMinimumHeight()); @@ -176,7 +176,7 @@ public class PinkiePieLiveWallpaper extends WallpaperService defaultBg.recycle(); defaultBg = null; } - + final String imageUriStr = prefs.getString("livewallpaper_image", null); if (imageUriStr != null) { @@ -185,22 +185,20 @@ public class PinkiePieLiveWallpaper extends WallpaperService selectedBg.recycle(); } - final Uri bgImage = Uri.parse(imageUriStr); try { - final ContentResolver contentResolver = getContentResolver(); + File bg = new File(getApplicationContext().getFilesDir(), imageUriStr); final WallpaperManager wmMan = WallpaperManager.getInstance(getApplicationContext()); - - InputStream istr = contentResolver.openInputStream(bgImage); + FileInputStream istr = new FileInputStream(bg); final int sampleSize = BitmapLoader.getSampleSizeFromInputStream(istr, wmMan.getDesiredMinimumWidth(), wmMan.getDesiredMinimumHeight()); istr.close(); - - istr = contentResolver.openInputStream(bgImage); + + istr = new FileInputStream(bg); selectedBg = BitmapLoader.decodeSampledBitmapFromInputStream(istr, sampleSize); istr.close(); } - catch (IOException e) + catch (Exception e) { selectedBg = null; Log.w("PinkieLive", e); @@ -376,7 +374,7 @@ public class PinkiePieLiveWallpaper extends WallpaperService final float bgScale = Math.min(((float)actualBg.getWidth()) / ((float)minWidth), ((float)actualBg.getHeight()) / ((float)minHeight)); final int centeringOffsetX = (int)((float)actualBg.getWidth() - bgScale*minWidth)/2; final int centeringOffsetY = (int)((float)actualBg.getHeight() - bgScale*minHeight)/2; - + c.drawBitmap(actualBg, new Rect(centeringOffsetX - (int)(offsetX*bgScale), centeringOffsetY - (int)(offsetY*bgScale), diff --git a/src/com/derpfish/pinkielive/animation/PinkieAnimation.java b/src/com/derpfish/pinkielive/animation/PinkieAnimation.java index 0ddefb8..20d729c 100644 --- a/src/com/derpfish/pinkielive/animation/PinkieAnimation.java +++ b/src/com/derpfish/pinkielive/animation/PinkieAnimation.java @@ -146,9 +146,8 @@ public class PinkieAnimation implements PonyAnimation lastAnim = (lastAnim + 1) % NUM_ANIMATIONS; if (bmAnimation != null) { - for (int i = 0; i < bmAnimation.length; i++) - { - bmAnimation[i].recycle(); + for (Bitmap aBmAnimation : bmAnimation) { + aBmAnimation.recycle(); } bmAnimation = null; } @@ -157,7 +156,7 @@ public class PinkieAnimation implements PonyAnimation final InputStream istr = assetManager.open("jump" + (lastAnim + 1) + ".zip"); final ZipInputStream zis = new ZipInputStream(istr); final Map bitmaps = new HashMap(); - ZipEntry zipEntry = null; + ZipEntry zipEntry; while ((zipEntry = zis.getNextEntry()) != null) { bitmaps.put(zipEntry.getName(), BitmapFactory.decodeStream(zis)); @@ -198,9 +197,8 @@ public class PinkieAnimation implements PonyAnimation { if (bmAnimation != null) { - for (int i = 0; i < bmAnimation.length; i++) - { - bmAnimation[i].recycle(); + for (Bitmap aBmAnimation : bmAnimation) { + aBmAnimation.recycle(); } } } diff --git a/src/com/derpfish/pinkielive/preference/PinkiePieLiveWallpaperSettings.java b/src/com/derpfish/pinkielive/preference/PinkiePieLiveWallpaperSettings.java index 5ce6848..fd0720c 100644 --- a/src/com/derpfish/pinkielive/preference/PinkiePieLiveWallpaperSettings.java +++ b/src/com/derpfish/pinkielive/preference/PinkiePieLiveWallpaperSettings.java @@ -1,5 +1,6 @@ package com.derpfish.pinkielive.preference; +import android.content.Context; import com.derpfish.pinkielive.PinkiePieLiveWallpaper; import com.derpfish.pinkielive.R; @@ -12,6 +13,8 @@ import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceActivity; +import java.io.*; + public class PinkiePieLiveWallpaperSettings extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener, OnPreferenceClickListener { private static final int SELECT_PICTURE = 1; @@ -25,13 +28,13 @@ public class PinkiePieLiveWallpaperSettings extends PreferenceActivity implement getPreferenceManager().setSharedPreferencesName(PinkiePieLiveWallpaper.SHARED_PREFS_NAME); addPreferencesFromResource(R.xml.livewallpaper_settings); - + getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); - + setDefaultBgEnabled(); findPreference("livewallpaper_image").setOnPreferenceClickListener(this); - + gallery = new Intent(); gallery.setType("image/*"); gallery.setAction(Intent.ACTION_GET_CONTENT); @@ -82,11 +85,33 @@ public class PinkiePieLiveWallpaperSettings extends PreferenceActivity implement if (requestCode == SELECT_PICTURE) { Uri selectedImageUri = data.getData(); - SharedPreferences.Editor editor = getPreferenceManager().getSharedPreferences().edit(); - editor.putString("livewallpaper_image", selectedImageUri.toString()); - editor.putBoolean("livewallpaper_defaultbg", false); - editor.commit(); - ((CheckBoxPreference) findPreference("livewallpaper_defaultbg")).setChecked(false); + try { + // Delete old image + String oldLocation = getPreferenceManager().getSharedPreferences().getString("livewallpaper_image", null); + if (oldLocation != null) { + File oldFile = new File(getApplicationContext().getFilesDir(), oldLocation); + if (oldFile.exists()) oldFile.delete(); + } + + // Copy the new one + FileOutputStream fos = openFileOutput(selectedImageUri.getLastPathSegment(), Context.MODE_PRIVATE); + InputStream fis = getContentResolver().openInputStream(selectedImageUri); + byte[] buf = new byte[1024]; + int len; + while ((len = fis.read(buf)) != -1) { + fos.write(buf, 0, len); + } + fis.close(); + fos.close(); + + SharedPreferences.Editor editor = getPreferenceManager().getSharedPreferences().edit(); + editor.putString("livewallpaper_image", selectedImageUri.getLastPathSegment()); + editor.putBoolean("livewallpaper_defaultbg", false); + editor.commit(); + ((CheckBoxPreference) findPreference("livewallpaper_defaultbg")).setChecked(false); + } catch (Exception e) { + e.printStackTrace(); + } } } }