Merge "Support unbundled bookmarks. Bug #2460685"

This commit is contained in:
Romain Guy
2010-03-09 16:39:13 -08:00
committed by Android (Google) Code Review
3 changed files with 34 additions and 88 deletions

View File

@@ -1,33 +0,0 @@
#
# Copyright (C) 2008 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
LOCAL_PATH := $(my-dir)
########################
include $(CLEAR_VARS)
LOCAL_MODULE := bookmarks.xml
LOCAL_MODULE_TAGS := user
# This will install the file in /system/etc
#
LOCAL_MODULE_CLASS := ETC
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)

View File

@@ -32,8 +32,8 @@
class="com.google.android.gm.ConversationListActivityGmail"
shortcut="g" />
<bookmark
package="com.android.providers.im"
class="com.android.providers.im.LandingPage"
package="com.android.im"
class="com.android.im.app.LandingPage"
shortcut="i" />
<bookmark
package="com.android.calendar"
@@ -53,8 +53,4 @@
package="com.android.mms"
class="com.android.mms.ui.ConversationList"
shortcut="s" />
<bookmark
package="com.google.android.youtube"
class="com.google.android.youtube.HomeActivity"
shortcut="y" />
</bookmarks>

View File

@@ -23,40 +23,29 @@ import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDoneException;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteStatement;
import android.media.AudioManager;
import android.media.AudioService;
import android.net.ConnectivityManager;
import android.os.Environment;
import android.os.SystemProperties;
import android.provider.Settings;
import android.provider.Settings.Secure;
import android.speech.RecognitionService;
import android.speech.RecognizerIntent;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Config;
import android.util.Log;
import android.util.Xml;
import com.android.internal.telephony.RILConstants;
import com.android.internal.util.XmlUtils;
import com.android.internal.widget.LockPatternUtils;
import com.android.internal.widget.LockPatternView;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;
@@ -65,11 +54,6 @@ import java.util.List;
* Mostly just has a bit {@link #onCreate} to initialize the database.
*/
public class DatabaseHelper extends SQLiteOpenHelper {
/**
* Path to file containing default bookmarks, relative to ANDROID_ROOT.
*/
private static final String DEFAULT_BOOKMARKS_PATH = "etc/bookmarks.xml";
private static final String TAG = "SettingsProvider";
private static final String DATABASE_NAME = "settings.db";
@@ -158,7 +142,6 @@ public class DatabaseHelper extends SQLiteOpenHelper {
* notification vibrate to on.
*/
loadVibrateSetting(db, true);
if (Config.LOGD) Log.d(TAG, "Reset system vibrate setting");
upgradeVersion = 21;
}
@@ -735,39 +718,28 @@ public class DatabaseHelper extends SQLiteOpenHelper {
*
* @param db The database to write the values into
* @param startingIndex The zero-based position at which bookmarks in this file should begin
* @param subPath The relative path from ANDROID_ROOT to the file to read
* @param quiet If true, do no complain if the file is missing
*/
private int loadBookmarks(SQLiteDatabase db, int startingIndex, String subPath,
boolean quiet) {
FileReader bookmarksReader;
// Environment.getRootDirectory() is a fancy way of saying ANDROID_ROOT or "/system".
final File favFile = new File(Environment.getRootDirectory(), subPath);
try {
bookmarksReader = new FileReader(favFile);
} catch (FileNotFoundException e) {
if (!quiet) {
Log.e(TAG, "Couldn't find or open bookmarks file " + favFile);
}
return 0;
}
private int loadBookmarks(SQLiteDatabase db, int startingIndex) {
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ContentValues values = new ContentValues();
PackageManager packageManager = mContext.getPackageManager();
ActivityInfo info;
int i = startingIndex;
try {
XmlPullParser parser = Xml.newPullParser();
parser.setInput(bookmarksReader);
try {
XmlResourceParser parser = mContext.getResources().getXml(R.xml.bookmarks);
XmlUtils.beginDocument(parser, "bookmarks");
while (true) {
XmlUtils.nextElement(parser);
final int depth = parser.getDepth();
int type;
while (((type = parser.next()) != XmlPullParser.END_TAG ||
parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) {
if (type != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (!"bookmark".equals(name)) {
@@ -777,23 +749,36 @@ public class DatabaseHelper extends SQLiteOpenHelper {
String pkg = parser.getAttributeValue(null, "package");
String cls = parser.getAttributeValue(null, "class");
String shortcutStr = parser.getAttributeValue(null, "shortcut");
int shortcutValue = (int) shortcutStr.charAt(0);
if (TextUtils.isEmpty(shortcutStr)) {
Log.w(TAG, "Unable to get shortcut for: " + pkg + "/" + cls);
}
ActivityInfo info = null;
ComponentName cn = new ComponentName(pkg, cls);
try {
ComponentName cn = new ComponentName(pkg, cls);
info = packageManager.getActivityInfo(cn, 0);
} catch (PackageManager.NameNotFoundException e) {
String[] packages = packageManager.canonicalToCurrentPackageNames(
new String[] { pkg });
cn = new ComponentName(packages[0], cls);
try {
info = packageManager.getActivityInfo(cn, 0);
} catch (PackageManager.NameNotFoundException e1) {
Log.w(TAG, "Unable to add bookmark: " + pkg + "/" + cls, e);
}
}
if (info != null) {
intent.setComponent(cn);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
values.put(Settings.Bookmarks.INTENT, intent.toURI());
values.put(Settings.Bookmarks.INTENT, intent.toUri(0));
values.put(Settings.Bookmarks.TITLE,
info.loadLabel(packageManager).toString());
values.put(Settings.Bookmarks.SHORTCUT, shortcutValue);
db.insert("bookmarks", null, values);
i++;
} catch (PackageManager.NameNotFoundException e) {
Log.w(TAG, "Unable to add bookmark: " + pkg + "/" + cls, e);
}
}
} catch (XmlPullParserException e) {
@@ -811,7 +796,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
* @param db The database to write the values into
*/
private void loadBookmarks(SQLiteDatabase db) {
loadBookmarks(db, 0, DEFAULT_BOOKMARKS_PATH, false);
loadBookmarks(db, 0);
}
/**
@@ -890,8 +875,6 @@ public class DatabaseHelper extends SQLiteOpenHelper {
SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
+ " VALUES(?,?);");
Resources r = mContext.getResources();
loadBooleanSetting(stmt, Settings.System.DIM_SCREEN,
R.bool.def_dim_screen);
loadSetting(stmt, Settings.System.STAY_ON_WHILE_PLUGGED_IN,