From 7eb9e5e9257635cee5609ed633eb575fda93dd5a Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Wed, 2 Dec 2009 20:10:07 -0800 Subject: Upgrade Home db to upgrade contacts shortcut to the quick contact action Change-Id: Icb5606e340a6eafc06ffd1be4bbe3d4f988376d1 --- src/com/android/launcher2/LauncherProvider.java | 120 +++++++++++++++--------- src/com/android/launcher2/LauncherSettings.java | 31 ------ 2 files changed, 77 insertions(+), 74 deletions(-) (limited to 'src') diff --git a/src/com/android/launcher2/LauncherProvider.java b/src/com/android/launcher2/LauncherProvider.java index 433addbc9..c3ceefdd3 100644 --- a/src/com/android/launcher2/LauncherProvider.java +++ b/src/com/android/launcher2/LauncherProvider.java @@ -58,7 +58,7 @@ public class LauncherProvider extends ContentProvider { private static final String DATABASE_NAME = "launcher.db"; - private static final int DATABASE_VERSION = 5; + private static final int DATABASE_VERSION = 6; static final String AUTHORITY = "com.android.launcher2.settings"; @@ -66,7 +66,6 @@ public class LauncherProvider extends ContentProvider { static final String EXTRA_BIND_TARGETS = "com.android.launcher2.settings.bindtargets"; static final String TABLE_FAVORITES = "favorites"; - static final String TABLE_GESTURES = "gestures"; static final String PARAMETER_NOTIFY = "notify"; /** @@ -226,17 +225,6 @@ public class LauncherProvider extends ContentProvider { "displayMode INTEGER" + ");"); - db.execSQL("CREATE TABLE gestures (" + - "_id INTEGER PRIMARY KEY," + - "title TEXT," + - "intent TEXT," + - "itemType INTEGER," + - "iconType INTEGER," + - "iconPackage TEXT," + - "iconResource TEXT," + - "icon BLOB" + - ");"); - // Database was just created, so wipe any previous widgets if (mAppWidgetHost != null) { mAppWidgetHost.deleteHost(); @@ -371,26 +359,7 @@ public class LauncherProvider extends ContentProvider { } if (version < 4) { - db.beginTransaction(); - try { - db.execSQL("CREATE TABLE gestures (" + - "_id INTEGER PRIMARY KEY," + - "title TEXT," + - "intent TEXT," + - "itemType INTEGER," + - "iconType INTEGER," + - "iconPackage TEXT," + - "iconResource TEXT," + - "icon BLOB" + - ");"); - db.setTransactionSuccessful(); - version = 4; - } catch (SQLException ex) { - // Old version remains, which means we wipe old data - Log.e(TAG, ex.getMessage(), ex); - } finally { - db.endTransaction(); - } + version = 4; } if (version < 5) { @@ -408,14 +377,86 @@ public class LauncherProvider extends ContentProvider { } } + if (version < 6) { + if (updateContactsShortcuts(db)) { + version = 6; + } + } + if (version != DATABASE_VERSION) { Log.w(TAG, "Destroying all old data."); db.execSQL("DROP TABLE IF EXISTS " + TABLE_FAVORITES); - db.execSQL("DROP TABLE IF EXISTS " + TABLE_GESTURES); onCreate(db); } } - + + private boolean updateContactsShortcuts(SQLiteDatabase db) { + Cursor c = null; + final String selectWhere = buildOrWhereString(Favorites.ITEM_TYPE, + new int[] { Favorites.ITEM_TYPE_SHORTCUT }); + + db.beginTransaction(); + try { + // Select and iterate through each matching widget + c = db.query(TABLE_FAVORITES, new String[] { Favorites._ID, Favorites.INTENT }, + selectWhere, null, null, null, null); + + if (LOGD) Log.d(TAG, "found upgrade cursor count=" + c.getCount()); + + final ContentValues values = new ContentValues(); + final int idIndex = c.getColumnIndex(Favorites._ID); + final int intentIndex = c.getColumnIndex(Favorites.INTENT); + + while (c != null && c.moveToNext()) { + long favoriteId = c.getLong(idIndex); + final String intentUri = c.getString(intentIndex); + if (intentUri != null) { + try { + Intent intent = Intent.parseUri(intentUri, 0); + android.util.Log.d("Home", intent.toString()); + final Uri uri = intent.getData(); + final String data = uri.toString(); + if (Intent.ACTION_VIEW.equals(intent.getAction()) && + (data.startsWith("content://contacts/people/") || + data.startsWith("content://com.android.contacts/contacts/lookup/"))) { + + intent = new Intent("com.android.contacts.action.QUICK_CONTACT"); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | + Intent.FLAG_ACTIVITY_CLEAR_TOP | + Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); + + intent.setData(uri); + intent.putExtra("mode", 3); + intent.putExtra("exclude_mimes", (String[]) null); + + values.clear(); + values.put(LauncherSettings.Favorites.INTENT, intent.toUri(0)); + + String updateWhere = Favorites._ID + "=" + favoriteId; + db.update(TABLE_FAVORITES, values, updateWhere, null); + } + } catch (RuntimeException ex) { + Log.e(TAG, "Problem upgrading shortcut", ex); + } catch (URISyntaxException e) { + Log.e(TAG, "Problem upgrading shortcut", e); + } + } + } + + db.setTransactionSuccessful(); + } catch (SQLException ex) { + Log.w(TAG, "Problem while upgrading contacts", ex); + return false; + } finally { + db.endTransaction(); + if (c != null) { + c.close(); + } + } + + return true; + } + /** * Upgrade existing clock and photo frame widgets into their new widget * equivalents. This method allocates appWidgetIds, and then hands off to @@ -649,10 +690,6 @@ public class LauncherProvider extends ContentProvider { } private boolean addAppWidget(SQLiteDatabase db, ContentValues values, TypedArray a) { - final int[] bindSources = new int[] { - Favorites.ITEM_TYPE_APPWIDGET, - }; - String packageName = a.getString(R.styleable.Favorite_packageName); String className = a.getString(R.styleable.Favorite_className); @@ -662,9 +699,6 @@ public class LauncherProvider extends ContentProvider { ComponentName cn = new ComponentName(packageName, className); - final ArrayList bindTargets = new ArrayList(); - bindTargets.add(cn); - boolean allocatedAppWidgets = false; final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(mContext); @@ -694,7 +728,7 @@ public class LauncherProvider extends ContentProvider { final int iconResId = a.getResourceId(R.styleable.Favorite_icon, 0); final int titleResId = a.getResourceId(R.styleable.Favorite_title, 0); - Intent intent = null; + Intent intent; String uri = null; try { uri = a.getString(R.styleable.Favorite_uri); diff --git a/src/com/android/launcher2/LauncherSettings.java b/src/com/android/launcher2/LauncherSettings.java index a930acd52..a438d47cb 100644 --- a/src/com/android/launcher2/LauncherSettings.java +++ b/src/com/android/launcher2/LauncherSettings.java @@ -90,37 +90,6 @@ class LauncherSettings { static final String ICON = "icon"; } - static final class Gestures implements BaseLauncherColumns { - /** - * The content:// style URL for this table - */ - static final Uri CONTENT_URI = Uri.parse("content://" + - LauncherProvider.AUTHORITY + "/" + LauncherProvider.TABLE_GESTURES + - "?" + LauncherProvider.PARAMETER_NOTIFY + "=true"); - - /** - * The content:// style URL for this table. When this Uri is used, no notification is - * sent if the content changes. - */ - static final Uri CONTENT_URI_NO_NOTIFICATION = Uri.parse("content://" + - LauncherProvider.AUTHORITY + "/" + LauncherProvider.TABLE_GESTURES + - "?" + LauncherProvider.PARAMETER_NOTIFY + "=false"); - - /** - * The content:// style URL for a given row, identified by its id. - * - * @param id The row id. - * @param notify True to send a notification is the content changes. - * - * @return The unique content URL for the specified row. - */ - static Uri getContentUri(long id, boolean notify) { - return Uri.parse("content://" + LauncherProvider.AUTHORITY + - "/" + LauncherProvider.TABLE_GESTURES + "/" + id + "?" + - LauncherProvider.PARAMETER_NOTIFY + "=" + notify); - } - } - /** * Favorites. When changing these values, be sure to update * {@link com.android.settings.LauncherAppWidgetBinder} as needed. -- cgit v1.2.3