在前面我的blog中,我已經說過了,Launcher所有的案頭項資料是儲存在launcher.db/favorites表中
在 Launcher啟動時loadeworkspace函數中會從資料庫中查詢所有的資料並顯示出來,這個案頭項資料載入過程在我的blog Launcher——啟動過程詳解中有比較詳細的描述,這篇blog,我著重講述Launcher案頭項的添加,變更和刪除,下面就進入主題
1.Launcher案頭項的添加:從使用者操作的角度來看,我們有兩種方式來添加案頭項
--1.從all app view中拖到案頭,從下面的呼叫堆疊知道最後通過LauncherProvider.insert把拖過來的案頭項添加到了案頭,在拖放結束時執行(launcher2.Workspace.onDrop).
at com.android.launcher2.LauncherProvider.insert(LauncherProvider.java:129)
at android.content.ContentProvider$Transport.insert(ContentProvider.java:174)
at android.content.ContentResolver.insert(ContentResolver.java:587)
at com.android.launcher2.LauncherModel.addItemToDatabase(LauncherModel.java:242)
at com.android.launcher2.LauncherModel.addOrMoveItemInDatabase(LauncherModel.java:133)
at com.android.launcher2.Workspace.onDropExternal(Workspace.java:1203)
at com.android.launcher2.Workspace.onDropExternal(Workspace.java:1165)
at com.android.launcher2.Workspace.onDrop(Workspace.java:1125)
--2. 通過長按案頭開啟一個dialog來添加案頭項,通過對象框添加最後調用同樣的方法LauncherProvider.insert去實現操作,只是前面 的發起動作不同,它是在選擇應用的activity結束後回到Launcher.onActivityResult發起調用的。
at com.android.launcher2.LauncherProvider.insert(LauncherProvider.java:129)
at android.content.ContentProvider$Transport.insert(ContentProvider.java:174)
at android.content.ContentResolver.insert(ContentResolver.java:587)
at com.android.launcher2.LauncherModel.addItemToDatabase(LauncherModel.java:242)
at com.android.launcher2.LauncherModel.addOrMoveItemInDatabase(LauncherModel.java:133)
at com.android.launcher2.Workspace.onDropExternal(Workspace.java:1203)
at com.android.launcher2.Workspace.addApplicationShortcut(Workspace.java:1117)
at com.android.launcher2.Launcher.completeAddApplication(Launcher.java:931)
at com.android.launcher2.Launcher.onActivityResult(Launcher.java:579)
2.Launcher案頭項的變更:Launcher案頭項的變更只有我們拖動案頭項,改變案頭項的位置,當結束拖放時,會通過調用LauncherProvider.update函數來修改launcher.db/favorites表中的記錄來變更案頭項的位置資訊。
at com.android.launcher2.LauncherProvider.update(LauncherProvider.java:185)
at android.content.ContentProvider$Transport.update(ContentProvider.java:204)
at android.content.ContentResolver.update(ContentResolver.java:707)
at com.android.launcher2.LauncherModel.moveItemInDatabase(LauncherModel.java:159)
at com.android.launcher2.Workspace.onDrop(Workspace.java:1144)
3.Launcher案頭項的刪除:把案頭項拖動到垃圾箱時執行,不多說什麼了,給個呼叫堆疊一看就明白,DeleteZone就是垃圾箱對象對應的構造類
at com.android.launcher2.LauncherProvider.delete(LauncherProvider.java:168)
at android.content.ContentProvider$Transport.delete(ContentProvider.java:198)
at android.content.ContentResolver.delete(ContentResolver.java:675)
at com.android.launcher2.LauncherModel.deleteItemFromDatabase(LauncherModel.java:271)
at com.android.launcher2.DeleteZone.onDrop(DeleteZone.java:123)