最近项目上要频繁修改待机快捷方式、布局,找包名、类名、坐标各种烦呐
先找到一种稍微简单些的捷径:
1、手动在laucher桌面上按照客户要求把各个快捷方式布局好
2、导出
/data/data/com.android.launcher3/databases/launcher.db文件 (非root的手机貌似看不到,要想想办法)
3、把导出的文件放入packages/apps/Launcher3/assets/default_launcher.db
4、修改launcher3代码,编译、打包
然后安装带db的launcher看看后果,怎么样? 需要的待机快捷方式都在了吧(如果没看到效果,把launcher3数据先清除一下,再试试)
闲话少说,上代码:
commit xxxxxxxxxxxxxxxxxxx
Author: XXXXXXXXXXXXXXXXXXXXX
Date: xxxxxxxxxxxxxxxxxxx
Launcher3 默认UI界面修改(默认待机快捷方式)
Change-Id: xxxxxxxxxxxxxxxxxxxx
diff --git a/device/XXXXXX/XXXXXX/system.prop b/device/XXXXXX/XXXXXX/system.prop
index 2d2bf26..8815a35 100755
--- a/device/XXXXXX/XXXXXX/system.prop
+++ b/device/XXXXXX/XXXXXX/system.prop
@@ -66,3 +66,6 @@ ro.kernel.zio=38,108,105,16
debug.hwui.render_dirty_regions=false
ro.sf.lcd_density=240
+
+ro.sys.launcher3db.control=true
+
diff --git a/packages/apps/Launcher3/assets/default_launcher.db b/packages/apps/Launcher3/assets/default_launcher.db
new file mode 100644
index 0000000..7004f01
Binary files /dev/null and b/packages/apps/Launcher3/assets/default_launcher.db differ
diff --git a/packages/apps/Launcher3/src/com/android/launcher3/LauncherProvider.java b/packages/apps/Launcher3/src/com/android/launcher3/LauncherProvider.java
index e4237fd..80f598e 100644
--- a/packages/apps/Launcher3/src/com/android/launcher3/LauncherProvider.java
+++ b/packages/apps/Launcher3/src/com/android/launcher3/LauncherProvider.java
@@ -63,7 +63,10 @@ import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashSet;
@@ -355,12 +358,74 @@ public class LauncherProvider extends ContentProvider {
editor.putInt(DEFAULT_WORKSPACE_RESOURCE_ID, origWorkspaceResId);
}
+ //jimbo add start
+ String DEF_DB_NAME = "default_launcher.db";
+ String LAUNCHER_CONTROL_PROPERTY = "ro.sys.launcher3db.control";
+<span style="white-space:pre"> </span>
+ boolean bLoadFromDB = SystemProperties.getBoolean(LAUNCHER_CONTROL_PROPERTY, false);
+ Log.d("jimbo","loadDefaultFavoritesIfNecessary bLoadFromDB="+bLoadFromDB);
+
+ if(bLoadFromDB){
+ try {
+ //assets里的文件
+ InputStream is = getContext().getAssets().open(DEF_DB_NAME);
+
+ File dbFile = getContext().getDatabasePath(DATABASE_NAME);
+
+ inputStream2File(is, dbFile);
+ }catch (FileNotFoundException e) {
+ // file not found use default xml
+ mOpenHelper.loadFavorites(mOpenHelper.getWritableDatabase(), workspaceResId);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }else
+ //jimbo add end
+ //ori code
+ {
mOpenHelper.loadFavorites(mOpenHelper.getWritableDatabase(), workspaceResId);
+ }
+
mOpenHelper.setFlagJustLoadedOldDb();
editor.commit();
}
}
+ //jimbo add start
+ private void inputStream2File(InputStream inputStream, File file) {
+ OutputStream outputStream = null;
+ try {
+ outputStream = new FileOutputStream(file);
+
+ int read = 0;
+ byte[] bytes = new byte[1024];
+ while ((read = inputStream.read(bytes)) != -1) {
+ outputStream.write(bytes, 0, read);
+ }
+
+ Log.d(TAG,"inputStream2File copy file Done!");
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (inputStream != null) {
+ try {
+ inputStream.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ if (outputStream != null) {
+ try {
+ // outputStream.flush();
+ outputStream.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ }
+ }
+ }
+ //jimbo add end
+
public void migrateLauncher2Shortcuts() {
mOpenHelper.migrateLauncher2Shortcuts(mOpenHelper.getWritableDatabase(),
LauncherSettings.Favorites.OLD_CONTENT_URI);