1. 程式人生 > >Android5.0原始碼開發之launcher切換語言後Folder和ShortcutT沒有切換到當前語言

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);
}
        }

當然,如果再人為的新增資料夾或重新命名其他名字,切換語言是不會更新的,因為沒有對應的其他語言的字串