diff -r bd83ceabce89 -r 5a1685599b76 fep/aknfep/src/AknFepUIInputStatePredictiveInputMiniQwertyChinesePhrase.cpp --- a/fep/aknfep/src/AknFepUIInputStatePredictiveInputMiniQwertyChinesePhrase.cpp Tue Sep 14 21:59:06 2010 +0300 +++ b/fep/aknfep/src/AknFepUIInputStatePredictiveInputMiniQwertyChinesePhrase.cpp Wed Sep 15 12:34:44 2010 +0300 @@ -127,7 +127,25 @@ fepMan->NewTextL(text); fepMan->CommitInlineEditL(); iOwner->PtiEngine()->SetPredictiveChineseChar(text); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) + + // For sogou core, the predictive is not endless, so when there + // is no predictive candidates, we should call TryCloseUiL(). + TBool noCandidates = EFalse; + if ( iPlugin.IsEnable() || iStrokePlugin.IsEnable()) + { + // Get the predictive candidates. + CDesCArrayFlat* phraseCandidates = new(ELeave) CDesCArrayFlat(1); + CleanupStack::PushL ( phraseCandidates ); + phraseCandidates->Reset(); + iOwner->PtiEngine()->GetChinesePhraseCandidatesL( *phraseCandidates ); + if ( phraseCandidates->Count() == 0 ) + { + noCandidates = ETrue; + } + CleanupStack::PopAndDestroy( phraseCandidates ); + } + // If no candidates, call TryCloseUiL(). + if ( fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull) || noCandidates ) { fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); iOwner->FepMan()->TryCloseUiL(); @@ -209,4 +227,44 @@ break; } } + +void TAknFepInputStatePredictiveInputMiniQwertyChinesePhrase::SubmitTextL( const TDesC& aText ) + { + MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); + if ( aText.Length() ) + { + fepMan->NewTextL( aText ); + fepMan->CommitInlineEditL(); + iOwner->PtiEngine()->SetPredictiveChineseChar( aText ); + + // For sogou core, the predictive is not endless, so when there + // is no predictive candidates, we should call TryCloseUiL(). + TBool noCandidates = EFalse; + + if ( iPlugin.IsEnable() || iStrokePlugin.IsEnable()) + { + // Get the predictive candidates. + CDesCArrayFlat* phraseCandidates = new(ELeave) CDesCArrayFlat(1); + CleanupStack::PushL ( phraseCandidates ); + phraseCandidates->Reset(); + iOwner->PtiEngine()->GetChinesePhraseCandidatesL( *phraseCandidates ); + if ( phraseCandidates->Count() == 0 ) + { + noCandidates = ETrue; + } + CleanupStack::PopAndDestroy( phraseCandidates ); + } + + if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull) || noCandidates ) + { + fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); + iOwner->FepMan()->TryCloseUiL(); + } + else + { + iOwner->ChangeState( EPredictiveCandidate ); + } + } + } + // End of file