zoukankan      html  css  js  c++  java
  • Browser默认书签加载过程

    Browser配置默认书签——string.xml中<string-array name="bookmarks" translatable="false">下添加书签item.

     <!-- Bookmarks -->
        <string-array name="bookmarks" translatable="false">
            <item>百度</item>
            <item>http://m.baidu.com/?from=1000235a</item>
            <item>新浪</item>
            <item>http://3g.sina.cn</item>
            <item>腾讯网</item>
            <item>http://3g.qq.com</item>
            <item>搜狐</item>
            <item>http://m.sohu.com/?_trans_=000011_tysj_sysq</item> 
            <item>网易</item>
            <item>http://3g.163.com/</item>         
        </string-array>

    加载过程——BrowserProvider2创建数据库,初始化table数据时,插入书签数据。

    <application
            android:name="Browser"
            android:backupAgent=".BrowserBackupAgent"
            android:hardwareAccelerated="true"
            android:icon="@mipmap/ic_launcher_browser"
            android:label="@string/application_name"
            android:taskAffinity="android.task.browser"
            android:theme="@style/Theme.Setting.Light" >
            <provider
                android:name=".provider.BrowserProvider2"
                android:authorities="com.android.browser;browser"
                android:exported="true"
                android:multiprocess="false"
                android:readPermission="com.android.browser.permission.READ_HISTORY_BOOKMARKS"
                android:writePermission="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS" >
                <path-permission
                    android:path="/bookmarks/search_suggest_query"
                    android:readPermission="android.permission.GLOBAL_SEARCH" />
            </provider>
    public class BrowserProvider2 extends SQLiteContentProvider
    
    public abstract class SQLiteContentProvider extends ContentProvider

    public class BrowserProvider2 extends SQLiteContentProvider {
      final class DatabaseHelper extends SQLiteOpenHelper {
         static final String DATABASE_NAME = "browser2.db";
            static final int DATABASE_VERSION = 32;
            public DatabaseHelper(Context context) {
                super(context, DATABASE_NAME, null, DATABASE_VERSION);
                setWriteAheadLoggingEnabled(true);
            }
    
            @Override
            public void onCreate(SQLiteDatabase db) {
                db.execSQL("CREATE TABLE " + TABLE_BOOKMARKS + "(" +
                        Bookmarks._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
                        Bookmarks.TITLE + " TEXT," +
                        Bookmarks.URL + " TEXT," +
                        Bookmarks.IS_FOLDER + " INTEGER NOT NULL DEFAULT 0," +
                        Bookmarks.PARENT + " INTEGER," +
                        Bookmarks.POSITION + " INTEGER NOT NULL," +
                        Bookmarks.INSERT_AFTER + " INTEGER," +
                        Bookmarks.IS_DELETED + " INTEGER NOT NULL DEFAULT 0," +
                        Bookmarks.ACCOUNT_NAME + " TEXT," +
                        Bookmarks.ACCOUNT_TYPE + " TEXT," +
                        Bookmarks.SOURCE_ID + " TEXT," +
                        Bookmarks.VERSION + " INTEGER NOT NULL DEFAULT 1," +
                        Bookmarks.DATE_CREATED + " INTEGER," +
                        Bookmarks.DATE_MODIFIED + " INTEGER," +
                        Bookmarks.DIRTY + " INTEGER NOT NULL DEFAULT 0," +
                        BrowserUtils.Bookmarks_VISITES + " INTEGER NOT NULL DEFAULT 0," +
                        BrowserUtils.Bookmarks_DATE_LAST_VISITED + " INTEGER," +
                        Bookmarks.SYNC1 + " TEXT," +
                        Bookmarks.SYNC2 + " TEXT," +
                        Bookmarks.SYNC3 + " TEXT," +
                        Bookmarks.SYNC4 + " TEXT," +
                        Bookmarks.SYNC5 + " TEXT" +
                        ");");
    
                // TODO indices
    
                db.execSQL("CREATE TABLE " + TABLE_HISTORY + "(" +
                        History._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
                        History.TITLE + " TEXT," +
                        History.URL + " TEXT NOT NULL," +
                        History.DATE_CREATED + " INTEGER," +
                        History.DATE_LAST_VISITED + " INTEGER," +
                        History.VISITS + " INTEGER NOT NULL DEFAULT 0," +
                        History.USER_ENTERED + " INTEGER" +
                        ");");
    
                db.execSQL("CREATE TABLE " + TABLE_IMAGES + " (" +
                        Images.URL + " TEXT UNIQUE NOT NULL," +
                        Images.FAVICON + " BLOB," +
                        Images.THUMBNAIL + " BLOB," +
                        Images.TOUCH_ICON + " BLOB" +
                        ");");
                db.execSQL("CREATE INDEX imagesUrlIndex ON " + TABLE_IMAGES +
                        "(" + Images.URL + ")");
    
                db.execSQL("CREATE TABLE " + TABLE_SEARCHES + " (" +
                        Searches._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
                        Searches.SEARCH + " TEXT," +
                        Searches.DATE + " LONG" +
                        ");");
    
                db.execSQL("CREATE TABLE " + TABLE_SETTINGS + " (" +
                        Settings.KEY + " TEXT PRIMARY KEY," +
                        Settings.VALUE + " TEXT NOT NULL" +
                        ");");
    
                createProperties(db);
                createAccountsView(db);
                createThumbnails(db);
    
                mSyncHelper.createDatabase(db);
    
                if (!importFromBrowserProvider(db)) {
                    createDefaultBookmarks(db);//默认书签插入数据库
                }
    
                enableSync(db);
                createOmniboxSuggestions(db);
            }
    private void createDefaultBookmarks(SQLiteDatabase db) {
                ContentValues values = new ContentValues();
                // TODO figure out how to deal with localization for the defaults
    
                // Bookmarks folder
                values.put(Bookmarks._ID, FIXED_ID_ROOT);
                values.put(ChromeSyncColumns.SERVER_UNIQUE, ChromeSyncColumns.FOLDER_NAME_BOOKMARKS);
                values.put(Bookmarks.TITLE, "Bookmarks");
                values.putNull(Bookmarks.PARENT);
                values.put(Bookmarks.POSITION, 0);
                values.put(Bookmarks.IS_FOLDER, true);
                values.put(Bookmarks.DIRTY, true);
                db.insertOrThrow(TABLE_BOOKMARKS, null, values);
    
                addDefaultBookmarks(db, FIXED_ID_ROOT);
            }
    
            private void addDefaultBookmarks(SQLiteDatabase db, long parentId) {
                Resources res = getContext().getResources();
                final CharSequence[] bookmarks = res.getTextArray(
                        R.array.bookmarks);
                int size = bookmarks.length;
                Log.i("antoon", TAG+", addDefaultBookmarks, size = "+size);
                TypedArray preloads = res.obtainTypedArray(R.array.bookmark_preloads);
                try {
                    String parent = Long.toString(parentId);
                    String now = Long.toString(System.currentTimeMillis());
                    for (int i = 0; i < size; i = i + 2) {
                        CharSequence bookmarkDestination = replaceSystemPropertyInString(getContext(),
                                bookmarks[i + 1]);
                        Log.d("antoon", TAG+", "+bookmarks[i]+"--"+bookmarkDestination);
                        db.execSQL("INSERT INTO bookmarks (" +
                                Bookmarks.TITLE + ", " +
                                Bookmarks.URL + ", " +
                                Bookmarks.IS_FOLDER + "," +
                                Bookmarks.PARENT + "," +
                                Bookmarks.POSITION + "," +
                                Bookmarks.DATE_CREATED + ","+
                                BrowserUtils.Bookmarks_VISITES + "," +
                                BrowserUtils.Bookmarks_DATE_LAST_VISITED +
                            ") VALUES (" +
                                "'" + bookmarks[i] + "', " +
                                "'" + bookmarkDestination + "', " +
                                "0," +
                                parent + "," +
                                Integer.toString(i) + "," +
                                now + "," +
                                "0," +
                                now +
                                ");");
                        /*插入res/raw/中的图片与书签匹配显示,注释掉避免图片不匹配,使用默认图片。
                        int faviconId = preloads.getResourceId(i, 0);
                        int thumbId = preloads.getResourceId(i + 1, 0);
                        byte[] thumb = null, favicon = null;
                        try {
                            thumb = readRaw(res, thumbId);
                        } catch (IOException e) {
                        }
                        try {
                            favicon = readRaw(res, faviconId);
                        } catch (IOException e) {
                        }
                        Log.i("antoon", TAG+", faviconId = "+faviconId+", thumbId = "+thumbId);
                        Log.i("antoon", TAG+", thumb = "+thumb+", favicon = "+favicon);
                        
                        if (thumb != null || favicon != null) {
                            ContentValues imageValues = new ContentValues();
                            imageValues.put(Images.URL, bookmarkDestination.toString());
                            if (favicon != null) {
                                imageValues.put(Images.FAVICON, favicon);
                            }
                            if (thumb != null) {
                                imageValues.put(Images.THUMBNAIL, thumb);
                            }
                            db.insert(TABLE_IMAGES, Images.FAVICON, imageValues);
                        }
                         */
                    }
                } catch (ArrayIndexOutOfBoundsException e) {
                } finally {
                    preloads.recycle();
                }
            }
    View Code
    
    
    
    

    需要了解一下ContentProvider加载流程。参考 http://www.cnblogs.com/linjiqin/archive/2011/05/28/2061396.html

  • 相关阅读:
    面向对象与面向过程
    mul 指令
    Debug 的使用
    子域名扫描器
    div 指令
    C Primer Plus学习笔记(十三)- 结构和其他数据形式
    C Primer Plus学习笔记(十一)- 存储类别、链接和内存管理
    BugkuCTF WEB
    BugkuCTF 逆向
    C Primer Plus学习笔记(十)- 字符串和字符串函数
  • 原文地址:https://www.cnblogs.com/antoon/p/4505213.html
Copyright © 2011-2022 走看看