diff options
| -rw-r--r-- | AndroidManifest.xml | 21 | ||||
| -rw-r--r-- | res/xml/widget_info.xml | 2 | ||||
| -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 |
13 files changed, 123 insertions, 38 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index f568265d1..7d9bc1ace 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -66,6 +66,17 @@ <data android:mimeType="application/x-mpegurl" /> </intent-filter> </activity> + + <!-- we add the activity-alias for shortcut backward compatibility --> + <activity-alias android:name="com.cooliris.media.Gallery" + android:targetActivity="com.android.gallery3d.app.Gallery" + android:configChanges="keyboardHidden|orientation|screenSize" + android:label="string/app_name"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + </intent-filter> + </activity-alias> + <activity android:name="com.android.gallery3d.app.Gallery" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation|screenSize"> <intent-filter> @@ -200,18 +211,18 @@ android:syncable="false" android:grantUriPermissions="true" android:authorities="com.android.gallery3d.provider" /> - <activity android:name="com.android.gallery3d.widget.WidgetClickHandler" /> + <activity android:name="com.android.gallery3d.gadget.WidgetClickHandler" /> <activity android:name="com.android.gallery3d.app.DialogPicker" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@style/DialogPickerTheme"/> <activity android:name="com.android.gallery3d.app.AlbumPicker" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@style/DialogPickerTheme"/> - <activity android:name="com.android.gallery3d.widget.WidgetTypeChooser" + <activity android:name="com.android.gallery3d.gadget.WidgetTypeChooser" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@style/DialogPickerTheme"/> - <receiver android:name="com.android.gallery3d.widget.WidgetProvider" + <receiver android:name="com.android.gallery3d.gadget.PhotoAppWidgetProvider" android:label="@string/appwidget_title"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> @@ -226,9 +237,9 @@ <data android:scheme="package"/> </intent-filter> </receiver> - <service android:name="com.android.gallery3d.widget.WidgetService" + <service android:name="com.android.gallery3d.gadget.WidgetService" android:permission="android.permission.BIND_REMOTEVIEWS"/> - <activity android:name="com.android.gallery3d.widget.WidgetConfigure" + <activity android:name="com.android.gallery3d.gadget.WidgetConfigure" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@style/android:Theme.Translucent.NoTitleBar"> <intent-filter> diff --git a/res/xml/widget_info.xml b/res/xml/widget_info.xml index 5f71192bd..522f84895 100644 --- a/res/xml/widget_info.xml +++ b/res/xml/widget_info.xml @@ -5,4 +5,4 @@ android:updatePeriodMillis="86400000" android:previewImage="@drawable/preview" android:initialLayout="@layout/appwidget_main" - android:configure="com.android.gallery3d.widget.WidgetConfigure"/> + android:configure="com.android.gallery3d.gadget.WidgetConfigure"/> 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; |
