diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index a557f677d8..c065777170 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -46,7 +46,7 @@
"Sélectionner un raccourci"
"Sélectionner le dossier"
"Toutes les applications"
- "Page d\'accueil"
+ "Domicile"
"Ajouter"
"Fond d\'écran"
"Rechercher"
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 6b8d3bbdbc..04fc175474 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -45,10 +45,8 @@
"「%s」捷徑已經存在。"
"選取捷徑"
"選取資料夾"
-
-
-
-
+ "所有應用程式"
+ "主螢幕"
"新增"
"桌布"
"搜尋"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b642ead0ff..38f27c7768 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -31,7 +31,7 @@
Set wallpaper
- Wallpaper gallery
+ Wallpapers
Application is not installed on your phone.
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 327fa3a632..5f6e6f161b 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -1395,6 +1395,10 @@ public final class Launcher extends Activity
if (tag instanceof ApplicationInfo) {
// Open shortcut
final Intent intent = ((ApplicationInfo) tag).intent;
+ int[] pos = new int[2];
+ v.getLocationOnScreen(pos);
+ intent.setSourceBounds(
+ new Rect(pos[0], pos[1], pos[0]+v.getWidth(), pos[1]+v.getHeight()));
startActivitySafely(intent);
} else if (tag instanceof FolderInfo) {
handleFolderClick((FolderInfo) tag);
diff --git a/src/com/android/launcher2/LauncherProvider.java b/src/com/android/launcher2/LauncherProvider.java
index 433addbc93..c3ceefdd32 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 a930acd52f..a438d47cbc 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.