Android5.0原始碼開發之launcher切換語言後Folder和ShortcutT沒有切換到當前語言
一、桌面快捷方式ShortcutT
app的快捷方式一旦生成,info.title都會存到資料庫,檢測到configuration語言改變時,launcher會重新loadworkspace,這時會從資料庫查詢info = getShortcutInfo(c, context, iconTypeIndex, iconPackageIndex, iconResourceIndex, iconIndex, titleIndex);我們這時可以考慮重新查詢快捷方式對應的laber,具體方法如下:
LauncherModel.java
新增方法
//huageshi start
private CharSequence getShortcutTitle(PackageManager manager, Intent intent) {
ComponentName componentName = intent.getComponent();
if (componentName == null) {
return null;
}
try {
PackageInfo pi = manager.getPackageInfo( componentName.getPackageName(), 0);
if (!pi.applicationInfo.enabled) {
return null;
}
} catch (NameNotFoundException e) {
Log.d(TAG, "getPackInfo failed for package " + componentName.getPackageName());
}
ResolveInfo resolveInfo = manager.resolveActivity(intent, 0);
if (resolveInfo != null) {
return resolveInfo.activityInfo.loadLabel(manager);//重新查詢laber
}
return null;
}
//huageshi end
loadWorkspace()方法中新增
----------
synchronized (sBgLock) {
---------
while (!mStopped && c.moveToNext()) {
AtomicBoolean deleteOnInvalidPlacement = new AtomicBoolean(false);
try {
---------
case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT:
---------
} else {
info = getShortcutInfo(c, context, iconTypeIndex,
iconPackageIndex, iconResourceIndex, iconIndex,
titleIndex);
//huageshi start
CharSequence title = getShortcutTitle(manager, intent);
if(title != null ){
info.title = title;
}
//huageshi end
二、資料夾Folder
由於資料夾的title不能通過packageinfo查詢,並且folder都是建立或修改後,title都存入了資料庫,每次launcher載入的時候都是folderInfo.title = c.getString(titleIndex);查詢,又由於定製的folder資料夾沒幾個,我們可以考慮在l切換語言後oad的時候去判斷folder的title是否是當前語言,然後再重新賦值,具體做法
FolderIcon.java
static FolderIcon fromXml(int resId, Launcher launcher, ViewGroup group,
FolderInfo folderInfo, IconCache iconCache) {
-----
if(folderInfo.title.equals("")){
icon.mFolderName.setText(R.string.folder_hint_text);
} else {
if(Locale.getDefault().getLanguage().equals("en") && folderInfo.title.equals("實用工具")){
icon.mFolderName.setText("ToolBox");
}else{
icon.mFolderName.setText(folderInfo.title);
}
}
當然,如果再人為的新增資料夾或重新命名其他名字,切換語言是不會更新的,因為沒有對應的其他語言的字串