diff options
Diffstat (limited to 'src/com/android/gallery3d')
-rw-r--r-- | src/com/android/gallery3d/app/GalleryAppImpl.java | 2 | ||||
-rw-r--r-- | src/com/android/gallery3d/gadget/LocalPhotoSource.java (renamed from src/com/android/gallery3d/widget/LocalPhotoSource.java) | 2 | ||||
-rw-r--r-- | src/com/android/gallery3d/gadget/MediaSetSource.java (renamed from src/com/android/gallery3d/widget/MediaSetSource.java) | 2 | ||||
-rw-r--r-- | src/com/android/gallery3d/gadget/PhotoAppWidgetProvider.java (renamed from src/com/android/gallery3d/widget/WidgetProvider.java) | 34 | ||||
-rw-r--r-- | src/com/android/gallery3d/gadget/WidgetClickHandler.java (renamed from src/com/android/gallery3d/widget/WidgetClickHandler.java) | 2 | ||||
-rw-r--r-- | src/com/android/gallery3d/gadget/WidgetConfigure.java (renamed from src/com/android/gallery3d/widget/WidgetConfigure.java) | 4 | ||||
-rw-r--r-- | src/com/android/gallery3d/gadget/WidgetDatabaseHelper.java (renamed from src/com/android/gallery3d/widget/WidgetDatabaseHelper.java) | 84 | ||||
-rw-r--r-- | src/com/android/gallery3d/gadget/WidgetService.java (renamed from src/com/android/gallery3d/widget/WidgetService.java) | 2 | ||||
-rw-r--r-- | src/com/android/gallery3d/gadget/WidgetSource.java (renamed from src/com/android/gallery3d/widget/WidgetSource.java) | 2 | ||||
-rw-r--r-- | src/com/android/gallery3d/gadget/WidgetTypeChooser.java (renamed from src/com/android/gallery3d/widget/WidgetTypeChooser.java) | 2 | ||||
-rw-r--r-- | src/com/android/gallery3d/gadget/WidgetUtils.java (renamed from src/com/android/gallery3d/widget/WidgetUtils.java) | 2 |
11 files changed, 106 insertions, 32 deletions
diff --git a/src/com/android/gallery3d/app/GalleryAppImpl.java b/src/com/android/gallery3d/app/GalleryAppImpl.java index a11d92017..8d25ebf7e 100644 --- a/src/com/android/gallery3d/app/GalleryAppImpl.java +++ b/src/com/android/gallery3d/app/GalleryAppImpl.java @@ -19,10 +19,10 @@ package com.android.gallery3d.app; import com.android.gallery3d.data.DataManager; import com.android.gallery3d.data.DownloadCache; import com.android.gallery3d.data.ImageCacheService; +import com.android.gallery3d.gadget.WidgetUtils; import com.android.gallery3d.picasasource.PicasaSource; import com.android.gallery3d.util.GalleryUtils; import com.android.gallery3d.util.ThreadPool; -import com.android.gallery3d.widget.WidgetUtils; import android.app.Application; import android.content.Context; diff --git a/src/com/android/gallery3d/widget/LocalPhotoSource.java b/src/com/android/gallery3d/gadget/LocalPhotoSource.java index de16a7129..ad77de5b3 100644 --- a/src/com/android/gallery3d/widget/LocalPhotoSource.java +++ b/src/com/android/gallery3d/gadget/LocalPhotoSource.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.gallery3d.widget; +package com.android.gallery3d.gadget; import com.android.gallery3d.app.GalleryApp; import com.android.gallery3d.common.Utils; diff --git a/src/com/android/gallery3d/widget/MediaSetSource.java b/src/com/android/gallery3d/gadget/MediaSetSource.java index 1677f69f1..c1687e0c2 100644 --- a/src/com/android/gallery3d/widget/MediaSetSource.java +++ b/src/com/android/gallery3d/gadget/MediaSetSource.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.gallery3d.widget; +package com.android.gallery3d.gadget; import com.android.gallery3d.common.Utils; import com.android.gallery3d.data.ContentListener; diff --git a/src/com/android/gallery3d/widget/WidgetProvider.java b/src/com/android/gallery3d/gadget/PhotoAppWidgetProvider.java index 0a2fbfbe0..814ede25f 100644 --- a/src/com/android/gallery3d/widget/WidgetProvider.java +++ b/src/com/android/gallery3d/gadget/PhotoAppWidgetProvider.java @@ -14,21 +14,23 @@ * limitations under the License. */ -package com.android.gallery3d.widget; +package com.android.gallery3d.gadget; import com.android.gallery3d.R; -import com.android.gallery3d.widget.WidgetDatabaseHelper.Entry; +import com.android.gallery3d.gadget.WidgetDatabaseHelper.Entry; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.net.Uri; import android.util.Log; import android.widget.RemoteViews; -public class WidgetProvider extends AppWidgetProvider { +public class PhotoAppWidgetProvider extends AppWidgetProvider { private static final String TAG = "WidgetProvider"; @@ -88,12 +90,26 @@ public class WidgetProvider extends AppWidgetProvider { static RemoteViews buildFrameWidget(Context context, int appWidgetId, Entry entry) { RemoteViews views = new RemoteViews( context.getPackageName(), R.layout.photo_frame); - views.setImageViewBitmap(R.id.photo, entry.image); - Intent clickIntent = new Intent(context, - WidgetClickHandler.class).setData(entry.imageUri); - PendingIntent pendingClickIntent = PendingIntent.getActivity(context, 0, - clickIntent, PendingIntent.FLAG_CANCEL_CURRENT); - views.setOnClickPendingIntent(R.id.photo, pendingClickIntent); + try { + byte[] data = entry.imageData; + Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); + views.setImageViewBitmap(R.id.photo, bitmap); + } catch (Throwable t) { + Log.w(TAG, "cannot load widget image: " + appWidgetId, t); + } + + if (entry.imageUri != null) { + try { + Uri uri = Uri.parse(entry.imageUri); + Intent clickIntent = new Intent(context, WidgetClickHandler.class) + .setData(uri); + PendingIntent pendingClickIntent = PendingIntent.getActivity(context, 0, + clickIntent, PendingIntent.FLAG_CANCEL_CURRENT); + views.setOnClickPendingIntent(R.id.photo, pendingClickIntent); + } catch (Throwable t) { + Log.w(TAG, "cannot load widget uri: " + appWidgetId, t); + } + } return views; } diff --git a/src/com/android/gallery3d/widget/WidgetClickHandler.java b/src/com/android/gallery3d/gadget/WidgetClickHandler.java index 362e4d20c..075644d5e 100644 --- a/src/com/android/gallery3d/widget/WidgetClickHandler.java +++ b/src/com/android/gallery3d/gadget/WidgetClickHandler.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.gallery3d.widget; +package com.android.gallery3d.gadget; import com.android.gallery3d.R; import com.android.gallery3d.app.Gallery; diff --git a/src/com/android/gallery3d/widget/WidgetConfigure.java b/src/com/android/gallery3d/gadget/WidgetConfigure.java index 3bcd9c46e..747cc3a6d 100644 --- a/src/com/android/gallery3d/widget/WidgetConfigure.java +++ b/src/com/android/gallery3d/gadget/WidgetConfigure.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.gallery3d.widget; +package com.android.gallery3d.gadget; import com.android.gallery3d.R; import com.android.gallery3d.app.AlbumPicker; @@ -72,7 +72,7 @@ public class WidgetConfigure extends Activity { private void updateWidgetAndFinish(WidgetDatabaseHelper.Entry entry) { AppWidgetManager manager = AppWidgetManager.getInstance(this); - RemoteViews views = WidgetProvider.buildWidget(this, mAppWidgetId, entry); + RemoteViews views = PhotoAppWidgetProvider.buildWidget(this, mAppWidgetId, entry); manager.updateAppWidget(mAppWidgetId, views); setResult(RESULT_OK, new Intent().putExtra( AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId)); diff --git a/src/com/android/gallery3d/widget/WidgetDatabaseHelper.java b/src/com/android/gallery3d/gadget/WidgetDatabaseHelper.java index d5bf22e18..1d0754808 100644 --- a/src/com/android/gallery3d/widget/WidgetDatabaseHelper.java +++ b/src/com/android/gallery3d/gadget/WidgetDatabaseHelper.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.gallery3d.widget; +package com.android.gallery3d.gadget; import com.android.gallery3d.common.Utils; @@ -25,11 +25,11 @@ import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.net.Uri; import android.util.Log; import java.io.ByteArrayOutputStream; +import java.util.ArrayList; public class WidgetDatabaseHelper extends SQLiteOpenHelper { private static final String TAG = "PhotoDatabaseHelper"; @@ -60,17 +60,18 @@ public class WidgetDatabaseHelper extends SQLiteOpenHelper { public static class Entry { public int widgetId; public int type; - public Uri imageUri; - public Bitmap image; + public String imageUri; + public byte imageData[]; public String albumPath; + private Entry() {} + private Entry(int id, Cursor cursor) { widgetId = id; type = cursor.getInt(INDEX_WIDGET_TYPE); - if (type == TYPE_SINGLE_PHOTO) { - imageUri = Uri.parse(cursor.getString(INDEX_IMAGE_URI)); - image = loadBitmap(cursor, INDEX_PHOTO_BLOB); + imageUri = cursor.getString(INDEX_IMAGE_URI); + imageData = cursor.getBlob(INDEX_PHOTO_BLOB); } else if (type == TYPE_ALBUM) { albumPath = cursor.getString(INDEX_ALBUM_PATH); } @@ -91,16 +92,79 @@ public class WidgetDatabaseHelper extends SQLiteOpenHelper { + FIELD_PHOTO_BLOB + " BLOB)"); } + private void saveData(SQLiteDatabase db, int oldVersion, ArrayList<Entry> data) { + if (oldVersion <= 2) { + Cursor cursor = db.query("photos", + new String[] {FIELD_APPWIDGET_ID, FIELD_PHOTO_BLOB}, + null, null, null, null, null); + if (cursor == null) return; + try { + while (cursor.moveToNext()) { + Entry entry = new Entry(); + entry.type = TYPE_SINGLE_PHOTO; + entry.widgetId = cursor.getInt(0); + entry.imageData = cursor.getBlob(1); + data.add(entry); + } + } finally { + cursor.close(); + } + } else if (oldVersion == 3) { + Utils.debug("saveData of version: %s", oldVersion); + Cursor cursor = db.query("photos", + new String[] {FIELD_APPWIDGET_ID, FIELD_PHOTO_BLOB, FIELD_IMAGE_URI}, + null, null, null, null, null); + if (cursor == null) return; + try { + while (cursor.moveToNext()) { + Entry entry = new Entry(); + entry.type = TYPE_SINGLE_PHOTO; + entry.widgetId = cursor.getInt(0); + entry.imageData = cursor.getBlob(1); + entry.imageUri = cursor.getString(2); + + Utils.debug("store widget[%s] - %s", entry.widgetId, entry.imageUri); + data.add(entry); + } + } finally { + cursor.close(); + } + } + } + + private void restoreData(SQLiteDatabase db, ArrayList<Entry> data) { + db.beginTransaction(); + try { + for (Entry entry : data) { + ContentValues values = new ContentValues(); + values.put(FIELD_APPWIDGET_ID, entry.widgetId); + values.put(FIELD_WIDGET_TYPE, entry.type); + values.put(FIELD_IMAGE_URI, entry.imageUri); + values.put(FIELD_PHOTO_BLOB, entry.imageData); + values.put(FIELD_ALBUM_PATH, entry.albumPath); + db.insert(TABLE_WIDGETS, null, values); + } + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + } + @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { int version = oldVersion; if (version != DATABASE_VERSION) { + ArrayList<Entry> data = new ArrayList<Entry>(); + saveData(db, oldVersion, data); + Log.w(TAG, "destroying all old data."); // Table "photos" is renamed to "widget" in version 4 db.execSQL("DROP TABLE IF EXISTS photos"); db.execSQL("DROP TABLE IF EXISTS " + TABLE_WIDGETS); onCreate(db); + + restoreData(db, data); } } @@ -146,12 +210,6 @@ public class WidgetDatabaseHelper extends SQLiteOpenHelper { } } - private static Bitmap loadBitmap(Cursor cursor, int columnIndex) { - byte[] data = cursor.getBlob(columnIndex); - if (data == null) return null; - return BitmapFactory.decodeByteArray(data, 0, data.length); - } - public Entry getEntry(int appWidgetId) { Cursor cursor = null; try { diff --git a/src/com/android/gallery3d/widget/WidgetService.java b/src/com/android/gallery3d/gadget/WidgetService.java index aa167c768..a61831ca6 100644 --- a/src/com/android/gallery3d/widget/WidgetService.java +++ b/src/com/android/gallery3d/gadget/WidgetService.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.gallery3d.widget; +package com.android.gallery3d.gadget; import com.android.gallery3d.R; import com.android.gallery3d.app.GalleryApp; diff --git a/src/com/android/gallery3d/widget/WidgetSource.java b/src/com/android/gallery3d/gadget/WidgetSource.java index 3c73e882f..8b8eb79dc 100644 --- a/src/com/android/gallery3d/widget/WidgetSource.java +++ b/src/com/android/gallery3d/gadget/WidgetSource.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.gallery3d.widget; +package com.android.gallery3d.gadget; import com.android.gallery3d.data.ContentListener; diff --git a/src/com/android/gallery3d/widget/WidgetTypeChooser.java b/src/com/android/gallery3d/gadget/WidgetTypeChooser.java index 9718e0cb2..c4bca60d0 100644 --- a/src/com/android/gallery3d/widget/WidgetTypeChooser.java +++ b/src/com/android/gallery3d/gadget/WidgetTypeChooser.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.gallery3d.widget; +package com.android.gallery3d.gadget; import com.android.gallery3d.R; diff --git a/src/com/android/gallery3d/widget/WidgetUtils.java b/src/com/android/gallery3d/gadget/WidgetUtils.java index 481bbddbc..b194c7d8e 100644 --- a/src/com/android/gallery3d/widget/WidgetUtils.java +++ b/src/com/android/gallery3d/gadget/WidgetUtils.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.gallery3d.widget; +package com.android.gallery3d.gadget; import com.android.gallery3d.R; import com.android.gallery3d.data.MediaItem; |