ECode CTextServicesManagerService::BuildSpellCheckerMapLocked( IContext* context, List<AutoPtr<ISpellCheckerInfo> >& list, HashMap<String, AutoPtr<ISpellCheckerInfo> >& map, TextServicesSettings* settings) { // TODO return NOERROR; list.Clear(); map.Clear(); const AutoPtr<IPackageManager> pm; context->GetPackageManager((IPackageManager**)&pm); assert(pm != NULL); AutoPtr<IObjectContainer> services; AutoPtr<IIntent> intent; Int32 currentUserId; FAIL_RETURN(CIntent::New(String("android.service.textservice.SpellCheckerService"), (IIntent**)&intent)); settings->GetCurrentUserId(¤tUserId); FAIL_RETURN(pm->QueryIntentServicesAsUser(intent, IPackageManager::GET_META_DATA, currentUserId, (IObjectContainer**)&services)); if (services != NULL) { AutoPtr<IObjectEnumerator> enumerator; services->GetObjectEnumerator((IObjectEnumerator**)&enumerator); Boolean hasNext = FALSE; while(enumerator->MoveNext(&hasNext), hasNext) { AutoPtr<IResolveInfo> ri; AutoPtr<IServiceInfo> si; enumerator->Current((IInterface**)&ri); assert(ri != NULL); ri->GetServiceInfo((IServiceInfo**)&si); String packageName, name, permission; assert(si != NULL); si->GetPackageName(&packageName); si->GetName(&name); si->GetPermission(&permission); AutoPtr<IComponentName> compName; CComponentName::New(packageName, name, (IComponentName**)&compName); String strCompName; compName->ToString(&strCompName); if (!Elastos::Droid::Manifest::Permission::BIND_TEXT_SERVICE.Equals(permission)) { Slogger::W(TAG, "Skipping text service %s : it does not require the permission: %s ", strCompName.string(), Elastos::Droid::Manifest::Permission::BIND_TEXT_SERVICE.string()); continue; } if (DBG) Slogger::D(TAG, "Add: %s", strCompName.string()); //try { AutoPtr<ISpellCheckerInfo> sci; // CSpellCheckerInfo::New(context, ri, (ISpellCheckerInfo**)&sci); assert(0); Int32 subtypeCount; sci->GetSubtypeCount(&subtypeCount); if (subtypeCount <= 0) { Slogger::W(TAG, "Skipping text service %s : it does not contain subtypes.", strCompName.string()); continue; } list.PushBack(sci); String sciId; sci->GetId(&sciId); map[sciId] = sci; // } catch (XmlPullParserException e) { // Slog.w(TAG, "Unable to load the spell checker " + compName, e); // } catch (IOException e) { // Slog.w(TAG, "Unable to load the spell checker " + compName, e); // } } if (DBG) { Slogger::D(TAG, "buildSpellCheckerMapLocked: %d, %d", list.GetSize(), map.GetSize()); } } return NOERROR; }