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

当然,如果再人为的添加文件夹或重命名其他名字,切换语言是不会更新的,因为没有对应的其他语言的字符串

你可能感兴趣的:(MTK二次开发)