Showing preview only (3,311K chars total). Download the full file or copy to clipboard to get everything.
Repository: brandall76/Saiy-PS
Branch: master
Commit: 5047da43a39e
Files: 501
Total size: 3.0 MB
Directory structure:
gitextract_ztedqro8/
├── .gitignore
├── LICENSE
├── README.md
├── app/
│ ├── .gitignore
│ ├── assets.xml
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── ai/
│ │ └── saiy/
│ │ └── android/
│ │ └── ApplicationTest.java
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── assets/
│ │ │ └── sync/
│ │ │ ├── assets.lst
│ │ │ ├── basic.dic
│ │ │ ├── basic.dic.md5
│ │ │ ├── en-us-ptm/
│ │ │ │ ├── README
│ │ │ │ ├── README.md5
│ │ │ │ ├── feat.params
│ │ │ │ ├── feat.params.md5
│ │ │ │ ├── mdef
│ │ │ │ ├── mdef.md5
│ │ │ │ ├── means
│ │ │ │ ├── means.md5
│ │ │ │ ├── noisedict
│ │ │ │ ├── noisedict.md5
│ │ │ │ ├── sendump
│ │ │ │ ├── sendump.md5
│ │ │ │ ├── transition_matrices
│ │ │ │ ├── transition_matrices.md5
│ │ │ │ ├── variances
│ │ │ │ └── variances.md5
│ │ │ ├── hotwords.txt
│ │ │ └── hotwords.txt.md5
│ │ ├── java/
│ │ │ └── ai/
│ │ │ └── saiy/
│ │ │ └── android/
│ │ │ ├── accessibility/
│ │ │ │ └── SaiyAccessibilityService.java
│ │ │ ├── algorithms/
│ │ │ │ ├── Algorithm.java
│ │ │ │ ├── distance/
│ │ │ │ │ ├── EditDistance.java
│ │ │ │ │ ├── jarowinkler/
│ │ │ │ │ │ ├── JaroWinklerDistance.java
│ │ │ │ │ │ └── JaroWinklerHelper.java
│ │ │ │ │ └── levenshtein/
│ │ │ │ │ ├── LevenshteinDistance.java
│ │ │ │ │ └── LevenshteinHelper.java
│ │ │ │ ├── doublemetaphone/
│ │ │ │ │ └── DoubleMetaphoneHelper.java
│ │ │ │ ├── fuzzy/
│ │ │ │ │ └── FuzzyHelper.java
│ │ │ │ ├── metaphone/
│ │ │ │ │ └── MetaphoneHelper.java
│ │ │ │ ├── mongeelkan/
│ │ │ │ │ └── MongeElkanHelper.java
│ │ │ │ ├── needlemanwunch/
│ │ │ │ │ ├── NeedlemanWunschHelper.java
│ │ │ │ │ └── simmetrics/
│ │ │ │ │ └── NeedlemanWunch.java
│ │ │ │ ├── regex/
│ │ │ │ │ ├── ContainsHelper.java
│ │ │ │ │ ├── CustomHelper.java
│ │ │ │ │ ├── EndsWithHelper.java
│ │ │ │ │ └── StartsWithHelper.java
│ │ │ │ └── soundex/
│ │ │ │ └── SoundexHelper.java
│ │ │ ├── api/
│ │ │ │ ├── SaiyDefaults.java
│ │ │ │ └── helper/
│ │ │ │ ├── BlackList.java
│ │ │ │ ├── BlackListHelper.java
│ │ │ │ ├── Callback.java
│ │ │ │ ├── CallbackType.java
│ │ │ │ └── Validation.java
│ │ │ ├── applications/
│ │ │ │ ├── Install.java
│ │ │ │ ├── InstallAmazon.java
│ │ │ │ ├── InstallPlayStore.java
│ │ │ │ ├── Installed.java
│ │ │ │ └── UtilsApplication.java
│ │ │ ├── audio/
│ │ │ │ ├── AudioCompression.java
│ │ │ │ ├── AudioParameters.java
│ │ │ │ ├── IMic.java
│ │ │ │ ├── RecognitionMic.java
│ │ │ │ ├── SaiyAudio.java
│ │ │ │ ├── SaiyAudioTrack.java
│ │ │ │ ├── SaiyRecorder.java
│ │ │ │ ├── SaiySoundPool.java
│ │ │ │ └── pause/
│ │ │ │ ├── PauseDetector.java
│ │ │ │ └── PauseListener.java
│ │ │ ├── broadcast/
│ │ │ │ ├── BRBoot.java
│ │ │ │ └── BRRemote.java
│ │ │ ├── cache/
│ │ │ │ └── speech/
│ │ │ │ ├── IAudioCompression.java
│ │ │ │ ├── SpeechCachePrepare.java
│ │ │ │ └── SpeechCacheResult.java
│ │ │ ├── cognitive/
│ │ │ │ ├── emotion/
│ │ │ │ │ └── provider/
│ │ │ │ │ └── beyondverbal/
│ │ │ │ │ ├── AnalysisResult.java
│ │ │ │ │ ├── AnalysisResultHelper.java
│ │ │ │ │ ├── BeyondVerbal.java
│ │ │ │ │ ├── analysis/
│ │ │ │ │ │ ├── Analysis.java
│ │ │ │ │ │ ├── AnalysisSummary.java
│ │ │ │ │ │ ├── Arousal.java
│ │ │ │ │ │ ├── AudioQuality.java
│ │ │ │ │ │ ├── Composite.java
│ │ │ │ │ │ ├── Emotions.java
│ │ │ │ │ │ ├── Gender.java
│ │ │ │ │ │ ├── Group11.java
│ │ │ │ │ │ ├── Group21.java
│ │ │ │ │ │ ├── Group7.java
│ │ │ │ │ │ ├── Mood.java
│ │ │ │ │ │ ├── Primary.java
│ │ │ │ │ │ ├── Result.java
│ │ │ │ │ │ ├── Secondary.java
│ │ │ │ │ │ ├── Segment.java
│ │ │ │ │ │ ├── Summary.java
│ │ │ │ │ │ ├── Temper.java
│ │ │ │ │ │ └── Valence.java
│ │ │ │ │ ├── audio/
│ │ │ │ │ │ ├── AudioConfig.java
│ │ │ │ │ │ └── AudioType.java
│ │ │ │ │ ├── containers/
│ │ │ │ │ │ ├── BVCredentials.java
│ │ │ │ │ │ ├── StartRequestBody.java
│ │ │ │ │ │ └── StartResponse.java
│ │ │ │ │ ├── http/
│ │ │ │ │ │ ├── BVAuthRequest.java
│ │ │ │ │ │ ├── BVEmotionAnalysis.java
│ │ │ │ │ │ ├── BVSendFile.java
│ │ │ │ │ │ ├── BVStartRequest.java
│ │ │ │ │ │ └── BVStreamAudio.java
│ │ │ │ │ ├── language/
│ │ │ │ │ │ └── SupportedLanguageBV.java
│ │ │ │ │ └── user/
│ │ │ │ │ └── MetaData.java
│ │ │ │ ├── identity/
│ │ │ │ │ └── provider/
│ │ │ │ │ └── microsoft/
│ │ │ │ │ ├── Speaker.java
│ │ │ │ │ ├── SpeakerEnrollment.java
│ │ │ │ │ ├── SpeakerIdentification.java
│ │ │ │ │ ├── containers/
│ │ │ │ │ │ ├── EnrollmentID.java
│ │ │ │ │ │ ├── OperationStatus.java
│ │ │ │ │ │ ├── ProcessingResult.java
│ │ │ │ │ │ ├── ProfileItem.java
│ │ │ │ │ │ └── ProfileList.java
│ │ │ │ │ └── http/
│ │ │ │ │ ├── CreateIDEnrollment.java
│ │ │ │ │ ├── CreateIDProfile.java
│ │ │ │ │ ├── DeleteIDProfile.java
│ │ │ │ │ ├── FetchIDOperation.java
│ │ │ │ │ ├── FetchIDProfile.java
│ │ │ │ │ ├── ListIDProfiles.java
│ │ │ │ │ └── ValidateID.java
│ │ │ │ ├── knowledge/
│ │ │ │ │ └── provider/
│ │ │ │ │ └── wolframalpha/
│ │ │ │ │ ├── WolframAlphaCognitive.java
│ │ │ │ │ ├── parse/
│ │ │ │ │ │ ├── Alternative.java
│ │ │ │ │ │ ├── Assumption.java
│ │ │ │ │ │ ├── Assumptions.java
│ │ │ │ │ │ ├── Definition.java
│ │ │ │ │ │ ├── Definitions.java
│ │ │ │ │ │ ├── Info.java
│ │ │ │ │ │ ├── Infos.java
│ │ │ │ │ │ ├── Link.java
│ │ │ │ │ │ ├── Pod.java
│ │ │ │ │ │ ├── QueryResult.java
│ │ │ │ │ │ ├── Reinterpret.java
│ │ │ │ │ │ ├── Source.java
│ │ │ │ │ │ ├── Sources.java
│ │ │ │ │ │ ├── SpellCheck.java
│ │ │ │ │ │ ├── State.java
│ │ │ │ │ │ ├── StateList.java
│ │ │ │ │ │ ├── States.java
│ │ │ │ │ │ ├── SubPod.java
│ │ │ │ │ │ ├── Unit.java
│ │ │ │ │ │ ├── Units.java
│ │ │ │ │ │ ├── ValidateQueryResult.java
│ │ │ │ │ │ ├── Value.java
│ │ │ │ │ │ └── Warnings.java
│ │ │ │ │ └── resolve/
│ │ │ │ │ ├── ResolveWolframAlpha.java
│ │ │ │ │ ├── WolframAlphaRequest.java
│ │ │ │ │ └── WolframAlphaResponse.java
│ │ │ │ └── motion/
│ │ │ │ └── provider/
│ │ │ │ └── google/
│ │ │ │ ├── Motion.java
│ │ │ │ ├── MotionHelper.java
│ │ │ │ ├── MotionIntentService.java
│ │ │ │ └── MotionRecognition.java
│ │ │ ├── command/
│ │ │ │ ├── battery/
│ │ │ │ │ ├── Battery.java
│ │ │ │ │ ├── BatteryInformation.java
│ │ │ │ │ ├── Battery_en.java
│ │ │ │ │ ├── CommandBattery.java
│ │ │ │ │ ├── CommandBatteryLocal.java
│ │ │ │ │ └── CommandBatteryValues.java
│ │ │ │ ├── cancel/
│ │ │ │ │ ├── Cancel.java
│ │ │ │ │ ├── CancelPartial.java
│ │ │ │ │ └── Cancel_en.java
│ │ │ │ ├── clipboard/
│ │ │ │ │ └── ClipboardHelper.java
│ │ │ │ ├── custom/
│ │ │ │ │ └── CommandCustom.java
│ │ │ │ ├── emotion/
│ │ │ │ │ ├── CommandEmotion.java
│ │ │ │ │ ├── Emotion.java
│ │ │ │ │ └── Emotion_en.java
│ │ │ │ ├── helper/
│ │ │ │ │ ├── CC.java
│ │ │ │ │ └── CommandRequest.java
│ │ │ │ ├── hotword/
│ │ │ │ │ ├── Hotword.java
│ │ │ │ │ └── Hotword_en.java
│ │ │ │ ├── pardon/
│ │ │ │ │ ├── Pardon.java
│ │ │ │ │ └── Pardon_en.java
│ │ │ │ ├── songrecognition/
│ │ │ │ │ ├── CommandSongRecognition.java
│ │ │ │ │ ├── SongRecognition.java
│ │ │ │ │ └── SongRecognition_en.java
│ │ │ │ ├── spell/
│ │ │ │ │ ├── CommandSpell.java
│ │ │ │ │ ├── CommandSpellLocal.java
│ │ │ │ │ ├── CommandSpellValues.java
│ │ │ │ │ ├── Spell.java
│ │ │ │ │ └── Spell_en.java
│ │ │ │ ├── tasker/
│ │ │ │ │ ├── CommandTasker.java
│ │ │ │ │ ├── CommandTaskerLocal.java
│ │ │ │ │ ├── CommandTaskerValues.java
│ │ │ │ │ ├── Tasker.java
│ │ │ │ │ └── Tasker_en.java
│ │ │ │ ├── translate/
│ │ │ │ │ ├── CommandTranslate.java
│ │ │ │ │ ├── CommandTranslateLocal.java
│ │ │ │ │ ├── CommandTranslateValues.java
│ │ │ │ │ ├── Translate.java
│ │ │ │ │ ├── TranslatePartial.java
│ │ │ │ │ ├── Translate_en.java
│ │ │ │ │ └── provider/
│ │ │ │ │ ├── TranslationProvider.java
│ │ │ │ │ ├── bing/
│ │ │ │ │ │ ├── BingCredentials.java
│ │ │ │ │ │ ├── BingOAuth.java
│ │ │ │ │ │ ├── BingTranslate.java
│ │ │ │ │ │ ├── BingTranslateAPI.java
│ │ │ │ │ │ └── TranslationLanguageBing.java
│ │ │ │ │ └── google/
│ │ │ │ │ ├── GoogleTranslate.java
│ │ │ │ │ ├── GoogleTranslateAPI.java
│ │ │ │ │ └── TranslationLanguageGoogle.java
│ │ │ │ ├── unknown/
│ │ │ │ │ └── Unknown.java
│ │ │ │ ├── username/
│ │ │ │ │ ├── CommandUserName.java
│ │ │ │ │ ├── CommandUserNameLocal.java
│ │ │ │ │ ├── CommandUserNameValues.java
│ │ │ │ │ ├── UserName.java
│ │ │ │ │ └── UserName_en.java
│ │ │ │ ├── vocalrecognition/
│ │ │ │ │ ├── CommandVocalRecognition.java
│ │ │ │ │ ├── VocalRecognition.java
│ │ │ │ │ └── VocalRecognition_en.java
│ │ │ │ └── wolframalpha/
│ │ │ │ ├── CommandWolframAlpha.java
│ │ │ │ ├── CommandWolframAlphaLocal.java
│ │ │ │ ├── CommandWolframAlphaValues.java
│ │ │ │ ├── WolframAlpha.java
│ │ │ │ └── WolframAlpha_en.java
│ │ │ ├── configuration/
│ │ │ │ ├── APIAIConfiguration.java
│ │ │ │ ├── BeyondVerbalConfiguration.java
│ │ │ │ ├── BluemixConfiguration.java
│ │ │ │ ├── GoogleConfiguration.java
│ │ │ │ ├── MicrosoftConfiguration.java
│ │ │ │ ├── NuanceConfiguration.java
│ │ │ │ ├── WitConfiguration.java
│ │ │ │ └── WolframConfiguration.java
│ │ │ ├── custom/
│ │ │ │ ├── CCC.java
│ │ │ │ ├── Custom.java
│ │ │ │ ├── CustomCommand.java
│ │ │ │ ├── CustomCommandContainer.java
│ │ │ │ ├── CustomCommandHelper.java
│ │ │ │ ├── CustomHelper.java
│ │ │ │ ├── CustomHelperHolder.java
│ │ │ │ └── CustomResolver.java
│ │ │ ├── database/
│ │ │ │ ├── DBCustomCommand.java
│ │ │ │ ├── DBSpeech.java
│ │ │ │ └── callable/
│ │ │ │ └── DBCustomCommandCallable.java
│ │ │ ├── defaults/
│ │ │ │ ├── ApplicationDefaults.java
│ │ │ │ └── songrecognition/
│ │ │ │ ├── SongRecognitionChooser.java
│ │ │ │ └── SongRecognitionProvider.java
│ │ │ ├── device/
│ │ │ │ ├── DeviceInfo.java
│ │ │ │ └── UtilsDevice.java
│ │ │ ├── error/
│ │ │ │ ├── Issue.java
│ │ │ │ └── IssueContent.java
│ │ │ ├── files/
│ │ │ │ └── FileCreator.java
│ │ │ ├── intent/
│ │ │ │ ├── ExecuteIntent.java
│ │ │ │ └── IntentConstants.java
│ │ │ ├── localisation/
│ │ │ │ ├── SaiyResources.java
│ │ │ │ ├── SaiyResourcesHelper.java
│ │ │ │ └── SupportedLanguage.java
│ │ │ ├── memory/
│ │ │ │ ├── Memory.java
│ │ │ │ ├── MemoryHelper.java
│ │ │ │ └── MemoryPrepare.java
│ │ │ ├── nlu/
│ │ │ │ ├── NLUCoerce.java
│ │ │ │ ├── NLUConstants.java
│ │ │ │ ├── apiai/
│ │ │ │ │ ├── NLUAPIAI.java
│ │ │ │ │ ├── NLUAPIAIHelper.java
│ │ │ │ │ ├── RemoteAPIAI.java
│ │ │ │ │ └── ResolveAPIAI.java
│ │ │ │ ├── bluemix/
│ │ │ │ │ ├── Alternative.java
│ │ │ │ │ ├── NLUBluemix.java
│ │ │ │ │ ├── ResolveBluemix.java
│ │ │ │ │ └── Result.java
│ │ │ │ ├── local/
│ │ │ │ │ ├── AlgorithmicContainer.java
│ │ │ │ │ ├── AlgorithmicResolver.java
│ │ │ │ │ ├── FrequencyAnalysis.java
│ │ │ │ │ ├── InitStrings.java
│ │ │ │ │ ├── Profanity.java
│ │ │ │ │ └── Resolve.java
│ │ │ │ ├── microsoft/
│ │ │ │ │ ├── Entity.java
│ │ │ │ │ ├── Intent.java
│ │ │ │ │ ├── NLUMicrosoft.java
│ │ │ │ │ ├── NLUMicrosoftHelper.java
│ │ │ │ │ └── ResolveMicrosoft.java
│ │ │ │ ├── nuance/
│ │ │ │ │ ├── Action.java
│ │ │ │ │ ├── Concept.java
│ │ │ │ │ ├── Intent.java
│ │ │ │ │ ├── Interpretation.java
│ │ │ │ │ ├── NLUNuance.java
│ │ │ │ │ ├── NLUNuanceHelper.java
│ │ │ │ │ └── ResolveNuance.java
│ │ │ │ ├── saiy/
│ │ │ │ │ ├── Context.java
│ │ │ │ │ ├── ContextValue.java
│ │ │ │ │ ├── Entity.java
│ │ │ │ │ ├── Intent.java
│ │ │ │ │ ├── NLUSaiy.java
│ │ │ │ │ ├── NLUSaiyHelper.java
│ │ │ │ │ └── ResolveSaiy.java
│ │ │ │ └── wit/
│ │ │ │ ├── Entity.java
│ │ │ │ ├── MessageBody.java
│ │ │ │ ├── NLUWit.java
│ │ │ │ └── ResolveWit.java
│ │ │ ├── partial/
│ │ │ │ ├── IPartial.java
│ │ │ │ ├── Partial.java
│ │ │ │ └── PartialHelper.java
│ │ │ ├── permissions/
│ │ │ │ └── PermissionHelper.java
│ │ │ ├── personality/
│ │ │ │ ├── AI.java
│ │ │ │ ├── PersonalityHelper.java
│ │ │ │ └── PersonalityResponse.java
│ │ │ ├── processing/
│ │ │ │ ├── Condition.java
│ │ │ │ ├── EntangledPair.java
│ │ │ │ ├── Outcome.java
│ │ │ │ ├── Position.java
│ │ │ │ ├── Quantum.java
│ │ │ │ ├── Qubit.java
│ │ │ │ ├── Tunnelling.java
│ │ │ │ └── helper/
│ │ │ │ └── QuantumHelper.java
│ │ │ ├── proximity/
│ │ │ │ ├── ProximityContext.java
│ │ │ │ ├── hardware/
│ │ │ │ │ ├── ProximityBluetooth.java
│ │ │ │ │ └── ProximityWiFi.java
│ │ │ │ └── location/
│ │ │ │ ├── ProximityCellTower.java
│ │ │ │ ├── ProximityContact.java
│ │ │ │ └── ProximityGPS.java
│ │ │ ├── recognition/
│ │ │ │ ├── Recognition.java
│ │ │ │ ├── RecognitionAction.java
│ │ │ │ ├── SaiyHotwordListener.java
│ │ │ │ ├── SaiyRecognitionListener.java
│ │ │ │ ├── TestRecognitionAction.java
│ │ │ │ ├── helper/
│ │ │ │ │ ├── GoogleNowMonitor.java
│ │ │ │ │ └── RecognitionDefaults.java
│ │ │ │ └── provider/
│ │ │ │ ├── android/
│ │ │ │ │ └── RecognitionNative.java
│ │ │ │ ├── bluemix/
│ │ │ │ │ ├── IWebSocketCallback.java
│ │ │ │ │ ├── RecognitionBluemix.java
│ │ │ │ │ └── mod/
│ │ │ │ │ └── TrustAllBluemixWebSocketClient.java
│ │ │ │ ├── google/
│ │ │ │ │ ├── chromium/
│ │ │ │ │ │ └── RecognitionGoogleChromium.java
│ │ │ │ │ └── cloud/
│ │ │ │ │ ├── GoogleCredentialsInterceptor.java
│ │ │ │ │ └── RecognitionGoogleCloud.java
│ │ │ │ ├── microsoft/
│ │ │ │ │ └── RecognitionMicrosoft.java
│ │ │ │ ├── nuance/
│ │ │ │ │ └── RecognitionNuance.java
│ │ │ │ ├── remote/
│ │ │ │ │ └── RecognitionRemote.java
│ │ │ │ ├── saiy/
│ │ │ │ │ ├── RecognitionSaiy.java
│ │ │ │ │ └── assist/
│ │ │ │ │ ├── SaiyInteractionService.java
│ │ │ │ │ ├── SaiyInteractionSession.java
│ │ │ │ │ └── SaiyInteractionSessionService.java
│ │ │ │ ├── sphinx/
│ │ │ │ │ ├── RecognitionSphinx.java
│ │ │ │ │ └── mod/
│ │ │ │ │ └── SaiyAssets.java
│ │ │ │ └── wit/
│ │ │ │ └── RecognitionWit.java
│ │ │ ├── service/
│ │ │ │ ├── NotificationService.java
│ │ │ │ ├── SelfAware.java
│ │ │ │ ├── ServiceConnector.java
│ │ │ │ └── helper/
│ │ │ │ ├── AssistantIntentService.java
│ │ │ │ ├── IConditionListener.java
│ │ │ │ ├── LocalRequest.java
│ │ │ │ ├── SelfAwareCache.java
│ │ │ │ ├── SelfAwareConditions.java
│ │ │ │ ├── SelfAwareHelper.java
│ │ │ │ ├── SelfAwareParameters.java
│ │ │ │ ├── SelfAwareParameters21.java
│ │ │ │ └── SelfAwareVerbose.java
│ │ │ ├── sound/
│ │ │ │ └── VolumeHelper.java
│ │ │ ├── thirdparty/
│ │ │ │ └── tasker/
│ │ │ │ ├── TaskerHelper.java
│ │ │ │ ├── TaskerIntent.java
│ │ │ │ └── TaskerTask.java
│ │ │ ├── tts/
│ │ │ │ ├── SaiyProgressListener.java
│ │ │ │ ├── SaiyTextToSpeech.java
│ │ │ │ ├── TTS.java
│ │ │ │ ├── attributes/
│ │ │ │ │ └── Gender.java
│ │ │ │ ├── engine/
│ │ │ │ │ └── EngineNuance.java
│ │ │ │ ├── helper/
│ │ │ │ │ ├── PendingTTS.java
│ │ │ │ │ ├── SaiyVoice.java
│ │ │ │ │ ├── SpeechPriority.java
│ │ │ │ │ └── TTSDefaults.java
│ │ │ │ └── sound/
│ │ │ │ ├── SoundEffect.java
│ │ │ │ ├── SoundEffectHelper.java
│ │ │ │ └── SoundEffectItem.java
│ │ │ ├── ui/
│ │ │ │ ├── activity/
│ │ │ │ │ ├── ActivityAssistProxy.java
│ │ │ │ │ ├── ActivityAssistSettings.java
│ │ │ │ │ ├── ActivityChooserDialog.java
│ │ │ │ │ ├── ActivityHome.java
│ │ │ │ │ ├── ActivityIssue.java
│ │ │ │ │ ├── ActivityLauncherShortcut.java
│ │ │ │ │ ├── ActivityPermissionDialog.java
│ │ │ │ │ ├── ActivityTilePreferences.java
│ │ │ │ │ └── helper/
│ │ │ │ │ └── ActivityHomeHelper.java
│ │ │ │ ├── components/
│ │ │ │ │ ├── DividerItemDecoration.java
│ │ │ │ │ ├── UIBugsAdapter.java
│ │ │ │ │ └── UIMainAdapter.java
│ │ │ │ ├── containers/
│ │ │ │ │ ├── ContainerCustomisation.java
│ │ │ │ │ └── ContainerUI.java
│ │ │ │ ├── fragment/
│ │ │ │ │ ├── FragmentAbout.java
│ │ │ │ │ ├── FragmentAdvancedSettings.java
│ │ │ │ │ ├── FragmentBugs.java
│ │ │ │ │ ├── FragmentCustomisation.java
│ │ │ │ │ ├── FragmentHome.java
│ │ │ │ │ ├── FragmentSettings.java
│ │ │ │ │ ├── FragmentSuperUser.java
│ │ │ │ │ └── helper/
│ │ │ │ │ ├── FragmentAboutHelper.java
│ │ │ │ │ ├── FragmentAdvancedSettingsHelper.java
│ │ │ │ │ ├── FragmentBugsHelper.java
│ │ │ │ │ ├── FragmentCustomisationHelper.java
│ │ │ │ │ ├── FragmentHomeHelper.java
│ │ │ │ │ ├── FragmentSettingsHelper.java
│ │ │ │ │ └── FragmentSuperuserHelper.java
│ │ │ │ ├── notification/
│ │ │ │ │ └── NotificationHelper.java
│ │ │ │ └── service/
│ │ │ │ └── SaiyTileService.java
│ │ │ ├── user/
│ │ │ │ ├── ISaiyAccount.java
│ │ │ │ ├── SaiyAccount.java
│ │ │ │ ├── SaiyAccountHelper.java
│ │ │ │ └── SaiyAccountList.java
│ │ │ └── utils/
│ │ │ ├── Conditions/
│ │ │ │ └── Network.java
│ │ │ ├── Constants.java
│ │ │ ├── Global.java
│ │ │ ├── MyLog.java
│ │ │ ├── SPH.java
│ │ │ ├── UtilsBundle.java
│ │ │ ├── UtilsFile.java
│ │ │ ├── UtilsList.java
│ │ │ ├── UtilsLocale.java
│ │ │ ├── UtilsMap.java
│ │ │ ├── UtilsString.java
│ │ │ ├── UtilsVolley.java
│ │ │ └── debug/
│ │ │ └── DebugAction.java
│ │ ├── proto/
│ │ │ ├── .gitignore
│ │ │ └── google/
│ │ │ ├── api/
│ │ │ │ ├── annotations.proto
│ │ │ │ ├── http.proto
│ │ │ │ ├── label.proto
│ │ │ │ └── monitored_resource.proto
│ │ │ ├── logging/
│ │ │ │ ├── README.md
│ │ │ │ ├── type/
│ │ │ │ │ ├── http_request.proto
│ │ │ │ │ └── log_severity.proto
│ │ │ │ └── v2/
│ │ │ │ ├── log_entry.proto
│ │ │ │ ├── logging.proto
│ │ │ │ ├── logging_config.proto
│ │ │ │ └── logging_metrics.proto
│ │ │ ├── longrunning/
│ │ │ │ └── operations.proto
│ │ │ ├── rpc/
│ │ │ │ ├── README.md
│ │ │ │ ├── code.proto
│ │ │ │ ├── error_details.proto
│ │ │ │ └── status.proto
│ │ │ ├── speech/
│ │ │ │ ├── v1/
│ │ │ │ │ └── cloud-speech.proto
│ │ │ │ └── v1beta1/
│ │ │ │ └── cloud_speech.proto
│ │ │ └── type/
│ │ │ ├── README.md
│ │ │ ├── color.proto
│ │ │ ├── date.proto
│ │ │ ├── dayofweek.proto
│ │ │ ├── latlng.proto
│ │ │ ├── money.proto
│ │ │ └── timeofday.proto
│ │ └── res/
│ │ ├── anim/
│ │ │ ├── fade_in_slow.xml
│ │ │ ├── fade_in_slow_delayed.xml
│ │ │ ├── none.xml
│ │ │ ├── slide_in_right.xml
│ │ │ └── slide_out_left.xml
│ │ ├── animator/
│ │ │ ├── fade_in_slow.xml
│ │ │ ├── fade_in_slow_delayed.xml
│ │ │ └── none.xml
│ │ ├── drawable/
│ │ │ ├── chevron.xml
│ │ │ ├── ic_logo_saiy_vector.xml
│ │ │ └── side_nav_bar.xml
│ │ ├── drawable-v21/
│ │ │ ├── ic_menu_camera.xml
│ │ │ ├── ic_menu_gallery.xml
│ │ │ ├── ic_menu_manage.xml
│ │ │ ├── ic_menu_send.xml
│ │ │ ├── ic_menu_share.xml
│ │ │ └── ic_menu_slideshow.xml
│ │ ├── layout/
│ │ │ ├── activity_home_layout.xml
│ │ │ ├── app_bar_main.xml
│ │ │ ├── assist_settings.xml
│ │ │ ├── cardview_bugs_item.xml
│ │ │ ├── fragment_bugs_layout.xml
│ │ │ ├── item_chooser_song_recognition.xml
│ │ │ ├── layout_common_fragment_parent.xml
│ │ │ ├── layout_item_ui_main.xml
│ │ │ ├── memory_dialog_layout.xml
│ │ │ ├── nav_header_main.xml
│ │ │ ├── pause_detection_dialog_layout.xml
│ │ │ └── tts_volume_dialog_layout.xml
│ │ ├── menu/
│ │ │ ├── activity_main_drawer.xml
│ │ │ └── menu_main.xml
│ │ ├── raw/
│ │ │ ├── beep_high.ogg
│ │ │ ├── beep_low.ogg
│ │ │ ├── burp1.ogg
│ │ │ ├── burp2.ogg
│ │ │ ├── cough1.ogg
│ │ │ ├── cough2.ogg
│ │ │ ├── cry1.ogg
│ │ │ ├── fart1.ogg
│ │ │ ├── fart2.ogg
│ │ │ ├── fart3.ogg
│ │ │ ├── flush1.ogg
│ │ │ ├── giggle1.ogg
│ │ │ ├── giggle2.ogg
│ │ │ ├── pee1.ogg
│ │ │ ├── puke1.ogg
│ │ │ ├── sk_error.pcm
│ │ │ ├── sk_start.pcm
│ │ │ ├── sk_stop.pcm
│ │ │ ├── sneeze1.ogg
│ │ │ └── wand.ogg
│ │ ├── values/
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── drawables.xml
│ │ │ ├── integers.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ ├── values-en-rUS/
│ │ │ └── strings.xml
│ │ ├── values-v21/
│ │ │ └── styles.xml
│ │ ├── values-w820dp/
│ │ │ └── dimens.xml
│ │ └── xml/
│ │ ├── accessibility_config.xml
│ │ └── interaction_service.xml
│ └── test/
│ └── java/
│ └── ai/
│ └── saiy/
│ └── android/
│ └── ExampleUnitTest.java
├── build.gradle
└── pocketsphinx-android-5prealpha-nolib/
├── build.gradle
└── pocketsphinx-android-5prealpha-nolib.jar
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*.iml
.gradle
/local.properties
.idea/**
!.idea/codeStyleSettings.xml
.DS_Store
build
/captures
google-services.json
================================================
FILE: LICENSE
================================================
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<http://www.gnu.org/licenses/>.
================================================
FILE: README.md
================================================
<a href="https://play.google.com/store/apps/details?id=ai.saiy.android" target="_blank">
<img alt="Get it on Google Play"
src="https://play.google.com/intl/en_us/badges/images/generic/en-play-badge.png" height="60"/>
</a>
# Saiy® for Android - Play Services Version
Here lies the open source version of Saiy for Android, dependent on Google Play Services, which demonstrates how a Virtual Assistant functions, from start to finish.
## About
Saiy is a many times rebuilt version of its previous incarnation as utter! Countless attempts and therefore experience getting such an application to function on Android, has brought me to a point where I feel it's time to open source the code, for many reasons.
## Why Open Source?
After spending a few years rewriting the code base, I think I have finally got it to a stage where it could be considered 'scalable'. That may not be the correct terminology, given the infinite possibilities of natural language requests and the finite amount of actions that could be coded to resolve them - Nevertheless, having adapted the application to integrate numerous APIs for Text to Speech, Speech to Text, Natural Language Understanding, Machine Learning, Cognitive Services (such as emotion analysis and vocal identification) (in the least possible spaghetti way I could achieve) and written my own APIs for developers to integrate their applications, functions and services, it's a case of now or never to open source it; whilst the implementations to these connected services and APIs are functional and up-to-date.
The project itself is too large and the possibilities it presents are too great for just a lone developer and it would be great to see what the community can do with it - iterating at a pace that no other similar application can keep up with.
Additionally, most of us find AI and the future of our virtual assistants and smart tech pretty fascinating, but to get involved requires a number of technical stepping stones. I hope by publishing this code and the ease of which commands can be created and adapted, using either simple String matching, a cloud based solution or your own NLP implementation, it will allow many to dive straight in and therefore further their interest.
## License & Copyright
The project is licensed under the GNU Affero General Public License V3. This is a copyleft license. See [LICENSE](https://github.com/brandall76/Saiy-PS/blob/master/LICENSE)
I have selected this license over any other, in order to ensure that any adaptations or improvements to the code base, require to be published under the same license. This will protect any hard work from being adapted into closed sourced projects, without giving back.
The license grant is not for Saiy's trademarks, which include the logo designs. Saiy reserves all trademark and copyright rights in and to all [Saiy trademarks](https://trademarks.ipo.gov.uk/ipo-tmcase/page/Results/1/UK00003168669?legacySearch=False).
Copyright © 2017 Saiy® Ltd.
## Contributor License Agreements
I need to clarify the most appropriate for the GNU Affero General Public License - will revisit very soon. Any suggestions welcome.
## Features
- Network & Embedded Text to Speech
- Embedded Android text to speech
- Nuance text to speech
See Saiy TTS project for further integration examples.
- Network & Native Speech to Text
- Google native Android voice recognition
- Nuance voice recognition
- Microsoft voice recognition
- IBM voice recognition
- WIT voice recognition
- Offline Hotword
- PocketSphinx
- Natural Language Processing
- API.ai
- Wit.ai
- Nuance mix
- Microsoft
- IBM Bluemix
- Vocal Identification
- Microsoft (Project Oxford)
- Emotion Analysis
- Beyond Verbal
- Knowledge Base
- Wolfram Alpha
- Developer APIs
- [Example App](https://github.com/brandall76/API-Example-App)
## Getting Started
The project is built using Java 7 - Android SDK (API 26) - Android NDK
Using Android Studio, it can be imported as a new project via version control or the downloadable zip.
There is a direct dependency to the [Saiy Library project](https://github.com/brandall76/Saiy-Library). Once that project has compiled you'll need to add the generated aar file as a module to the main project, as described [here](https://stackoverflow.com/q/29826717/1256219).
Without stating the obvious, when testing on a physical device, the performance of the code is accentuated by the hardware specifications - more so than your average app, as there is a lot going on.
Installing the [Google Text to Speech Engine](https://play.google.com/store/apps/details?id=com.google.android.tts&hl=en_GB) on your test device is recommended, due to the features it provides.
To use free embedded and offline Voice Recognition, install [Google's 'Now'](https://play.google.com/store/apps/details?id=com.google.android.googlequicksearchbox&hl=en_GB) application. If you have a Samsung device, their Vlingo recognition service **does not** work correctly for external applications.
## Providers
- [Nuance Developers](https://developer.nuance.com) - Text to Speech - Speech to Text - NLU
- [Microsoft Cognitive Services](https://azure.microsoft.com/en-gb/services/cognitive-services/) - Text to Speech - NLU - Translate API
- [IBM Bluemix](https://www.ibm.com/watson/services/speech-to-text/) - Speech to Text - NLU
- [Wit](https://wit.ai/) - Speech to Text - NLU
- [PocketSphinx](https://github.com/cmusphinx/pocketsphinx-android-demo) - Speech to Text
- [Google Cloud Speech](https://cloud.google.com/speech/) - Speech to Text
- [Google Chromium Speech](https://www.chromium.org/developers/how-tos/api-keys) - Speech to Text
- [API AI](https://api.ai/) - Speech to Text - NLU
- [Beyond Verbal](http://developers.beyondverbal.com) - Emotion analytics
- [Wolfram Alpha](https://developer.wolframalpha.com/portal/signin.html) - Knowledge base
## Troubleshooting
Please use the [Stack Overflow tag](https://stackoverflow.com/tags/saiy/info) for compiling related questions and errors.
For code issues and crashes, please open an issue.
For discussion, please use the [XDA development thread](https://forum.xda-developers.com/showthread.php?t=1508195) for now.
## Navigating the Code
In all major areas of the code, I will attempt to add further README files to detail a more specific explanation - including TO-DOs, issues and required improvements. Check the subdirectories of the code to see if a README is present, or a placeholder, letting you know that one should be soon.
Briefly, there are two major classes in the app, that direct and distribute work elsewhere:
- [SelfAware](https://github.com/brandall76/Saiy-PS/blob/master/app/src/main/java/ai/saiy/android/service/SelfAware.java) is the main Foreground Service, responsible for managing the application state and channelling voice recognition, text to speech and other API requests.
- [Quantum](https://github.com/brandall76/Saiy-PS/blob/master/app/src/main/java/ai/saiy/android/processing/Quantum.java) is the main processing class, where commands are locally resolved (if required), sensibility checked and actioned.
Understanding the above two classes is essential to following the flow of the full application logic.
- [MyLog](https://github.com/brandall76/Saiy-PS/blob/master/app/src/main/java/ai/saiy/android/utils/MyLog.java#L41) is a global verbose logging toggle. When enabled, the output will flow class to class, as well as display durations for time sensitive functions.
## Credentials
For the sake of testing ease, the code points to static API keys and secrets held in the [configuration directory](https://github.com/brandall76/Saiy-PS/tree/master/app/src/main/java/ai/saiy/android/configuration). It should probably go without saying, don't do this in production code.
## Strings for offline language processing?
This dates back to my original code written as a beginner for utter! That said, it is only relatively recently that cloud services such as API.ai or [embedded options](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/android/src/org/tensorflow/demo/SpeechActivity.java) became available/usable as well as manageable for an individual developer.
Up until this point, Java libraries that attempted the equivalent, bloated and lagged the app to the point of stalling. They were not an option.
I am also mindful, that I would like developers of any experience to be able to contribute to and manipulate the code with ease. Basic String operations can be converted by others over at [SaiyeyMcSaiyface](https://github.com/brandall76/SaiyeyMcSaiyface)
## Theory
I use the word, scalability, with caution. Whatever strides machine learning has taken up until now, there is still a requirement for a human to hard-code the ultimate action that is resolved to be performed. Whether this be turning up your heating, or the generic layout design of a weather request, someone still needs to write that code and the surrounding error handling.
Whilst standardised templates, to organise the world of information around us, can assist to categorise the output to a set of static response mechanisms - we perhaps can't feasibly use the word scalable, until a machine can dynamically write code (or the equivalent) for itself.
The above is for another discussion, but the point to take is that development is currently consigned to the following:
- Receive a command request
- No further explanation needed
- Resolve the command to collection
- Bluetooth on/off/toggle - would be a 'Bluetooth collection'
- Weather conditions in location on date - would be 'Weather collection'
- None
- Apply sensibility/boundary checks
- Turn the oven on to 3000 degrees for 8 years
- Remind me to go to the doctor yesterday
- What's the weather like in Primark
- Spell a
- Drive me over Niagara Falls
- Action the request
- Deducing success/error/insufficiency
- Extract standardisation - _{ location:"Berlin" } { description:"light drizzle" }_
Much of the above will need to be hard-coded. I state this only to manage expectations of currently how 'smart' we can hope to be...
## What's the plan?
Initially, I have published only the core of the application, so it may be critiqued in terms of its structure and quality of code. Much of the fundamental construct of the app and the code style/quality used, is repeated across the 500K+ lines still to be pushed.
Once there is general consensus on the application core, I will begin to upload the remaining code, with any suggested alterations already in place.
I am entirely self taught in Java, so go easy on me!
- Fundamentals
- Generally, how the construct of the application and way it interconnects can be improved. Both in terms of performance and readability.
- Memory management
- Given that the application functions as a Foreground service, great detail must to be paid to memory allocation. Theoretically, the application could persist forever - there is no luxury of onDestroy() to wipe the footprint. The Garbage Collector is nudged at various points throughout the application, when micro delays are of no concern.
- Threading strategy
- Whilst I've been mindful of how the threading functions across the code, using standard practices in terms of background/foreground/priority/pools etc - there remains no specific 'strategy' as to how these are managed. I would appreciate input from others here.
- Micro-optimisation
- I've no issue with accepting pull requests for this type of optimisation. I'm looking forward to seeing how contributors can shave off a thousandth here and there. Please do provide a test to back-up any submissions.
- Unit tests
- My own tests were not worthy of publishing. If this is your thing, help!
- Translation
- I hope to translate the application into every language available via both a voice recognition and text to speech provider. I'm using the [Crowdin Plaform](https://crowdin.com/project/saiy/invite?d=d5b5m4057517e563r44323n463) if you'd like to help.
- Visualisation
- Since API 23 introduced a comprehensive [Assistant Framework](https://developer.android.com/training/articles/assistant.html), visualising data has become an easier prospect. I have no current implementation of this, but it's now on the roadmap.
- An augmented reality visualisation of Saiy built using [ARCore](https://github.com/google-ar/arcore-android-sdk) can be found [here](https://github.com/brandall76/Saiy-AR).
- Localisation
- If a user is controlling Saiy in a language other than their native (presumably due to it being unsupported), standard String resource management, based on their device Locale, will point to the wrong destination and therefore fail. The resolution of this process is done using a [SupportedLanguage](https://github.com/brandall76/Saiy-PS/blob/master/app/src/main/java/ai/saiy/android/localisation/SupportedLanguage.java) object. Further explanation can be found in the [localisation directory](https://github.com/brandall76/Saiy-PS/tree/master/app/src/main/java/ai/saiy/android/localisation) README.
## Java 8
The code was originally written in Java 8, but had to be reverted due to build [issues with the Jack compiler](https://issuetracker.google.com/issues/37127783)
Now [Jack is deprecated](https://source.android.com/source/jack), I plan to revisit this soon.
================================================
FILE: app/.gitignore
================================================
/build
================================================
FILE: app/assets.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project name="assets">
<property name="assets.list.name" value="assets.lst"/>
<property name="assets.dir" value="src/main/assets/sync"/>
<property name="assets.hash.type" value="md5"/>
<property name="assets.ctl.files"
value="**/*.${assets.hash.type},${assets.list.name}"/>
<fileset id="assets" dir="${assets.dir}" excludes="${assets.ctl.files}"/>
<target name="clean_assets">
<delete>
<fileset dir="${assets.dir}" includes="${assets.ctl.files}"/>
</delete>
</target>
<target name="list">
<pathconvert
dirsep="/" pathsep="${line.separator}"
refid="assets" property="asset.list">
<map from="${basedir}/${assets.dir}/" to=""/>
</pathconvert>
<echo message="${asset.list}" file="${assets.dir}/${assets.list.name}"/>
</target>
<target name="checksum">
<checksum algorithm="${assets.hash.type}">
<fileset refid="assets"/>
</checksum>
</target>
</project>
================================================
FILE: app/build.gradle
================================================
/*
* Copyright (c) 2016. Saiy Ltd. All Rights Reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
apply plugin: 'com.android.application'
apply plugin: 'com.google.protobuf'
android {
dexOptions {
jumboMode true
preDexLibraries = false
maxProcessCount 4
javaMaxHeapSize "6g"
}
compileSdkVersion 27
buildToolsVersion '27.0.3'
defaultConfig {
applicationId "ai.saiy.android"
minSdkVersion 16
targetSdkVersion 27
versionCode 3
versionName "1.0.3"
multiDexEnabled true
vectorDrawables.useSupportLibrary = true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
incremental true
}
flavorDimensions 'tier'
productFlavors {
x86 {
ndk {
abiFilter "x86"
}
}
x86_64 {
ndk {
abiFilter "x86_64"
}
}
arm {
ndk {
abiFilters "armeabi"
}
}
arm7 {
ndk {
abiFilters "armeabi-v7a"
}
}
arm8 {
ndk {
abiFilters "arm64-v8a"
}
}
mips {
ndk {
abiFilter "mips"
}
}
mips_64 {
ndk {
abiFilter "mips64"
}
}
dev {
dimension 'tier'
}
prod {
dimension 'tier'
minSdkVersion 16
}
}
buildTypes {
release {
ndk {
abiFilters 'armeabi-v7a', 'armeabi', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64'
}
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
ndk {
abiFilters 'armeabi-v7a', 'armeabi', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64'
}
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
configurations {
implementation.exclude group: "org.apache.httpcomponents", module: "httpclient"
}
dependencies {
implementation fileTree(include: ['*.jar', '*.so'], dir: 'libs')
implementation 'com.android.support:multidex:1.0.2'
implementation 'com.android.support:appcompat-v7:27.1.0'
implementation 'com.android.support:design:27.1.0'
implementation 'com.android.support:support-annotations:27.1.0'
implementation 'com.android.support:cardview-v7:27.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation('com.google.apis:google-api-services-translate:v2-rev45-1.21.0') {
exclude group: 'org.apache.httpcomponents', module: 'httpclient'
exclude group: 'com.android.support'
exclude module: 'support-annotations'
exclude group: 'com.google.guava'
}
implementation 'com.google.android.gms:play-services-location:12.0.0'
implementation 'com.google.android.gms:play-services-auth:12.0.0'
implementation 'com.nuance:speechkit:2.1.3@aar'
implementation 'com.google.guava:guava:20.0'
implementation 'com.google.code.gson:gson:2.8.0'
implementation 'com.google.http-client:google-http-client-gson:1.19.0'
implementation 'com.microsoft.projectoxford:speechrecognition:0.6.0'
implementation 'org.apache.commons:commons-lang3:3.6'
implementation 'commons-codec:commons-codec:20041127.091804'
implementation 'com.github.mpkorstanje:simmetrics-core:4.1.0'
implementation 'org.apache.commons:commons-collections4:4.1'
implementation 'ai.api:sdk:1.9.0@aar'
implementation 'commons-io:commons-io:2.4'
implementation 'org.java-websocket:Java-WebSocket:1.3.0'
implementation 'de.psdev.licensesdialog:licensesdialog:1.8.1'
implementation 'com.afollestad.material-dialogs:core:0.9.5.0'
implementation('org.simpleframework:simple-xml:2.7.1') {
exclude group: 'xpp3', module: 'xpp3'
exclude group: 'stax', module: 'stax-api'
exclude group: 'stax', module: 'stax'
}
implementation('io.grpc:grpc-okhttp:1.0.1') {
exclude module: 'jsr305'
}
implementation('io.grpc:grpc-protobuf:1.0.1') {
exclude module: 'jsr305'
}
implementation('io.grpc:grpc-stub:1.0.1') {
exclude module: 'jsr305'
}
implementation('io.grpc:grpc-auth:1.0.1') {
exclude module: 'jsr305'
}
implementation 'com.google.android.gms:play-services-location:12.0.0'
implementation('javax.annotation:javax.annotation-api:1.2') {
exclude module: 'annotation'
}
implementation('com.google.auth:google-auth-library-oauth2-http:0.3.0') {
exclude group: 'org.apache.httpcomponents'
exclude group: 'com.android.support'
exclude module: 'support-annotations'
exclude group: 'com.google.guava'
exclude module: 'jsr305'
exclude module: 'httpclient'
}
implementation project(':pocketsphinx-android-5prealpha-nolib')
implementation project(':lapp-debug')
testImplementation 'junit:junit:4.12'
}
protobuf {
protoc {
artifact = 'com.google.protobuf:protoc:3.0.2'
}
plugins {
grpc {
artifact = 'io.grpc:protoc-gen-grpc-java:1.0.1'
}
}
generateProtoTasks {
all().each {
task ->
task.builtins {
remove javanano
java {
}
}
task.plugins {
grpc {
}
}
}
}
}
ant.importBuild 'assets.xml'
preBuild.dependsOn(list, checksum)
clean.dependsOn(clean_assets)
================================================
FILE: app/proguard-rules.pro
================================================
# Useful - https://github.com/krschultz/android-proguard-snippets/tree/master/libraries
# Suppress warnings from gRPC dependencies
-dontwarn com.google.common.**
-dontwarn com.google.api.client.**
-dontwarn com.google.protobuf.**
-dontwarn io.grpc.**
-dontwarn okio.**
# ads
-keep public class com.google.android.gms.ads.** {
public *;
}
-keep public class com.google.ads.** {
public *;
}
# Simple XML
-keep interface org.simpleframework.xml.core.Label { public *;}
-keep class * implements org.simpleframework.xml.core.Label { public *;}
-keep interface org.simpleframework.xml.core.Parameter { public *;}
-keep class * implements org.simpleframework.xml.core.Parameter { public *;}
-keep interface org.simpleframework.xml.core.Extractor { public *;}
-keep class * implements org.simpleframework.xml.core.Extractor { public *;}
-keep interface org.simpleframework.xml.convert.Convert { public *;}
-keep class * implements org.simpleframework.xml.convert.Converter { public *;}
-dontwarn com.bea.xml.stream.**
-dontwarn org.simpleframework.xml.stream.**
-keepclassmembers,allowobfuscation class * {
@org.simpleframework.xml.* <fields>;
@org.simpleframework.xml.* <init>(...);
}
# Explicitly preserve all serialization members. The Serializable interface
# is only a marker interface, so it wouldn't save them.
# You can comment this out if your library doesn't use serialization.
# If your code contains serializable classes that have to be backward
# compatible, please refer to the manual.
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
-keepattributes *Annotation*
-keepattributes InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,EnclosingMethod,Attribute,Element,Root
-keepclassmembers class * {
@org.simpleframework.xml.* *;
}
#support libraries
# Allow obfuscation of android.support.v7.internal.view.menu.**
# to avoid problem on Samsung 4.2.2 devices with appcompat v23
# see https://code.google.com/p/android/issues/detail?id=78377
# http://stackoverflow.com/questions/24809580/noclassdeffounderror-android-support-v7-internal-view-menu-menubuilder/27254191
-keep class android.support.v7.view.menu.*MenuBuilder*
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.* { *; }
-keep public class android.support.v7.widget.** { *; }
-keep public class android.support.v7.internal.widget.** { *; }
-keep public class android.support.v7.internal.view.menu.** { *; }
-keep public class * extends android.support.v4.view.ActionProvider {
public <init>(android.content.Context);
}
# Volley
-keep class com.android.volley.** { *; }
#Guava
-keep class com.google.common.io.Resources {
public static <methods>;
}
-keep class com.google.common.collect.Lists {
public static ** reverse(**);
}
-keep class com.google.common.base.Charsets {
public static <fields>;
}
# cardview
# http://stackoverflow.com/questions/29679177/cardview-shadow-not-appearing-in-lollipop-after-obfuscate-with-proguard/29698051
-keep class android.support.v7.widget.RoundRectDrawable { *; }
-keep class com.google.common.base.Joiner {
public static com.google.common.base.Joiner on(java.lang.String);
public ** join(...);
}
-keep class com.google.common.collect.MapMakerInternalMap$ReferenceEntry
-keep class com.google.common.cache.LocalCache$ReferenceEntry
# http://stackoverflow.com/questions/9120338/proguard-configuration-for-guava-with-obfuscation-and-optimization
-dontwarn javax.annotation.**
-dontwarn javax.inject.**
-dontwarn sun.misc.Unsafe
# Guava 19.0
-dontwarn java.lang.ClassValue
-dontwarn com.google.j2objc.annotations.Weak
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
##---------------Begin: proguard configuration for Gson ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }
# Prevent proguard from stripping interface information from TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
##---------------End: proguard configuration for Gson ----------
# Needed by google-api-client to keep generic types and @Key annotations accessed via reflection
-keepclassmembers class * {
@com.google.api.client.util.Key <fields>;
}
-keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault
## Google Play Services 4.3.23 specific rules ##
## https://developer.android.com/google/play-services/setup.html#Proguard ##
-keep class * extends java.util.ListResourceBundle {
protected Object[][] getContents();
}
-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
public static final *** NULL;
}
-keepnames @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * {
@com.google.android.gms.common.annotation.KeepName *;
}
-keepnames class * implements android.os.Parcelable {
public static final ** CREATOR;
}
# OkHttp
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-dontwarn com.squareup.okhttp.**
# support design
-dontwarn android.support.design.**
-keep class android.support.design.** { *; }
-keep interface android.support.design.** { *; }
-keep public class android.support.design.R$* { *; }
# apache commons
-keep class org.apache.commons.logging.**
-dontwarn org.apache.commons.logging.impl.**
# apache commons codec
-dontwarn org.apache.commons.codec.binary.**
================================================
FILE: app/src/androidTest/java/ai/saiy/android/ApplicationTest.java
================================================
/*
* Copyright (c) 2016. Saiy Ltd. All Rights Reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package ai.saiy.android;
import android.app.Application;
import android.test.ApplicationTestCase;
/**
* <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
*/
public class ApplicationTest extends ApplicationTestCase<Application> {
public ApplicationTest() {
super(Application.class);
}
}
================================================
FILE: app/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (c) 2016. Saiy Ltd. All Rights Reserved.
~
~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU Affero General Public License as published
~ by the Free Software Foundation, either version 3 of the License, or
~ (at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU Affero General Public License for more details.
~
~ You should have received a copy of the GNU Affero General Public License
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<manifest
package="ai.saiy.android"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<permission
android:name="ai.saiy.android.permission.CONTROL_SAIY"
android:description="@string/control_saiy_permission_description"
android:icon="@mipmap/ic_launcher"
android:label="@string/control_saiy_permission_label"
android:protectionLevel="dangerous"/>
<uses-permission
android:name="ai.saiy.android.permission.CONTROL_SAIY"
android:maxSdkVersion="22"/>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18"/>
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="18"/>
<!--suppress DeprecatedClassUsageInspection -->
<uses-permission
android:name="android.permission.GET_TASKS"
android:maxSdkVersion="20"/>
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions"/>
<!-- Permission Required -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<!-- Protection Normal -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.BIND_QUICK_SETTINGS_TILE"/>
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
<uses-permission android:name="android.permission.BIND_VOICE_INTERACTION"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<!-- Non-Standard -->
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION"/>
<uses-permission android:name="net.dinglisch.android.tasker.PERMISSION_RUN_TASKS"/>
<!-- HTC Idiosyncrasies -->
<uses-permission android:name="android.intent.action.QUICKBOOT_POWERON"/>
<uses-permission android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
<uses-feature
android:name="android.hardware.telephony"
android:required="false"/>
<uses-feature
android:name="android.hardware.location.gps"
android:required="false"/>
<uses-feature
android:name="android.hardware.nfc"
android:required="false"/>
<uses-feature
android:name="android.hardware.camera"
android:required="false"/>
<uses-feature
android:name="android.hardware.location"
android:required="false"/>
<uses-feature
android:name="android.hardware.location.network"
android:required="false"/>
<uses-feature
android:name="android.hardware.bluetooth"
android:required="false"/>
<uses-feature
android:name="android.hardware.microphone"
android:required="true"/>
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false"/>
<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="false"/>
<uses-feature
android:name="android.hardware.camera.flash"
android:required="false"/>
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:xlargeScreens="true"/>
<!--<compatible-screens>-->
<!--<screen-->
<!--android:screenSize="small"-->
<!--android:screenDensity="xhdpi"/>-->
<!--<screen-->
<!--android:screenSize="normal"-->
<!--android:screenDensity="xhdpi"/>-->
<!--<screen-->
<!--android:screenSize="large"-->
<!--android:screenDensity="xhdpi"/>-->
<!--<screen-->
<!--android:screenSize="xlarge"-->
<!--android:screenDensity="xhdpi"/>-->
<!--</compatible-screens>-->
<application
android:name="ai.saiy.android.utils.Global"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="false"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>
<activity
android:name="ai.saiy.android.ui.activity.ActivityHome"
android:clearTaskOnLaunch="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTop"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".ui.activity.ActivityAssistProxy"
android:clearTaskOnLaunch="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:enabled="false"
android:excludeFromRecents="true"
android:exported="false"
android:launchMode="singleInstance"
android:noHistory="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="android.intent.action.ASSIST"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity
android:name=".ui.activity.ActivityAssistSettings"
android:configChanges="keyboardHidden|orientation|screenSize"
android:excludeFromRecents="false"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<service
android:name=".recognition.provider.saiy.assist.SaiyInteractionService"
android:enabled="false"
android:exported="false"
android:permission="android.permission.BIND_VOICE_INTERACTION"
android:process=":interaction">
<meta-data
android:name="android.voice_interaction"
android:resource="@xml/interaction_service"/>
<intent-filter>
<action android:name="android.service.voice.VoiceInteractionService"/>
</intent-filter>
</service>
<service
android:name=".recognition.provider.saiy.assist.SaiyInteractionSessionService"
android:enabled="false"
android:exported="false"
android:permission="android.permission.BIND_VOICE_INTERACTION"
android:process=":session">
</service>
<activity
android:name="ai.saiy.android.ui.activity.ActivityPermissionDialog"
android:configChanges="keyboardHidden|orientation|screenSize"
android:excludeFromRecents="true"
android:theme="@style/AppTheme.ActivityDialogTheme">
</activity>
<activity
android:name="ai.saiy.android.ui.activity.ActivityChooserDialog"
android:configChanges="keyboardHidden|orientation|screenSize"
android:excludeFromRecents="true"
android:theme="@style/AppTheme.ActivityDialogTheme">
</activity>
<activity
android:name="ai.saiy.android.ui.activity.ActivityIssue"
android:configChanges="keyboardHidden|orientation|screenSize"
android:excludeFromRecents="false"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.activity.ActivityTilePreferences"
android:configChanges="keyboardHidden|orientation|screenSize"
android:excludeFromRecents="false"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE_PREFERENCES"/>
</intent-filter>
</activity>
<activity
android:name="ai.saiy.android.ui.activity.ActivityLauncherShortcut"
android:clearTaskOnLaunch="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:excludeFromRecents="true"
android:launchMode="singleInstance"
android:noHistory="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
<intent-filter android:priority="999">
<action android:name="android.intent.action.SEARCH_LONG_PRESS"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter android:priority="999">
<action android:name="android.speech.action.VOICE_SEARCH_HANDS_FREE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter android:priority="999">
<action android:name="android.intent.action.VOICE_COMMAND"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter android:priority="999">
<action android:name="android.intent.action.ASSIST"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<meta-data
android:name="com.android.systemui.action_assist_icon"
android:resource="@mipmap/ic_launcher"/>
</activity>
<service
android:name="ai.saiy.android.service.SelfAware"
android:enabled="true"
android:exported="true"
android:permission="ai.saiy.android.permission.CONTROL_SAIY">
</service>
<service
android:name="ai.saiy.android.service.NotificationService"
android:enabled="true"
android:exported="false"
android:protectionLevel="signature">
<intent-filter android:priority="999">
<action android:name="ai.saiy.android.INTENT_CLICK"/>
</intent-filter>
</service>
<service
android:name="ai.saiy.android.service.helper.AssistantIntentService"
android:enabled="true"
android:exported="false"
android:protectionLevel="signature">
</service>
<service
android:name="ai.saiy.android.cognitive.motion.provider.google.MotionIntentService"
android:enabled="true"
android:exported="false">
</service>
<service
android:name="ai.saiy.android.ui.service.SaiyTileService"
android:icon="@mipmap/ic_launcher"
android:label="@string/tile_label"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE"/>
</intent-filter>
<meta-data
android:name="android.service.quicksettings.ACTIVE_TILE"
android:value="true"/>
</service>
<service
android:name="ai.saiy.android.accessibility.SaiyAccessibilityService"
android:enabled="true"
android:label="@string/app_name"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService"/>
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibility_config"/>
</service>
<receiver
android:name="ai.saiy.android.broadcast.BRBoot"
android:enabled="true">
<intent-filter android:priority="999">
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.LOCKED_BOOT_COMPLETED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON"/>
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
</intent-filter>
</receiver>
<receiver
android:name="ai.saiy.android.broadcast.BRRemote"
android:enabled="true"
android:permission="ai.saiy.android.permission.CONTROL_SAIY">
<intent-filter android:priority="999">
<action android:name="ai.saiy.android.SAIY_REQUEST_RECEIVER"/>
</intent-filter>
</receiver>
</application>
</manifest>
================================================
FILE: app/src/main/assets/sync/assets.lst
================================================
basic.dic
en-us-ptm/README
en-us-ptm/feat.params
en-us-ptm/mdef
en-us-ptm/means
en-us-ptm/noisedict
en-us-ptm/sendump
en-us-ptm/transition_matrices
en-us-ptm/variances
hotwords.txt
================================================
FILE: app/src/main/assets/sync/basic.dic
================================================
okaygoogle OW K EY G UW G AH L
okaygoogle(2) OW K EY G UW G OW L
okaygoogle(3) OW K EY G UH G AH L
okaygoogle(4) OW K EY G UH G OW L
okaygoogle(5) OW K AH G UW G AH L
okaygoogle(6) OW K AH G UW G OW L
okaygoogle(7) OW K AH G UH G AH L
okaygoogle(8) OW K AH G UH G OW L
okaygoogle(9) OW K IY G UW G AH L
okaygoogle(10) OW K IY G UW G OW L
okaygoogle(11) OW K IY G UH G AH L
okaygoogle(12) OW K IY G UH G OW L
stoplistening S T AA P L IH S AH N IH NG
stoplistening(2) S T AA P L IH S N IH NG
stoplistening(3) S T AO P L IH S AH N IH NG
stoplistening(4) S T AO P L IH S N IH NG
wakeupsay W EY K AH P S EY
wakeupsay(1) W EY K AH P S AY
wakeupsay(2) W EY K AH P S IY
wakeupsay(3) W AH K AH P S EY
wakeupsay(4) W AH K AH P S AY
wakeupsay(5) W AH K AH P S IY
wakeupsay(6) W IY K AH P S EY
wakeupsay(7) W IY K AH P S AY
wakeupsay(8) W IY K AH P S IY
================================================
FILE: app/src/main/assets/sync/basic.dic.md5
================================================
56c42b4b20fe1edc953b9f3987e9af9f
================================================
FILE: app/src/main/assets/sync/en-us-ptm/README
================================================
/* ====================================================================
* Copyright (c) 2015 Alpha Cephei Inc. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* THIS SOFTWARE IS PROVIDED BY ALPHA CEPHEI INC. ``AS IS'' AND.
* ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,.
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ALPHA CEPHEI INC.
* NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT.
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,.
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY.
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT.
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE.
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* ====================================================================
*
*/
This directory contains generic US english acoustic model trained with
latest sphinxtrain.
================================================
FILE: app/src/main/assets/sync/en-us-ptm/README.md5
================================================
45c80a79247b52dc6b48f2f07744d91d
================================================
FILE: app/src/main/assets/sync/en-us-ptm/feat.params
================================================
-lowerf 130
-upperf 6800
-nfilt 25
-transform dct
-lifter 22
-feat 1s_c_d_dd
-svspec 0-12/13-25/26-38
-agc none
-cmn current
-varnorm no
-model ptm
-cmninit 40,10,10
================================================
FILE: app/src/main/assets/sync/en-us-ptm/feat.params.md5
================================================
ec1566c9d8cf37c2a01571bcaff0caaa
================================================
FILE: app/src/main/assets/sync/en-us-ptm/mdef.md5
================================================
ba13d30c2fee63e039e119ab449bd618
================================================
FILE: app/src/main/assets/sync/en-us-ptm/means.md5
================================================
d0ee21e7d0e03575f27497b2833c6f02
================================================
FILE: app/src/main/assets/sync/en-us-ptm/noisedict
================================================
<s> SIL
</s> SIL
<sil> SIL
[NOISE] +NSN+
[SPEECH] +SPN+
================================================
FILE: app/src/main/assets/sync/en-us-ptm/noisedict.md5
================================================
05034ffef21f4810d10d3c76a6f5e921
================================================
FILE: app/src/main/assets/sync/en-us-ptm/sendump.md5
================================================
75328625279cdbb72f800b315365ff45
================================================
FILE: app/src/main/assets/sync/en-us-ptm/transition_matrices.md5
================================================
7a63d8971f81eef2154ea38b8bdfe520
================================================
FILE: app/src/main/assets/sync/en-us-ptm/variances.md5
================================================
d4d6ba74707952aa7e00c3bc1e7d0fb4
================================================
FILE: app/src/main/assets/sync/hotwords.txt
================================================
wakeupsay /1e-20/
okaygoogle /1e-30/
stoplistening /1e-20/
================================================
FILE: app/src/main/assets/sync/hotwords.txt.md5
================================================
60940e64061013741db9a82f0ffc9793
================================================
FILE: app/src/main/java/ai/saiy/android/accessibility/SaiyAccessibilityService.java
================================================
/*
* Copyright (c) 2016. Saiy Ltd. All Rights Reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package ai.saiy.android.accessibility;
import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.Notification;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Parcelable;
import android.speech.SpeechRecognizer;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Pair;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import java.util.ArrayList;
import java.util.regex.Pattern;
import ai.saiy.android.R;
import ai.saiy.android.applications.Installed;
import ai.saiy.android.applications.UtilsApplication;
import ai.saiy.android.command.helper.CC;
import ai.saiy.android.intent.ExecuteIntent;
import ai.saiy.android.intent.IntentConstants;
import ai.saiy.android.localisation.SaiyResources;
import ai.saiy.android.localisation.SupportedLanguage;
import ai.saiy.android.nlu.local.Resolve;
import ai.saiy.android.processing.Condition;
import ai.saiy.android.recognition.RecognitionAction;
import ai.saiy.android.recognition.helper.RecognitionDefaults;
import ai.saiy.android.service.helper.LocalRequest;
import ai.saiy.android.utils.MyLog;
import ai.saiy.android.utils.SPH;
import ai.saiy.android.utils.UtilsList;
import ai.saiy.android.utils.UtilsString;
/**
* Class to handle accessibility service events.
* Created by benrandall76@gmail.com on 03/08/2016.
*/
public class SaiyAccessibilityService extends AccessibilityService {
private final boolean DEBUG = MyLog.DEBUG;
private final String CLS_NAME = SaiyAccessibilityService.class.getSimpleName();
private static final long COMMAND_UPDATE_DELAY = 3000L;
private static final long UPDATE_TIMEOUT = 250L;
private long previousCommandTime;
private String previousCommandProcessed = null;
private String previousCommandInterimChecked = null;
private String previousCommandFinalChecked = null;
private final Pattern pGoogleNow = Pattern.compile(Installed.PACKAGE_NAME_GOOGLE_NOW, Pattern.CASE_INSENSITIVE);
private final Pattern pGoogleNowInterim = Pattern.compile(RecognitionDefaults.GOOGLE_NOW_INTERIM_FIELD, Pattern.CASE_INSENSITIVE);
private final Pattern pGoogleNowFinal = Pattern.compile(RecognitionDefaults.GOOGLE_NOW_FINAL_EDIT_TEXT, Pattern.CASE_INSENSITIVE);
private SupportedLanguage sl;
private Pattern pListening;
private boolean initInterceptGoogle;
private boolean initAnnounceNotifications;
private final boolean EXTRA_VERBOSE = false;
@Override
public void onCreate() {
if (DEBUG) {
MyLog.i(CLS_NAME, "onCreate");
}
sl = SupportedLanguage.getSupportedLanguage(SPH.getVRLocale(getApplicationContext()));
final SaiyResources sr = new SaiyResources(getApplicationContext(), sl);
final String listening = sr.getString(R.string.listening);
sr.reset();
pListening = Pattern.compile("^" + listening + ".*?", Pattern.CASE_INSENSITIVE);
}
@Override
protected void onServiceConnected() {
if (DEBUG) {
MyLog.i(CLS_NAME, "onServiceConnected");
}
initInterceptGoogle = SPH.getInterceptGoogle(getApplicationContext());
initAnnounceNotifications = SPH.getAnnounceNotifications(getApplicationContext());
setDynamicContent();
}
/**
* Set the content this service should be receiving
*/
private void setDynamicContent() {
if (DEBUG) {
MyLog.i(CLS_NAME, "setDynamicContent: interceptGoogle: " + initInterceptGoogle);
MyLog.i(CLS_NAME, "setDynamicContent: announceNotifications: " + initAnnounceNotifications);
}
if (!initInterceptGoogle && !initAnnounceNotifications) {
if (DEBUG) {
MyLog.i(CLS_NAME, "setDynamicContent: none required: finishing");
}
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// this.disableSelf();
// }
//
// this.stopSelf();
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "setDynamicContent: updating content");
}
final AccessibilityServiceInfo serviceInfo = new AccessibilityServiceInfo();
serviceInfo.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN;
serviceInfo.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
serviceInfo.notificationTimeout = UPDATE_TIMEOUT;
if (initInterceptGoogle && initAnnounceNotifications) {
serviceInfo.eventTypes = AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED
| AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED
| AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED;
} else if (initInterceptGoogle) {
serviceInfo.packageNames = new String[]{Installed.PACKAGE_NAME_GOOGLE_NOW};
serviceInfo.eventTypes = AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED
| AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED;
} else {
serviceInfo.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED;
}
this.setServiceInfo(serviceInfo);
}
}
/**
* Check if we need to update the content we are receiving by comparing the current content values to the ones checked
* on the most recent accessibility event.
*
* @param interceptGoogle if we should be intercepting Google Now commands
* @param announceNotifications if we should be announcing notification content
*/
private void updateServiceInfo(final boolean interceptGoogle, final boolean announceNotifications) {
if (DEBUG) {
MyLog.i(CLS_NAME, "updateServiceInfo");
}
if (initInterceptGoogle != interceptGoogle || initAnnounceNotifications != announceNotifications) {
initInterceptGoogle = interceptGoogle;
initAnnounceNotifications = announceNotifications;
setDynamicContent();
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "updateServiceInfo: no change");
}
}
}
@Override
public void onAccessibilityEvent(final AccessibilityEvent event) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent");
}
updateServiceInfo(SPH.getInterceptGoogle(getApplicationContext()),
SPH.getAnnounceNotifications(getApplicationContext()));
if (!initAnnounceNotifications && !initInterceptGoogle) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: not required");
}
return;
}
if (event != null) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: contentDesc: " + event.getContentDescription());
getEventType(event.getEventType());
}
AccessibilityNodeInfo source = null;
switch (event.getEventType()) {
case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
if (initAnnounceNotifications) {
final Parcelable parcelable = event.getParcelableData();
if (parcelable != null) {
if (parcelable instanceof Notification) {
if (DEBUG) {
MyLog.i(CLS_NAME, "fast instance of Notification: continuing");
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "fast not instance of Notification");
}
return;
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "fast parcelable null");
}
return;
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: fast not announcing notifications");
}
return;
}
break;
case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:
case AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED:
if (initInterceptGoogle) {
if (event.getPackageName() != null && pGoogleNow.matcher(event.getPackageName()).matches()) {
source = event.getSource();
if (source == null) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: fast: source null");
}
return;
}
if (source.getClassName() == null) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: fast: source className null");
}
try {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: fast: recycling source");
}
source.recycle();
} catch (final IllegalStateException e) {
if (DEBUG) {
MyLog.w(CLS_NAME, "onAccessibilityEvent: fast: IllegalStateException source recycle");
e.printStackTrace();
}
}
return;
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: fast: checking for google: false");
}
return;
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: fast: not intercepting Google");
}
return;
}
break;
}
switch (event.getEventType()) {
case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_WINDOW_CONTENT_CHANGED");
MyLog.i(CLS_NAME, "onAccessibilityEvent: checking for google: true");
MyLog.i(CLS_NAME, "onAccessibilityEvent: event.getPackageName: " + event.getPackageName());
MyLog.i(CLS_NAME, "onAccessibilityEvent: event.getClassName: " + event.getClassName());
}
//noinspection ConstantConditions
if (pGoogleNowInterim.matcher(source.getClassName()).matches()) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: className interim: true");
MyLog.i(CLS_NAME, "onAccessibilityEvent: source.getClassName: " + source.getClassName());
}
if (source.getText() != null) {
final String text = source.getText().toString();
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: interim text: " + text);
MyLog.i(CLS_NAME, "onAccessibilityEvent: interim contentDesc: " + source.getContentDescription());
}
if (UtilsString.notNaked(text)) {
if (!commandPreviousInterimChecked(text)) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: commandPreviousChecked: false");
}
previousCommandInterimChecked = text;
if (interimMatch(text)) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: child: interim match: true");
}
if (commandDelaySufficient(event.getEventTime())) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: commandDelaySufficient: true");
}
if (!commandPreviousMatches(text)) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: commandPreviousMatches: false");
}
previousCommandTime = event.getEventTime();
previousCommandProcessed = text;
killGoogle(true);
process(text);
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: commandPreviousMatches: true");
}
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: commandDelaySufficient: false");
}
}
break;
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: child: interim match: false");
}
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: commandPreviousChecked: true");
}
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: interim text: naked");
}
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: interim text: null");
}
}
} else if (pGoogleNowFinal.matcher(source.getClassName()).matches()) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: className final: true");
MyLog.i(CLS_NAME, "onAccessibilityEvent: source.getClassName: " + source.getClassName());
MyLog.i(CLS_NAME, "onAccessibilityEvent: source.getText: " + source.getText());
MyLog.i(CLS_NAME, "onAccessibilityEvent: source.contentDesc: " + source.getContentDescription());
}
final int childCount = source.getChildCount();
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: childCount: " + childCount);
}
if (childCount > 0) {
for (int i = 0; i < childCount; i++) {
final String text = examineChild(source.getChild(i));
if (UtilsString.notNaked(text)) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: child text: " + text);
}
if (!commandPreviousFinalChecked(text)) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: commandPreviousChecked: false");
}
previousCommandFinalChecked = text;
if (finalMatch(text)) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: child: final match: true");
}
if (commandDelaySufficient(event.getEventTime())) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: commandDelaySufficient: true");
}
if (!commandPreviousMatches(text)) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: commandPreviousMatches: false");
}
previousCommandTime = event.getEventTime();
previousCommandProcessed = text;
killGoogle(true);
process(text);
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: commandPreviousMatches: true");
}
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: commandDelaySufficient: false");
}
}
break;
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: child: final match: false");
}
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: commandPreviousChecked: true");
}
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: child text: naked");
}
}
}
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: className: unwanted " + source.getClassName());
}
if (EXTRA_VERBOSE) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: unwanted contentDesc: " + source.getContentDescription());
}
if (source.getText() != null) {
final String text = source.getText().toString();
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: unwanted text: " + text);
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: unwanted text: null");
}
}
final int childCount = source.getChildCount();
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: unwanted childCount: " + childCount);
}
if (childCount > 0) {
for (int i = 0; i < childCount; i++) {
final String text = examineChild(source.getChild(i));
if (UtilsString.notNaked(text)) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: unwanted child text: " + text);
}
}
}
}
}
}
break;
case AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_VIEW_TEXT_SELECTION_CHANGED");
MyLog.i(CLS_NAME, "onAccessibilityEvent: checking for google: true");
MyLog.i(CLS_NAME, "onAccessibilityEvent: event.getPackageName: " + event.getPackageName());
MyLog.i(CLS_NAME, "onAccessibilityEvent: event.getClassName: " + event.getClassName());
}
//noinspection ConstantConditions
if (pGoogleNowFinal.matcher(source.getClassName()).matches()) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: className final editText: true");
MyLog.i(CLS_NAME, "onAccessibilityEvent: source.getClassName: " + source.getClassName());
}
if (source.getText() != null) {
final String text = source.getText().toString();
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: final editText text: " + text);
MyLog.i(CLS_NAME, "onAccessibilityEvent: final editText contentDesc: " + source.getContentDescription());
}
if (UtilsString.notNaked(text)) {
if (!commandPreviousFinalChecked(text)) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: commandPreviousChecked: false");
}
previousCommandFinalChecked = text;
if (finalMatch(text)) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: child: final match: true");
}
if (commandDelaySufficient(event.getEventTime())) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: commandDelaySufficient: true");
}
if (!commandPreviousMatches(text)) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: commandPreviousMatches: false");
}
previousCommandTime = event.getEventTime();
previousCommandProcessed = text;
killGoogle(true);
process(text);
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: commandPreviousMatches: true");
}
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: commandDelaySufficient: false");
}
}
break;
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: final editText match: false");
}
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: commandPreviousChecked: true");
}
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: final editText: naked");
}
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: final editText text: null");
}
}
}
break;
default:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: not interested in type");
}
if (EXTRA_VERBOSE) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: unwanted contentDesc: " + source.getContentDescription());
}
if (source.getText() != null) {
final String text = source.getText().toString();
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: unwanted text: " + text);
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: unwanted text: null");
}
}
final int childCount = source.getChildCount();
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: unwanted childCount: " + childCount);
}
if (childCount > 0) {
for (int i = 0; i < childCount; i++) {
final String text = examineChild(source.getChild(i));
if (text != null) {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: unwanted child text: " + text);
}
}
}
}
}
break;
}
try {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: recycling source");
}
if (source != null) {
source.recycle();
}
} catch (final IllegalStateException e) {
if (DEBUG) {
MyLog.w(CLS_NAME, "onAccessibilityEvent: IllegalStateException source recycle");
e.printStackTrace();
}
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: event null");
}
}
}
/**
* Check if the previous command was actioned within the {@link #COMMAND_UPDATE_DELAY}
*
* @param currentTime the time of the current {@link AccessibilityEvent}
* @return true if the delay is sufficient to proceed, false otherwise
*/
private boolean commandDelaySufficient(final long currentTime) {
if (DEBUG) {
MyLog.i(CLS_NAME, "commandDelaySufficient");
}
final long delay = (currentTime - COMMAND_UPDATE_DELAY);
if (DEBUG) {
MyLog.i(CLS_NAME, "commandDelaySufficient: delay: " + delay);
MyLog.i(CLS_NAME, "commandDelaySufficient: previousCommandTime: " + previousCommandTime);
}
return delay > previousCommandTime;
}
/**
* Check if the previous command/text matches the previous text we processed
*
* @param text the current text
* @return true if the text matches the previous text we processed, false otherwise.
*/
private boolean commandPreviousMatches(@NonNull final String text) {
if (DEBUG) {
MyLog.i(CLS_NAME, "commandPreviousMatches");
}
return previousCommandProcessed != null && previousCommandProcessed.matches(text);
}
/**
* Check if the previous command/text matches the current text we are considering processing
*
* @param text the current text
* @return true if the text matches the previous text we processed, false otherwise.
*/
private boolean commandPreviousInterimChecked(@NonNull final String text) {
if (DEBUG) {
MyLog.i(CLS_NAME, "commandPreviousInterimChecked");
}
return previousCommandInterimChecked != null && previousCommandInterimChecked.matches(text);
}
/**
* Check if the previous command/text matches the current text we are considering processing
*
* @param text the current text
* @return true if the text matches the previous text we processed, false otherwise.
*/
private boolean commandPreviousFinalChecked(@NonNull final String text) {
if (DEBUG) {
MyLog.i(CLS_NAME, "commandPreviousFinalChecked");
}
return previousCommandFinalChecked != null && previousCommandFinalChecked.matches(text);
}
/**
* Check if the interim text matches a command we want to intercept
*
* @param text the intercepted text
* @return true if the text matches a command false otherwise
*/
private boolean interimMatch(@NonNull final String text) {
if (isListening(text)) {
if (DEBUG) {
MyLog.i(CLS_NAME, "interimMatch: listening");
}
return false;
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "interimMatch: Processing: " + text);
}
}
final ArrayList<String> toResolve = new ArrayList<>(1);
toResolve.add(text);
final float[] confidence = new float[1];
confidence[0] = 1f;
final ArrayList<Pair<CC, Float>> resolveArray = new Resolve(getApplicationContext(),
toResolve, confidence, sl, true).resolve();
if (DEBUG) {
if (UtilsList.notNaked(resolveArray)) {
MyLog.i(CLS_NAME, "interimMatch: resolveArray size: " + resolveArray.size());
MyLog.i(CLS_NAME, "interimMatch: resolveArray CC: " + resolveArray.get(0).first.name());
} else {
MyLog.i(CLS_NAME, "interimMatch: resolveArray naked");
}
}
return UtilsList.notNaked(resolveArray);
}
/**
* Check if the final text matches a command we want to intercept
*
* @param text the intercepted text
* @return true if the text matches a command false otherwise
*/
private boolean finalMatch(@NonNull final String text) {
if (DEBUG) {
MyLog.i(CLS_NAME, "finalMatch");
}
if (isListening(text)) {
if (DEBUG) {
MyLog.i(CLS_NAME, "finalMatch: listening");
}
return false;
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "finalMatch: Processing: " + text);
}
}
final ArrayList<String> toResolve = new ArrayList<>(1);
toResolve.add(text);
final float[] confidence = new float[1];
confidence[0] = 1f;
final ArrayList<Pair<CC, Float>> resolveArray = new Resolve(getApplicationContext(),
toResolve, confidence, sl, false).resolve();
if (DEBUG) {
if (UtilsList.notNaked(resolveArray)) {
MyLog.i(CLS_NAME, "finalMatch: resolveArray size: " + resolveArray.size());
MyLog.i(CLS_NAME, "finalMatch: resolveArray CC: " + resolveArray.get(0).first.name());
} else {
MyLog.i(CLS_NAME, "finalMatch: resolveArray naked");
}
}
return UtilsList.notNaked(resolveArray);
}
/**
* Check if the text matches the standard 'listening...' text
*
* @param text the input text
* @return true if a match is found, false otherwise
*/
private boolean isListening(@NonNull final String text) {
return pListening.matcher(text).matches();
}
/**
* Process the extracted text as identified as a command
*
* @param text the command to process
*/
private void process(@NonNull final String text) {
if (DEBUG) {
MyLog.i(CLS_NAME, "process");
}
final Bundle bundle = new Bundle();
final ArrayList<String> voiceResults = new ArrayList<>(1);
voiceResults.add(text);
final float[] confidence = new float[1];
confidence[0] = 1f;
bundle.putStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION, voiceResults);
bundle.putFloatArray(SpeechRecognizer.CONFIDENCE_SCORES, confidence);
bundle.putInt(LocalRequest.EXTRA_CONDITION, Condition.CONDITION_GOOGLE_NOW);
AsyncTask.execute(new Runnable() {
@Override
public void run() {
new RecognitionAction(SaiyAccessibilityService.this.getApplicationContext(), SPH.getVRLocale(SaiyAccessibilityService.this.getApplicationContext()),
SPH.getTTSLocale(SaiyAccessibilityService.this.getApplicationContext()), sl, bundle);
}
});
}
/**
* Kill or reset Google
*/
private void killGoogle(final boolean terminate) {
if (DEBUG) {
MyLog.i(CLS_NAME, "killGoogle");
}
if (terminate) {
AsyncTask.execute(new Runnable() {
@Override
public void run() {
ExecuteIntent.googleNow(SaiyAccessibilityService.this.getApplicationContext(), "");
try {
Thread.sleep(150);
} catch (final InterruptedException e) {
if (DEBUG) {
MyLog.w(CLS_NAME, "killGoogle InterruptedException");
e.printStackTrace();
}
}
ExecuteIntent.goHome(SaiyAccessibilityService.this.getApplicationContext());
UtilsApplication.killPackage(SaiyAccessibilityService.this.getApplicationContext(), IntentConstants.PACKAGE_NAME_GOOGLE_NOW);
}
});
} else {
ExecuteIntent.googleNow(getApplicationContext(), "");
}
}
/**
* Recursively examine the {@link AccessibilityNodeInfo} object
*
* @param parent the {@link AccessibilityNodeInfo} parent object
* @return the extracted text or null if no text was contained in the child objects
*/
private String examineChild(@Nullable final AccessibilityNodeInfo parent) {
if (DEBUG) {
MyLog.i(CLS_NAME, "examineChild");
}
if (parent != null) {
for (int i = 0; i < parent.getChildCount(); i++) {
final AccessibilityNodeInfo nodeInfo = parent.getChild(i);
if (nodeInfo != null) {
if (DEBUG) {
MyLog.i(CLS_NAME, "examineChild: nodeInfo: getClassName: " + nodeInfo.getClassName());
MyLog.i(CLS_NAME, "examineChild: nodeInfo: contentDesc: " + nodeInfo.getContentDescription());
}
if (nodeInfo.getText() != null) {
if (DEBUG) {
MyLog.i(CLS_NAME, "examineChild: have text: returning: " + nodeInfo.getText().toString());
}
return nodeInfo.getText().toString();
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "examineChild: text: null: recurse");
}
final int childCount = nodeInfo.getChildCount();
if (DEBUG) {
MyLog.i(CLS_NAME, "examineChild: childCount: " + childCount);
}
if (childCount > 0) {
final String text = examineChild(nodeInfo);
if (text != null) {
if (DEBUG) {
MyLog.i(CLS_NAME, "examineChild: have recursive text: returning: " + text);
}
return text;
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "examineChild: recursive text: null");
}
}
}
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "examineChild: nodeInfo null");
}
}
}
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "examineChild: parent null");
}
}
return null;
}
/**
* Check the event type for debugging
*
* @param eventType the Accessibility event type
* @return the Accessibility event type
*/
private int getEventType(final int eventType) {
switch (eventType) {
case AccessibilityEvent.TYPE_ANNOUNCEMENT:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_ANNOUNCEMENT");
}
break;
case AccessibilityEvent.TYPE_ASSIST_READING_CONTEXT:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_ASSIST_READING_CONTEXT");
}
break;
case AccessibilityEvent.TYPE_GESTURE_DETECTION_END:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_GESTURE_DETECTION_END");
}
break;
case AccessibilityEvent.TYPE_GESTURE_DETECTION_START:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_GESTURE_DETECTION_START");
}
break;
case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_NOTIFICATION_STATE_CHANGED");
}
break;
case AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_END:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_TOUCH_EXPLORATION_GESTURE_END");
}
break;
case AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_START:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_TOUCH_EXPLORATION_GESTURE_START");
}
break;
case AccessibilityEvent.TYPE_TOUCH_INTERACTION_END:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_TOUCH_INTERACTION_END");
}
break;
case AccessibilityEvent.TYPE_TOUCH_INTERACTION_START:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_TOUCH_INTERACTION_START");
}
break;
case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED");
}
break;
case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_VIEW_ACCESSIBILITY_FOCUSED");
}
break;
case AccessibilityEvent.TYPE_VIEW_CLICKED:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_VIEW_CLICKED");
}
break;
case AccessibilityEvent.TYPE_VIEW_CONTEXT_CLICKED:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_VIEW_CONTEXT_CLICKED");
}
break;
case AccessibilityEvent.TYPE_VIEW_FOCUSED:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_VIEW_FOCUSED");
}
break;
case AccessibilityEvent.TYPE_VIEW_HOVER_ENTER:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_VIEW_HOVER_ENTER");
}
break;
case AccessibilityEvent.TYPE_VIEW_HOVER_EXIT:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_VIEW_HOVER_EXIT");
}
break;
case AccessibilityEvent.TYPE_VIEW_LONG_CLICKED:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_VIEW_LONG_CLICKED");
}
break;
case AccessibilityEvent.TYPE_VIEW_SCROLLED:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_VIEW_SCROLLED");
}
break;
case AccessibilityEvent.TYPE_VIEW_SELECTED:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_VIEW_SELECTED");
}
break;
case AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_VIEW_TEXT_CHANGED");
}
break;
case AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_VIEW_TEXT_SELECTION_CHANGED");
}
break;
case AccessibilityEvent.TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY");
}
break;
case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_WINDOW_CONTENT_CHANGED");
}
break;
case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_WINDOW_STATE_CHANGED");
}
break;
case AccessibilityEvent.TYPE_WINDOWS_CHANGED:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPE_WINDOWS_CHANGED");
}
break;
case AccessibilityEvent.TYPES_ALL_MASK:
if (DEBUG) {
MyLog.i(CLS_NAME, "onAccessibilityEvent: TYPES_ALL_MASK");
}
break;
default:
if (DEBUG) {
MyLog.w(CLS_NAME, "onAccessibilityEvent: default");
}
break;
}
return eventType;
}
@Override
public void onInterrupt() {
if (DEBUG) {
MyLog.i(CLS_NAME, "onInterrupt");
}
}
@Override
public void onDestroy() {
super.onDestroy();
if (DEBUG) {
MyLog.i(CLS_NAME, "onDestroy");
}
}
}
================================================
FILE: app/src/main/java/ai/saiy/android/algorithms/Algorithm.java
================================================
/*
* Copyright (c) 2016. Saiy Ltd. All Rights Reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package ai.saiy.android.algorithms;
import android.content.Context;
import android.support.annotation.NonNull;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.Locale;
import ai.saiy.android.localisation.SupportedLanguage;
import ai.saiy.android.utils.SPH;
import ai.saiy.android.utils.UtilsString;
/**
* Class to hold our algorithm constants and utility methods.
* <p/>
* Created by benrandall76@gmail.com on 21/04/2016.
*/
public enum Algorithm {
REGEX,
JARO_WINKLER,
LEVENSHTEIN,
SOUNDEX,
METAPHONE,
DOUBLE_METAPHONE,
FUZZY,
NEEDLEMAN_WUNCH,
MONGE_ELKAN;
public static final double JWD_LOWER_THRESHOLD = 0.88;
public static final double JWD_UPPER_THRESHOLD = 0.93;
public static final double JWD_MAX_THRESHOLD = 1.0;
public static final double LEV_UPPER_THRESHOLD = 3.9;
public static final double LEV_MAX_THRESHOLD = 0.0;
public static final double ME_UPPER_THRESHOLD = 0.90;
public static final double ME_MAX_THRESHOLD = 1.0;
public static final double FUZZY_MULTIPLIER = 2.25;
public static final double NW_UPPER_THRESHOLD = 0.85;
public static final double NW_MAX_THRESHOLD = 1.0;
public static final double SOUNDEX_UPPER_THRESHOLD = 2.9;
public static final double SOUNDEX_MAX_THRESHOLD = 4;
private static final double LENGTH_THRESHOLD = 0.75;
/**
* A utility method to compare the lengths of two strings and check the difference falls
* within {@link #LENGTH_THRESHOLD}.
*
* @param s1 first string
* @param s2 second string
* @return true if the length difference falls within {@link #LENGTH_THRESHOLD}. False otherwise.
*/
public static boolean checkLength(@NonNull final String s1, @NonNull final String s2) {
if (s1.length() < s2.length()) {
return ((double) s1.length() / s2.length()) > LENGTH_THRESHOLD;
} else {
return ((double) s2.length() / s1.length()) > LENGTH_THRESHOLD;
}
}
/**
* Get the standard {@link Algorithm} list to use dependent on the {@link SupportedLanguage}.
* Advanced users may have selected or deselected algorithms from the standard list, so first we
* check {@link SPH#getAlgorithms(Context)} to see if a setting has been applied.
*
* @param ctx the application context
* @param sl the {@link SupportedLanguage}
* @return a list of {@link Algorithm}
*/
public static Algorithm[] getAlgorithms(@NonNull final Context ctx, @NonNull final SupportedLanguage sl) {
final String userAlgorithms = SPH.getAlgorithms(ctx);
if (UtilsString.notNaked(userAlgorithms)) {
final Gson gson = new GsonBuilder().disableHtmlEscaping().create();
return gson.fromJson(userAlgorithms, Algorithm[].class);
} else {
switch (sl) {
case ENGLISH:
case ENGLISH_US:
return Algorithm.values();
}
}
return Algorithm.values();
}
/**
* Get the standard {@link Algorithm} list to use dependent on the {@link Locale}.
* Advanced users may have selected or deselected algorithms from the standard list, so first we
* check {@link SPH#getAlgorithms(Context)} to see if a setting has been applied.
*
* @param ctx the application context
* @param locale the {@link Locale}
* @return a list of {@link Algorithm}
*/
public static Algorithm[] getAlgorithms(@NonNull final Context ctx, @NonNull final Locale locale) {
final String userAlgorithms = SPH.getAlgorithms(ctx);
if (UtilsString.notNaked(userAlgorithms)) {
final Gson gson = new GsonBuilder().disableHtmlEscaping().create();
return gson.fromJson(userAlgorithms, Algorithm[].class);
} else {
if (locale.toString().toLowerCase(locale).startsWith("en")) {
return Algorithm.values();
}
}
return Algorithm.values();
}
/**
* Set the standard {@link Algorithm} list to use dependent on the {@link SupportedLanguage}.
* An advanced user has initiated this method to select or deselect algorithms from the standard
* list containing only those supported by their {@link SPH#getAlgorithms(Context)}.
*
* @param ctx the application context
* @param algorithms a list of {@link Algorithm}
*/
public static void setAlgorithms(@NonNull final Context ctx, @NonNull final Algorithm[] algorithms) {
final Gson gson = new GsonBuilder().disableHtmlEscaping().create();
SPH.setAlgorithms(ctx, gson.toJson(algorithms));
}
}
================================================
FILE: app/src/main/java/ai/saiy/android/algorithms/distance/EditDistance.java
================================================
/*
* Copyright (c) 2016. Saiy Ltd. All Rights Reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ai.saiy.android.algorithms.distance;
/**
* Created by benrandall76@gmail.com on 21/04/2016.
*/
/**
* Interface for <a href="http://en.wikipedia.org/wiki/Edit_distance">Edit Distances</a>.
* <p/>
* A edit distance measures the similarity between two character sequences. Closer strings
* have shorter distances, and vice-versa.
* <p>
* This is a BiFunction CharSequence, CharSequence.
* <p>
* The <code>apply</code> method accepts a pair of {@link CharSequence} parameters
* and returns an <code>R</code> type similarity score.
* </p>
*
* @param <R> The type of similarity score unit used by this EditDistance.
*/
public interface EditDistance<R> {
/**
* Compares two CharSequences.
*
* @param left the first CharSequence
* @param right the second CharSequence
* @return the similarity score between two CharSequences
*/
R apply(final CharSequence left, final CharSequence right);
}
================================================
FILE: app/src/main/java/ai/saiy/android/algorithms/distance/jarowinkler/JaroWinklerDistance.java
================================================
/*
* Copyright (c) 2016. Saiy Ltd. All Rights Reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ai.saiy.android.algorithms.distance.jarowinkler;
import ai.saiy.android.algorithms.distance.EditDistance;
/**
* Created by benrandall76@gmail.com on 21/04/2016.
*/
public class JaroWinklerDistance implements EditDistance<Double> {
/**
* The default prefix length limit set to four.
*/
private static final int PREFIX_LENGTH_LIMIT = 4;
/**
* Represents a failed index search.
*/
private static final int INDEX_NOT_FOUND = -1;
/**
* Find the Jaro Winkler Distance which indicates the similarity score
* between two CharSequences.
* <p/>
* <pre>
* distance.apply(null, null) = IllegalArgumentException
* distance.apply("","") = 0.0
* distance.apply("","a") = 0.0
* distance.apply("aaapppp", "") = 0.0
* distance.apply("frog", "fog") = 0.93
* distance.apply("fly", "ant") = 0.0
* distance.apply("elephant", "hippo") = 0.44
* distance.apply("hippo", "elephant") = 0.44
* distance.apply("hippo", "zzzzzzzz") = 0.0
* distance.apply("hello", "hallo") = 0.88
* distance.apply("ABC Corporation", "ABC Corp") = 0.91
* distance.apply("D N H Enterprises Inc", "D & H Enterprises, Inc.") = 0.93
* distance.apply("My Gym Children's Fitness Center", "My Gym. Childrens Fitness") = 0.94
* distance.apply("PENNSYLVANIA", "PENNCISYLVNIA") = 0.9
* </pre>
*
* @param left the first String, must not be null
* @param right the second String, must not be null
* @return result distance
* @throws IllegalArgumentException if either String input {@code null}
*/
@Override
public Double apply(CharSequence left, CharSequence right) {
final double defaultScalingFactor = 0.1;
final double percentageRoundValue = 100.0;
if (left == null || right == null) {
throw new IllegalArgumentException("Strings must not be null");
}
final double jaro = score(left, right);
final int cl = commonPrefixLength(left, right);
return Math.round((jaro + defaultScalingFactor
* cl * (1.0 - jaro)) * percentageRoundValue) / percentageRoundValue;
}
/**
* Calculates the number of characters from the beginning of the strings
* that match exactly one-to-one, up to a maximum of four (4) characters.
*
* @param first The first string.
* @param second The second string.
* @return A number between 0 and 4.
*/
private static int commonPrefixLength(final CharSequence first,
final CharSequence second) {
final int result = getCommonPrefix(first.toString(), second.toString())
.length();
// Limit the result to 4.
return result > PREFIX_LENGTH_LIMIT ? PREFIX_LENGTH_LIMIT : result;
}
/**
* Compares all Strings in an array and returns the initial sequence of
* characters that is common to all of them.
* <p/>
* <p>
* For example,
* <code>getCommonPrefix(new String[] {"i am a machine", "i am a robot"}) -> "i am a "</code>
* </p>
* <p/>
* <pre>
* getCommonPrefix(null) = ""
* getCommonPrefix(new String[] {}) = ""
* getCommonPrefix(new String[] {"abc"}) = "abc"
* getCommonPrefix(new String[] {null, null}) = ""
* getCommonPrefix(new String[] {"", ""}) = ""
* getCommonPrefix(new String[] {"", null}) = ""
* getCommonPrefix(new String[] {"abc", null, null}) = ""
* getCommonPrefix(new String[] {null, null, "abc"}) = ""
* getCommonPrefix(new String[] {"", "abc"}) = ""
* getCommonPrefix(new String[] {"abc", ""}) = ""
* getCommonPrefix(new String[] {"abc", "abc"}) = "abc"
* getCommonPrefix(new String[] {"abc", "a"}) = "a"
* getCommonPrefix(new String[] {"ab", "abxyz"}) = "ab"
* getCommonPrefix(new String[] {"abcde", "abxyz"}) = "ab"
* getCommonPrefix(new String[] {"abcde", "xyz"}) = ""
* getCommonPrefix(new String[] {"xyz", "abcde"}) = ""
* getCommonPrefix(new String[] {"i am a machine", "i am a robot"}) = "i am a "
* </pre>
*
* @param strs array of String objects, entries may be null
* @return the initial sequence of characters that are common to all Strings
* in the array; empty String if the array is null, the elements are
* all null or if there is no common prefix.
*/
private static String getCommonPrefix(final String... strs) {
if (strs == null || strs.length == 0) {
return "";
}
final int smallestIndexOfDiff = indexOfDifference((CharSequence[]) strs);
if (smallestIndexOfDiff == INDEX_NOT_FOUND) {
// all strings were identical
if (strs[0] == null) {
return "";
}
return strs[0];
} else if (smallestIndexOfDiff == 0) {
// there were no common initial characters
return "";
} else {
// we found a common initial character sequence
return strs[0].substring(0, smallestIndexOfDiff);
}
}
/**
* This method returns the Jaro-Winkler score for string matching.
*
* @param first the first string to be matched
* @param second the second string to be machted
* @return matching score without scaling factor impact
*/
protected static double score(final CharSequence first,
final CharSequence second) {
String shorter;
String longer;
// Determine which String is longer.
if (first.length() > second.length()) {
longer = first.toString().toLowerCase();
shorter = second.toString().toLowerCase();
} else {
longer = second.toString().toLowerCase();
shorter = first.toString().toLowerCase();
}
// Calculate the half length() distance of the shorter String.
final int halflength = shorter.length() / 2 + 1;
// Find the set of matching characters between the shorter and longer
// strings. Note that
// the set of matching characters may be different depending on the
// order of the strings.
final String m1 = getSetOfMatchingCharacterWithin(shorter, longer,
halflength);
final String m2 = getSetOfMatchingCharacterWithin(longer, shorter,
halflength);
// If one or both of the sets of common characters is empty, then
// there is no similarity between the two strings.
if (m1.length() == 0 || m2.length() == 0) {
return 0.0;
}
// If the set of common characters is not the same size, then
// there is no similarity between the two strings, either.
if (m1.length() != m2.length()) {
return 0.0;
}
// Calculate the number of transposition between the two sets
// of common characters.
final int transpositions = transpositions(m1, m2);
final double defaultDenominator = 3.0;
// Calculate the distance.
return (m1.length() / ((double) shorter.length())
+ m2.length() / ((double) longer.length()) + (m1.length() - transpositions)
/ ((double) m1.length())) / defaultDenominator;
}
/**
* Calculates the number of transposition between two strings.
*
* @param first The first string.
* @param second The second string.
* @return The number of transposition between the two strings.
*/
private static int transpositions(final CharSequence first,
final CharSequence second) {
int transpositions = 0;
for (int i = 0; i < first.length(); i++) {
if (first.charAt(i) != second.charAt(i)) {
transpositions++;
}
}
return transpositions / 2;
}
/**
* Compares all CharSequences in an array and returns the index at which the
* CharSequences begin to differ.
* <p/>
* <p>
* For example,
* <code>indexOfDifference(new String[] {"i am a machine", "i am a robot"}) -> 7</code>
* </p>
* <p/>
* <pre>
* distance.indexOfDifference(null) = -1
* distance.indexOfDifference(new String[] {}) = -1
* distance.indexOfDifference(new String[] {"abc"}) = -1
* distance.indexOfDifference(new String[] {null, null}) = -1
* distance.indexOfDifference(new String[] {"", ""}) = -1
* distance.indexOfDifference(new String[] {"", null}) = 0
* distance.indexOfDifference(new String[] {"abc", null, null}) = 0
* distance.indexOfDifference(new String[] {null, null, "abc"}) = 0
* distance.indexOfDifference(new String[] {"", "abc"}) = 0
* distance.indexOfDifference(new String[] {"abc", ""}) = 0
* distance.indexOfDifference(new String[] {"abc", "abc"}) = -1
* distance.indexOfDifference(new String[] {"abc", "a"}) = 1
* distance.indexOfDifference(new String[] {"ab", "abxyz"}) = 2
* distance.indexOfDifference(new String[] {"abcde", "abxyz"}) = 2
* distance.indexOfDifference(new String[] {"abcde", "xyz"}) = 0
* distance.indexOfDifference(new String[] {"xyz", "abcde"}) = 0
* distance.indexOfDifference(new String[] {"i am a machine", "i am a robot"}) = 7
* </pre>
*
* @param css array of CharSequences, entries may be null
* @return the index where the strings begin to differ; -1 if they are all
* equal
*/
private static int indexOfDifference(final CharSequence... css) {
if (css == null || css.length <= 1) {
return INDEX_NOT_FOUND;
}
boolean anyStringNull = false;
boolean allStringsNull = true;
final int arrayLen = css.length;
int shortestStrLen = Integer.MAX_VALUE;
int longestStrLen = 0;
// find the min and max string lengths; this avoids checking to make
// sure we are not exceeding the length of the string each time through
// the bottom loop.
for (final CharSequence cs : css) {
if (cs == null) {
anyStringNull = true;
shortestStrLen = 0;
} else {
allStringsNull = false;
shortestStrLen = Math.min(cs.length(), shortestStrLen);
longestStrLen = Math.max(cs.length(), longestStrLen);
}
}
// handle lists containing all nulls or all empty strings
if (allStringsNull || longestStrLen == 0 && !anyStringNull) {
return INDEX_NOT_FOUND;
}
// handle lists containing some nulls or some empty strings
if (shortestStrLen == 0) {
return 0;
}
// find the position with the first difference across all strings
int firstDiff = -1;
for (int stringPos = 0; stringPos < shortestStrLen; stringPos++) {
final char comparisonChar = css[0].charAt(stringPos);
for (int arrayPos = 1; arrayPos < arrayLen; arrayPos++) {
if (css[arrayPos].charAt(stringPos) != comparisonChar) {
firstDiff = stringPos;
break;
}
}
if (firstDiff != -1) {
break;
}
}
if (firstDiff == -1 && shortestStrLen != longestStrLen) {
// we compared all of the characters up to the length of the
// shortest string and didn't find a match, but the string lengths
// vary, so return the length of the shortest string.
return shortestStrLen;
}
return firstDiff;
}
/**
* Gets a set of matching characters between two strings.
* <p/>
* <p>
* Two characters from the first string and the second string are
* considered matching if the character's respective positions are no
* farther than the limit value.
* </p>
*
* @param first The first string.
* @param second The second string.
* @param limit The maximum distance to consider.
* @return A string contain the set of common characters.
*/
private static String getSetOfMatchingCharacterWithin(
final CharSequence first, final CharSequence second, final int limit) {
final StringBuilder common = new StringBuilder();
final StringBuilder copy = new StringBuilder(second);
for (int i = 0; i < first.length(); i++) {
final char ch = first.charAt(i);
boolean found = false;
// See if the character is within the limit positions away from the
// original position of that character.
for (int j = Math.max(0, i - limit); !found
&& j < Math.min(i + limit, second.length()); j++) {
if (copy.charAt(j) == ch) {
found = true;
common.append(ch);
copy.setCharAt(j, '*');
}
}
}
return common.toString();
}
}
================================================
FILE: app/src/main/java/ai/saiy/android/algorithms/distance/jarowinkler/JaroWinklerHelper.java
================================================
/*
* Copyright (c) 2016. Saiy Ltd. All Rights Reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package ai.saiy.android.algorithms.distance.jarowinkler;
import android.content.Context;
import android.support.annotation.NonNull;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.apache.commons.lang3.SerializationUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Locale;
import java.util.concurrent.Callable;
import ai.saiy.android.algorithms.Algorithm;
import ai.saiy.android.custom.CustomCommand;
import ai.saiy.android.custom.CustomCommandContainer;
import ai.saiy.android.localisation.SupportedLanguage;
import ai.saiy.android.nlu.local.AlgorithmicContainer;
import ai.saiy.android.utils.MyLog;
import ai.saiy.android.utils.SPH;
import ai.saiy.android.utils.UtilsList;
/**
* Class to apply the Jaro-Winkler algorithm.
* <p/>
* Created by benrandall76@gmail.com on 21/04/2016.
*/
public class JaroWinklerHelper implements Callable<Object> {
private final boolean DEBUG = MyLog.DEBUG;
private final String CLS_NAME = JaroWinklerHelper.class.getSimpleName();
private final Context mContext;
private final ArrayList<String> inputData;
private final Locale loc;
private final ArrayList<?> genericData;
/**
* Constructor
*
* @param mContext the application context
* @param genericData an array containing generic data
* @param inputData an array of Strings containing the input comparison data
* @param loc the {@link Locale} extracted from the {@link SupportedLanguage}
*/
public JaroWinklerHelper(@NonNull final Context mContext, @NonNull final ArrayList<?> genericData,
@NonNull final ArrayList<String> inputData, @NonNull final Locale loc) {
this.mContext = mContext;
this.genericData = genericData;
this.inputData = inputData;
this.loc = loc;
}
/**
* Method to iterate through the voice data and attempt to match the user's custom commands
* using the {@link JaroWinklerDistance} within ranges applied by the associated thresholds constants.
*
* @return the highest scoring {@link CustomCommand} or null if thresholds aren't satisfied
*/
public CustomCommand executeCustomCommand() {
long then = System.nanoTime();
final double jwdUpperThreshold = SPH.getJaroWinklerUpper(mContext);
CustomCommand customCommand = null;
final ArrayList<CustomCommandContainer> toKeep = new ArrayList<>();
final JaroWinklerDistance jwd = new JaroWinklerDistance();
String phrase;
CustomCommandContainer container;
double distance;
int size = genericData.size();
outer:
for (int i = 0; i < size; i++) {
container = (CustomCommandContainer) genericData.get(i);
phrase = container.getKeyphrase().toLowerCase(loc).trim();
for (String vd : inputData) {
vd = vd.toLowerCase(loc).trim();
distance = jwd.apply(phrase, vd);
if (distance > jwdUpperThreshold) {
container.setUtterance(vd);
container.setScore(distance);
if (distance == Algorithm.JWD_MAX_THRESHOLD) {
if (DEBUG) {
MyLog.i(CLS_NAME, "Exact match " + phrase);
}
container.setExactMatch(true);
toKeep.add(SerializationUtils.clone(container));
break outer;
} else {
toKeep.add(SerializationUtils.clone(container));
}
}
}
}
if (UtilsList.notNaked(toKeep)) {
if (DEBUG) {
MyLog.i(CLS_NAME, "Have " + toKeep.size() + " phrase matches");
for (final CustomCommandContainer c : toKeep) {
MyLog.i(CLS_NAME, "before order: " + c.getKeyphrase() + " ~ " + c.getScore());
}
}
Collections.sort(toKeep, new Comparator<CustomCommandContainer>() {
@Override
public int compare(final CustomCommandContainer c1, final CustomCommandContainer c2) {
return Double.compare(c2.getScore(), c1.getScore());
}
});
if (DEBUG) {
for (final CustomCommandContainer c : toKeep) {
MyLog.i(CLS_NAME, "after order: " + c.getKeyphrase() + " ~ " + c.getScore());
}
MyLog.i(CLS_NAME, "would select: " + toKeep.get(0).getKeyphrase());
}
final CustomCommandContainer ccc = toKeep.get(0);
final Gson gson = new GsonBuilder().disableHtmlEscaping().create();
customCommand = gson.fromJson(ccc.getSerialised(), CustomCommand.class);
customCommand.setExactMatch(ccc.isExactMatch());
customCommand.setUtterance(ccc.getUtterance());
customCommand.setScore(ccc.getScore());
customCommand.setAlgorithm(Algorithm.JARO_WINKLER);
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "no custom phrases above threshold");
}
}
if (DEBUG) {
MyLog.getElapsed(CLS_NAME, then);
}
return customCommand;
}
/**
* Method to iterate through the given input data and attempt to match the given String data
* using the {@link JaroWinklerDistance} within ranges applied by the associated thresholds constants.
*
* @return an {@link AlgorithmicContainer} or null if thresholds aren't satisfied
*/
public AlgorithmicContainer executeGeneric() {
long then = System.nanoTime();
final double jwdUpperThreshold = SPH.getJaroWinklerUpper(mContext);
final ArrayList<AlgorithmicContainer> toKeep = new ArrayList<>();
final JaroWinklerDistance jwd = new JaroWinklerDistance();
String generic;
String genericLower;
AlgorithmicContainer container = null;
double distance;
int size = genericData.size();
outer:
for (int i = 0; i < size; i++) {
generic = (String) genericData.get(i);
genericLower = generic.toLowerCase(loc).trim();
for (String vd : inputData) {
vd = vd.toLowerCase(loc).trim();
distance = jwd.apply(genericLower, vd);
if (distance > jwdUpperThreshold) {
container = new AlgorithmicContainer();
container.setInput(vd);
container.setGenericMatch(generic);
container.setScore(distance);
container.setAlgorithm(Algorithm.JARO_WINKLER);
container.setParentPosition(i);
if (distance == Algorithm.JWD_MAX_THRESHOLD) {
if (DEBUG) {
MyLog.i(CLS_NAME, "Exact match " + genericLower);
}
container.setExactMatch(true);
toKeep.add(container);
break outer;
} else {
container.setExactMatch(false);
toKeep.add(container);
}
}
}
}
if (UtilsList.notNaked(toKeep)) {
if (DEBUG) {
MyLog.i(CLS_NAME, "Have " + toKeep.size() + " input matches");
for (final AlgorithmicContainer c : toKeep) {
MyLog.i(CLS_NAME, "before order: " + c.getGenericMatch() + " ~ " + c.getScore());
}
}
Collections.sort(toKeep, new Comparator<AlgorithmicContainer>() {
@Override
public int compare(final AlgorithmicContainer c1, final AlgorithmicContainer c2) {
return Double.compare(c2.getScore(), c1.getScore());
}
});
if (DEBUG) {
for (final AlgorithmicContainer c : toKeep) {
MyLog.i(CLS_NAME, "after order: " + c.getGenericMatch() + " ~ " + c.getScore());
}
MyLog.i(CLS_NAME, "would select: " + toKeep.get(0).getGenericMatch());
}
container = toKeep.get(0);
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "no matches above threshold");
}
}
if (DEBUG) {
MyLog.getElapsed(CLS_NAME, then);
}
return container;
}
/**
* Computes a result, or throws an exception if unable to do so.
*
* @return computed result
* @throws Exception if unable to compute a result
*/
@Override
public Object call() throws Exception {
if (UtilsList.notNaked(genericData)) {
if (genericData.get(0) instanceof String) {
return executeGeneric();
} else {
return executeCustomCommand();
}
}
return null;
}
}
================================================
FILE: app/src/main/java/ai/saiy/android/algorithms/distance/levenshtein/LevenshteinDistance.java
================================================
/*
* Copyright (c) 2016. Saiy Ltd. All Rights Reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ai.saiy.android.algorithms.distance.levenshtein;
import java.util.Arrays;
import ai.saiy.android.algorithms.distance.EditDistance;
/**
* Created by benrandall76@gmail.com on 21/04/2016.
*/
public class LevenshteinDistance implements EditDistance<Integer> {
/**
* Default instance.
*/
private static final LevenshteinDistance DEFAULT_INSTANCE = new LevenshteinDistance();
/**
* Threshold.
*/
private final Integer threshold;
/**
* <p>
* This returns the default instance that uses a version
* of the algorithm that does not use a threshold parameter.
* </p>
*
* @see LevenshteinDistance#getDefaultInstance()
*/
public LevenshteinDistance() {
this(null);
}
/**
* <p>
* If the threshold is not null, distance calculations will be limited to a maximum length.
* If the threshold is null, the unlimited version of the algorithm will be used.
* </p>
*
* @param threshold If this is null then distances calculations will not be limited.
* This may not be negative.
*/
public LevenshteinDistance(final Integer threshold) {
if (threshold != null && threshold < 0) {
throw new IllegalArgumentException("Threshold must not be negative");
}
this.threshold = threshold;
}
/**
* <p>Find the Levenshtein distance between two Strings.</p>
* <p/>
* <p>A higher score indicates a greater distance.</p>
* <p/>
* <p>The previous implementation of the Levenshtein distance algorithm
* was from <a href="http://www.merriampark.com/ld.htm">http://www.merriampark.com/ld.htm</a></p>
* <p/>
* <p>Chas Emerick has written an implementation in Java, which avoids an OutOfMemoryError
* which can occur when my Java implementation is used with very large strings.<br>
* This implementation of the Levenshtein distance algorithm
* is from <a href="http://www.merriampark.com/ldjava.htm">http://www.merriampark.com/ldjava.htm</a></p>
* <p/>
* <pre>
* distance.apply(null, *) = IllegalArgumentException
* distance.apply(*, null) = IllegalArgumentException
* distance.apply("","") = 0
* distance.apply("","a") = 1
* distance.apply("aaapppp", "") = 7
* distance.apply("frog", "fog") = 1
* distance.apply("fly", "ant") = 3
* distance.apply("elephant", "hippo") = 7
* distance.apply("hippo", "elephant") = 7
* distance.apply("hippo", "zzzzzzzz") = 8
* distance.apply("hello", "hallo") = 1
* </pre>
*
* @param left the first string, must not be null
* @param right the second string, must not be null
* @return result distance, or -1
* @throws IllegalArgumentException if either String input {@code null}
*/
public Integer apply(CharSequence left, CharSequence right) {
if (threshold != null) {
return limitedCompare(left, right, threshold);
} else {
return unlimitedCompare(left, right);
}
}
/**
* Gets the default instance.
*
* @return the default instace
*/
private static LevenshteinDistance getDefaultInstance() {
return DEFAULT_INSTANCE;
}
/**
* Gets the distance threshold.
*
* @return the distance threshold
*/
public Integer getThreshold() {
return threshold;
}
/**
* Find the Levenshtein distance between two CharSequences if it's less than or
* equal to a given threshold.
* <p/>
* <p>
* This implementation follows from Algorithms on Strings, Trees and
* Sequences by Dan Gusfield and Chas Emerick's implementation of the
* Levenshtein distance algorithm from <a
* href="http://www.merriampark.com/ld.htm"
* >http://www.merriampark.com/ld.htm</a>
* </p>
* <p/>
* <pre>
* limitedCompare(null, *, *) = IllegalArgumentException
* limitedCompare(*, null, *) = IllegalArgumentException
* limitedCompare(*, *, -1) = IllegalArgumentException
* limitedCompare("","", 0) = 0
* limitedCompare("aaapppp", "", 8) = 7
* limitedCompare("aaapppp", "", 7) = 7
* limitedCompare("aaapppp", "", 6)) = -1
* limitedCompare("elephant", "hippo", 7) = 7
* limitedCompare("elephant", "hippo", 6) = -1
* limitedCompare("hippo", "elephant", 7) = 7
* limitedCompare("hippo", "elephant", 6) = -1
* </pre>
*
* @param left the first string, must not be null
* @param right the second string, must not be null
* @param threshold the target threshold, must not be negative
* @return result distance, or -1
*/
private static int limitedCompare(CharSequence left, CharSequence right, int threshold) {
if (left == null || right == null) {
throw new IllegalArgumentException("Strings must not be null");
}
if (threshold < 0) {
throw new IllegalArgumentException("Threshold must not be negative");
}
/*
* This implementation only computes the distance if it's less than or
* equal to the threshold value, returning -1 if it's greater. The
* advantage is performance: unbounded distance is O(nm), but a bound of
* k allows us to reduce it to O(km) time by only computing a diagonal
* stripe of width 2k + 1 of the cost table. It is also possible to use
* this to compute the unbounded Levenshtein distance by starting the
* threshold at 1 and doubling each time until the distance is found;
* this is O(dm), where d is the distance.
*
* One subtlety comes from needing to ignore entries on the border of
* our stripe eg. p[] = |#|#|#|* d[] = *|#|#|#| We must ignore the entry
* to the left of the leftmost member We must ignore the entry above the
* rightmost member
*
* Another subtlety comes from our stripe running off the matrix if the
* strings aren't of the same size. Since string s is always swapped to
* be the shorter of the two, the stripe will always run off to the
* upper right instead of the lower left of the matrix.
*
* As a concrete example, suppose s is of length 5, t is of length 7,
* and our threshold is 1. In this case we're going to walk a stripe of
* length 3. The matrix would look like so:
*
* <pre>
* 1 2 3 4 5
* 1 |#|#| | | |
* 2 |#|#|#| | |
* 3 | |#|#|#| |
* 4 | | |#|#|#|
* 5 | | | |#|#|
* 6 | | | | |#|
* 7 | | | | | |
* </pre>
*
* Note how the stripe leads off the table as there is no possible way
* to turn a string of length 5 into one of length 7 in edit distance of
* 1.
*
* Additionally, this implementation decreases memory usage by using two
* single-dimensional arrays and swapping them back and forth instead of
* allocating an entire n by m matrix. This requires a few minor
* changes, such as immediately returning when it's detected that the
* stripe has run off the matrix and initially filling the arrays with
* large values so that entries we don't compute are ignored.
*
* See Algorithms on Strings, Trees and Sequences by Dan Gusfield for
* some discussion.
*/
int n = left.length(); // length of left
int m = right.length(); // length of right
// if one string is empty, the edit distance is necessarily the length
// of the other
if (n == 0) {
return m <= threshold ? m : -1;
} else if (m == 0) {
return n <= threshold ? n : -1;
}
if (n > m) {
// swap the two strings to consume less memory
final CharSequence tmp = left;
left = right;
right = tmp;
n = m;
m = right.length();
}
int[] p = new int[n + 1]; // 'previous' cost array, horizontally
int[] d = new int[n + 1]; // cost array, horizontally
int[] tempD; // placeholder to assist in swapping p and d
// fill in starting table values
final int boundary = Math.min(n, threshold) + 1;
for (int i = 0; i < boundary; i++) {
p[i] = i;
}
// these fills ensure that the value above the rightmost entry of our
// stripe will be ignored in following loop iterations
Arrays.fill(p, boundary, p.length, Integer.MAX_VALUE);
Arrays.fill(d, Integer.MAX_VALUE);
// iterates through t
for (int j = 1; j <= m; j++) {
final char rightJ = right.charAt(j - 1); // jth character of right
d[0] = j;
// compute stripe indices, constrain to array size
final int min = Math.max(1, j - threshold);
final int max = j > Integer.MAX_VALUE - threshold ? n : Math.min(
n, j + threshold);
// the stripe may lead off of the table if s and t are of different
// sizes
if (min > max) {
return -1;
}
// ignore entry left of leftmost
if (min > 1) {
d[min - 1] = Integer.MAX_VALUE;
}
// iterates through [min, max] in s
for (int i = min; i <= max; i++) {
if (left.charAt(i - 1) == rightJ) {
// diagonally left and up
d[i] = p[i - 1];
} else {
// 1 + minimum of cell to the left, to the top, diagonally
// left and up
d[i] = 1 + Math.min(Math.min(d[i - 1], p[i]), p[i - 1]);
}
}
// copy current distance counts to 'previous row' distance counts
tempD = p;
p = d;
d = tempD;
}
// if p[n] is greater than the threshold, there's no guarantee on it
// being the correct
// distance
if (p[n] <= threshold) {
return p[n];
}
return -1;
}
/**
* <p>Find the Levenshtein distance between two Strings.</p>
* <p/>
* <p>A higher score indicates a greater distance.</p>
* <p/>
* <p>The previous implementation of the Levenshtein distance algorithm
* was from <a href="http://www.merriampark.com/ld.htm">http://www.merriampark.com/ld.htm</a></p>
* <p/>
* <p>Chas Emerick has written an implementation in Java, which avoids an OutOfMemoryError
* which can occur when my Java implementation is used with very large strings.<br>
* This implementation of the Levenshtein distance algorithm
* is from <a href="http://www.merriampark.com/ldjava.htm">http://www.merriampark.com/ldjava.htm</a></p>
* <p/>
* <pre>
* unlimitedCompare(null, *) = IllegalArgumentException
* unlimitedCompare(*, null) = IllegalArgumentException
* unlimitedCompare("","") = 0
* unlimitedCompare("","a") = 1
* unlimitedCompare("aaapppp", "") = 7
* unlimitedCompare("frog", "fog") = 1
* unlimitedCompare("fly", "ant") = 3
* unlimitedCompare("elephant", "hippo") = 7
* unlimitedCompare("hippo", "elephant") = 7
* unlimitedCompare("hippo", "zzzzzzzz") = 8
* unlimitedCompare("hello", "hallo") = 1
* </pre>
*
* @param left the first String, must not be null
* @param right the second String, must not be null
* @return result distance, or -1
* @throws IllegalArgumentException if either String input {@code null}
*/
private static int unlimitedCompare(CharSequence left, CharSequence right) {
if (left == null || right == null) {
throw new IllegalArgumentException("Strings must not be null");
}
/*
The difference between this impl. and the previous is that, rather
than creating and retaining a matrix of size s.length() + 1 by t.length() + 1,
we maintain two single-dimensional arrays of length s.length() + 1. The first, d,
is the 'current working' distance array that maintains the newest distance cost
counts as we iterate through the characters of String s. Each time we increment
the index of String t we are comparing, d is copied to p, the second int[]. Doing so
allows us to retain the previous cost counts as required by the algorithm (taking
the minimum of the cost count to the left, up one, and diagonally up and to the left
of the current cost count being calculated). (Note that the arrays aren't really
copied anymore, just switched...this is clearly much better than cloning an array
or doing a System.arraycopy() each time through the outer loop.)
Effectively, the difference between the two implementations is this one does not
cause an out of memory condition when calculating the LD over two very large strings.
*/
int n = left.length(); // length of left
int m = right.length(); // length of right
if (n == 0) {
return m;
} else if (m == 0) {
return n;
}
if (n > m) {
// swap the input strings to consume less memory
final CharSequence tmp = left;
left = right;
right = tmp;
n = m;
m = right.length();
}
int[] p = new int[n + 1]; //'previous' cost array, horizontally
int[] d = new int[n + 1]; // cost array, horizontally
int[] tempD; //placeholder to assist in swapping p and d
// indexes into strings left and right
int i; // iterates through left
int j; // iterates through right
char rightJ; // jth character of right
int cost; // cost
for (i = 0; i <= n; i++) {
p[i] = i;
}
for (j = 1; j <= m; j++) {
rightJ = right.charAt(j - 1);
d[0] = j;
for (i = 1; i <= n; i++) {
cost = left.charAt(i - 1) == rightJ ? 0 : 1;
// minimum of cell to the left+1, to the top+1, diagonally left and up +cost
d[i] = Math.min(Math.min(d[i - 1] + 1, p[i] + 1), p[i - 1] + cost);
}
// copy current distance counts to 'previous row' distance counts
tempD = p;
p = d;
d = tempD;
}
// our last action in the above loop was to switch d and p, so p now
// actually has the most recent cost counts
return p[n];
}
}
================================================
FILE: app/src/main/java/ai/saiy/android/algorithms/distance/levenshtein/LevenshteinHelper.java
================================================
/*
* Copyright (c) 2016. Saiy Ltd. All Rights Reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package ai.saiy.android.algorithms.distance.levenshtein;
import android.content.Context;
import android.support.annotation.NonNull;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.apache.commons.lang3.SerializationUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Locale;
import java.util.concurrent.Callable;
import ai.saiy.android.algorithms.Algorithm;
import ai.saiy.android.custom.CustomCommand;
import ai.saiy.android.custom.CustomCommandContainer;
import ai.saiy.android.localisation.SupportedLanguage;
import ai.saiy.android.nlu.local.AlgorithmicContainer;
import ai.saiy.android.utils.MyLog;
import ai.saiy.android.utils.SPH;
import ai.saiy.android.utils.UtilsList;
/**
* Class to apply the Levenshtein algorithm.
* <p/>
* Created by benrandall76@gmail.com on 21/04/2016.
*/
public class LevenshteinHelper implements Callable<Object> {
private final boolean DEBUG = MyLog.DEBUG;
private final String CLS_NAME = LevenshteinHelper.class.getSimpleName();
private final Context mContext;
private final ArrayList<String> inputData;
private final Locale loc;
private final ArrayList<?> genericData;
/**
* Constructor
*
* @param mContext the application context
* @param genericData an array containing generic data
* @param inputData an array of Strings containing the input comparison data
* @param loc the {@link Locale} extracted from the {@link SupportedLanguage}
*/
public LevenshteinHelper(@NonNull final Context mContext, @NonNull final ArrayList<?> genericData,
@NonNull final ArrayList<String> inputData, @NonNull final Locale loc) {
this.mContext = mContext;
this.genericData = genericData;
this.inputData = inputData;
this.loc = loc;
}
/**
* Method to iterate through the voice data and attempt to match the user's custom commands
* using the {@link LevenshteinDistance} within ranges applied by the associated thresholds constants.
*
* @return the highest scoring {@link CustomCommand} or null if thresholds aren't satisfied
*/
public CustomCommand executeCustomCommand() {
long then = System.nanoTime();
final double levUpperThreshold = SPH.getLevenshteinUpper(mContext);
CustomCommand customCommand = null;
final ArrayList<CustomCommandContainer> toKeep = new ArrayList<>();
final LevenshteinDistance ld = new LevenshteinDistance();
String phrase;
CustomCommandContainer container;
double distance;
int size = genericData.size();
outer:
for (int i = 0; i < size; i++) {
container = (CustomCommandContainer) genericData.get(i);
phrase = container.getKeyphrase().toLowerCase(loc).trim();
for (String vd : inputData) {
vd = vd.toLowerCase(loc).trim();
distance = ld.apply(phrase, vd);
if (distance <= levUpperThreshold) {
if (DEBUG) {
MyLog.i(CLS_NAME, "Keeping " + phrase);
}
container.setUtterance(vd);
container.setScore(distance);
if (distance == Algorithm.LEV_MAX_THRESHOLD) {
if (DEBUG) {
MyLog.i(CLS_NAME, "Exact match " + phrase);
}
container.setExactMatch(true);
toKeep.add(SerializationUtils.clone(container));
break outer;
} else {
toKeep.add(SerializationUtils.clone(container));
}
}
}
}
if (UtilsList.notNaked(toKeep)) {
if (DEBUG) {
MyLog.i(CLS_NAME, "Have " + toKeep.size() + " phrase matches");
for (final CustomCommandContainer c : toKeep) {
MyLog.i(CLS_NAME, "before order: " + c.getKeyphrase() + " ~ " + c.getScore());
}
}
Collections.sort(toKeep, new Comparator<CustomCommandContainer>() {
@Override
public int compare(final CustomCommandContainer c1, final CustomCommandContainer c2) {
return Double.compare(c1.getScore(), c2.getScore());
}
});
if (DEBUG) {
for (final CustomCommandContainer c : toKeep) {
MyLog.i(CLS_NAME, "after order: " + c.getKeyphrase() + " ~ " + c.getScore());
}
MyLog.i(CLS_NAME, "would select: " + toKeep.get(0).getKeyphrase());
}
final CustomCommandContainer ccc = toKeep.get(0);
final Gson gson = new GsonBuilder().disableHtmlEscaping().create();
customCommand = gson.fromJson(ccc.getSerialised(), CustomCommand.class);
customCommand.setExactMatch(ccc.isExactMatch());
customCommand.setUtterance(ccc.getUtterance());
customCommand.setScore(ccc.getScore());
customCommand.setAlgorithm(Algorithm.LEVENSHTEIN);
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "no custom phrases above threshold");
}
}
if (DEBUG) {
MyLog.getElapsed(LevenshteinHelper.class.getSimpleName(), then);
}
return customCommand;
}
/**
* Method to iterate through the given input data and attempt to match the given String data
* using the {@link LevenshteinDistance} within ranges applied by the associated thresholds constants.
*
* @return an {@link AlgorithmicContainer} or null if thresholds aren't satisfied
*/
public AlgorithmicContainer executeGeneric() {
long then = System.nanoTime();
final double levUpperThreshold = SPH.getLevenshteinUpper(mContext);
final ArrayList<AlgorithmicContainer> toKeep = new ArrayList<>();
final LevenshteinDistance ld = new LevenshteinDistance();
String generic;
String genericLower;
AlgorithmicContainer container = null;
double distance;
int size = genericData.size();
outer:
for (int i = 0; i < size; i++) {
generic = (String) genericData.get(i);
genericLower = generic.toLowerCase(loc).trim();
for (String vd : inputData) {
vd = vd.toLowerCase(loc).trim();
distance = ld.apply(genericLower, vd);
if (distance <= levUpperThreshold) {
if (DEBUG) {
MyLog.i(CLS_NAME, "Keeping " + genericLower);
}
container = new AlgorithmicContainer();
container.setInput(vd);
container.setGenericMatch(generic);
container.setScore(distance);
container.setAlgorithm(Algorithm.LEVENSHTEIN);
container.setParentPosition(i);
if (distance == Algorithm.LEV_MAX_THRESHOLD) {
if (DEBUG) {
MyLog.i(CLS_NAME, "Exact match " + genericLower);
}
container.setExactMatch(true);
toKeep.add(container);
break outer;
} else {
container.setExactMatch(false);
toKeep.add(container);
}
}
}
}
if (UtilsList.notNaked(toKeep)) {
if (DEBUG) {
MyLog.i(CLS_NAME, "Have " + toKeep.size() + " input matches");
for (final AlgorithmicContainer c : toKeep) {
MyLog.i(CLS_NAME, "before order: " + c.getGenericMatch() + " ~ " + c.getScore());
}
}
Collections.sort(toKeep, new Comparator<AlgorithmicContainer>() {
@Override
public int compare(final AlgorithmicContainer c1, final AlgorithmicContainer c2) {
return Double.compare(c1.getScore(), c2.getScore());
}
});
if (DEBUG) {
for (final AlgorithmicContainer c : toKeep) {
MyLog.i(CLS_NAME, "after order: " + c.getGenericMatch() + " ~ " + c.getScore());
}
MyLog.i(CLS_NAME, "would select: " + toKeep.get(0).getGenericMatch());
}
container = toKeep.get(0);
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "no matches above threshold");
}
}
if (DEBUG) {
MyLog.getElapsed(LevenshteinHelper.class.getSimpleName(), then);
}
return container;
}
/**
* Computes a result, or throws an exception if unable to do so.
*
* @return computed result
* @throws Exception if unable to compute a result
*/
@Override
public Object call() throws Exception {
if (UtilsList.notNaked(genericData)) {
if (genericData.get(0) instanceof String) {
return executeGeneric();
} else {
return executeCustomCommand();
}
}
return null;
}
}
================================================
FILE: app/src/main/java/ai/saiy/android/algorithms/doublemetaphone/DoubleMetaphoneHelper.java
================================================
/*
* Copyright (c) 2016. Saiy Ltd. All Rights Reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package ai.saiy.android.algorithms.doublemetaphone;
import android.content.Context;
import android.support.annotation.NonNull;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.apache.commons.codec.language.DoubleMetaphone;
import org.apache.commons.lang3.SerializationUtils;
import java.util.ArrayList;
import java.util.Locale;
import java.util.concurrent.Callable;
import ai.saiy.android.algorithms.Algorithm;
import ai.saiy.android.algorithms.distance.jarowinkler.JaroWinklerDistance;
import ai.saiy.android.custom.CustomCommand;
import ai.saiy.android.custom.CustomCommandContainer;
import ai.saiy.android.localisation.SupportedLanguage;
import ai.saiy.android.nlu.local.AlgorithmicContainer;
import ai.saiy.android.utils.MyLog;
import ai.saiy.android.utils.SPH;
import ai.saiy.android.utils.UtilsList;
/**
* Class to apply the Double Metaphone phonetic algorithm. To avoid false positives on partial phonetic
* matches, we apply a further two filters - the first compares the String lengths to make sure they
* fall within the {@link Algorithm#LENGTH_THRESHOLD} and the seconds runs the {@link JaroWinklerDistance}
* algorithm to check it falls within the {@link Algorithm#JWD_LOWER_THRESHOLD}
* <p/>
* Created by benrandall76@gmail.com on 21/04/2016.
*/
public class DoubleMetaphoneHelper implements Callable<Object> {
private final boolean DEBUG = MyLog.DEBUG;
private final String CLS_NAME = DoubleMetaphoneHelper.class.getSimpleName();
private final Context mContext;
private final ArrayList<String> inputData;
private final Locale loc;
private final ArrayList<?> genericData;
/**
* Constructor
*
* @param mContext the application context
* @param genericData an array containing generic data
* @param inputData an array of Strings containing the input comparison data
* @param loc the {@link Locale} extracted from the {@link SupportedLanguage}
*/
public DoubleMetaphoneHelper(@NonNull final Context mContext, @NonNull final ArrayList<?> genericData,
@NonNull final ArrayList<String> inputData, @NonNull final Locale loc) {
this.mContext = mContext;
this.genericData = genericData;
this.inputData = inputData;
this.loc = loc;
}
/**
* Method to iterate through the voice data and attempt to match the user's custom commands
* using the {@link DoubleMetaphone} within ranges applied by the associated thresholds constants.
*
* @return the highest scoring {@link CustomCommand} or null if thresholds aren't satisfied
*/
public CustomCommand executeCustomCommand() {
long then = System.nanoTime();
final double jwdLowerThreshold = SPH.getJaroWinklerLower(mContext);
CustomCommand customCommand = null;
final ArrayList<CustomCommandContainer> toKeep = new ArrayList<>();
final DoubleMetaphone metaphone = new DoubleMetaphone();
final JaroWinklerDistance jwd = new JaroWinklerDistance();
String phrase;
CustomCommandContainer container;
double score;
boolean matches;
int size = genericData.size();
outer:
for (int i = 0; i < size; i++) {
container = (CustomCommandContainer) genericData.get(i);
phrase = container.getKeyphrase().toLowerCase(loc).trim();
for (String vd : inputData) {
vd = vd.toLowerCase(loc).trim();
matches = metaphone.isDoubleMetaphoneEqual(phrase, vd);
if (matches && Algorithm.checkLength(phrase, vd)) {
score = jwd.apply(phrase, vd);
if (score > jwdLowerThreshold) {
container.setScore(score);
container.setUtterance(vd);
container.setExactMatch(true);
toKeep.add(SerializationUtils.clone(container));
break outer;
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "Matches: double check JW: rejected");
}
}
}
}
}
if (UtilsList.notNaked(toKeep)) {
if (DEBUG) {
MyLog.i(CLS_NAME, "Have a match");
}
final CustomCommandContainer ccc = toKeep.get(0);
final Gson gson = new GsonBuilder().disableHtmlEscaping().create();
customCommand = gson.fromJson(ccc.getSerialised(), CustomCommand.class);
customCommand.setExactMatch(ccc.isExactMatch());
customCommand.setUtterance(ccc.getUtterance());
customCommand.setScore(ccc.getScore());
customCommand.setAlgorithm(Algorithm.DOUBLE_METAPHONE);
} else {
if (DEBUG) {
MyLog.i(CLS_NAME, "no custom phrases matched");
}
}
if (DEBUG) {
MyLog.getElapsed(CLS_NAME, then);
}
return customCommand;
}
/**
* Method to iterate through the given input data and attempt to match the given String data
* using the {@link DoubleMetaphone} within ranges applied by the associated thresholds constants.
*
* @return an {@link AlgorithmicContainer} or null if thresholds aren't satisfied
*/
public AlgorithmicContainer executeGeneric() {
long then = System.nanoTime();
final double jwdLowerThreshold = SPH.getJaroWinklerLower(mContext);
final ArrayList<AlgorithmicContainer> toKeep = new ArrayList<>();
final DoubleMetaphone metaphone = new DoubleMetaphone();
final JaroWinklerDistance jwd = new JaroWinklerDistance();
String generic;
String genericLower;
AlgorithmicContainer container = null;
double score;
boolean matches;
int size = genericData.size();
outer:
for (int i = 0; i < size; i++) {
generic = (String) genericData.get(i);
genericLower = generic.toLowerCase(loc).trim();
for (String vd : inputData) {
vd = vd.toLowerCase(loc).trim();
matches = metaphone.isDoubleMetaphoneEqual(genericLower, vd);
if (matches && Algorithm.checkLength(genericLower, vd)) {
score = jwd.apply(genericLower, vd);
if (score > jwdLowerThreshold) {
container = new AlgorithmicContainer();
container.setInput(vd);
container.setGenericMatch(generic);
container.setScore(score);
c
gitextract_ztedqro8/
├── .gitignore
├── LICENSE
├── README.md
├── app/
│ ├── .gitignore
│ ├── assets.xml
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── ai/
│ │ └── saiy/
│ │ └── android/
│ │ └── ApplicationTest.java
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── assets/
│ │ │ └── sync/
│ │ │ ├── assets.lst
│ │ │ ├── basic.dic
│ │ │ ├── basic.dic.md5
│ │ │ ├── en-us-ptm/
│ │ │ │ ├── README
│ │ │ │ ├── README.md5
│ │ │ │ ├── feat.params
│ │ │ │ ├── feat.params.md5
│ │ │ │ ├── mdef
│ │ │ │ ├── mdef.md5
│ │ │ │ ├── means
│ │ │ │ ├── means.md5
│ │ │ │ ├── noisedict
│ │ │ │ ├── noisedict.md5
│ │ │ │ ├── sendump
│ │ │ │ ├── sendump.md5
│ │ │ │ ├── transition_matrices
│ │ │ │ ├── transition_matrices.md5
│ │ │ │ ├── variances
│ │ │ │ └── variances.md5
│ │ │ ├── hotwords.txt
│ │ │ └── hotwords.txt.md5
│ │ ├── java/
│ │ │ └── ai/
│ │ │ └── saiy/
│ │ │ └── android/
│ │ │ ├── accessibility/
│ │ │ │ └── SaiyAccessibilityService.java
│ │ │ ├── algorithms/
│ │ │ │ ├── Algorithm.java
│ │ │ │ ├── distance/
│ │ │ │ │ ├── EditDistance.java
│ │ │ │ │ ├── jarowinkler/
│ │ │ │ │ │ ├── JaroWinklerDistance.java
│ │ │ │ │ │ └── JaroWinklerHelper.java
│ │ │ │ │ └── levenshtein/
│ │ │ │ │ ├── LevenshteinDistance.java
│ │ │ │ │ └── LevenshteinHelper.java
│ │ │ │ ├── doublemetaphone/
│ │ │ │ │ └── DoubleMetaphoneHelper.java
│ │ │ │ ├── fuzzy/
│ │ │ │ │ └── FuzzyHelper.java
│ │ │ │ ├── metaphone/
│ │ │ │ │ └── MetaphoneHelper.java
│ │ │ │ ├── mongeelkan/
│ │ │ │ │ └── MongeElkanHelper.java
│ │ │ │ ├── needlemanwunch/
│ │ │ │ │ ├── NeedlemanWunschHelper.java
│ │ │ │ │ └── simmetrics/
│ │ │ │ │ └── NeedlemanWunch.java
│ │ │ │ ├── regex/
│ │ │ │ │ ├── ContainsHelper.java
│ │ │ │ │ ├── CustomHelper.java
│ │ │ │ │ ├── EndsWithHelper.java
│ │ │ │ │ └── StartsWithHelper.java
│ │ │ │ └── soundex/
│ │ │ │ └── SoundexHelper.java
│ │ │ ├── api/
│ │ │ │ ├── SaiyDefaults.java
│ │ │ │ └── helper/
│ │ │ │ ├── BlackList.java
│ │ │ │ ├── BlackListHelper.java
│ │ │ │ ├── Callback.java
│ │ │ │ ├── CallbackType.java
│ │ │ │ └── Validation.java
│ │ │ ├── applications/
│ │ │ │ ├── Install.java
│ │ │ │ ├── InstallAmazon.java
│ │ │ │ ├── InstallPlayStore.java
│ │ │ │ ├── Installed.java
│ │ │ │ └── UtilsApplication.java
│ │ │ ├── audio/
│ │ │ │ ├── AudioCompression.java
│ │ │ │ ├── AudioParameters.java
│ │ │ │ ├── IMic.java
│ │ │ │ ├── RecognitionMic.java
│ │ │ │ ├── SaiyAudio.java
│ │ │ │ ├── SaiyAudioTrack.java
│ │ │ │ ├── SaiyRecorder.java
│ │ │ │ ├── SaiySoundPool.java
│ │ │ │ └── pause/
│ │ │ │ ├── PauseDetector.java
│ │ │ │ └── PauseListener.java
│ │ │ ├── broadcast/
│ │ │ │ ├── BRBoot.java
│ │ │ │ └── BRRemote.java
│ │ │ ├── cache/
│ │ │ │ └── speech/
│ │ │ │ ├── IAudioCompression.java
│ │ │ │ ├── SpeechCachePrepare.java
│ │ │ │ └── SpeechCacheResult.java
│ │ │ ├── cognitive/
│ │ │ │ ├── emotion/
│ │ │ │ │ └── provider/
│ │ │ │ │ └── beyondverbal/
│ │ │ │ │ ├── AnalysisResult.java
│ │ │ │ │ ├── AnalysisResultHelper.java
│ │ │ │ │ ├── BeyondVerbal.java
│ │ │ │ │ ├── analysis/
│ │ │ │ │ │ ├── Analysis.java
│ │ │ │ │ │ ├── AnalysisSummary.java
│ │ │ │ │ │ ├── Arousal.java
│ │ │ │ │ │ ├── AudioQuality.java
│ │ │ │ │ │ ├── Composite.java
│ │ │ │ │ │ ├── Emotions.java
│ │ │ │ │ │ ├── Gender.java
│ │ │ │ │ │ ├── Group11.java
│ │ │ │ │ │ ├── Group21.java
│ │ │ │ │ │ ├── Group7.java
│ │ │ │ │ │ ├── Mood.java
│ │ │ │ │ │ ├── Primary.java
│ │ │ │ │ │ ├── Result.java
│ │ │ │ │ │ ├── Secondary.java
│ │ │ │ │ │ ├── Segment.java
│ │ │ │ │ │ ├── Summary.java
│ │ │ │ │ │ ├── Temper.java
│ │ │ │ │ │ └── Valence.java
│ │ │ │ │ ├── audio/
│ │ │ │ │ │ ├── AudioConfig.java
│ │ │ │ │ │ └── AudioType.java
│ │ │ │ │ ├── containers/
│ │ │ │ │ │ ├── BVCredentials.java
│ │ │ │ │ │ ├── StartRequestBody.java
│ │ │ │ │ │ └── StartResponse.java
│ │ │ │ │ ├── http/
│ │ │ │ │ │ ├── BVAuthRequest.java
│ │ │ │ │ │ ├── BVEmotionAnalysis.java
│ │ │ │ │ │ ├── BVSendFile.java
│ │ │ │ │ │ ├── BVStartRequest.java
│ │ │ │ │ │ └── BVStreamAudio.java
│ │ │ │ │ ├── language/
│ │ │ │ │ │ └── SupportedLanguageBV.java
│ │ │ │ │ └── user/
│ │ │ │ │ └── MetaData.java
│ │ │ │ ├── identity/
│ │ │ │ │ └── provider/
│ │ │ │ │ └── microsoft/
│ │ │ │ │ ├── Speaker.java
│ │ │ │ │ ├── SpeakerEnrollment.java
│ │ │ │ │ ├── SpeakerIdentification.java
│ │ │ │ │ ├── containers/
│ │ │ │ │ │ ├── EnrollmentID.java
│ │ │ │ │ │ ├── OperationStatus.java
│ │ │ │ │ │ ├── ProcessingResult.java
│ │ │ │ │ │ ├── ProfileItem.java
│ │ │ │ │ │ └── ProfileList.java
│ │ │ │ │ └── http/
│ │ │ │ │ ├── CreateIDEnrollment.java
│ │ │ │ │ ├── CreateIDProfile.java
│ │ │ │ │ ├── DeleteIDProfile.java
│ │ │ │ │ ├── FetchIDOperation.java
│ │ │ │ │ ├── FetchIDProfile.java
│ │ │ │ │ ├── ListIDProfiles.java
│ │ │ │ │ └── ValidateID.java
│ │ │ │ ├── knowledge/
│ │ │ │ │ └── provider/
│ │ │ │ │ └── wolframalpha/
│ │ │ │ │ ├── WolframAlphaCognitive.java
│ │ │ │ │ ├── parse/
│ │ │ │ │ │ ├── Alternative.java
│ │ │ │ │ │ ├── Assumption.java
│ │ │ │ │ │ ├── Assumptions.java
│ │ │ │ │ │ ├── Definition.java
│ │ │ │ │ │ ├── Definitions.java
│ │ │ │ │ │ ├── Info.java
│ │ │ │ │ │ ├── Infos.java
│ │ │ │ │ │ ├── Link.java
│ │ │ │ │ │ ├── Pod.java
│ │ │ │ │ │ ├── QueryResult.java
│ │ │ │ │ │ ├── Reinterpret.java
│ │ │ │ │ │ ├── Source.java
│ │ │ │ │ │ ├── Sources.java
│ │ │ │ │ │ ├── SpellCheck.java
│ │ │ │ │ │ ├── State.java
│ │ │ │ │ │ ├── StateList.java
│ │ │ │ │ │ ├── States.java
│ │ │ │ │ │ ├── SubPod.java
│ │ │ │ │ │ ├── Unit.java
│ │ │ │ │ │ ├── Units.java
│ │ │ │ │ │ ├── ValidateQueryResult.java
│ │ │ │ │ │ ├── Value.java
│ │ │ │ │ │ └── Warnings.java
│ │ │ │ │ └── resolve/
│ │ │ │ │ ├── ResolveWolframAlpha.java
│ │ │ │ │ ├── WolframAlphaRequest.java
│ │ │ │ │ └── WolframAlphaResponse.java
│ │ │ │ └── motion/
│ │ │ │ └── provider/
│ │ │ │ └── google/
│ │ │ │ ├── Motion.java
│ │ │ │ ├── MotionHelper.java
│ │ │ │ ├── MotionIntentService.java
│ │ │ │ └── MotionRecognition.java
│ │ │ ├── command/
│ │ │ │ ├── battery/
│ │ │ │ │ ├── Battery.java
│ │ │ │ │ ├── BatteryInformation.java
│ │ │ │ │ ├── Battery_en.java
│ │ │ │ │ ├── CommandBattery.java
│ │ │ │ │ ├── CommandBatteryLocal.java
│ │ │ │ │ └── CommandBatteryValues.java
│ │ │ │ ├── cancel/
│ │ │ │ │ ├── Cancel.java
│ │ │ │ │ ├── CancelPartial.java
│ │ │ │ │ └── Cancel_en.java
│ │ │ │ ├── clipboard/
│ │ │ │ │ └── ClipboardHelper.java
│ │ │ │ ├── custom/
│ │ │ │ │ └── CommandCustom.java
│ │ │ │ ├── emotion/
│ │ │ │ │ ├── CommandEmotion.java
│ │ │ │ │ ├── Emotion.java
│ │ │ │ │ └── Emotion_en.java
│ │ │ │ ├── helper/
│ │ │ │ │ ├── CC.java
│ │ │ │ │ └── CommandRequest.java
│ │ │ │ ├── hotword/
│ │ │ │ │ ├── Hotword.java
│ │ │ │ │ └── Hotword_en.java
│ │ │ │ ├── pardon/
│ │ │ │ │ ├── Pardon.java
│ │ │ │ │ └── Pardon_en.java
│ │ │ │ ├── songrecognition/
│ │ │ │ │ ├── CommandSongRecognition.java
│ │ │ │ │ ├── SongRecognition.java
│ │ │ │ │ └── SongRecognition_en.java
│ │ │ │ ├── spell/
│ │ │ │ │ ├── CommandSpell.java
│ │ │ │ │ ├── CommandSpellLocal.java
│ │ │ │ │ ├── CommandSpellValues.java
│ │ │ │ │ ├── Spell.java
│ │ │ │ │ └── Spell_en.java
│ │ │ │ ├── tasker/
│ │ │ │ │ ├── CommandTasker.java
│ │ │ │ │ ├── CommandTaskerLocal.java
│ │ │ │ │ ├── CommandTaskerValues.java
│ │ │ │ │ ├── Tasker.java
│ │ │ │ │ └── Tasker_en.java
│ │ │ │ ├── translate/
│ │ │ │ │ ├── CommandTranslate.java
│ │ │ │ │ ├── CommandTranslateLocal.java
│ │ │ │ │ ├── CommandTranslateValues.java
│ │ │ │ │ ├── Translate.java
│ │ │ │ │ ├── TranslatePartial.java
│ │ │ │ │ ├── Translate_en.java
│ │ │ │ │ └── provider/
│ │ │ │ │ ├── TranslationProvider.java
│ │ │ │ │ ├── bing/
│ │ │ │ │ │ ├── BingCredentials.java
│ │ │ │ │ │ ├── BingOAuth.java
│ │ │ │ │ │ ├── BingTranslate.java
│ │ │ │ │ │ ├── BingTranslateAPI.java
│ │ │ │ │ │ └── TranslationLanguageBing.java
│ │ │ │ │ └── google/
│ │ │ │ │ ├── GoogleTranslate.java
│ │ │ │ │ ├── GoogleTranslateAPI.java
│ │ │ │ │ └── TranslationLanguageGoogle.java
│ │ │ │ ├── unknown/
│ │ │ │ │ └── Unknown.java
│ │ │ │ ├── username/
│ │ │ │ │ ├── CommandUserName.java
│ │ │ │ │ ├── CommandUserNameLocal.java
│ │ │ │ │ ├── CommandUserNameValues.java
│ │ │ │ │ ├── UserName.java
│ │ │ │ │ └── UserName_en.java
│ │ │ │ ├── vocalrecognition/
│ │ │ │ │ ├── CommandVocalRecognition.java
│ │ │ │ │ ├── VocalRecognition.java
│ │ │ │ │ └── VocalRecognition_en.java
│ │ │ │ └── wolframalpha/
│ │ │ │ ├── CommandWolframAlpha.java
│ │ │ │ ├── CommandWolframAlphaLocal.java
│ │ │ │ ├── CommandWolframAlphaValues.java
│ │ │ │ ├── WolframAlpha.java
│ │ │ │ └── WolframAlpha_en.java
│ │ │ ├── configuration/
│ │ │ │ ├── APIAIConfiguration.java
│ │ │ │ ├── BeyondVerbalConfiguration.java
│ │ │ │ ├── BluemixConfiguration.java
│ │ │ │ ├── GoogleConfiguration.java
│ │ │ │ ├── MicrosoftConfiguration.java
│ │ │ │ ├── NuanceConfiguration.java
│ │ │ │ ├── WitConfiguration.java
│ │ │ │ └── WolframConfiguration.java
│ │ │ ├── custom/
│ │ │ │ ├── CCC.java
│ │ │ │ ├── Custom.java
│ │ │ │ ├── CustomCommand.java
│ │ │ │ ├── CustomCommandContainer.java
│ │ │ │ ├── CustomCommandHelper.java
│ │ │ │ ├── CustomHelper.java
│ │ │ │ ├── CustomHelperHolder.java
│ │ │ │ └── CustomResolver.java
│ │ │ ├── database/
│ │ │ │ ├── DBCustomCommand.java
│ │ │ │ ├── DBSpeech.java
│ │ │ │ └── callable/
│ │ │ │ └── DBCustomCommandCallable.java
│ │ │ ├── defaults/
│ │ │ │ ├── ApplicationDefaults.java
│ │ │ │ └── songrecognition/
│ │ │ │ ├── SongRecognitionChooser.java
│ │ │ │ └── SongRecognitionProvider.java
│ │ │ ├── device/
│ │ │ │ ├── DeviceInfo.java
│ │ │ │ └── UtilsDevice.java
│ │ │ ├── error/
│ │ │ │ ├── Issue.java
│ │ │ │ └── IssueContent.java
│ │ │ ├── files/
│ │ │ │ └── FileCreator.java
│ │ │ ├── intent/
│ │ │ │ ├── ExecuteIntent.java
│ │ │ │ └── IntentConstants.java
│ │ │ ├── localisation/
│ │ │ │ ├── SaiyResources.java
│ │ │ │ ├── SaiyResourcesHelper.java
│ │ │ │ └── SupportedLanguage.java
│ │ │ ├── memory/
│ │ │ │ ├── Memory.java
│ │ │ │ ├── MemoryHelper.java
│ │ │ │ └── MemoryPrepare.java
│ │ │ ├── nlu/
│ │ │ │ ├── NLUCoerce.java
│ │ │ │ ├── NLUConstants.java
│ │ │ │ ├── apiai/
│ │ │ │ │ ├── NLUAPIAI.java
│ │ │ │ │ ├── NLUAPIAIHelper.java
│ │ │ │ │ ├── RemoteAPIAI.java
│ │ │ │ │ └── ResolveAPIAI.java
│ │ │ │ ├── bluemix/
│ │ │ │ │ ├── Alternative.java
│ │ │ │ │ ├── NLUBluemix.java
│ │ │ │ │ ├── ResolveBluemix.java
│ │ │ │ │ └── Result.java
│ │ │ │ ├── local/
│ │ │ │ │ ├── AlgorithmicContainer.java
│ │ │ │ │ ├── AlgorithmicResolver.java
│ │ │ │ │ ├── FrequencyAnalysis.java
│ │ │ │ │ ├── InitStrings.java
│ │ │ │ │ ├── Profanity.java
│ │ │ │ │ └── Resolve.java
│ │ │ │ ├── microsoft/
│ │ │ │ │ ├── Entity.java
│ │ │ │ │ ├── Intent.java
│ │ │ │ │ ├── NLUMicrosoft.java
│ │ │ │ │ ├── NLUMicrosoftHelper.java
│ │ │ │ │ └── ResolveMicrosoft.java
│ │ │ │ ├── nuance/
│ │ │ │ │ ├── Action.java
│ │ │ │ │ ├── Concept.java
│ │ │ │ │ ├── Intent.java
│ │ │ │ │ ├── Interpretation.java
│ │ │ │ │ ├── NLUNuance.java
│ │ │ │ │ ├── NLUNuanceHelper.java
│ │ │ │ │ └── ResolveNuance.java
│ │ │ │ ├── saiy/
│ │ │ │ │ ├── Context.java
│ │ │ │ │ ├── ContextValue.java
│ │ │ │ │ ├── Entity.java
│ │ │ │ │ ├── Intent.java
│ │ │ │ │ ├── NLUSaiy.java
│ │ │ │ │ ├── NLUSaiyHelper.java
│ │ │ │ │ └── ResolveSaiy.java
│ │ │ │ └── wit/
│ │ │ │ ├── Entity.java
│ │ │ │ ├── MessageBody.java
│ │ │ │ ├── NLUWit.java
│ │ │ │ └── ResolveWit.java
│ │ │ ├── partial/
│ │ │ │ ├── IPartial.java
│ │ │ │ ├── Partial.java
│ │ │ │ └── PartialHelper.java
│ │ │ ├── permissions/
│ │ │ │ └── PermissionHelper.java
│ │ │ ├── personality/
│ │ │ │ ├── AI.java
│ │ │ │ ├── PersonalityHelper.java
│ │ │ │ └── PersonalityResponse.java
│ │ │ ├── processing/
│ │ │ │ ├── Condition.java
│ │ │ │ ├── EntangledPair.java
│ │ │ │ ├── Outcome.java
│ │ │ │ ├── Position.java
│ │ │ │ ├── Quantum.java
│ │ │ │ ├── Qubit.java
│ │ │ │ ├── Tunnelling.java
│ │ │ │ └── helper/
│ │ │ │ └── QuantumHelper.java
│ │ │ ├── proximity/
│ │ │ │ ├── ProximityContext.java
│ │ │ │ ├── hardware/
│ │ │ │ │ ├── ProximityBluetooth.java
│ │ │ │ │ └── ProximityWiFi.java
│ │ │ │ └── location/
│ │ │ │ ├── ProximityCellTower.java
│ │ │ │ ├── ProximityContact.java
│ │ │ │ └── ProximityGPS.java
│ │ │ ├── recognition/
│ │ │ │ ├── Recognition.java
│ │ │ │ ├── RecognitionAction.java
│ │ │ │ ├── SaiyHotwordListener.java
│ │ │ │ ├── SaiyRecognitionListener.java
│ │ │ │ ├── TestRecognitionAction.java
│ │ │ │ ├── helper/
│ │ │ │ │ ├── GoogleNowMonitor.java
│ │ │ │ │ └── RecognitionDefaults.java
│ │ │ │ └── provider/
│ │ │ │ ├── android/
│ │ │ │ │ └── RecognitionNative.java
│ │ │ │ ├── bluemix/
│ │ │ │ │ ├── IWebSocketCallback.java
│ │ │ │ │ ├── RecognitionBluemix.java
│ │ │ │ │ └── mod/
│ │ │ │ │ └── TrustAllBluemixWebSocketClient.java
│ │ │ │ ├── google/
│ │ │ │ │ ├── chromium/
│ │ │ │ │ │ └── RecognitionGoogleChromium.java
│ │ │ │ │ └── cloud/
│ │ │ │ │ ├── GoogleCredentialsInterceptor.java
│ │ │ │ │ └── RecognitionGoogleCloud.java
│ │ │ │ ├── microsoft/
│ │ │ │ │ └── RecognitionMicrosoft.java
│ │ │ │ ├── nuance/
│ │ │ │ │ └── RecognitionNuance.java
│ │ │ │ ├── remote/
│ │ │ │ │ └── RecognitionRemote.java
│ │ │ │ ├── saiy/
│ │ │ │ │ ├── RecognitionSaiy.java
│ │ │ │ │ └── assist/
│ │ │ │ │ ├── SaiyInteractionService.java
│ │ │ │ │ ├── SaiyInteractionSession.java
│ │ │ │ │ └── SaiyInteractionSessionService.java
│ │ │ │ ├── sphinx/
│ │ │ │ │ ├── RecognitionSphinx.java
│ │ │ │ │ └── mod/
│ │ │ │ │ └── SaiyAssets.java
│ │ │ │ └── wit/
│ │ │ │ └── RecognitionWit.java
│ │ │ ├── service/
│ │ │ │ ├── NotificationService.java
│ │ │ │ ├── SelfAware.java
│ │ │ │ ├── ServiceConnector.java
│ │ │ │ └── helper/
│ │ │ │ ├── AssistantIntentService.java
│ │ │ │ ├── IConditionListener.java
│ │ │ │ ├── LocalRequest.java
│ │ │ │ ├── SelfAwareCache.java
│ │ │ │ ├── SelfAwareConditions.java
│ │ │ │ ├── SelfAwareHelper.java
│ │ │ │ ├── SelfAwareParameters.java
│ │ │ │ ├── SelfAwareParameters21.java
│ │ │ │ └── SelfAwareVerbose.java
│ │ │ ├── sound/
│ │ │ │ └── VolumeHelper.java
│ │ │ ├── thirdparty/
│ │ │ │ └── tasker/
│ │ │ │ ├── TaskerHelper.java
│ │ │ │ ├── TaskerIntent.java
│ │ │ │ └── TaskerTask.java
│ │ │ ├── tts/
│ │ │ │ ├── SaiyProgressListener.java
│ │ │ │ ├── SaiyTextToSpeech.java
│ │ │ │ ├── TTS.java
│ │ │ │ ├── attributes/
│ │ │ │ │ └── Gender.java
│ │ │ │ ├── engine/
│ │ │ │ │ └── EngineNuance.java
│ │ │ │ ├── helper/
│ │ │ │ │ ├── PendingTTS.java
│ │ │ │ │ ├── SaiyVoice.java
│ │ │ │ │ ├── SpeechPriority.java
│ │ │ │ │ └── TTSDefaults.java
│ │ │ │ └── sound/
│ │ │ │ ├── SoundEffect.java
│ │ │ │ ├── SoundEffectHelper.java
│ │ │ │ └── SoundEffectItem.java
│ │ │ ├── ui/
│ │ │ │ ├── activity/
│ │ │ │ │ ├── ActivityAssistProxy.java
│ │ │ │ │ ├── ActivityAssistSettings.java
│ │ │ │ │ ├── ActivityChooserDialog.java
│ │ │ │ │ ├── ActivityHome.java
│ │ │ │ │ ├── ActivityIssue.java
│ │ │ │ │ ├── ActivityLauncherShortcut.java
│ │ │ │ │ ├── ActivityPermissionDialog.java
│ │ │ │ │ ├── ActivityTilePreferences.java
│ │ │ │ │ └── helper/
│ │ │ │ │ └── ActivityHomeHelper.java
│ │ │ │ ├── components/
│ │ │ │ │ ├── DividerItemDecoration.java
│ │ │ │ │ ├── UIBugsAdapter.java
│ │ │ │ │ └── UIMainAdapter.java
│ │ │ │ ├── containers/
│ │ │ │ │ ├── ContainerCustomisation.java
│ │ │ │ │ └── ContainerUI.java
│ │ │ │ ├── fragment/
│ │ │ │ │ ├── FragmentAbout.java
│ │ │ │ │ ├── FragmentAdvancedSettings.java
│ │ │ │ │ ├── FragmentBugs.java
│ │ │ │ │ ├── FragmentCustomisation.java
│ │ │ │ │ ├── FragmentHome.java
│ │ │ │ │ ├── FragmentSettings.java
│ │ │ │ │ ├── FragmentSuperUser.java
│ │ │ │ │ └── helper/
│ │ │ │ │ ├── FragmentAboutHelper.java
│ │ │ │ │ ├── FragmentAdvancedSettingsHelper.java
│ │ │ │ │ ├── FragmentBugsHelper.java
│ │ │ │ │ ├── FragmentCustomisationHelper.java
│ │ │ │ │ ├── FragmentHomeHelper.java
│ │ │ │ │ ├── FragmentSettingsHelper.java
│ │ │ │ │ └── FragmentSuperuserHelper.java
│ │ │ │ ├── notification/
│ │ │ │ │ └── NotificationHelper.java
│ │ │ │ └── service/
│ │ │ │ └── SaiyTileService.java
│ │ │ ├── user/
│ │ │ │ ├── ISaiyAccount.java
│ │ │ │ ├── SaiyAccount.java
│ │ │ │ ├── SaiyAccountHelper.java
│ │ │ │ └── SaiyAccountList.java
│ │ │ └── utils/
│ │ │ ├── Conditions/
│ │ │ │ └── Network.java
│ │ │ ├── Constants.java
│ │ │ ├── Global.java
│ │ │ ├── MyLog.java
│ │ │ ├── SPH.java
│ │ │ ├── UtilsBundle.java
│ │ │ ├── UtilsFile.java
│ │ │ ├── UtilsList.java
│ │ │ ├── UtilsLocale.java
│ │ │ ├── UtilsMap.java
│ │ │ ├── UtilsString.java
│ │ │ ├── UtilsVolley.java
│ │ │ └── debug/
│ │ │ └── DebugAction.java
│ │ ├── proto/
│ │ │ ├── .gitignore
│ │ │ └── google/
│ │ │ ├── api/
│ │ │ │ ├── annotations.proto
│ │ │ │ ├── http.proto
│ │ │ │ ├── label.proto
│ │ │ │ └── monitored_resource.proto
│ │ │ ├── logging/
│ │ │ │ ├── README.md
│ │ │ │ ├── type/
│ │ │ │ │ ├── http_request.proto
│ │ │ │ │ └── log_severity.proto
│ │ │ │ └── v2/
│ │ │ │ ├── log_entry.proto
│ │ │ │ ├── logging.proto
│ │ │ │ ├── logging_config.proto
│ │ │ │ └── logging_metrics.proto
│ │ │ ├── longrunning/
│ │ │ │ └── operations.proto
│ │ │ ├── rpc/
│ │ │ │ ├── README.md
│ │ │ │ ├── code.proto
│ │ │ │ ├── error_details.proto
│ │ │ │ └── status.proto
│ │ │ ├── speech/
│ │ │ │ ├── v1/
│ │ │ │ │ └── cloud-speech.proto
│ │ │ │ └── v1beta1/
│ │ │ │ └── cloud_speech.proto
│ │ │ └── type/
│ │ │ ├── README.md
│ │ │ ├── color.proto
│ │ │ ├── date.proto
│ │ │ ├── dayofweek.proto
│ │ │ ├── latlng.proto
│ │ │ ├── money.proto
│ │ │ └── timeofday.proto
│ │ └── res/
│ │ ├── anim/
│ │ │ ├── fade_in_slow.xml
│ │ │ ├── fade_in_slow_delayed.xml
│ │ │ ├── none.xml
│ │ │ ├── slide_in_right.xml
│ │ │ └── slide_out_left.xml
│ │ ├── animator/
│ │ │ ├── fade_in_slow.xml
│ │ │ ├── fade_in_slow_delayed.xml
│ │ │ └── none.xml
│ │ ├── drawable/
│ │ │ ├── chevron.xml
│ │ │ ├── ic_logo_saiy_vector.xml
│ │ │ └── side_nav_bar.xml
│ │ ├── drawable-v21/
│ │ │ ├── ic_menu_camera.xml
│ │ │ ├── ic_menu_gallery.xml
│ │ │ ├── ic_menu_manage.xml
│ │ │ ├── ic_menu_send.xml
│ │ │ ├── ic_menu_share.xml
│ │ │ └── ic_menu_slideshow.xml
│ │ ├── layout/
│ │ │ ├── activity_home_layout.xml
│ │ │ ├── app_bar_main.xml
│ │ │ ├── assist_settings.xml
│ │ │ ├── cardview_bugs_item.xml
│ │ │ ├── fragment_bugs_layout.xml
│ │ │ ├── item_chooser_song_recognition.xml
│ │ │ ├── layout_common_fragment_parent.xml
│ │ │ ├── layout_item_ui_main.xml
│ │ │ ├── memory_dialog_layout.xml
│ │ │ ├── nav_header_main.xml
│ │ │ ├── pause_detection_dialog_layout.xml
│ │ │ └── tts_volume_dialog_layout.xml
│ │ ├── menu/
│ │ │ ├── activity_main_drawer.xml
│ │ │ └── menu_main.xml
│ │ ├── raw/
│ │ │ ├── beep_high.ogg
│ │ │ ├── beep_low.ogg
│ │ │ ├── burp1.ogg
│ │ │ ├── burp2.ogg
│ │ │ ├── cough1.ogg
│ │ │ ├── cough2.ogg
│ │ │ ├── cry1.ogg
│ │ │ ├── fart1.ogg
│ │ │ ├── fart2.ogg
│ │ │ ├── fart3.ogg
│ │ │ ├── flush1.ogg
│ │ │ ├── giggle1.ogg
│ │ │ ├── giggle2.ogg
│ │ │ ├── pee1.ogg
│ │ │ ├── puke1.ogg
│ │ │ ├── sk_error.pcm
│ │ │ ├── sk_start.pcm
│ │ │ ├── sk_stop.pcm
│ │ │ ├── sneeze1.ogg
│ │ │ └── wand.ogg
│ │ ├── values/
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── drawables.xml
│ │ │ ├── integers.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ ├── values-en-rUS/
│ │ │ └── strings.xml
│ │ ├── values-v21/
│ │ │ └── styles.xml
│ │ ├── values-w820dp/
│ │ │ └── dimens.xml
│ │ └── xml/
│ │ ├── accessibility_config.xml
│ │ └── interaction_service.xml
│ └── test/
│ └── java/
│ └── ai/
│ └── saiy/
│ └── android/
│ └── ExampleUnitTest.java
├── build.gradle
└── pocketsphinx-android-5prealpha-nolib/
├── build.gradle
└── pocketsphinx-android-5prealpha-nolib.jar
Showing preview only (286K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3123 symbols across 381 files)
FILE: app/src/androidTest/java/ai/saiy/android/ApplicationTest.java
class ApplicationTest (line 26) | public class ApplicationTest extends ApplicationTestCase<Application> {
method ApplicationTest (line 27) | public ApplicationTest() {
FILE: app/src/main/java/ai/saiy/android/accessibility/SaiyAccessibilityService.java
class SaiyAccessibilityService (line 59) | public class SaiyAccessibilityService extends AccessibilityService {
method onCreate (line 84) | @Override
method onServiceConnected (line 98) | @Override
method setDynamicContent (line 113) | private void setDynamicContent() {
method updateServiceInfo (line 164) | private void updateServiceInfo(final boolean interceptGoogle, final bo...
method onAccessibilityEvent (line 180) | @Override
method commandDelaySufficient (line 664) | private boolean commandDelaySufficient(final long currentTime) {
method commandPreviousMatches (line 685) | private boolean commandPreviousMatches(@NonNull final String text) {
method commandPreviousInterimChecked (line 699) | private boolean commandPreviousInterimChecked(@NonNull final String te...
method commandPreviousFinalChecked (line 713) | private boolean commandPreviousFinalChecked(@NonNull final String text) {
method interimMatch (line 727) | private boolean interimMatch(@NonNull final String text) {
method finalMatch (line 767) | private boolean finalMatch(@NonNull final String text) {
method isListening (line 810) | private boolean isListening(@NonNull final String text) {
method process (line 819) | private void process(@NonNull final String text) {
method killGoogle (line 848) | private void killGoogle(final boolean terminate) {
method examineChild (line 883) | private String examineChild(@Nullable final AccessibilityNodeInfo pare...
method getEventType (line 952) | private int getEventType(final int eventType) {
method onInterrupt (line 1096) | @Override
method onDestroy (line 1103) | @Override
FILE: app/src/main/java/ai/saiy/android/algorithms/Algorithm.java
type Algorithm (line 38) | public enum Algorithm {
method checkLength (line 73) | public static boolean checkLength(@NonNull final String s1, @NonNull f...
method getAlgorithms (line 90) | public static Algorithm[] getAlgorithms(@NonNull final Context ctx, @N...
method getAlgorithms (line 118) | public static Algorithm[] getAlgorithms(@NonNull final Context ctx, @N...
method setAlgorithms (line 143) | public static void setAlgorithms(@NonNull final Context ctx, @NonNull ...
FILE: app/src/main/java/ai/saiy/android/algorithms/distance/EditDistance.java
type EditDistance (line 56) | public interface EditDistance<R> {
method apply (line 65) | R apply(final CharSequence left, final CharSequence right);
FILE: app/src/main/java/ai/saiy/android/algorithms/distance/jarowinkler/JaroWinklerDistance.java
class JaroWinklerDistance (line 43) | public class JaroWinklerDistance implements EditDistance<Double> {
method apply (line 80) | @Override
method commonPrefixLength (line 103) | private static int commonPrefixLength(final CharSequence first,
method getCommonPrefix (line 146) | private static String getCommonPrefix(final String... strs) {
method score (line 173) | protected static double score(final CharSequence first,
method transpositions (line 230) | private static int transpositions(final CharSequence first,
method indexOfDifference (line 274) | private static int indexOfDifference(final CharSequence... css) {
method getSetOfMatchingCharacterWithin (line 346) | private static String getSetOfMatchingCharacterWithin(
FILE: app/src/main/java/ai/saiy/android/algorithms/distance/jarowinkler/JaroWinklerHelper.java
class JaroWinklerHelper (line 48) | public class JaroWinklerHelper implements Callable<Object> {
method JaroWinklerHelper (line 67) | public JaroWinklerHelper(@NonNull final Context mContext, @NonNull fin...
method executeCustomCommand (line 81) | public CustomCommand executeCustomCommand() {
method executeGeneric (line 176) | public AlgorithmicContainer executeGeneric() {
method call (line 269) | @Override
FILE: app/src/main/java/ai/saiy/android/algorithms/distance/levenshtein/LevenshteinDistance.java
class LevenshteinDistance (line 45) | public class LevenshteinDistance implements EditDistance<Integer> {
method LevenshteinDistance (line 65) | public LevenshteinDistance() {
method LevenshteinDistance (line 78) | public LevenshteinDistance(final Integer threshold) {
method apply (line 117) | public Integer apply(CharSequence left, CharSequence right) {
method getDefaultInstance (line 130) | private static LevenshteinDistance getDefaultInstance() {
method getThreshold (line 139) | public Integer getThreshold() {
method limitedCompare (line 174) | private static int limitedCompare(CharSequence left, CharSequence righ...
method unlimitedCompare (line 346) | private static int unlimitedCompare(CharSequence left, CharSequence ri...
FILE: app/src/main/java/ai/saiy/android/algorithms/distance/levenshtein/LevenshteinHelper.java
class LevenshteinHelper (line 48) | public class LevenshteinHelper implements Callable<Object> {
method LevenshteinHelper (line 67) | public LevenshteinHelper(@NonNull final Context mContext, @NonNull fin...
method executeCustomCommand (line 81) | public CustomCommand executeCustomCommand() {
method executeGeneric (line 177) | public AlgorithmicContainer executeGeneric() {
method call (line 272) | @Override
FILE: app/src/main/java/ai/saiy/android/algorithms/doublemetaphone/DoubleMetaphoneHelper.java
class DoubleMetaphoneHelper (line 51) | public class DoubleMetaphoneHelper implements Callable<Object> {
method DoubleMetaphoneHelper (line 70) | public DoubleMetaphoneHelper(@NonNull final Context mContext, @NonNull...
method executeCustomCommand (line 84) | public CustomCommand executeCustomCommand() {
method executeGeneric (line 162) | public AlgorithmicContainer executeGeneric() {
method call (line 236) | @Override
FILE: app/src/main/java/ai/saiy/android/algorithms/fuzzy/FuzzyHelper.java
class FuzzyHelper (line 52) | public class FuzzyHelper implements Callable<Object> {
method FuzzyHelper (line 71) | public FuzzyHelper(@NonNull final Context mContext, @NonNull final Arr...
method executeCustomCommand (line 86) | public CustomCommand executeCustomCommand() {
method executeGeneric (line 190) | public AlgorithmicContainer executeGeneric() {
method call (line 292) | @Override
FILE: app/src/main/java/ai/saiy/android/algorithms/metaphone/MetaphoneHelper.java
class MetaphoneHelper (line 51) | public class MetaphoneHelper implements Callable<Object> {
method MetaphoneHelper (line 70) | public MetaphoneHelper(@NonNull final Context mContext, @NonNull final...
method executeCustomCommand (line 84) | public CustomCommand executeCustomCommand() {
method executeGeneric (line 160) | public AlgorithmicContainer executeGeneric() {
method call (line 235) | @Override
FILE: app/src/main/java/ai/saiy/android/algorithms/mongeelkan/MongeElkanHelper.java
class MongeElkanHelper (line 54) | public class MongeElkanHelper implements Callable<Object> {
method MongeElkanHelper (line 73) | public MongeElkanHelper(@NonNull final Context mContext, @NonNull fina...
method executeCustomCommand (line 87) | public CustomCommand executeCustomCommand() {
method executeGeneric (line 185) | public AlgorithmicContainer executeGeneric() {
method call (line 282) | @Override
FILE: app/src/main/java/ai/saiy/android/algorithms/needlemanwunch/NeedlemanWunschHelper.java
class NeedlemanWunschHelper (line 51) | public class NeedlemanWunschHelper implements Callable<Object> {
method NeedlemanWunschHelper (line 70) | public NeedlemanWunschHelper(@NonNull final Context mContext, @NonNull...
method executeCustomCommand (line 84) | public CustomCommand executeCustomCommand() {
method executeGeneric (line 181) | public AlgorithmicContainer executeGeneric() {
method call (line 277) | @Override
FILE: app/src/main/java/ai/saiy/android/algorithms/needlemanwunch/simmetrics/NeedlemanWunch.java
class NeedlemanWunch (line 63) | public final class NeedlemanWunch implements StringMetric {
method NeedlemanWunch (line 77) | public NeedlemanWunch() {
method NeedlemanWunch (line 87) | private NeedlemanWunch(float gapValue, Substitution substitution) {
method compare (line 94) | @Override
method needlemanWunch (line 111) | private float needlemanWunch(final String s, final String t) {
method toString (line 158) | @Override
method min (line 164) | private static float min(float a, float b, float c) {
FILE: app/src/main/java/ai/saiy/android/algorithms/regex/ContainsHelper.java
class ContainsHelper (line 42) | public class ContainsHelper implements Callable<Object> {
method ContainsHelper (line 58) | public ContainsHelper(@NonNull final ArrayList<?> genericData,
method executeCustomCommand (line 72) | public CustomCommand executeCustomCommand() {
method call (line 122) | @Override
FILE: app/src/main/java/ai/saiy/android/algorithms/regex/CustomHelper.java
class CustomHelper (line 44) | public class CustomHelper implements Callable<Object> {
method CustomHelper (line 60) | public CustomHelper(@NonNull final ArrayList<?> genericData,
method executeCustomCommand (line 74) | public CustomCommand executeCustomCommand() {
method call (line 133) | @Override
FILE: app/src/main/java/ai/saiy/android/algorithms/regex/EndsWithHelper.java
class EndsWithHelper (line 42) | public class EndsWithHelper implements Callable<Object> {
method EndsWithHelper (line 58) | public EndsWithHelper(@NonNull final ArrayList<?> genericData,
method executeCustomCommand (line 72) | public CustomCommand executeCustomCommand() {
method call (line 123) | @Override
FILE: app/src/main/java/ai/saiy/android/algorithms/regex/StartsWithHelper.java
class StartsWithHelper (line 42) | public class StartsWithHelper implements Callable<Object> {
method StartsWithHelper (line 58) | public StartsWithHelper(@NonNull final ArrayList<?> genericData,
method executeCustomCommand (line 72) | public CustomCommand executeCustomCommand() {
method call (line 123) | @Override
FILE: app/src/main/java/ai/saiy/android/algorithms/soundex/SoundexHelper.java
class SoundexHelper (line 54) | public class SoundexHelper implements Callable<Object> {
method SoundexHelper (line 73) | public SoundexHelper(@NonNull final Context mContext, @NonNull final A...
method executeCustomCommand (line 87) | public CustomCommand executeCustomCommand() {
method executeGeneric (line 204) | private AlgorithmicContainer executeGeneric() {
method debugBefore (line 308) | private void debugBefore(@NonNull final ArrayList<AlgorithmicContainer...
method debugAfter (line 315) | private void debugAfter(@NonNull final ArrayList<AlgorithmicContainer>...
method call (line 328) | @Override
FILE: app/src/main/java/ai/saiy/android/api/SaiyDefaults.java
class SaiyDefaults (line 32) | public class SaiyDefaults {
type LanguageModel (line 37) | public enum LanguageModel {
method LanguageModel (line 49) | LanguageModel(final Defaults.LanguageModel languageModel) {
method getRemoteLanguageModel (line 53) | public Defaults.LanguageModel getRemoteLanguageModel() {
method remoteToLocal (line 63) | public static LanguageModel remoteToLocal(@NonNull final Defaults.La...
type TTS (line 85) | public enum TTS {
method TTS (line 92) | TTS(final Defaults.TTS tts) {
method getRemoteTTS (line 96) | public Defaults.TTS getRemoteTTS() {
method remoteToLocal (line 106) | public static TTS remoteToLocal(@NonNull final Defaults.TTS remoteTT...
type VR (line 120) | public enum VR {
method VR (line 134) | VR(final Defaults.VR vr) {
method getRemoteVR (line 138) | public Defaults.VR getRemoteVR() {
method remoteToLocal (line 148) | public static VR remoteToLocal(@NonNull final Defaults.VR remoteVR) {
method getProviderTTS (line 174) | public static TTS getProviderTTS(@Nullable final String name) {
method getProviderVR (line 199) | public static VR getProviderVR(final String name) {
method getLanguageModel (line 224) | public static LanguageModel getLanguageModel(final String name) {
FILE: app/src/main/java/ai/saiy/android/api/helper/BlackList.java
class BlackList (line 32) | public class BlackList {
method BlackList (line 53) | public BlackList(@NonNull final String packageName, final int callingU...
method getCallingUid (line 64) | private int getCallingUid() {
method getPackageName (line 73) | public String getPackageName() {
method getRequestTime (line 82) | private long getRequestTime() {
method shouldBlackList (line 96) | public static synchronized boolean shouldBlackList(final ArrayList<Bla...
FILE: app/src/main/java/ai/saiy/android/api/helper/BlackListHelper.java
class BlackListHelper (line 41) | public class BlackListHelper {
method fetch (line 55) | public ArrayList<String> fetch(@NonNull final Context ctx) {
method save (line 103) | public void save(@NonNull final Context ctx, @Nullable final ArrayList...
method isBlacklisted (line 129) | public boolean isBlacklisted(@NonNull final Context ctx, @NonNull fina...
method haveBlacklist (line 148) | private boolean haveBlacklist(@NonNull final Context ctx) {
FILE: app/src/main/java/ai/saiy/android/api/helper/Callback.java
class Callback (line 29) | public class Callback {
method Callback (line 44) | public Callback(final RequestParcel parcel, @NonNull final String pack...
method getCallingUid (line 57) | public int getCallingUid() {
method getPackageName (line 66) | public String getPackageName() {
method getRequestTime (line 75) | public long getRequestTime() {
method getParcel (line 84) | public RequestParcel getParcel() {
FILE: app/src/main/java/ai/saiy/android/api/helper/CallbackType.java
class CallbackType (line 27) | public final class CallbackType {
method CallbackType (line 32) | public CallbackType() {
FILE: app/src/main/java/ai/saiy/android/api/helper/Validation.java
class Validation (line 58) | public final class Validation {
method Validation (line 69) | public Validation() {
method validateParams (line 88) | public static boolean validateParams(@NonNull final Context ctx, @NonN...
method validateParcel (line 122) | public static boolean validateParcel(@NonNull final Context ctx, final...
method checkAction (line 133) | private static boolean checkAction(@NonNull final Context ctx, final R...
method checkProviderTTS (line 167) | private static boolean checkProviderTTS(@NonNull final Context ctx, fi...
method checkVRProvider (line 201) | private static boolean checkVRProvider(@NonNull final Context ctx, fin...
method checkAPIKey (line 294) | private static boolean checkAPIKey(@NonNull final Context ctx, final R...
method checkRemoteConfig (line 529) | private static boolean checkRemoteConfig(@NonNull final RequestParcel ...
method checkAPIAIConfig (line 550) | private static boolean checkAPIAIConfig(@NonNull final RequestParcel p...
method checkIBMConfig (line 567) | private static boolean checkIBMConfig(@NonNull final RequestParcel par...
method checkWitConfig (line 587) | private static boolean checkWitConfig(@NonNull final RequestParcel par...
method checkMicrosoftConfig (line 604) | private static boolean checkMicrosoftConfig(@NonNull final RequestParc...
method checkGoogleCloudConfig (line 654) | private static boolean checkGoogleCloudConfig(@NonNull final RequestPa...
method checkGoogleChromiumConfig (line 671) | private static boolean checkGoogleChromiumConfig(@NonNull final Reques...
method checkNuanceConfig (line 687) | private static boolean checkNuanceConfig(@NonNull final RequestParcel ...
FILE: app/src/main/java/ai/saiy/android/applications/Install.java
class Install (line 36) | public class Install {
type Location (line 38) | public enum Location {
method showInstallLink (line 53) | public static boolean showInstallLink(@NonNull final Context ctx, @Non...
method getAccountType (line 80) | public static String getAccountType() {
method getAccountId (line 109) | @WorkerThread
method getSaiyInstallLink (line 157) | public static String getSaiyInstallLink(@NonNull final Context ctx) {
FILE: app/src/main/java/ai/saiy/android/applications/InstallAmazon.java
class InstallAmazon (line 30) | public class InstallAmazon {
method showInstall (line 44) | public static boolean showInstall(@NonNull final Context ctx, @NonNull...
method getSaiyInstallLink (line 58) | public static String getSaiyInstallLink(@NonNull final Context ctx) {
FILE: app/src/main/java/ai/saiy/android/applications/InstallPlayStore.java
class InstallPlayStore (line 33) | public class InstallPlayStore {
method showInstall (line 47) | public static boolean showInstall(@NonNull final Context ctx, @NonNull...
method getSaiyInstallLink (line 80) | public static String getSaiyInstallLink(@NonNull final Context ctx) {
FILE: app/src/main/java/ai/saiy/android/applications/Installed.java
class Installed (line 42) | public class Installed {
method declaresSaiyPermission (line 80) | public static ArrayList<Pair<String, String>> declaresSaiyPermission(@...
method declaresSaiyPermissionLegacy (line 144) | public static ArrayList<Pair<String, String>> declaresSaiyPermissionLe...
method isPackageInstalled (line 190) | public static boolean isPackageInstalled(@NonNull final Context ctx, @...
method shazamInstalled (line 221) | public static boolean shazamInstalled(@NonNull final Context ctx) {
method soundHoundInstalled (line 241) | public static boolean soundHoundInstalled(@NonNull final Context ctx) {
method getSongRecognitionProviders (line 267) | public static ArrayList<SongRecognitionProvider> getSongRecognitionPro...
method getDefaultLauncherPackage (line 344) | public static String getDefaultLauncherPackage(@NonNull final Context ...
method isGoogleNowLauncherDefault (line 364) | public static boolean isGoogleNowLauncherDefault(@NonNull final Contex...
FILE: app/src/main/java/ai/saiy/android/applications/UtilsApplication.java
class UtilsApplication (line 47) | public class UtilsApplication {
method getAppNameFromPackage (line 62) | public static Pair<Boolean, String> getAppNameFromPackage(@NonNull fin...
method killPackage (line 97) | public static boolean killPackage(@NonNull final Context ctx, @NonNull...
method isAppInstalled (line 124) | public static boolean isAppInstalled(@NonNull final Context ctx, @NonN...
method launchAppFromPackageName (line 159) | public static boolean launchAppFromPackageName(final Context ctx, fina...
method getForegroundPackage (line 188) | @SuppressLint("InlinedApi")
method getForegroundPackage21 (line 208) | @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
method getForegroundPackageDeprecated (line 275) | @SuppressWarnings("deprecation")
FILE: app/src/main/java/ai/saiy/android/audio/AudioCompression.java
class AudioCompression (line 44) | public class AudioCompression {
method compressBytes (line 55) | public static void compressBytes(@NonNull final IAudioCompression list...
method decompressBytes (line 147) | public static byte[] decompressBytes(final Context ctx, final byte[] b...
method decompressBytesToFile (line 261) | public static File decompressBytesToFile(final Context ctx, final byte...
FILE: app/src/main/java/ai/saiy/android/audio/AudioParameters.java
class AudioParameters (line 27) | public class AudioParameters {
method AudioParameters (line 36) | public AudioParameters() {
method AudioParameters (line 39) | public AudioParameters(final int audioFormat, final int audioSource, f...
method getDefault (line 49) | public static AudioParameters getDefault() {
method getDefaultBeyondVerbal (line 55) | public static AudioParameters getDefaultBeyondVerbal(){
method getDefaultMicrosoft (line 61) | public static AudioParameters getDefaultMicrosoft(){
method getbSamples (line 67) | public int getbSamples() {
method setbSamples (line 71) | public void setbSamples(final int bSamples) {
method getAudioFormat (line 75) | public int getAudioFormat() {
method setAudioFormat (line 79) | public void setAudioFormat(final int audioFormat) {
method getAudioSource (line 83) | public int getAudioSource() {
method setAudioSource (line 87) | public void setAudioSource(final int audioSource) {
method getChannelConfig (line 91) | public int getChannelConfig() {
method setChannelConfig (line 95) | public void setChannelConfig(final int channelConfig) {
method getnChannels (line 99) | public int getnChannels() {
method setnChannels (line 103) | public void setnChannels(final int nChannels) {
method getSampleRateInHz (line 107) | public int getSampleRateInHz() {
method setSampleRateInHz (line 111) | public void setSampleRateInHz(final int sampleRateInHz) {
FILE: app/src/main/java/ai/saiy/android/audio/IMic.java
type IMic (line 24) | public interface IMic {
method onBufferReceived (line 26) | void onBufferReceived(final int bufferReadResult, final byte[] buffer);
method onError (line 28) | void onError(final int error);
method onPauseDetected (line 30) | void onPauseDetected();
method onRecordingStarted (line 32) | void onRecordingStarted();
method onRecordingEnded (line 34) | void onRecordingEnded();
method onFileWriteComplete (line 36) | void onFileWriteComplete(final boolean success);
FILE: app/src/main/java/ai/saiy/android/audio/RecognitionMic.java
class RecognitionMic (line 40) | public class RecognitionMic implements PauseListener {
method RecognitionMic (line 72) | public RecognitionMic(@NonNull final Context mContext, @Nullable final...
method getFile (line 97) | public File getFile() {
method setMicListener (line 101) | public void setMicListener(@NonNull final IMic iMic) {
method getMicListener (line 105) | public IMic getMicListener() {
method getLock (line 109) | public Object getLock() {
method isRecording (line 113) | public boolean isRecording() {
method isAvailable (line 117) | public boolean isAvailable() {
method isInterrupted (line 121) | public boolean isInterrupted() {
method getRecognitionListener (line 125) | public SaiyRecognitionListener getRecognitionListener() {
method getContext (line 129) | public Context getContext() {
method stopRecording (line 133) | public void stopRecording() {
method onPauseDetected (line 149) | @Override
method startRecording (line 162) | public void startRecording() {
method onError (line 271) | private void onError(final int error) {
method forceAudioShutdown (line 290) | public void forceAudioShutdown() {
method audioShutdown (line 313) | private void audioShutdown() {
method releaseLock (line 351) | private void releaseLock() {
method recognitionListenerAction (line 365) | private void recognitionListenerAction(final int action) {
FILE: app/src/main/java/ai/saiy/android/audio/SaiyAudio.java
class SaiyAudio (line 35) | public class SaiyAudio extends AudioRecord {
method SaiyAudio (line 65) | public SaiyAudio(final int audioSource, final int sampleRateInHz, fina...
method setEnhancers (line 86) | @SuppressWarnings("NewApi")
FILE: app/src/main/java/ai/saiy/android/audio/SaiyAudioTrack.java
class SaiyAudioTrack (line 38) | public class SaiyAudioTrack extends AudioTrack {
method SaiyAudioTrack (line 88) | public SaiyAudioTrack(final int streamType, final int sampleRateInHz, ...
method write (line 93) | @Override
method stop (line 107) | @Override
method stop (line 120) | public void stop(final boolean interrupt) {
method setListener (line 143) | public void setListener(@NonNull final SaiyProgressListener listener) {
method enqueue (line 154) | public void enqueue(@NonNull final byte[] uncompressedBytes, @NonNull ...
method process (line 184) | private synchronized void process() throws NoSuchElementException, Ill...
method getSaiyAudioTrack (line 228) | public static SaiyAudioTrack getSaiyAudioTrack() {
method getSaiyAudioTrack (line 249) | public static SaiyAudioTrack getSaiyAudioTrack(final int stream) {
method streamMatches (line 264) | public boolean streamMatches(final int stream) {
FILE: app/src/main/java/ai/saiy/android/audio/SaiyRecorder.java
class SaiyRecorder (line 35) | public class SaiyRecorder {
method SaiyRecorder (line 60) | public SaiyRecorder() {
method SaiyRecorder (line 77) | public SaiyRecorder(final int audioSource, final int sampleRateInHz, f...
method SaiyRecorder (line 96) | public SaiyRecorder(final int audioSource, final int sampleRateInHz, f...
method initialise (line 111) | public int initialise() {
method read (line 157) | public int read(@NonNull final byte[] buffer) {
method read (line 169) | public int read(short[] audioData, int offsetInShorts, int sizeInShort...
method getRecordingState (line 178) | public int getRecordingState() {
method getBufferSize (line 182) | public int getBufferSize() {
method startRecording (line 189) | public int startRecording() {
method shutdown (line 228) | public void shutdown(@NonNull final String from) {
method calculateBufferSize (line 286) | private int calculateBufferSize() {
FILE: app/src/main/java/ai/saiy/android/audio/SaiySoundPool.java
class SaiySoundPool (line 36) | public class SaiySoundPool implements SoundPool.OnLoadCompleteListener {
method setUp (line 58) | public SaiySoundPool setUp(@NonNull final Context ctx, final int type) {
method play (line 95) | public int play(final int soundId) {
method release (line 107) | public void release() {
method getBeepStart (line 112) | public int getBeepStart() {
method getBeepStop (line 116) | public int getBeepStop() {
method isBeepStartInitialised (line 120) | public boolean isBeepStartInitialised() {
method isBeepStopInitialised (line 124) | public boolean isBeepStopInitialised() {
method onLoadComplete (line 135) | @Override
FILE: app/src/main/java/ai/saiy/android/audio/pause/PauseDetector.java
class PauseDetector (line 50) | public class PauseDetector {
method PauseDetector (line 81) | public PauseDetector(final PauseListener pauseListener, final int samp...
method begin (line 95) | public void begin() {
method addLength (line 105) | public void addLength(final byte[] buffer, final int bufferReadResult) {
method hasDetected (line 129) | public boolean hasDetected() {
method monitor (line 136) | public void monitor() {
method getPauseScore (line 189) | private double getPauseScore() {
method getRms (line 203) | private long getRms(int end, int span) {
method getShort (line 221) | private short getShort(byte argB1, byte argB2) {
FILE: app/src/main/java/ai/saiy/android/audio/pause/PauseListener.java
type PauseListener (line 23) | public interface PauseListener {
method onPauseDetected (line 24) | void onPauseDetected();
FILE: app/src/main/java/ai/saiy/android/broadcast/BRBoot.java
class BRBoot (line 35) | public class BRBoot extends BroadcastReceiver {
method onReceive (line 40) | @Override
method getAction (line 88) | private String getAction(final Intent intent) {
FILE: app/src/main/java/ai/saiy/android/broadcast/BRRemote.java
class BRRemote (line 63) | public class BRRemote extends BroadcastReceiver {
method onReceive (line 70) | @Override
method examineIntent (line 252) | private void examineIntent(@NonNull final Intent intent) {
FILE: app/src/main/java/ai/saiy/android/cache/speech/IAudioCompression.java
type IAudioCompression (line 25) | public interface IAudioCompression {
method onCompressionCompleted (line 27) | void onCompressionCompleted(final byte[] compressedAudio);
FILE: app/src/main/java/ai/saiy/android/cache/speech/SpeechCachePrepare.java
class SpeechCachePrepare (line 36) | public class SpeechCachePrepare implements IAudioCompression {
method SpeechCachePrepare (line 50) | public SpeechCachePrepare(@NonNull final Context mContext) {
method setUncompressedAudio (line 59) | public void setUncompressedAudio(@NonNull final byte[] uncompressedAud...
method getCompressedAudio (line 68) | public byte[] getCompressedAudio() {
method getEngine (line 72) | public String getEngine() {
method setEngine (line 76) | public void setEngine(@NonNull final String engine) {
method getLocale (line 80) | public String getLocale() {
method setLocale (line 84) | public void setLocale(@NonNull final String locale) {
method getUtterance (line 88) | public String getUtterance() {
method setUtterance (line 92) | public void setUtterance(@NonNull final String utterance) {
method getVoice (line 96) | public Voice getVoice() {
method setVoice (line 100) | public void setVoice(@NonNull final Voice voice) {
method onCompressionCompleted (line 104) | @Override
method executeInsert (line 113) | private void executeInsert() {
FILE: app/src/main/java/ai/saiy/android/cache/speech/SpeechCacheResult.java
class SpeechCacheResult (line 25) | public class SpeechCacheResult {
method SpeechCacheResult (line 31) | public SpeechCacheResult(final byte[] compressedBytes, final long rowI...
method getCompressedBytes (line 37) | public byte[] getCompressedBytes() {
method getRowId (line 41) | public long getRowId() {
method isSuccess (line 45) | public boolean isSuccess() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/AnalysisResult.java
class AnalysisResult (line 26) | public class AnalysisResult {
method AnalysisResult (line 32) | public AnalysisResult() {
method AnalysisResult (line 35) | public AnalysisResult(@NonNull final String recordingId, final long an...
method getRecordingId (line 41) | public String getRecordingId() {
method setRecordingId (line 45) | public void setRecordingId(final String recordingId) {
method getAnalysisTime (line 49) | public long getAnalysisTime() {
method setAnalysisTime (line 53) | public void setAnalysisTime(final long analysisTime) {
method getDescription (line 57) | public String getDescription() {
method setDescription (line 61) | public void setDescription(final String description) {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/AnalysisResultHelper.java
class AnalysisResultHelper (line 65) | public class AnalysisResultHelper {
method AnalysisResultHelper (line 79) | public AnalysisResultHelper(@NonNull final Context mContext, @NonNull ...
method interpretAndStore (line 90) | public void interpretAndStore(@Nullable final Emotions emotions) {
method getIntro (line 147) | private String getIntro(@NonNull final SaiyResources sr) {
method getStartDesc (line 152) | private String getStartDesc(@NonNull final SaiyResources sr) {
method getConnector (line 157) | private String getConnector(@NonNull final SaiyResources sr) {
method getGap (line 162) | private String getGap(@NonNull final SaiyResources sr) {
method getConnectorTwo (line 167) | private String getConnectorTwo(@NonNull final SaiyResources sr) {
method getValenceIntro (line 172) | private String getValenceIntro(@NonNull final SaiyResources sr) {
method getConnectorThree (line 177) | private String getConnectorThree(@NonNull final SaiyResources sr) {
method getMoodConnector (line 182) | private String getMoodConnector(@NonNull final SaiyResources sr) {
method getModeOne (line 187) | private String getModeOne(final String[] stringArray) {
method getModeTwo (line 197) | private String getModeTwo(@NonNull final String[] stringArray) {
method getModeThree (line 201) | private String getModeThree(final String[] stringArray) {
method getValenceLevel (line 205) | private String getValenceLevel(@NonNull final SaiyResources sr, @NonNu...
method getArousalLevel (line 220) | private String getArousalLevel(@NonNull final SaiyResources sr, @NonNu...
method constructResponse (line 241) | public String constructResponse(@Nullable final Result result) {
method verboseEmotions (line 741) | private void verboseEmotions(@NonNull final Result result) {
method hasEmotion (line 1270) | public static boolean hasEmotion(@NonNull final Context ctx) {
method getEmotionDescription (line 1280) | public static String getEmotionDescription(@NonNull final Context ctx,...
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/BeyondVerbal.java
class BeyondVerbal (line 46) | public class BeyondVerbal {
method BeyondVerbal (line 63) | public BeyondVerbal(@NonNull final Context mContext, @NonNull final Re...
method stream (line 70) | public void stream() {
method onError (line 117) | private void onError() {
method getToken (line 133) | private String getToken() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Analysis.java
class Analysis (line 27) | public class Analysis {
method Analysis (line 51) | public Analysis(final Gender gender, final Temper temper, final Valenc...
method getArousal (line 61) | public Arousal getArousal() {
method getAudioQuality (line 65) | public AudioQuality getAudioQuality() {
method getGender (line 69) | public Gender getGender() {
method getMood (line 73) | public Mood getMood() {
method getTemper (line 77) | public Temper getTemper() {
method getValence (line 81) | public Valence getValence() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/AnalysisSummary.java
class AnalysisSummary (line 26) | public class AnalysisSummary {
method AnalysisSummary (line 31) | public AnalysisSummary(final Analysis analysisResult) {
method getAnalysisResult (line 35) | public Analysis getAnalysisResult() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Arousal.java
class Arousal (line 27) | public class Arousal {
method Arousal (line 47) | public Arousal(final String group, final double value, final Summary s...
method getScore (line 57) | public double getScore() {
method getMean (line 61) | public double getMean() {
method getMode (line 65) | public String getMode() {
method getGroup (line 69) | public String getGroup() {
method getSummary (line 73) | public Summary getSummary() {
method getValue (line 77) | public double getValue() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/AudioQuality.java
class AudioQuality (line 27) | public class AudioQuality {
method AudioQuality (line 46) | public AudioQuality(final String group, final double value, final doub...
method getSummary (line 54) | public Summary getSummary() {
method getValue (line 58) | public double getValue() {
method getMean (line 62) | public double getMean() {
method getMode (line 66) | public String getMode() {
method getGroup (line 70) | public String getGroup() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Composite.java
class Composite (line 27) | public class Composite {
method Composite (line 35) | public Composite(final Primary primary, final Secondary secondary) {
method getPrimary (line 40) | public Primary getPrimary() {
method getSecondary (line 44) | public Secondary getSecondary() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Emotions.java
class Emotions (line 29) | public class Emotions {
method Emotions (line 42) | public Emotions(final String recordingId, final Result result, final S...
method setRecordingId (line 48) | public void setRecordingId(@NonNull final String recordingId) {
method getRecordingId (line 52) | public String getRecordingId() {
method getResult (line 56) | public Result getResult() {
method getStatus (line 60) | public String getStatus() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Gender.java
class Gender (line 27) | public class Gender {
method Gender (line 47) | public Gender(final String group, final double value, final Summary su...
method getMean (line 55) | public double getMean() {
method getMode (line 59) | public String getMode() {
method getGroup (line 63) | public String getGroup() {
method getSummary (line 67) | public Summary getSummary() {
method getValue (line 71) | public double getValue() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Group11.java
class Group11 (line 27) | public class Group11 {
method Group11 (line 35) | public Group11(final Primary primary, final Secondary secondary) {
method getPrimary (line 40) | public Primary getPrimary() {
method getSecondary (line 44) | public Secondary getSecondary() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Group21.java
class Group21 (line 27) | public class Group21 {
method Group21 (line 35) | public Group21(final Primary primary, final Secondary secondary) {
method getPrimary (line 40) | public Primary getPrimary() {
method getSecondary (line 44) | public Secondary getSecondary() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Group7.java
class Group7 (line 27) | public class Group7 {
method Group7 (line 35) | public Group7(final Primary primary, final Secondary secondary) {
method getPrimary (line 40) | public Primary getPrimary() {
method getSecondary (line 44) | public Secondary getSecondary() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Mood.java
class Mood (line 27) | public class Mood {
method Mood (line 41) | public Mood(final Composite composite, final Group11 group11, final Gr...
method getComposite (line 48) | public Composite getComposite() {
method getGroup11 (line 52) | public Group11 getGroup11() {
method getGroup21 (line 56) | public Group21 getGroup21() {
method getGroup7 (line 60) | public Group7 getGroup7() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Primary.java
class Primary (line 27) | public class Primary {
method Primary (line 35) | public Primary(final int id, final String phrase) {
method getId (line 40) | public int getId() {
method getPhrase (line 44) | public String getPhrase() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Result.java
class Result (line 29) | public class Result {
method Result (line 43) | public Result(final double duration, final List<Segment> segments, fin...
method getAnalysisSummary (line 51) | public AnalysisSummary getAnalysisSummary() {
method getDuration (line 55) | public double getDuration() {
method getSegments (line 59) | public List<Segment> getSegments() {
method getSessionStatus (line 63) | public String getSessionStatus() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Secondary.java
class Secondary (line 27) | public class Secondary {
method Secondary (line 35) | public Secondary(final int id, final String phrase) {
method getId (line 40) | public int getId() {
method getPhrase (line 44) | public String getPhrase() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Segment.java
class Segment (line 27) | public class Segment {
method Segment (line 38) | public Segment(final Analysis analysis, final double duration, final d...
method getAnalysis (line 44) | public Analysis getAnalysis() {
method getDuration (line 48) | public double getDuration() {
method getOffset (line 52) | public double getOffset() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Summary.java
class Summary (line 27) | public class Summary {
method Summary (line 38) | public Summary(final double mean, final String mode, final int modePct) {
method getMean (line 44) | public double getMean() {
method getMode (line 48) | public String getMode() {
method getModePct (line 52) | public int getModePct() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Temper.java
class Temper (line 27) | public class Temper {
method Temper (line 47) | public Temper(final String group, final double value, final Summary su...
method getScore (line 57) | public double getScore() {
method getMean (line 61) | public double getMean() {
method getMode (line 65) | public String getMode() {
method getGroup (line 69) | public String getGroup() {
method getSummary (line 73) | public Summary getSummary() {
method getValue (line 77) | public double getValue() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Valence.java
class Valence (line 27) | public class Valence {
method Valence (line 51) | public Valence(final String group, final double value, final Summary s...
method getScore (line 61) | public double getScore() {
method getMean (line 65) | public double getMean() {
method getMode (line 69) | public String getMode() {
method getGroup (line 73) | public String getGroup() {
method getSummary (line 77) | public Summary getSummary() {
method getValue (line 81) | public double getValue() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/audio/AudioConfig.java
class AudioConfig (line 30) | public class AudioConfig {
method AudioConfig (line 47) | public AudioConfig() {
method AudioConfig (line 59) | public AudioConfig(@NonNull final AudioType type, final int bitsPerSam...
method getDefault (line 68) | public static AudioConfig getDefault() {
method getConfigJson (line 77) | public JSONObject getConfigJson() {
method getBitsPerSample (line 94) | public int getBitsPerSample() {
method getSampleRate (line 98) | public int getSampleRate() {
method isAutoDetect (line 102) | public boolean isAutoDetect() {
method setAutoDetect (line 106) | public void setAutoDetect(final boolean autoDetect) {
method setBitsPerSample (line 111) | public void setBitsPerSample(final int bitsPerSample) {
method getChannels (line 115) | public int getChannels() {
method setChannels (line 119) | public void setChannels(final int channels) {
method setSampleRate (line 123) | public void setSampleRate(final int sampleRate) {
method getType (line 127) | public AudioType getType() {
method setType (line 131) | public void setType(@NonNull final AudioType type) {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/audio/AudioType.java
type AudioType (line 25) | public enum AudioType {
method AudioType (line 37) | AudioType(final String type) {
method getType (line 41) | public String getType() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/containers/BVCredentials.java
class BVCredentials (line 39) | public class BVCredentials {
method BVCredentials (line 56) | public BVCredentials(final String accessToken, final String tokenType,...
method isTokenValid (line 70) | public static boolean isTokenValid(@Nullable final BVCredentials bvCre...
method refreshTokenIfRequired (line 84) | public static Pair<Boolean, BVCredentials> refreshTokenIfRequired(@Non...
method getLastToken (line 102) | private static BVCredentials getLastToken(@NonNull final Context ctx) {
method getAccessToken (line 132) | public String getAccessToken() {
method getExpiresIn (line 136) | public long getExpiresIn() {
method getTokenType (line 140) | public String getTokenType() {
method getExpiryTime (line 144) | public long getExpiryTime() {
method setExpiryTime (line 148) | public void setExpiryTime(final long expiryTime) {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/containers/StartRequestBody.java
class StartRequestBody (line 36) | public class StartRequestBody {
method StartRequestBody (line 56) | public StartRequestBody(@NonNull final AudioConfig config, @Nullable f...
method prepare (line 68) | public JSONObject prepare() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/containers/StartResponse.java
class StartResponse (line 27) | public class StartResponse {
method StartResponse (line 41) | public StartResponse(final String reason, final String status, final S...
method isSuccessful (line 47) | public boolean isSuccessful() {
method getReason (line 51) | public String getReason() {
method getRecordingId (line 55) | public String getRecordingId() {
method getStatus (line 59) | public String getStatus() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/http/BVAuthRequest.java
class BVAuthRequest (line 62) | public class BVAuthRequest {
method BVAuthRequest (line 87) | public BVAuthRequest(@NonNull final Context mContext, @NonNull final S...
method getToken (line 99) | public Pair<Boolean, BVCredentials> getToken() {
method verboseError (line 197) | private void verboseError(@NonNull final VolleyError error) {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/http/BVEmotionAnalysis.java
class BVEmotionAnalysis (line 71) | public class BVEmotionAnalysis {
method BVEmotionAnalysis (line 96) | public BVEmotionAnalysis(@NonNull final Context mContext, @NonNull fin...
method getAnalysis (line 110) | public Pair<Boolean, Emotions> getAnalysis(@NonNull final String recor...
method verboseError (line 203) | private void verboseError(@NonNull final VolleyError error) {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/http/BVSendFile.java
class BVSendFile (line 41) | public class BVSendFile {
method BVSendFile (line 60) | public BVSendFile(@NonNull final String token, @NonNull final String r...
method stream (line 67) | public void stream() {
method closeConnection (line 142) | private void closeConnection() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/http/BVStartRequest.java
class BVStartRequest (line 60) | public class BVStartRequest {
method BVStartRequest (line 83) | public BVStartRequest(@NonNull final Context mContext, @NonNull final ...
method getId (line 96) | public Pair<Boolean, StartResponse> getId(@NonNull final JSONObject bo...
method verboseError (line 190) | private void verboseError(@NonNull final VolleyError error) {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/http/BVStreamAudio.java
class BVStreamAudio (line 55) | public class BVStreamAudio implements IMic {
method BVStreamAudio (line 88) | public BVStreamAudio(@NonNull final RecognitionMic mic, @NonNull final...
method stream (line 102) | public void stream() {
method onBufferReceived (line 230) | @Override
method proceedAndNotify (line 250) | private void proceedAndNotify() {
method onError (line 284) | @Override
method onPauseDetected (line 344) | @Override
method onRecordingStarted (line 351) | @Override
method onRecordingEnded (line 358) | @Override
method onFileWriteComplete (line 366) | @Override
method closeConnection (line 373) | private void closeConnection() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/language/SupportedLanguageBV.java
type SupportedLanguageBV (line 29) | public enum SupportedLanguageBV {
method SupportedLanguageBV (line 39) | SupportedLanguageBV(final String country, final String languageCountry...
method isSupported (line 48) | public static boolean isSupported(@NonNull final Locale loc) {
method getSupportedLanguage (line 59) | public static SupportedLanguageBV getSupportedLanguage(@NonNull final ...
method getSupportedLanguages (line 70) | public static SupportedLanguageBV[] getSupportedLanguages() {
method getCountry (line 74) | public String getCountry() {
method getLanguage (line 78) | public String getLanguage() {
method getLanguageCountry (line 82) | public String getLanguageCountry() {
method getServerFormat (line 86) | public String getServerFormat() {
method getLanguageCountryISO (line 90) | public String getLanguageCountryISO() {
method getLocale (line 94) | public Locale getLocale() {
FILE: app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/user/MetaData.java
class MetaData (line 34) | public class MetaData {
method MetaData (line 57) | public MetaData() {
method MetaData (line 69) | public MetaData(@Nullable final String deviceId, @Nullable final Strin...
method getEmpty (line 79) | public static MetaData getEmpty() {
method getMetaJSON (line 89) | public JSONObject getMetaJSON() {
method getDeviceId (line 106) | public String getDeviceId() {
method setDeviceId (line 110) | public void setDeviceId(@NonNull final String deviceId) {
method getEmail (line 114) | public String getEmail() {
method setEmail (line 118) | public void setEmail(@NonNull final String email) {
method getFacebookId (line 122) | public String getFacebookId() {
method setFacebookId (line 126) | public void setFacebookId(@NonNull final String facebookId) {
method getPhone (line 130) | public String getPhone() {
method setPhone (line 134) | public void setPhone(@NonNull final String phone) {
method getTwitterId (line 138) | public String getTwitterId() {
method setTwitterId (line 142) | public void setTwitterId(@NonNull final String twitterId) {
FILE: app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/Speaker.java
class Speaker (line 30) | public class Speaker {
type Confidence (line 40) | public enum Confidence {
method getConfidence (line 54) | public static Confidence getConfidence(@Nullable final String level) {
type Status (line 71) | public enum Status {
method getStatus (line 85) | public static Status getStatus(@Nullable final String status) {
FILE: app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/SpeakerEnrollment.java
class SpeakerEnrollment (line 39) | public class SpeakerEnrollment implements IMic {
method SpeakerEnrollment (line 61) | public SpeakerEnrollment(@NonNull final RecognitionMic mic,
method record (line 76) | public void record() {
method onError (line 130) | @Override
method onBufferReceived (line 190) | @Override
method onPauseDetected (line 198) | @Override
method onRecordingStarted (line 205) | @Override
method onRecordingEnded (line 212) | @Override
method onFileWriteComplete (line 220) | @Override
FILE: app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/SpeakerIdentification.java
class SpeakerIdentification (line 39) | public class SpeakerIdentification implements IMic {
method SpeakerIdentification (line 61) | public SpeakerIdentification(@NonNull final RecognitionMic mic,
method record (line 76) | public void record() {
method onError (line 118) | @Override
method onBufferReceived (line 178) | @Override
method onPauseDetected (line 185) | @Override
method onRecordingStarted (line 192) | @Override
method onRecordingEnded (line 199) | @Override
method onFileWriteComplete (line 207) | @Override
FILE: app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/containers/EnrollmentID.java
class EnrollmentID (line 26) | public class EnrollmentID {
method EnrollmentID (line 31) | public EnrollmentID(final String id) {
method getId (line 35) | public String getId() {
FILE: app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/containers/OperationStatus.java
class OperationStatus (line 26) | public class OperationStatus {
method OperationStatus (line 43) | public OperationStatus(final String created, final String lastAction, ...
method getCreated (line 52) | public String getCreated() {
method setCreated (line 56) | public void setCreated(final String created) {
method getLastAction (line 60) | public String getLastAction() {
method setLastAction (line 64) | public void setLastAction(final String lastAction) {
method getMessage (line 68) | public String getMessage() {
method setMessage (line 72) | public void setMessage(final String message) {
method getProcessingResult (line 76) | public ProcessingResult getProcessingResult() {
method setProcessingResult (line 80) | public void setProcessingResult(final ProcessingResult processingResul...
method getStatus (line 84) | public String getStatus() {
method setStatus (line 88) | public void setStatus(final String status) {
FILE: app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/containers/ProcessingResult.java
class ProcessingResult (line 26) | public class ProcessingResult {
method ProcessingResult (line 46) | public ProcessingResult(final String confidence, final double enrollme...
method getConfidence (line 57) | public String getConfidence() {
method setConfidence (line 61) | public void setConfidence(final String confidence) {
method getEnrollmentSpeechTime (line 65) | public double getEnrollmentSpeechTime() {
method setEnrollmentSpeechTime (line 69) | public void setEnrollmentSpeechTime(final double enrollmentSpeechTime) {
method getEnrollmentStatus (line 73) | public String getEnrollmentStatus() {
method setEnrollmentStatus (line 77) | public void setEnrollmentStatus(final String enrollmentStatus) {
method getProfileId (line 81) | public String getProfileId() {
method setProfileId (line 85) | public void setProfileId(final String profileId) {
method getRemainingSpeechTime (line 89) | public double getRemainingSpeechTime() {
method setRemainingSpeechTime (line 93) | public void setRemainingSpeechTime(final double remainingSpeechTime) {
method getSpeechTime (line 97) | public double getSpeechTime() {
method setSpeechTime (line 101) | public void setSpeechTime(final double speechTime) {
FILE: app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/containers/ProfileItem.java
class ProfileItem (line 28) | public class ProfileItem {
method ProfileItem (line 51) | public ProfileItem(final String created, final String id, final String...
method ProfileItem (line 62) | public ProfileItem(@NonNull final String id) {
method getCreated (line 66) | public String getCreated() {
method getId (line 70) | public String getId() {
method getLastAction (line 74) | public String getLastAction() {
method getLocale (line 78) | public String getLocale() {
method getRemainingSpeechTime (line 82) | public double getRemainingSpeechTime() {
method getSpeechTime (line 86) | public double getSpeechTime() {
method getStatus (line 90) | public String getStatus() {
method setCreated (line 94) | public void setCreated(final String created) {
method setLastAction (line 98) | public void setLastAction(final String lastAction) {
method setLocale (line 102) | public void setLocale(final String locale) {
method setRemainingSpeechTime (line 106) | public void setRemainingSpeechTime(final double remainingSpeechTime) {
method setSpeechTime (line 110) | public void setSpeechTime(final double speechTime) {
method setStatus (line 114) | public void setStatus(final String status) {
FILE: app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/containers/ProfileList.java
class ProfileList (line 26) | public class ProfileList {
method ProfileList (line 30) | public ProfileList(final List<ProfileItem> items) {
method getItems (line 34) | public List<ProfileItem> getItems() {
FILE: app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/http/CreateIDEnrollment.java
class CreateIDEnrollment (line 53) | public class CreateIDEnrollment {
method CreateIDEnrollment (line 89) | public CreateIDEnrollment(@NonNull final RecognitionMic mic, @NonNull ...
method stream (line 102) | public void stream() {
method checkResult (line 246) | private void checkResult(@NonNull final Pair<Boolean, OperationStatus>...
method closeConnection (line 311) | private void closeConnection() {
FILE: app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/http/CreateIDProfile.java
class CreateIDProfile (line 60) | public class CreateIDProfile {
method CreateIDProfile (line 86) | public CreateIDProfile(@NonNull final Context mContext, @NonNull final...
method getID (line 100) | public Pair<Boolean, EnrollmentID> getID() {
method verboseError (line 202) | private void verboseError(@NonNull final VolleyError error) {
FILE: app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/http/DeleteIDProfile.java
class DeleteIDProfile (line 47) | public class DeleteIDProfile {
method DeleteIDProfile (line 67) | public DeleteIDProfile(@NonNull final Context mContext, @NonNull final...
method delete (line 74) | public void delete() {
method verboseError (line 138) | private void verboseError(@NonNull final VolleyError error) {
FILE: app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/http/FetchIDOperation.java
class FetchIDOperation (line 57) | public class FetchIDOperation {
method FetchIDOperation (line 81) | public FetchIDOperation(@NonNull final Context mContext, @NonNull fina...
method getStatus (line 95) | public Pair<Boolean, OperationStatus> getStatus() {
method verboseError (line 202) | private void verboseError(@NonNull final VolleyError error) {
FILE: app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/http/FetchIDProfile.java
class FetchIDProfile (line 59) | public class FetchIDProfile {
method FetchIDProfile (line 84) | public FetchIDProfile(@NonNull final Context mContext, @NonNull final ...
method getProfile (line 98) | public Pair<Boolean, ProfileItem> getProfile() {
method verboseError (line 200) | private void verboseError(@NonNull final VolleyError error) {
FILE: app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/http/ListIDProfiles.java
class ListIDProfiles (line 60) | public class ListIDProfiles {
method ListIDProfiles (line 85) | public ListIDProfiles(@NonNull final Context mContext, @NonNull final ...
method getProfiles (line 97) | public Pair<Boolean, ProfileList> getProfiles() {
method verboseError (line 191) | private void verboseError(@NonNull final VolleyError error) {
FILE: app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/http/ValidateID.java
class ValidateID (line 54) | public class ValidateID implements IMic {
method ValidateID (line 92) | public ValidateID(@NonNull final RecognitionMic mic, @NonNull final Su...
method stream (line 107) | public void stream() {
method checkResult (line 250) | private void checkResult(@NonNull final Pair<Boolean, OperationStatus>...
method onBufferReceived (line 308) | @Override
method onError (line 315) | @Override
method onPauseDetected (line 322) | @Override
method onRecordingStarted (line 329) | @Override
method onRecordingEnded (line 336) | @Override
method onFileWriteComplete (line 343) | @Override
method closeConnection (line 350) | private void closeConnection() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/WolframAlphaCognitive.java
class WolframAlphaCognitive (line 43) | public class WolframAlphaCognitive {
method validate (line 72) | public boolean validate(@NonNull final String text) {
method execute (line 178) | public Pair<Boolean, WolframAlphaResponse> execute(@NonNull final Wolf...
method closeConnection (line 279) | private void closeConnection() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Alternative.java
class Alternative (line 28) | @Root(name = "alternative")
method Alternative (line 39) | public Alternative() {
method Alternative (line 42) | public Alternative(@Attribute(name = "level", required = false) final ...
method getLevel (line 50) | public String getLevel() {
method getScore (line 54) | public double getScore() {
method getText (line 58) | @Text
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Assumption.java
class Assumption (line 30) | @Root(name = "assumption")
method Assumption (line 54) | public Assumption() {
method Assumption (line 57) | public Assumption(@Attribute(name = "count") final long count,
method getCurrent (line 73) | public long getCurrent() {
method getDesc (line 77) | public String getDesc() {
method getCount (line 81) | public long getCount() {
method getTemplate (line 85) | public String getTemplate() {
method getType (line 89) | public String getType() {
method getValues (line 93) | public List<Value> getValues() {
method getWord (line 97) | public String getWord() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Assumptions.java
class Assumptions (line 30) | @Root(name = "assumptions")
method Assumptions (line 39) | public Assumptions() {
method Assumptions (line 42) | public Assumptions(@ElementList(inline = true, name = "assumption") fi...
method getCount (line 48) | public long getCount() {
method getAssumptions (line 52) | public List<Assumption> getAssumptions() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Definition.java
class Definition (line 27) | @Root(name = "definition")
method Definition (line 36) | public Definition() {
method Definition (line 39) | public Definition(@Attribute(name = "desc", required = false) final St...
method getDesc (line 45) | public String getDesc() {
method getWord (line 49) | public String getWord() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Definitions.java
class Definitions (line 30) | @Root(name = "definitions")
method Definitions (line 39) | public Definitions() {
method Definitions (line 42) | public Definitions(@Attribute(name = "count") final long count,
method getCount (line 48) | public long getCount() {
method getDefinitions (line 52) | public List<Definition> getDefinitions() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Info.java
class Info (line 27) | @Root(name = "info")
method Info (line 36) | public Info() {
method Info (line 39) | public Info(@Element(name = "link", required = false) final Link link,
method hasUnits (line 45) | public boolean hasUnits() {
method getUnits (line 49) | public Units getUnits() {
method hasLink (line 53) | public boolean hasLink() {
method getLink (line 57) | public Link getLink() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Infos.java
class Infos (line 30) | @Root(name = "infos")
method Infos (line 39) | public Infos() {
method Infos (line 42) | public Infos(@Attribute(name = "count") final long count,
method getCount (line 48) | public long getCount() {
method getInfo (line 52) | public List<Info> getInfo() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Link.java
class Link (line 27) | @Root(name = "link")
method Link (line 36) | public Link() {
method Link (line 39) | public Link(@Attribute(name = "text") final String text,
method getText (line 45) | public String getText() {
method getUrl (line 49) | public String getUrl() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Pod.java
class Pod (line 33) | @Root(name = "pod")
method Pod (line 72) | public Pod() {
method Pod (line 75) | public Pod(@Attribute(name = "error") final boolean error,
method hasDefinitions (line 99) | public boolean hasDefinitions() {
method getDefinitions (line 103) | public Definitions getDefinitions() {
method hasInfos (line 107) | public boolean hasInfos() {
method getInfos (line 111) | public Infos getInfos() {
method hasStates (line 115) | public boolean hasStates() {
method getStates (line 119) | public States getStates() {
method isPrimary (line 123) | public boolean isPrimary() {
method isError (line 127) | public boolean isError() {
method getId (line 131) | public String getId() {
method getNumsubpods (line 135) | public long getNumsubpods() {
method getPosition (line 139) | public long getPosition() {
method getScanner (line 143) | public String getScanner() {
method hasSubPods (line 147) | public boolean hasSubPods() {
method getSubPods (line 151) | public List<SubPod> getSubPods() {
method getTitle (line 155) | public String getTitle() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/QueryResult.java
class QueryResult (line 33) | @Root(name = "queryresult") //, strict = false
method QueryResult (line 96) | public QueryResult() {
method QueryResult (line 99) | public QueryResult(@Attribute(name = "datatypes") final String datatypes,
method noData (line 141) | public boolean noData() {
method getWarnings (line 145) | public Warnings getWarnings() {
method getSources (line 149) | public Sources getSources() {
method hasSources (line 153) | public boolean hasSources() {
method getAssumptions (line 157) | public Assumptions getAssumptions() {
method hasAssumptions (line 161) | public boolean hasAssumptions() {
method getDatatypes (line 165) | public String getDatatypes() {
method isError (line 169) | public boolean isError() {
method getHost (line 173) | public String getHost() {
method getId (line 177) | public String getId() {
method getNumpods (line 181) | public int getNumpods() {
method isParsetimedout (line 185) | public boolean isParsetimedout() {
method getParsetiming (line 189) | public double getParsetiming() {
method hasPods (line 193) | public boolean hasPods() {
method getPods (line 197) | public List<Pod> getPods() {
method getRecalculate (line 201) | public String getRecalculate() {
method getRelated (line 205) | public String getRelated() {
method getServer (line 209) | public int getServer() {
method isSuccess (line 213) | public boolean isSuccess() {
method getTimedout (line 217) | public String getTimedout() {
method getTimedoutpods (line 221) | public String getTimedoutpods() {
method getTiming (line 225) | public double getTiming() {
method getVersion (line 229) | public double getVersion() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Reinterpret.java
class Reinterpret (line 30) | @Root(name = "reinterpret")
method Reinterpret (line 48) | public Reinterpret() {
method Reinterpret (line 51) | public Reinterpret(@Attribute(name = "level", required = false) final ...
method haveAlternatives (line 64) | public boolean haveAlternatives() {
method getAlternatives (line 68) | public List<Alternative> getAlternatives() {
method getLevel (line 72) | public String getLevel() {
method getReplaced (line 76) | public String getReplaced() {
method getScore (line 80) | public double getScore() {
method getText (line 84) | public String getText() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Source.java
class Source (line 27) | @Root(name = "source")
method Source (line 36) | public Source() {
method Source (line 39) | public Source(@Attribute(name = "text") final String text,
method getText (line 45) | public String getText() {
method getUrl (line 49) | public String getUrl() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Sources.java
class Sources (line 30) | @Root(name = "sources")
method Sources (line 39) | public Sources() {
method Sources (line 42) | public Sources(@Attribute(name = "count") final long count,
method getCount (line 48) | public long getCount() {
method getSources (line 52) | public List<Source> getSources() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/SpellCheck.java
class SpellCheck (line 27) | @Root(name = "spellcheck")
method SpellCheck (line 39) | public SpellCheck() {
method SpellCheck (line 42) | public SpellCheck(@Attribute(name = "suggestion") final String suggest...
method getSuggestion (line 50) | public String getSuggestion() {
method getText (line 54) | public String getText() {
method getWord (line 58) | public String getWord() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/State.java
class State (line 27) | @Root(name = "state")
method State (line 36) | public State() {
method State (line 39) | public State(@Attribute(name = "name") final String input,
method getInput (line 45) | public String getInput() {
method getName (line 49) | public String getName() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/StateList.java
class StateList (line 30) | @Root(name = "statelist")
method StateList (line 45) | public StateList() {
method StateList (line 48) | public StateList(@Attribute(name = "count") final long count,
method getCount (line 58) | public long getCount() {
method getDelimiters (line 62) | public String getDelimiters() {
method getState (line 66) | public List<State> getState() {
method getValue (line 70) | public String getValue() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/States.java
class States (line 31) | @Root(name = "states")
method States (line 43) | public States() {
method States (line 46) | public States(@Attribute(name = "count") final long count,
method hasStateList (line 54) | public boolean hasStateList() {
method getStateList (line 58) | public StateList getStateList() {
method getCount (line 62) | public long getCount() {
method getState (line 66) | public List<State> getState() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/SubPod.java
class SubPod (line 28) | @Root(name = "subpod")
method SubPod (line 42) | public SubPod() {
method SubPod (line 45) | public SubPod(@Element(name = "plaintext") final String plaintext,
method getImagesource (line 53) | public String getImagesource() {
method getPlaintext (line 57) | public String getPlaintext() {
method getTitle (line 61) | public String getTitle() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Unit.java
class Unit (line 27) | @Root(name = "unit")
method Unit (line 36) | public Unit() {
method Unit (line 39) | public Unit(@Attribute(name = "long") final String longUnit,
method getLongUnit (line 45) | public String getLongUnit() {
method getShortUnit (line 49) | public String getShortUnit() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Units.java
class Units (line 30) | @Root(name = "units")
method Units (line 39) | public Units() {
method Units (line 42) | public Units(@Attribute(name = "count") final long count,
method getCount (line 48) | public long getCount() {
method getUnit (line 52) | public List<Unit> getUnit() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/ValidateQueryResult.java
class ValidateQueryResult (line 27) | @Root(name = "validatequeryresult", strict = false)
method ValidateQueryResult (line 36) | public ValidateQueryResult(@Attribute(name = "error") final boolean er...
method isError (line 42) | public boolean isError() {
method isSuccess (line 46) | public boolean isSuccess() {
method passedValidation (line 50) | public boolean passedValidation() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Value.java
class Value (line 27) | @Root(name = "value")
method Value (line 45) | public Value() {
method Value (line 48) | public Value(@Attribute(name = "input") final String input,
method isValid (line 60) | public boolean isValid() {
method getWord (line 64) | public String getWord() {
method getDesc (line 68) | public String getDesc() {
method getInput (line 72) | public String getInput() {
method getName (line 76) | public String getName() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Warnings.java
class Warnings (line 28) | @Root(name = "warnings")
method Warnings (line 40) | public Warnings() {
method Warnings (line 43) | public Warnings(@Attribute(name = "count") final long count,
method hasSpellCheck (line 51) | public boolean hasSpellCheck() {
method getSpellcheck (line 55) | public SpellCheck getSpellcheck() {
method getCount (line 59) | public long getCount() {
method hasReinterpret (line 63) | public boolean hasReinterpret() {
method getReinterpret (line 67) | public Reinterpret getReinterpret() {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/resolve/ResolveWolframAlpha.java
class ResolveWolframAlpha (line 49) | public class ResolveWolframAlpha {
method validate (line 59) | public boolean validate(@NonNull final String question) {
method resolve (line 81) | public Pair<Boolean, WolframAlphaResponse> resolve(@NonNull final Wolf...
method isSuccess (line 230) | private boolean isSuccess(@Nullable final QueryResult result) {
method canResolveResponse (line 234) | private boolean canResolveResponse(@NonNull final QueryResult result) {
method haveResultPod (line 264) | private boolean haveResultPod(@NonNull final List<Pod> podList) {
method haveInputPod (line 281) | private boolean haveInputPod(@NonNull final List<Pod> podList) {
method getInputText (line 298) | private String getInputText(@NonNull final List<Pod> podList) {
method getResultText (line 314) | private String getResultText(@NonNull final List<Pod> podList) {
method haveSubPodPlainText (line 330) | private boolean haveSubPodPlainText(@NonNull final Pod pod) {
method resolveResponse (line 340) | private void resolveResponse(@NonNull final List<Pod> podList) {
method formatString (line 360) | private String formatString(@NonNull final String toFormat) {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/resolve/WolframAlphaRequest.java
class WolframAlphaRequest (line 28) | public class WolframAlphaRequest {
type Type (line 30) | public enum Type {
method WolframAlphaRequest (line 41) | public WolframAlphaRequest() {
method WolframAlphaRequest (line 51) | public WolframAlphaRequest(@NonNull final Type type, @NonNull final St...
method isAutoShow (line 58) | public boolean isAutoShow() {
method setAutoShow (line 62) | public void setAutoShow(final boolean autoShow) {
method getQuery (line 66) | public String getQuery() {
method setQuery (line 70) | public void setQuery(@NonNull final String query) {
method getType (line 74) | public Type getType() {
method setType (line 78) | public void setType(@NonNull final Type type) {
FILE: app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/resolve/WolframAlphaResponse.java
class WolframAlphaResponse (line 30) | public class WolframAlphaResponse {
method WolframAlphaResponse (line 37) | public WolframAlphaResponse() {
method WolframAlphaResponse (line 48) | public WolframAlphaResponse(@NonNull final QueryResult queryResult, @N...
method setInterpretation (line 56) | public void setInterpretation(final String interpretation) {
method setQueryResult (line 60) | public void setQueryResult(final QueryResult queryResult) {
method setQuestion (line 64) | public void setQuestion(final String question) {
method setResult (line 68) | public void setResult(final String result) {
method getInterpretation (line 72) | public String getInterpretation() {
method getQueryResult (line 76) | public QueryResult getQueryResult() {
method getQuestion (line 80) | public String getQuestion() {
method getResult (line 84) | public String getResult() {
FILE: app/src/main/java/ai/saiy/android/cognitive/motion/provider/google/Motion.java
class Motion (line 24) | public class Motion {
method Motion (line 32) | public Motion(final int type, final int confidence, final long time) {
method getConfidence (line 38) | public int getConfidence() {
method getType (line 42) | public int getType() {
method getTime (line 46) | public long getTime() {
FILE: app/src/main/java/ai/saiy/android/cognitive/motion/provider/google/MotionHelper.java
class MotionHelper (line 37) | public class MotionHelper {
method haveMotion (line 48) | public static boolean haveMotion(@NonNull final Context ctx) {
method setMotion (line 59) | public static void setMotion(@NonNull final Context ctx, @NonNull fina...
method reactMotion (line 77) | private static void reactMotion(@NonNull final Context ctx, @NonNull f...
method getMotion (line 129) | public static Motion getMotion(@NonNull final Context ctx) {
method getUnknown (line 168) | private static Motion getUnknown() {
FILE: app/src/main/java/ai/saiy/android/cognitive/motion/provider/google/MotionIntentService.java
class MotionIntentService (line 42) | public class MotionIntentService extends IntentService {
method MotionIntentService (line 55) | public MotionIntentService() {
method onCreate (line 59) | @Override
method onHandleIntent (line 69) | @Override
method extractMotion (line 114) | private Motion extractMotion(final Intent intent) {
method logActivity (line 173) | private void logActivity(final DetectedActivity detectedActivity) {
method examineIntent (line 213) | private void examineIntent(@NonNull final Intent intent) {
method onDestroy (line 229) | @Override
FILE: app/src/main/java/ai/saiy/android/cognitive/motion/provider/google/MotionRecognition.java
class MotionRecognition (line 46) | public class MotionRecognition implements GoogleApiClient.ConnectionCall...
method prepare (line 60) | public void prepare(@NonNull final Context ctx) {
method connect (line 125) | public void connect() {
method onConnected (line 132) | @Override
method onConnectionSuspended (line 144) | @Override
method onConnectionFailed (line 151) | @Override
method onResult (line 158) | @Override
method destroy (line 168) | public void destroy() {
FILE: app/src/main/java/ai/saiy/android/command/battery/Battery.java
class Battery (line 39) | public class Battery implements Callable<ArrayList<Pair<CC, Float>>> {
method Battery (line 54) | public Battery(@NonNull final SaiyResources sr, @NonNull final Support...
method Battery (line 79) | public Battery(@NonNull final SupportedLanguage sl) {
method fetch (line 90) | public CommandBatteryValues fetch(@NonNull final Context ctx, @NonNull...
method detectCallable (line 108) | public ArrayList<Pair<CC, Float>> detectCallable() {
method call (line 127) | @Override
FILE: app/src/main/java/ai/saiy/android/command/battery/BatteryInformation.java
class BatteryInformation (line 42) | public class BatteryInformation {
method BatteryInformation (line 65) | public BatteryInformation(@NonNull final Context mContext, @NonNull Su...
method getInfo (line 81) | public Outcome getInfo(@NonNull final CommandBatteryValues.Type type) {
method getHealth (line 130) | private void getHealth() {
method setHealthResponse (line 185) | private void setHealthResponse(@NonNull final String health) {
method getStatus (line 193) | private void getStatus() {
method setStatusResponse (line 257) | private void setStatusResponse(@NonNull final String status) {
method getVoltage (line 265) | private void getVoltage() {
method setVoltageResponse (line 303) | private void setVoltageResponse(@NonNull final String voltage) {
method getPercentage (line 311) | private void getPercentage() {
method setPercentageResponse (line 346) | private void setPercentageResponse(@NonNull final String percentage) {
method getTemperature (line 354) | private void getTemperature() {
method setTemperatureResponse (line 417) | private void setTemperatureResponse(@NonNull final String temperature) {
method setAccessFailure (line 425) | private void setAccessFailure() {
FILE: app/src/main/java/ai/saiy/android/command/battery/Battery_en.java
class Battery_en (line 39) | public class Battery_en {
method Battery_en (line 70) | public Battery_en(@NonNull final SaiyResources sr, @NonNull final Supp...
method initStrings (line 89) | private static void initStrings(@NonNull final SaiyResources sr) {
method detectCallable (line 109) | public ArrayList<Pair<CC, Float>> detectCallable() {
method sortBattery (line 157) | public static CommandBatteryValues sortBattery(@NonNull final Context ...
FILE: app/src/main/java/ai/saiy/android/command/battery/CommandBattery.java
class CommandBattery (line 36) | public class CommandBattery {
method getResponse (line 50) | public Outcome getResponse(@NonNull final Context ctx, @NonNull final ...
FILE: app/src/main/java/ai/saiy/android/command/battery/CommandBatteryLocal.java
class CommandBatteryLocal (line 33) | public class CommandBatteryLocal {
method getResponse (line 45) | public Outcome getResponse(@NonNull final Context ctx, @NonNull final ...
FILE: app/src/main/java/ai/saiy/android/command/battery/CommandBatteryValues.java
class CommandBatteryValues (line 33) | public class CommandBatteryValues {
type Type (line 41) | public enum Type {
method getRanges (line 56) | public int[][] getRanges() {
method setRanges (line 60) | public void setRanges(@NonNull final int[][] ranges) {
method getTypeString (line 64) | public String getTypeString() {
method setTypeString (line 68) | public void setTypeString(@NonNull final String typeString) {
method getType (line 72) | public Type getType() {
method setType (line 76) | public void setType(@NonNull final Type type) {
method getEndIndex (line 80) | public long getEndIndex() {
method setEndIndex (line 84) | public void setEndIndex(final long endIndex) {
method setStartIndex (line 88) | public void setStartIndex(final long startIndex) {
method getStartIndex (line 92) | public long getStartIndex() {
method stringToType (line 104) | public Type stringToType(@NonNull final Context ctx, @NonNull final Su...
FILE: app/src/main/java/ai/saiy/android/command/cancel/Cancel.java
class Cancel (line 40) | public class Cancel implements Callable<ArrayList<Pair<CC, Float>>> {
method Cancel (line 55) | public Cancel(@NonNull final SaiyResources sr, @NonNull final Supporte...
method Cancel (line 82) | public Cancel(@NonNull final SupportedLanguage sl, @NonNull final Saiy...
method detectCallable (line 105) | public ArrayList<Pair<CC, Float>> detectCallable() {
method detectPartial (line 127) | public boolean detectPartial(@NonNull final Bundle results) {
method detectCancel (line 150) | public boolean detectCancel(@NonNull final ArrayList<String> voiceData) {
method call (line 170) | @Override
FILE: app/src/main/java/ai/saiy/android/command/cancel/CancelPartial.java
class CancelPartial (line 34) | public class CancelPartial implements Callable<Pair<Boolean, Integer>> {
method CancelPartial (line 48) | public CancelPartial(@NonNull final SaiyResources sr, @NonNull final S...
method setPartialData (line 70) | public void setPartialData(@NonNull final Bundle results) {
method detectPartial (line 83) | public Pair<Boolean, Integer> detectPartial() {
method call (line 105) | @Override
FILE: app/src/main/java/ai/saiy/android/command/cancel/Cancel_en.java
class Cancel_en (line 43) | public class Cancel_en {
method Cancel_en (line 67) | public Cancel_en(@NonNull final SaiyResources sr, final boolean reset) {
method initStrings (line 85) | private static void initStrings(@NonNull final SaiyResources sr) {
method Cancel_en (line 107) | public Cancel_en(@NonNull final SaiyResources sr, @NonNull final Suppo...
method detectCallable (line 136) | public ArrayList<Pair<CC, Float>> detectCallable() {
method detectPartial (line 191) | public boolean detectPartial(@NonNull final Locale loc, @NonNull final...
method detectCancel (line 283) | public boolean detectCancel(@NonNull final Locale loc, @NonNull final ...
FILE: app/src/main/java/ai/saiy/android/command/clipboard/ClipboardHelper.java
class ClipboardHelper (line 39) | public final class ClipboardHelper {
method getClipboardContent (line 46) | public static String getClipboardContent() {
method ClipboardHelper (line 53) | public ClipboardHelper() {
method saveClipboardContent (line 57) | @MainThread
method setClipboardContent (line 105) | public static boolean setClipboardContent(@NonNull final Context ctx, ...
method getClipboardContent (line 144) | @MainThread
method getClipboardContentPair (line 184) | @MainThread
method clipboardHasContent (line 202) | public static boolean clipboardHasContent(@NonNull final Context ctx) {
method isClipboard (line 234) | public static boolean isClipboard(@NonNull final Context ctx, @NonNull...
FILE: app/src/main/java/ai/saiy/android/command/custom/CommandCustom.java
class CommandCustom (line 49) | public class CommandCustom {
method getResponse (line 64) | public Outcome getResponse(@NonNull final Context ctx, @NonNull final ...
method examineIntent (line 286) | private void examineIntent(@NonNull final Intent intent) {
FILE: app/src/main/java/ai/saiy/android/command/emotion/CommandEmotion.java
class CommandEmotion (line 38) | public class CommandEmotion {
method getResponse (line 54) | public Outcome getResponse(@NonNull final Context ctx, @NonNull final ...
FILE: app/src/main/java/ai/saiy/android/command/emotion/Emotion.java
class Emotion (line 38) | public class Emotion implements Callable<ArrayList<Pair<CC, Float>>> {
method Emotion (line 53) | public Emotion(@NonNull final SaiyResources sr, @NonNull final Support...
method detectCallable (line 77) | public ArrayList<Pair<CC, Float>> detectCallable() {
method call (line 96) | @Override
FILE: app/src/main/java/ai/saiy/android/command/emotion/Emotion_en.java
class Emotion_en (line 38) | public class Emotion_en {
method Emotion_en (line 50) | public Emotion_en(@NonNull final SaiyResources sr, @NonNull final Supp...
method initStrings (line 68) | private static void initStrings(@NonNull final SaiyResources sr) {
method detectCallable (line 81) | public ArrayList<Pair<CC, Float>> detectCallable() {
FILE: app/src/main/java/ai/saiy/android/command/helper/CC.java
type CC (line 32) | public enum CC {
method CC (line 71) | CC(final boolean requiresNetwork, final boolean isSecure) {
method requiresNetwork (line 76) | public boolean requiresNetwork() {
method isSecure (line 80) | public boolean isSecure() {
method isSecure (line 84) | public static boolean isSecure(@NonNull final CC cc) {
method requiresNetwork (line 88) | public static boolean requiresNetwork(@NonNull final CC cc) {
FILE: app/src/main/java/ai/saiy/android/command/helper/CommandRequest.java
class CommandRequest (line 36) | public class CommandRequest {
method CommandRequest (line 58) | public CommandRequest(@NonNull final Locale vrLocale, @NonNull final L...
method getSupportedLanguage (line 70) | public SupportedLanguage getSupportedLanguage() {
method getTTSLocale (line 80) | public Locale getTTSLocale(@NonNull final Context ctx) {
method getVRLocale (line 98) | public Locale getVRLocale(@NonNull final Context ctx) {
method getCC (line 110) | public CC getCC() {
method setCC (line 114) | public void setCC(CC cc) {
method getVariableData (line 123) | public Object getVariableData() {
method setVariableData (line 132) | public void setVariableData(@NonNull final Object variableData) {
method getResultsArray (line 141) | public ArrayList<String> getResultsArray() {
method setResultsArray (line 150) | public void setResultsArray(@NonNull final ArrayList<String> resultsAr...
method getConfidenceArray (line 159) | public float[] getConfidenceArray() {
method setConfidenceArray (line 168) | public void setConfidenceArray(@NonNull float[] confidenceArray) {
method isResolved (line 172) | public boolean isResolved() {
method setResolved (line 176) | public void setResolved(final boolean resolved) {
method wasSecure (line 185) | public boolean wasSecure() {
method setWasSecure (line 194) | public void setWasSecure(final boolean wasSecure) {
method inError (line 198) | public static boolean inError(final CC commandInt) {
method getUtterance (line 215) | public String getUtterance() {
method setUtterance (line 219) | public void setUtterance(@NonNull final String utterance) {
method getAction (line 223) | public int getAction() {
method setAction (line 227) | public void setAction(final int action) {
FILE: app/src/main/java/ai/saiy/android/command/hotword/Hotword.java
class Hotword (line 38) | public class Hotword implements Callable<ArrayList<Pair<CC, Float>>> {
method Hotword (line 53) | public Hotword(@NonNull final SaiyResources sr, @NonNull final Support...
method detectCallable (line 77) | public ArrayList<Pair<CC, Float>> detectCallable() {
method call (line 96) | @Override
FILE: app/src/main/java/ai/saiy/android/command/hotword/Hotword_en.java
class Hotword_en (line 38) | public class Hotword_en {
method Hotword_en (line 60) | public Hotword_en(@NonNull final SaiyResources sr, @NonNull final Supp...
method initStrings (line 78) | private static void initStrings(@NonNull final SaiyResources sr) {
method detectCallable (line 101) | public ArrayList<Pair<CC, Float>> detectCallable() {
FILE: app/src/main/java/ai/saiy/android/command/pardon/Pardon.java
class Pardon (line 38) | public class Pardon implements Callable<ArrayList<Pair<CC, Float>>> {
method Pardon (line 53) | public Pardon(@NonNull final SaiyResources sr, @NonNull final Supporte...
method detectCallable (line 77) | public ArrayList<Pair<CC, Float>> detectCallable() {
method call (line 96) | @Override
FILE: app/src/main/java/ai/saiy/android/command/pardon/Pardon_en.java
class Pardon_en (line 37) | public class Pardon_en {
method Pardon_en (line 54) | public Pardon_en(@NonNull final SaiyResources sr, @NonNull final Suppo...
method initStrings (line 72) | private static void initStrings(@NonNull final SaiyResources sr) {
method detectCallable (line 90) | public ArrayList<Pair<CC, Float>> detectCallable() {
FILE: app/src/main/java/ai/saiy/android/command/songrecognition/CommandSongRecognition.java
class CommandSongRecognition (line 40) | public class CommandSongRecognition {
method getResponse (line 59) | public Outcome getResponse(@NonNull final Context ctx, @NonNull final ...
method prepareChooser (line 152) | private void prepareChooser(@NonNull final Context ctx, @NonNull final...
method getSongRecognitionProviders (line 162) | private ArrayList<SongRecognitionProvider> getSongRecognitionProviders...
method startProvider (line 177) | private void startProvider(@NonNull final Context ctx, @NonNull final ...
method setProvider (line 196) | private boolean setProvider(@NonNull final SongRecognitionProvider pro...
method packageInstalled (line 241) | private boolean packageInstalled(@NonNull final Context ctx, @NonNull ...
method getResponseUtterance (line 265) | private String getResponseUtterance(@NonNull final Context ctx, @NonNu...
FILE: app/src/main/java/ai/saiy/android/command/songrecognition/SongRecognition.java
class SongRecognition (line 38) | public class SongRecognition implements Callable<ArrayList<Pair<CC, Floa...
method SongRecognition (line 53) | public SongRecognition(@NonNull final SaiyResources sr, @NonNull final...
method detectCallable (line 76) | public ArrayList<Pair<CC, Float>> detectCallable() {
method call (line 95) | @Override
FILE: app/src/main/java/ai/saiy/android/command/songrecognition/SongRecognition_en.java
class SongRecognition_en (line 36) | public class SongRecognition_en {
method SongRecognition_en (line 58) | public SongRecognition_en(@NonNull final SaiyResources sr, @NonNull fi...
method initStrings (line 76) | private static void initStrings(@NonNull final SaiyResources sr) {
method detectCallable (line 89) | public ArrayList<Pair<CC, Float>> detectCallable() {
FILE: app/src/main/java/ai/saiy/android/command/spell/CommandSpell.java
class CommandSpell (line 48) | public class CommandSpell {
method getResponse (line 69) | public Outcome getResponse(@NonNull final Context ctx, @NonNull final ...
method setOutcomeParams (line 105) | private void setOutcomeParams(@NonNull final Context ctx, @NonNull fin...
method getResponseUtterance (line 132) | private String getResponseUtterance(@NonNull final Context ctx, @NonNu...
method getSeparated (line 149) | private String getSeparated(@NonNull final String toSpell) {
FILE: app/src/main/java/ai/saiy/android/command/spell/CommandSpellLocal.java
class CommandSpellLocal (line 47) | public class CommandSpellLocal {
method getResponse (line 65) | public Outcome getResponse(@NonNull final Context ctx, @NonNull final ...
method setOutcomeParams (line 97) | private void setOutcomeParams(@NonNull final Context ctx, @NonNull fin...
method getResponseUtterance (line 124) | private String getResponseUtterance(@NonNull final Context ctx, @NonNu...
method getSeparated (line 141) | private String getSeparated(@NonNull final String toSpell) {
FILE: app/src/main/java/ai/saiy/android/command/spell/CommandSpellValues.java
class CommandSpellValues (line 25) | public class CommandSpellValues {
method getRanges (line 32) | public int[][] getRanges() {
method setRanges (line 36) | public void setRanges(@NonNull final int[][] ranges) {
method getEndIndex (line 41) | public long getEndIndex() {
method setEndIndex (line 45) | public void setEndIndex(final long endIndex) {
method setStartIndex (line 49) | public void setStartIndex(final long startIndex) {
method getStartIndex (line 53) | public long getStartIndex() {
method getText (line 57) | public String getText() {
method setText (line 61) | public void setText(@NonNull final String text) {
FILE: app/src/main/java/ai/saiy/android/command/spell/Spell.java
class Spell (line 39) | public class Spell implements Callable<ArrayList<Pair<CC, Float>>> {
method Spell (line 54) | public Spell(@NonNull final SaiyResources sr, @NonNull final Supported...
method Spell (line 79) | public Spell(@NonNull final SupportedLanguage sl) {
method detectCallable (line 88) | public ArrayList<Pair<CC, Float>> detectCallable() {
method sort (line 107) | public ArrayList<String> sort(@NonNull final Context ctx, @NonNull fin...
method call (line 126) | @Override
FILE: app/src/main/java/ai/saiy/android/command/spell/Spell_en.java
class Spell_en (line 42) | public class Spell_en {
method Spell_en (line 64) | public Spell_en(@NonNull final SaiyResources sr, @NonNull final Suppor...
method initStrings (line 82) | private static void initStrings(@NonNull final SaiyResources sr) {
method detectCallable (line 94) | public ArrayList<Pair<CC, Float>> detectCallable() {
method sortSpell (line 153) | public static ArrayList<String> sortSpell(@NonNull final Context ctx, ...
FILE: app/src/main/java/ai/saiy/android/command/tasker/CommandTasker.java
class CommandTasker (line 53) | public class CommandTasker {
method getResponse (line 69) | public Outcome getResponse(@NonNull final Context ctx, @NonNull final ...
method returnOutcome (line 290) | private Outcome returnOutcome(@NonNull final Outcome outcome) {
FILE: app/src/main/java/ai/saiy/android/command/tasker/CommandTaskerLocal.java
class CommandTaskerLocal (line 34) | public class CommandTaskerLocal {
method getResponse (line 47) | public ArrayList<String> getResponse(@NonNull final Context ctx, @NonN...
FILE: app/src/main/java/ai/saiy/android/command/tasker/CommandTaskerValues.java
class CommandTaskerValues (line 28) | public class CommandTaskerValues {
method getRanges (line 35) | public int[][] getRanges() {
method setRanges (line 39) | public void setRanges(@NonNull final int[][] ranges) {
method getTaskName (line 43) | public String getTaskName() {
method setTaskName (line 47) | public void setTaskName(@NonNull final String taskName) {
method getEndIndex (line 51) | public long getEndIndex() {
method setEndIndex (line 55) | public void setEndIndex(final long endIndex) {
method setStartIndex (line 59) | public void setStartIndex(final long startIndex) {
method getStartIndex (line 63) | public long getStartIndex() {
FILE: app/src/main/java/ai/saiy/android/command/tasker/Tasker.java
class Tasker (line 39) | public class Tasker implements Callable<ArrayList<Pair<CC, Float>>> {
method Tasker (line 54) | public Tasker(@NonNull final SaiyResources sr, @NonNull final Supporte...
method Tasker (line 79) | public Tasker(@NonNull final SupportedLanguage sl) {
method detectCallable (line 88) | public ArrayList<Pair<CC, Float>> detectCallable() {
method sort (line 107) | public ArrayList<String> sort(@NonNull final Context ctx, @NonNull fin...
method call (line 126) | @Override
FILE: app/src/main/java/ai/saiy/android/command/tasker/Tasker_en.java
class Tasker_en (line 42) | public class Tasker_en {
method Tasker_en (line 65) | public Tasker_en(@NonNull final SaiyResources sr, @NonNull final Suppo...
method initStrings (line 83) | private static void initStrings(@NonNull final SaiyResources sr) {
method detectCallable (line 96) | public ArrayList<Pair<CC, Float>> detectCallable() {
method sortTasker (line 153) | public static ArrayList<String> sortTasker(@NonNull final Context ctx,...
FILE: app/src/main/java/ai/saiy/android/command/translate/CommandTranslate.java
class CommandTranslate (line 40) | public class CommandTranslate {
method getResponse (line 58) | public Outcome getResponse(@NonNull final Context ctx, @NonNull final ...
method returnOutcome (line 105) | private Outcome returnOutcome(@NonNull final Outcome outcome) {
FILE: app/src/main/java/ai/saiy/android/command/translate/CommandTranslateLocal.java
class CommandTranslateLocal (line 49) | public class CommandTranslateLocal {
method getResponse (line 66) | public Outcome getResponse(@NonNull final Context ctx, @NonNull final ...
FILE: app/src/main/java/ai/saiy/android/command/translate/CommandTranslateValues.java
class CommandTranslateValues (line 25) | public class CommandTranslateValues {
method getLanguageEndIndex (line 36) | public long getLanguageEndIndex() {
method setLanguageEndIndex (line 40) | public void setLanguageEndIndex(final long languageEndIndex) {
method getLanguageStartIndex (line 44) | public long getLanguageStartIndex() {
method setLanguageStartIndex (line 48) | public void setLanguageStartIndex(final long languageStartIndex) {
method getTextEndIndex (line 52) | public long getTextEndIndex() {
method setTextEndIndex (line 56) | public void setTextEndIndex(final long textEndIndex) {
method getTextStartIndex (line 60) | public long getTextStartIndex() {
method setTextStartIndex (line 64) | public void setTextStartIndex(final long textStartIndex) {
method getLanguageRanges (line 68) | public int[][] getLanguageRanges() {
method setLanguageRanges (line 72) | public void setLanguageRanges(@NonNull final int[][] languageRanges) {
method getTextRanges (line 76) | public int[][] getTextRanges() {
method setTextRanges (line 80) | public void setTextRanges(final int[][] textRanges) {
method setLanguage (line 84) | public void setLanguage(@NonNull final String language) {
method getLanguage (line 88) | public String getLanguage() {
method setText (line 92) | public void setText(@NonNull final String text) {
method getText (line 96) | public String getText() {
FILE: app/src/main/java/ai/saiy/android/command/translate/Translate.java
class Translate (line 40) | public class Translate implements Callable<ArrayList<Pair<CC, Float>>> {
method Translate (line 55) | public Translate(@NonNull final SaiyResources sr, @NonNull final Suppo...
method Translate (line 82) | public Translate(@NonNull final SupportedLanguage sl, @NonNull final S...
method Translate (line 107) | public Translate(@NonNull final SupportedLanguage sl) {
method detectCallable (line 117) | public ArrayList<Pair<CC, Float>> detectCallable() {
method resolveBody (line 138) | public String resolveBody(@NonNull final Context ctx, @NonNull final S...
method call (line 158) | @Override
FILE: app/src/main/java/ai/saiy/android/command/translate/TranslatePartial.java
class TranslatePartial (line 34) | public class TranslatePartial implements Callable<Pair<Boolean, Integer>> {
method TranslatePartial (line 48) | public TranslatePartial(@NonNull final SaiyResources sr, @NonNull fina...
method setPartialData (line 70) | public void setPartialData(@NonNull final Bundle results) {
method detectPartial (line 83) | public Pair<Boolean, Integer> detectPartial() {
method call (line 105) | @Override
FILE: app/src/main/java/ai/saiy/android/command/translate/Translate_en.java
class Translate_en (line 46) | public class Translate_en {
method Translate_en (line 68) | public Translate_en(@NonNull final SaiyResources sr, @NonNull final Su...
method initStrings (line 86) | private static void initStrings(@NonNull final SaiyResources sr) {
method Translate_en (line 96) | public Translate_en(@NonNull final SaiyResources sr, final boolean res...
method detectCallable (line 113) | public ArrayList<Pair<CC, Float>> detectCallable() {
method detectPartial (line 153) | public boolean detectPartial(@NonNull final Locale loc, @NonNull final...
method resolveBody (line 233) | public static String resolveBody(@NonNull final Context ctx, @NonNull ...
FILE: app/src/main/java/ai/saiy/android/command/translate/provider/TranslationProvider.java
class TranslationProvider (line 33) | public class TranslationProvider {
method shouldAction (line 47) | public static boolean shouldAction(@NonNull final Context ctx, @NonNul...
FILE: app/src/main/java/ai/saiy/android/command/translate/provider/bing/BingCredentials.java
class BingCredentials (line 35) | public class BingCredentials {
method getExpires (line 48) | public long getExpires() {
method BingCredentials (line 58) | public BingCredentials(@NonNull final String refreshToken, final long ...
method getRefreshToken (line 63) | public String getRefreshToken() {
method isTokenValid (line 73) | public static boolean isTokenValid(@NonNull final Context ctx) {
method refreshTokenIfRequired (line 96) | public static void refreshTokenIfRequired(@NonNull final Context ctx) {
FILE: app/src/main/java/ai/saiy/android/command/translate/provider/bing/BingOAuth.java
class BingOAuth (line 52) | public class BingOAuth {
method execute (line 74) | public boolean execute(@NonNull final Context ctx, final boolean synch...
method verboseError (line 227) | private void verboseError(final VolleyError error) {
FILE: app/src/main/java/ai/saiy/android/command/translate/provider/bing/BingTranslate.java
class BingTranslate (line 52) | public class BingTranslate {
method BingTranslate (line 135) | public BingTranslate(@NonNull final Context mContext, @NonNull final S...
method getResponse (line 151) | public Outcome getResponse() {
method execute (line 234) | public static Pair<Boolean, String> execute(@NonNull final Context ctx,
method initStrings (line 260) | private static void initStrings(@NonNull final SaiyResources sr) {
method extract (line 333) | public static Pair<TranslationLanguageBing, String> extract(@NonNull f...
method getTranslationPair (line 379) | private static Pair<TranslationLanguageBing, String> getTranslationPai...
method resolveLanguage (line 574) | private TranslationLanguageBing resolveLanguage(@NonNull final String ...
method tooLong (line 706) | public static boolean tooLong(@NonNull final String toTranslate) {
FILE: app/src/main/java/ai/saiy/android/command/translate/provider/bing/BingTranslateAPI.java
class BingTranslateAPI (line 57) | public class BingTranslateAPI {
method execute (line 82) | public Pair<Boolean, String> execute(@NonNull final Context ctx, final...
method verboseError (line 195) | private void verboseError(@NonNull final VolleyError error) {
FILE: app/src/main/java/ai/saiy/android/command/translate/provider/bing/TranslationLanguageBing.java
type TranslationLanguageBing (line 33) | public enum TranslationLanguageBing {
method TranslationLanguageBing (line 104) | TranslationLanguageBing(@NonNull final String language, @NonNull final...
method getLocale (line 114) | public Locale getLocale() {
method getLanguage (line 123) | public String getLanguage() {
FILE: app/src/main/java/ai/saiy/android/command/translate/provider/google/GoogleTranslate.java
class GoogleTranslate (line 53) | public class GoogleTranslate {
method GoogleTranslate (line 129) | public GoogleTranslate(@NonNull final Context mContext, @NonNull final...
method getResponse (line 145) | public Outcome getResponse() {
method execute (line 227) | public static Pair<Boolean, String> execute(@NonNull final Context ctx,
method initStrings (line 233) | private static void initStrings(@NonNull final SaiyResources sr) {
method extract (line 298) | public static Pair<TranslationLanguageGoogle, String> extract(@NonNull...
method getTranslationPair (line 342) | private static Pair<TranslationLanguageGoogle, String> getTranslationP...
method resolveLanguage (line 516) | private TranslationLanguageGoogle resolveLanguage(@NonNull final Strin...
method tooLong (line 633) | public static boolean tooLong(@NonNull final String toTranslate) {
FILE: app/src/main/java/ai/saiy/android/command/translate/provider/google/GoogleTranslateAPI.java
class GoogleTranslateAPI (line 43) | public class GoogleTranslateAPI {
method execute (line 56) | public Pair<Boolean, String> execute(@NonNull final Context ctx, @NonN...
FILE: app/src/main/java/ai/saiy/android/command/translate/provider/google/TranslationLanguageGoogle.java
type TranslationLanguageGoogle (line 51) | public enum TranslationLanguageGoogle {
method TranslationLanguageGoogle (line 163) | TranslationLanguageGoogle(@NonNull final String language) {
method getLanguage (line 172) | public String getLanguage() {
method toString (line 182) | @Override
FILE: app/src/main/java/ai/saiy/android/command/unknown/Unknown.java
class Unknown (line 24) | public class Unknown {
FILE: app/src/main/java/ai/saiy/android/command/username/CommandUserName.java
class CommandUserName (line 39) | public class CommandUserName {
method getResponse (line 55) | public Outcome getResponse(@NonNull final Context ctx, @NonNull final ...
method returnOutcome (line 126) | private Outcome returnOutcome(@NonNull final Outcome outcome) {
FILE: app/src/main/java/ai/saiy/android/command/username/CommandUserNameLocal.java
class CommandUserNameLocal (line 35) | public class CommandUserNameLocal {
method getResponse (line 48) | public String getResponse(@NonNull final Context ctx, @NonNull final A...
FILE: app/src/main/java/ai/saiy/android/command/username/CommandUserNameValues.java
class CommandUserNameValues (line 27) | public class CommandUserNameValues {
method getRanges (line 34) | public int[][] getRanges() {
method setRanges (line 38) | public void setRanges(@NonNull final int[][] ranges) {
method getName (line 42) | public String getName() {
method setName (line 46) | public void setName(@NonNull final String name) {
method getEndIndex (line 50) | public long getEndIndex() {
method setEndIndex (line 54) | public void setEndIndex(final long endIndex) {
method setStartIndex (line 58) | public void setStartIndex(final long startIndex) {
method getStartIndex (line 62) | public long getStartIndex() {
FILE: app/src/main/java/ai/saiy/android/command/username/UserName.java
class UserName (line 39) | public class UserName implements Callable<ArrayList<Pair<CC, Float>>> {
method UserName (line 54) | public UserName(@NonNull final SaiyResources sr, @NonNull final Suppor...
method UserName (line 79) | public UserName(@NonNull final SupportedLanguage sl) {
method detectCallable (line 89) | public ArrayList<Pair<CC, Float>> detectCallable() {
method fetch (line 109) | public ArrayList<String> fetch(@NonNull final Context ctx, @NonNull fi...
method call (line 128) | @Override
FILE: app/src/main/java/ai/saiy/android/command/username/UserName_en.java
class UserName_en (line 42) | public class UserName_en {
method UserName_en (line 69) | public UserName_en(@NonNull final SaiyResources sr, @NonNull final Sup...
method initStrings (line 87) | private static void initStrings(@NonNull final SaiyResources sr) {
method detectCallable (line 104) | public ArrayList<Pair<CC, Float>> detectCallable() {
method sortUserName (line 147) | public static ArrayList<String> sortUserName(@NonNull final Context ct...
FILE: app/src/main/java/ai/saiy/android/command/vocalrecognition/CommandVocalRecognition.java
class CommandVocalRecognition (line 46) | public class CommandVocalRecognition {
method getResponse (line 58) | public Outcome getResponse(@NonNull final Context ctx, @NonNull final ...
FILE: app/src/main/java/ai/saiy/android/command/vocalrecognition/VocalRecognition.java
class VocalRecognition (line 38) | public class VocalRecognition implements Callable<ArrayList<Pair<CC, Flo...
method VocalRecognition (line 53) | public VocalRecognition(@NonNull final SaiyResources sr, @NonNull fina...
method detectCallable (line 77) | public ArrayList<Pair<CC, Float>> detectCallable() {
method call (line 96) | @Override
FILE: app/src/main/java/ai/saiy/android/command/vocalrecognition/VocalRecognition_en.java
class VocalRecognition_en (line 38) | public class VocalRecognition_en {
method VocalRecognition_en (line 51) | public VocalRecognition_en(@NonNull final SaiyResources sr, @NonNull f...
method initStrings (line 69) | private static void initStrings(@NonNull final SaiyResources sr) {
method detectCallable (line 83) | public ArrayList<Pair<CC, Float>> detectCallable() {
FILE: app/src/main/java/ai/saiy/android/command/wolframalpha/CommandWolframAlpha.java
class CommandWolframAlpha (line 42) | public class CommandWolframAlpha {
method getResponse (line 58) | public Outcome getResponse(@NonNull final Context ctx, @NonNull final ...
method returnOutcome (line 152) | private Outcome returnOutcome(@NonNull final Outcome outcome) {
FILE: app/src/main/java/ai/saiy/android/command/wolframalpha/CommandWolframAlphaLocal.java
class CommandWolframAlphaLocal (line 34) | public class CommandWolframAlphaLocal {
method getResponse (line 47) | public String getResponse(@NonNull final Context ctx, @NonNull final A...
FILE: app/src/main/java/ai/saiy/android/command/wolframalpha/CommandWolframAlphaValues.java
class CommandWolframAlphaValues (line 28) | public class CommandWolframAlphaValues {
method getRanges (line 35) | public int[][] getRanges() {
method setRanges (line 39) | public void setRanges(@NonNull final int[][] ranges) {
method getQuestion (line 43) | public String getQuestion() {
method setQuestion (line 47) | public void setQuestion(@NonNull final String question) {
method getEndIndex (line 51) | public long getEndIndex() {
method setEndIndex (line 55) | public void setEndIndex(final long endIndex) {
method setStartIndex (line 59) | public void setStartIndex(final long startIndex) {
method getStartIndex (line 63) | public long getStartIndex() {
FILE: app/src/main/java/ai/saiy/android/command/wolframalpha/WolframAlpha.java
class WolframAlpha (line 39) | public class WolframAlpha implements Callable<ArrayList<Pair<CC, Float>>> {
method WolframAlpha (line 54) | public WolframAlpha(@NonNull final SaiyResources sr, @NonNull final Su...
method WolframAlpha (line 79) | public WolframAlpha(@NonNull final SupportedLanguage sl) {
method detectCallable (line 88) | public ArrayList<Pair<CC, Float>> detectCallable() {
method sort (line 107) | public ArrayList<String> sort(@NonNull final Context ctx, @NonNull fin...
method call (line 126) | @Override
FILE: app/src/main/java/ai/saiy/android/command/wolframalpha/WolframAlpha_en.java
class WolframAlpha_en (line 42) | public class WolframAlpha_en {
method WolframAlpha_en (line 65) | public WolframAlpha_en(@NonNull final SaiyResources sr, @NonNull final...
method initStrings (line 83) | private static void initStrings(@NonNull final SaiyResources sr) {
method detectCallable (line 96) | public ArrayList<Pair<CC, Float>> detectCallable() {
method sortWolframAlpha (line 153) | public static ArrayList<String> sortWolframAlpha(@NonNull final Contex...
FILE: app/src/main/java/ai/saiy/android/configuration/APIAIConfiguration.java
class APIAIConfiguration (line 25) | public class APIAIConfiguration {
method APIAIConfiguration (line 30) | public APIAIConfiguration() {
FILE: app/src/main/java/ai/saiy/android/configuration/BeyondVerbalConfiguration.java
class BeyondVerbalConfiguration (line 23) | public class BeyondVerbalConfiguration {
FILE: app/src/main/java/ai/saiy/android/configuration/BluemixConfiguration.java
class BluemixConfiguration (line 32) | public class BluemixConfiguration {
method BluemixConfiguration (line 40) | public BluemixConfiguration() {
method getSpeechURI (line 49) | public static URI getSpeechURI(@NonNull final String model) {
FILE: app/src/main/java/ai/saiy/android/configuration/GoogleConfiguration.java
class GoogleConfiguration (line 32) | public final class GoogleConfiguration {
method GoogleConfiguration (line 37) | public GoogleConfiguration() {
FILE: app/src/main/java/ai/saiy/android/configuration/MicrosoftConfiguration.java
class MicrosoftConfiguration (line 25) | public class MicrosoftConfiguration {
method MicrosoftConfiguration (line 30) | public MicrosoftConfiguration() {
FILE: app/src/main/java/ai/saiy/android/configuration/NuanceConfiguration.java
class NuanceConfiguration (line 31) | public final class NuanceConfiguration {
method NuanceConfiguration (line 36) | public NuanceConfiguration() {
FILE: app/src/main/java/ai/saiy/android/configuration/WitConfiguration.java
class WitConfiguration (line 24) | public class WitConfiguration {
FILE: app/src/main/java/ai/saiy/android/configuration/WolframConfiguration.java
class WolframConfiguration (line 24) | public class WolframConfiguration {
FILE: app/src/main/java/ai/saiy/android/custom/CCC.java
type CCC (line 25) | public enum CCC {
FILE: app/src/main/java/ai/saiy/android/custom/Custom.java
type Custom (line 13) | public enum Custom {
FILE: app/src/main/java/ai/saiy/android/custom/CustomCommand.java
class CustomCommand (line 32) | public class CustomCommand implements Callable<Boolean> {
method CustomCommand (line 67) | public CustomCommand(@NonNull final CCC customAction, @NonNull final C...
method getSerialised (line 82) | public String getSerialised() {
method setSerialised (line 86) | public void setSerialised(@NonNull final String serialised) {
method getIntent (line 90) | public String getIntent() {
method setIntent (line 94) | public void setIntent(@NonNull final String intent) {
method getAction (line 98) | public int getAction() {
method getAlgorithm (line 102) | public Algorithm getAlgorithm() {
method setAlgorithm (line 106) | public void setAlgorithm(@NonNull final Algorithm algorithm) {
method getUtterance (line 110) | public String getUtterance() {
method setUtterance (line 114) | public void setUtterance(@NonNull final String utterance) {
method getScore (line 118) | public double getScore() {
method setScore (line 122) | public void setScore(final double score) {
method isExactMatch (line 126) | public boolean isExactMatch() {
method setExactMatch (line 130) | public void setExactMatch(final boolean exactMatch) {
method getCustomAction (line 134) | public CCC getCustomAction() {
method getCommandConstant (line 138) | public CC getCommandConstant() {
method getKeyphrase (line 142) | public String getKeyphrase() {
method getResponseError (line 146) | public String getResponseError() {
method getResponseSuccess (line 150) | public String getResponseSuccess() {
method getTTSLocale (line 154) | public String getTTSLocale() {
method getVRLocale (line 158) | public String getVRLocale() {
method getRegex (line 162) | public Regex getRegex() {
method setRegex (line 166) | public void setRegex(@NonNull final Regex regex) {
method getRegularExpression (line 170) | public String getRegularExpression() {
method setRegularExpression (line 174) | public void setRegularExpression(@NonNull final String regularExpressi...
method getExtraText (line 178) | public String getExtraText() {
method setExtraText (line 182) | public void setExtraText(@NonNull final String extraText) {
method getExtraText2 (line 186) | public String getExtraText2() {
method setExtraText2 (line 190) | public void setExtraText2(@NonNull final String extraText2) {
method call (line 200) | @Override
FILE: app/src/main/java/ai/saiy/android/custom/CustomCommandContainer.java
class CustomCommandContainer (line 29) | public class CustomCommandContainer implements Serializable {
method CustomCommandContainer (line 51) | public CustomCommandContainer(final long rowId, @NonNull final String ...
method getUtterance (line 59) | public String getUtterance() {
method setUtterance (line 63) | public void setUtterance(@NonNull final String utterance) {
method isExactMatch (line 67) | public boolean isExactMatch() {
method setExactMatch (line 71) | public void setExactMatch(final boolean exactMatch) {
method getScore (line 75) | public double getScore() {
method setScore (line 79) | public void setScore(final double score) {
method getKeyphrase (line 83) | public String getKeyphrase() {
method getRowId (line 87) | public long getRowId() {
method getSerialised (line 91) | public String getSerialised() {
method getRegex (line 95) | public Regex getRegex() {
FILE: app/src/main/java/ai/saiy/android/custom/CustomCommandHelper.java
class CustomCommandHelper (line 86) | public class CustomCommandHelper {
method isCustomCommand (line 103) | public boolean isCustomCommand(@NonNull final Context ctx, @NonNull fi...
method getCustomCommands (line 391) | public ArrayList<CustomCommandContainer> getCustomCommands(@NonNull fi...
method getCommand (line 421) | public CustomCommand getCommand() {
method setCustomCommand (line 425) | public void setCustomCommand(@Nullable final CustomCommand customComma...
method getCommandConstant (line 434) | public CC getCommandConstant() {
method setCommand (line 447) | public static Pair<Boolean, Long> setCommand(@NonNull final Context ct...
method deleteCustomCommand (line 469) | public static void deleteCustomCommand(@NonNull final Context ctx, fin...
method commandExists (line 485) | private static Pair<Boolean, Long> commandExists(@NonNull final DBCust...
method commandExists (line 540) | public boolean commandExists(@NonNull final Context ctx, @NonNull fina...
method deleteAllCommands (line 584) | public static boolean deleteAllCommands(@NonNull final Context ctx) {
method deleteCommandsForPackage (line 598) | public static void deleteCommandsForPackage(@NonNull final Context ctx,
FILE: app/src/main/java/ai/saiy/android/custom/CustomHelper.java
class CustomHelper (line 50) | public class CustomHelper {
method getCustomisationHolder (line 62) | public CustomHelperHolder getCustomisationHolder(@NonNull final Contex...
method completeCustomisationHolder (line 123) | @SuppressWarnings("unchecked")
method getCustomisations (line 155) | public ArrayList<ContainerCustomisation> getCustomisations(@NonNull fi...
FILE: app/src/main/java/ai/saiy/android/custom/CustomHelperHolder.java
class CustomHelperHolder (line 28) | public class CustomHelperHolder {
method CustomHelperHolder (line 32) | public CustomHelperHolder() {
method CustomHelperHolder (line 35) | public CustomHelperHolder(@NonNull final ArrayList<CustomCommandContai...
method setCustomCommandArray (line 39) | public void setCustomCommandArray(@NonNull final ArrayList<CustomComma...
method getCustomCommandArray (line 43) | public ArrayList<CustomCommandContainer> getCustomCommandArray() {
FILE: app/src/main/java/ai/saiy/android/custom/CustomResolver.java
class CustomResolver (line 28) | public class CustomResolver {
method CustomResolver (line 34) | public CustomResolver() {
method CustomResolver (line 37) | public CustomResolver(final boolean isCustom, @NonNull final ArrayList...
method getCustomCommandHelper (line 45) | public CustomCommandHelper getCustomCommandHelper() {
method setCustomCommandHelper (line 49) | public void setCustomCommandHelper(@NonNull final CustomCommandHelper ...
method isCustom (line 53) | public boolean isCustom() {
method setCustom (line 57) | public void setCustom(final boolean custom) {
method getVoiceData (line 61) | public ArrayList<String> getVoiceData() {
method setVoiceData (line 65) | public void setVoiceData(@NonNull final ArrayList<String> voiceData) {
FILE: app/src/main/java/ai/saiy/android/database/DBCustomCommand.java
class DBCustomCommand (line 42) | public class DBCustomCommand extends SQLiteOpenHelper {
method DBCustomCommand (line 72) | public DBCustomCommand(@NonNull final Context mContext) {
method open (line 85) | public void open() throws SQLException {
method close (line 92) | @Override
method onCreate (line 100) | @Override
method onUpgrade (line 108) | @Override
method databaseExists (line 124) | public boolean databaseExists() {
method deleteTable (line 131) | public boolean deleteTable() {
method insertPopulatedRow (line 200) | public Pair<Boolean, Long> insertPopulatedRow(@NonNull final String ke...
method deleteRows (line 284) | public void deleteRows(final ArrayList<Long> rowIDs) {
method deleteRow (line 353) | public void deleteRow(final long rowID) {
method getKeyphrases (line 414) | public ArrayList<CustomCommandContainer> getKeyphrases() {
method getSerialisable (line 486) | public String getSerialisable(final long rowId) {
FILE: app/src/main/java/ai/saiy/android/database/DBSpeech.java
class DBSpeech (line 45) | public class DBSpeech extends SQLiteOpenHelper {
method DBSpeech (line 94) | public DBSpeech(@NonNull final Context mContext) {
method open (line 107) | public void open() throws SQLException {
method close (line 114) | @Override
method onCreate (line 122) | @Override
method onUpgrade (line 130) | @Override
method databaseExists (line 146) | public boolean databaseExists() {
method deleteTable (line 153) | public boolean deleteTable() {
method deleteEntry (line 218) | public boolean deleteEntry(final long rowId) {
method entryExists (line 291) | public boolean entryExists(@NonNull final String initEngine, @NonNull ...
method getBytes (line 386) | public SpeechCacheResult getBytes(@NonNull final String initEngine, @N...
method shouldRunMaintenance (line 498) | public boolean shouldRunMaintenance(@NonNull final Context ctx) {
method runMaintenance (line 579) | public void runMaintenance(@NonNull final Context ctx) {
method insertRow (line 690) | @TargetApi(Build.VERSION_CODES.LOLLIPOP)
FILE: app/src/main/java/ai/saiy/android/database/callable/DBCustomCommandCallable.java
class DBCustomCommandCallable (line 21) | public class DBCustomCommandCallable implements Callable<ArrayList<Objec...
method DBCustomCommandCallable (line 25) | public DBCustomCommandCallable(@NonNull final Context mContext) {
method call (line 29) | @SuppressWarnings("unchecked")
FILE: app/src/main/java/ai/saiy/android/defaults/ApplicationDefaults.java
class ApplicationDefaults (line 29) | public class ApplicationDefaults {
method getSongRecognitionProvider (line 38) | public static SongRecognitionProvider getSongRecognitionProvider(@NonN...
FILE: app/src/main/java/ai/saiy/android/defaults/songrecognition/SongRecognitionChooser.java
class SongRecognitionChooser (line 40) | public class SongRecognitionChooser implements Parcelable {
method createFromParcel (line 53) | public SongRecognitionChooser createFromParcel(@NonNull final Parcel i...
method newArray (line 57) | public SongRecognitionChooser[] newArray(int size) {
method SongRecognitionChooser (line 62) | public SongRecognitionChooser() {
method SongRecognitionChooser (line 65) | private SongRecognitionChooser(@NonNull final Parcel in) {
method SongRecognitionChooser (line 69) | public SongRecognitionChooser(@NonNull final String applicationName, @...
method readFromParcel (line 76) | public void readFromParcel(@NonNull final Parcel in) {
method writeToParcel (line 82) | @Override
method getApplicationName (line 89) | public String getApplicationName() {
method isInstalled (line 93) | public boolean isInstalled() {
method getPackageName (line 97) | public String getPackageName() {
method setApplicationName (line 101) | public void setApplicationName(final String applicationName) {
method setInstalled (line 105) | public void setInstalled(final boolean installed) {
method setPackageName (line 109) | public void setPackageName(final String packageName) {
method prepareChooser (line 113) | public static ArrayList<SongRecognitionChooser> prepareChooser(@NonNul...
method prepareChooserDefault (line 168) | private static ArrayList<SongRecognitionChooser> prepareChooserDefault...
method removeDuplicates (line 217) | private static ArrayList<SongRecognitionChooser> removeDuplicates(
method describeContents (line 246) | @Override
FILE: app/src/main/java/ai/saiy/android/defaults/songrecognition/SongRecognitionProvider.java
type SongRecognitionProvider (line 31) | public enum SongRecognitionProvider {
method getApplicationName (line 59) | public static String getApplicationName(@NonNull final Context ctx, @N...
method getProvider (line 82) | public static SongRecognitionProvider getProvider(int provider) {
FILE: app/src/main/java/ai/saiy/android/device/DeviceInfo.java
class DeviceInfo (line 44) | public class DeviceInfo {
method getDeviceInfo (line 55) | public static String getDeviceInfo(@NonNull final Context ctx) {
method getDefaultTTSProvider (line 108) | public static String getDefaultTTSProvider(@NonNull final Context ctx) {
method getDefaultVRProvider (line 120) | public static String getDefaultVRProvider(@NonNull final Context ctx) {
FILE: app/src/main/java/ai/saiy/android/device/UtilsDevice.java
class UtilsDevice (line 33) | public class UtilsDevice {
method isDeviceLocked (line 40) | public static boolean isDeviceLocked(@NonNull final Context ctx) {
method isScreenOff (line 51) | public static boolean isScreenOff(@NonNull final Context ctx) {
method isScreenOffDeprecated (line 60) | @SuppressWarnings("deprecation")
method isScreenOff20 (line 65) | @TargetApi(Build.VERSION_CODES.KITKAT_WATCH)
FILE: app/src/main/java/ai/saiy/android/error/Issue.java
class Issue (line 36) | public class Issue {
method Issue (line 58) | public Issue(@NonNull final Context mContext, final int issueConstant) {
method execute (line 81) | public void execute() {
method getIssueText (line 94) | private String getIssueText(final int issueConstant) {
FILE: app/src/main/java/ai/saiy/android/error/IssueContent.java
class IssueContent (line 31) | public class IssueContent implements Serializable {
method IssueContent (line 38) | public IssueContent(final int issueConstant) {
method setIssueText (line 42) | public void setIssueText(@NonNull final String issueText) {
method getIssueConstant (line 46) | public int getIssueConstant() {
method getIssueText (line 50) | public String getIssueText() {
FILE: app/src/main/java/ai/saiy/android/files/FileCreator.java
class FileCreator (line 38) | public class FileCreator {
method FileCreator (line 61) | public FileCreator(@NonNull final Context mContext, final int nChannel...
method getDefaultFile (line 98) | public File getDefaultFile() {
method passBuffer (line 107) | public void passBuffer(@NonNull final byte[] buff) {
method completeWrite (line 133) | public boolean completeWrite() {
method getWriter (line 166) | private RandomAccessFile getWriter() {
method getFileMeta (line 202) | private void getFileMeta() {
FILE: app/src/main/java/ai/saiy/android/intent/ExecuteIntent.java
class ExecuteIntent (line 52) | public class ExecuteIntent {
method executeIntent (line 64) | public static boolean executeIntent(@NonNull final Context ctx, @NonNu...
method startService (line 96) | public static boolean startService(@NonNull final Context ctx, @NonNul...
method sendBroadcast (line 136) | public static boolean sendBroadcast(@NonNull final Context ctx, @NonNu...
method playStoreSearch (line 164) | public static boolean playStoreSearch(@NonNull final Context ctx, @Non...
method webSearch (line 199) | public static boolean webSearch(@NonNull final Context ctx, @NonNull f...
method uninstallApp (line 232) | public static boolean uninstallApp(@NonNull final Context ctx, @NonNul...
method sendEmail (line 267) | public static boolean sendEmail(@NonNull final Context ctx, @NonNull f...
method openApplicationSpecificSettings (line 311) | public static boolean openApplicationSpecificSettings(@NonNull final C...
method googleNowListen (line 346) | public static boolean googleNowListen(@NonNull final Context ctx, fina...
method googleNow (line 382) | public static boolean googleNow(@NonNull final Context ctx, @NonNull f...
method wolframAlpha (line 421) | public static boolean wolframAlpha(@NonNull final Context ctx, @NonNul...
method shareIntent (line 458) | public static boolean shareIntent(@NonNull final Context ctx, @NonNull...
method sendDeveloperEmail (line 494) | public static boolean sendDeveloperEmail(final Context ctx) {
method goHome (line 508) | public static boolean goHome(@NonNull final Context ctx) {
method saiyActivity (line 543) | public static boolean saiyActivity(@NonNull final Context ctx, @NonNul...
method settingsIntent (line 584) | @SuppressLint("InlinedApi")
method voiceSearchSettings (line 644) | private static boolean voiceSearchSettings(@NonNull final Context ctx) {
method voiceAssistSettings21 (line 686) | @TargetApi(Build.VERSION_CODES.LOLLIPOP)
FILE: app/src/main/java/ai/saiy/android/intent/IntentConstants.java
class IntentConstants (line 23) | public class IntentConstants {
FILE: app/src/main/java/ai/saiy/android/localisation/SaiyResources.java
class SaiyResources (line 42) | public class SaiyResources {
method SaiyResources (line 59) | public SaiyResources(@NonNull final Context mContext, @NonNull final S...
method reset (line 73) | @SuppressWarnings("deprecation")
method checkNotNull (line 90) | private boolean checkNotNull() {
method getStringArray (line 100) | @SuppressWarnings("deprecation")
method getString (line 121) | @SuppressWarnings("deprecation")
class ResourceManager (line 139) | private final class ResourceManager extends Resources {
method ResourceManager (line 140) | public ResourceManager(final AssetManager assets, final DisplayMetri...
method getStringArray (line 153) | @Override
method getString (line 172) | @NonNull
method getString (line 189) | @NonNull
FILE: app/src/main/java/ai/saiy/android/localisation/SaiyResourcesHelper.java
class SaiyResourcesHelper (line 29) | public class SaiyResourcesHelper {
method getArrayResource (line 40) | public static String[] getArrayResource(@NonNull final Context ctx, @N...
method getStringResource (line 57) | public static String getStringResource(@NonNull final Context ctx, @No...
FILE: app/src/main/java/ai/saiy/android/localisation/SupportedLanguage.java
type SupportedLanguage (line 47) | public enum SupportedLanguage {
method SupportedLanguage (line 80) | SupportedLanguage(final String language, final String country, final S...
method getParent (line 101) | public SupportedLanguage getParent() {
method hasParent (line 110) | public boolean hasParent() {
method getLocale (line 119) | public Locale getLocale() {
method getLanguageISO (line 128) | public String getLanguageISO() {
method getCountryISO (line 137) | public String getCountryISO() {
method getCountry (line 146) | public String getCountry() {
method getCountryTag (line 155) | public String getCountryTag() {
method getLanguageTag (line 164) | public String getLanguageTag() {
method getLanguage (line 173) | public String getLanguage() {
method getLanguageCountry (line 182) | public String getLanguageCountry() {
method getLanguageCountryISO (line 191) | public String getLanguageCountryISO() {
method getLanguages (line 200) | public static SupportedLanguage[] getLanguages() {
method getSupportedLanguage (line 210) | public static SupportedLanguage getSupportedLanguage(@NonNull final Lo...
FILE: app/src/main/java/ai/saiy/android/memory/Memory.java
class Memory (line 36) | public class Memory {
method Memory (line 60) | public Memory(final int action, @NonNull final String vrLanguage, @Non...
method getAction (line 73) | public int getAction() {
method getCommand (line 77) | public CC getCommand() {
method getCondition (line 81) | public int getCondition() {
method getVRLanguage (line 85) | public String getVRLanguage() {
method getSupportedLanguage (line 89) | public SupportedLanguage getSupportedLanguage() {
method getTTSLanguage (line 93) | public String getTTSLanguage() {
method getUtterance (line 97) | public String getUtterance() {
method getUtteranceArray (line 101) | public ArrayList<String> getUtteranceArray() {
FILE: app/src/main/java/ai/saiy/android/memory/MemoryHelper.java
class MemoryHelper (line 42) | public class MemoryHelper {
method hasMemory (line 53) | public static boolean hasMemory(@NonNull final Context ctx) {
method getMemory (line 63) | public static Memory getMemory(@NonNull final Context ctx) {
method getUnknown (line 104) | private static Memory getUnknown(@NonNull final Context ctx) {
FILE: app/src/main/java/ai/saiy/android/memory/MemoryPrepare.java
class MemoryPrepare (line 42) | public class MemoryPrepare {
method MemoryPrepare (line 63) | public MemoryPrepare(@NonNull final Context mContext, @NonNull final B...
method save (line 85) | public void save() {
FILE: app/src/main/java/ai/saiy/android/nlu/NLUCoerce.java
class NLUCoerce (line 60) | public class NLUCoerce {
method NLUCoerce (line 86) | public NLUCoerce(@NonNull final Object nluProvider, @NonNull final Con...
method coerce (line 108) | public void coerce() {
method validateNLUAPIAI (line 315) | private boolean validateNLUAPIAI(@NonNull final NLUAPIAI nluAPIAI) {
method validateNLUNuance (line 357) | private boolean validateNLUNuance(@NonNull final NLUNuance nluNuance) {
method validateNLUNLUMicrosoft (line 470) | private boolean validateNLUNLUMicrosoft(@NonNull final NLUMicrosoft nl...
method validateNLUSaiy (line 559) | private boolean validateNLUSaiy(@NonNull final NLUSaiy nluSaiy) {
method getVRLocale (line 636) | public Locale getVRLocale() {
method getTTSLocale (line 640) | public Locale getTTSLocale() {
method getSupportedLanguage (line 644) | public SupportedLanguage getSupportedLanguage() {
method getResultsArray (line 648) | public ArrayList<String> getResultsArray() {
method getContext (line 652) | public Context getContext() {
method getConfidenceArray (line 656) | private float[] getConfidenceArray() {
FILE: app/src/main/java/ai/saiy/android/nlu/NLUConstants.java
class NLUConstants (line 32) | public class NLUConstants {
method intentToCC (line 91) | public static CC intentToCC(@NonNull final String name) {
method intentToCC (line 169) | public static ArrayList<CC> intentToCC(@NonNull final ArrayList<String...
FILE: app/src/main/java/ai/saiy/android/nlu/apiai/NLUAPIAI.java
class NLUAPIAI (line 30) | public class NLUAPIAI {
method NLUAPIAI (line 37) | public NLUAPIAI(@NonNull final float[] confidence, @NonNull final Arra...
method getConfidence (line 45) | public float[] getConfidence() {
method getResults (line 49) | public ArrayList<String> getResults() {
method getIntent (line 53) | public String getIntent() {
method getParameters (line 57) | public HashMap<String, JsonElement> getParameters() {
FILE: app/src/main/java/ai/saiy/android/nlu/apiai/NLUAPIAIHelper.java
class NLUAPIAIHelper (line 42) | public class NLUAPIAIHelper {
method prepareCommand (line 56) | public CommandRequest prepareCommand(@NonNull final Context ctx,
FILE: app/src/main/java/ai/saiy/android/nlu/apiai/RemoteAPIAI.java
class RemoteAPIAI (line 37) | public class RemoteAPIAI {
method RemoteAPIAI (line 52) | public RemoteAPIAI(@NonNull final Context mContext,
method fetch (line 65) | public Pair<Boolean, String> fetch() {
FILE: app/src/main/java/ai/saiy/android/nlu/apiai/ResolveAPIAI.java
class ResolveAPIAI (line 38) | public class ResolveAPIAI {
method ResolveAPIAI (line 52) | public ResolveAPIAI(@NonNull final Context mContext, @NonNull final Su...
method unpack (line 65) | public void unpack(@NonNull final String gsonResponse) {
method getNLUAPIAI (line 81) | public NLUAPIAI getNLUAPIAI() {
method getVRLocale (line 85) | public Locale getVRLocale() {
method getTTSLocale (line 89) | public Locale getTTSLocale() {
method getSupportedLanguage (line 93) | public SupportedLanguage getSupportedLanguage() {
method getResultsArray (line 97) | public ArrayList<String> getResultsArray() {
method getContext (line 101) | public Context getContext() {
method getConfidenceArray (line 105) | public float[] getConfidenceArray() {
FILE: app/src/main/java/ai/saiy/android/nlu/bluemix/Alternative.java
class Alternative (line 28) | public class Alternative {
method Alternative (line 36) | public Alternative(final float confidence, @NonNull final String trans...
method getConfidence (line 41) | public float getConfidence() {
method getTranscript (line 45) | public String getTranscript() {
FILE: app/src/main/java/ai/saiy/android/nlu/bluemix/NLUBluemix.java
class NLUBluemix (line 30) | public class NLUBluemix {
method NLUBluemix (line 41) | public NLUBluemix(final long resultIndex, @Nullable final String state...
method getResultIndex (line 47) | public long getResultIndex() {
method getResults (line 51) | public List<Result> getResults() {
method getState (line 55) | public String getState() {
FILE: app/src/main/java/ai/saiy/android/nlu/bluemix/ResolveBluemix.java
class ResolveBluemix (line 34) | public class ResolveBluemix {
method ResolveBluemix (line 48) | public ResolveBluemix(@NonNull final Context mContext, @NonNull final ...
method unpack (line 61) | public void unpack(@NonNull final NLUBluemix nluBluemix) {
method getNLUBluemix (line 72) | public NLUBluemix getNLUBluemix() {
method getVRLocale (line 76) | public Locale getVRLocale() {
method getTTSLocale (line 80) | public Locale getTTSLocale() {
method getSupportedLanguage (line 84) | public SupportedLanguage getSupportedLanguage() {
method getResultsArray (line 88) | public ArrayList<String> getResultsArray() {
method getContext (line 92) | public Context getContext() {
method getConfidenceArray (line 96) | public float[] getConfidenceArray() {
FILE: app/src/main/java/ai/saiy/android/nlu/bluemix/Result.java
class Result (line 30) | public class Result {
method Result (line 38) | public Result(@NonNull final List<Alternative> alternatives, final boo...
method getAlternatives (line 43) | public List<Alternative> getAlternatives() {
method isFinal (line 47) | public boolean isFinal() {
FILE: app/src/main/java/ai/saiy/android/nlu/local/AlgorithmicContainer.java
class AlgorithmicContainer (line 28) | public class AlgorithmicContainer {
method getParentPosition (line 38) | public int getParentPosition() {
method setParentPosition (line 42) | public void setParentPosition(final int parentPosition) {
method getInput (line 46) | public String getInput() {
method setInput (line 50) | public void setInput(@NonNull final String input) {
method getAlgorithm (line 54) | public Algorithm getAlgorithm() {
method setAlgorithm (line 58) | public void setAlgorithm(@NonNull final Algorithm algorithm) {
method isExactMatch (line 62) | public boolean isExactMatch() {
method setExactMatch (line 66) | public void setExactMatch(final boolean exactMatch) {
method getGenericMatch (line 70) | public String getGenericMatch() {
method setGenericMatch (line 74) | public void setGenericMatch(@NonNull final String genericMatch) {
method getScore (line 78) | public double getScore() {
method setScore (line 82) | public void setScore(final double score) {
method getVariableData (line 86) | public Object getVariableData() {
method setVariableData (line 90) | public void setVariableData(@NonNull final Object variableData) {
FILE: app/src/main/java/ai/saiy/android/nlu/local/AlgorithmicResolver.java
class AlgorithmicResolver (line 52) | public class AlgorithmicResolver {
method AlgorithmicResolver (line 71) | public AlgorithmicResolver(@NonNull final Context mContext, @NonNull f...
method resolve (line 86) | public AlgorithmicContainer resolve() {
FILE: app/src/main/java/ai/saiy/android/nlu/local/FrequencyAnalysis.java
class FrequencyAnalysis (line 54) | public final class FrequencyAnalysis {
method FrequencyAnalysis (line 68) | public FrequencyAnalysis(@NonNull final ArrayList<Pair<CC, Float>> com...
method analyse (line 77) | public CC analyse() {
FILE: app/src/main/java/ai/saiy/android/nlu/local/InitStrings.java
class InitStrings (line 42) | public final class InitStrings {
method InitStrings (line 58) | public InitStrings(@NonNull final Context mContext) {
method init (line 92) | public void init() {
FILE: app/src/main/java/ai/saiy/android/nlu/local/Profanity.java
class Profanity (line 47) | public final class Profanity {
method Profanity (line 65) | public Profanity(@NonNull final Context mContext, @NonNull final Array...
method initStrings (line 83) | private static void initStrings(@NonNull final SaiyResources sr) {
method remove (line 93) | public ArrayList<String> remove() {
FILE: app/src/main/java/ai/saiy/android/nlu/local/Resolve.java
class Resolve (line 73) | public final class Resolve {
method Resolve (line 93) | public Resolve(@NonNull final Context mContext, @NonNull final ArrayLi...
method Resolve (line 127) | public Resolve(@NonNull final Context mContext, @NonNull final ArrayLi...
method resolve (line 158) | public ArrayList<Pair<CC, Float>> resolve() {
FILE: app/src/main/java/ai/saiy/android/nlu/microsoft/Entity.java
class Entity (line 27) | public class Entity {
method Entity (line 44) | public Entity(final long endIndex, @NonNull final String entity, @NonN...
method getEndIndex (line 53) | public long getEndIndex() {
method getEntity (line 57) | public String getEntity() {
method getScore (line 61) | public double getScore() {
method getStartIndex (line 65) | public long getStartIndex() {
method getType (line 69) | public String getType() {
FILE: app/src/main/java/ai/saiy/android/nlu/microsoft/Intent.java
class Intent (line 27) | public class Intent {
method Intent (line 36) | public Intent(@NonNull final String intent, final float score) {
method getIntent (line 41) | public String getIntent() {
method getScore (line 45) | public float getScore() {
FILE: app/src/main/java/ai/saiy/android/nlu/microsoft/NLUMicrosoft.java
class NLUMicrosoft (line 29) | public class NLUMicrosoft {
method NLUMicrosoft (line 42) | public NLUMicrosoft(@NonNull final List<Entity> entities, @NonNull fin...
method getEntities (line 49) | public List<Entity> getEntities() {
method getIntents (line 53) | public List<Intent> getIntents() {
method getQuery (line 57) | public String getQuery() {
FILE: app/src/main/java/ai/saiy/android/nlu/microsoft/NLUMicrosoftHelper.java
class NLUMicrosoftHelper (line 40) | public class NLUMicrosoftHelper {
method prepareCommand (line 54) | public CommandRequest prepareCommand(@NonNull final Context ctx,
FILE: app/src/main/java/ai/saiy/android/nlu/microsoft/ResolveMicrosoft.java
class ResolveMicrosoft (line 36) | public class ResolveMicrosoft {
method ResolveMicrosoft (line 50) | public ResolveMicrosoft(@NonNull final Context mContext, @NonNull fina...
method unpack (line 63) | public void unpack(@NonNull final String payload) {
method getNLUMicrosoft (line 75) | public NLUMicrosoft getNLUMicrosoft() {
method getVRLocale (line 79) | public Locale getVRLocale() {
method getTTSLocale (line 83) | public Locale getTTSLocale() {
method getSupportedLanguage (line 87) | public SupportedLanguage getSupportedLanguage() {
method getResultsArray (line 91) | public ArrayList<String> getResultsArray() {
method getContext (line 95) | public Context getContext() {
method getConfidenceArray (line 99) | public float[] getConfidenceArray() {
FILE: app/src/main/java/ai/saiy/android/nlu/nuance/Action.java
class Action (line 27) | public class Action {
method Action (line 32) | public Action(@NonNull final Intent intent) {
method getIntent (line 36) | public Intent getIntent() {
FILE: app/src/main/java/ai/saiy/android/nlu/nuance/Concept.java
class Concept (line 27) | public class Concept {
method Concept (line 38) | public Concept(@NonNull final String literal, @NonNull final int[][] r...
method getLiteral (line 45) | public String getLiteral() {
method getValue (line 49) | public String getValue() {
method getRanges (line 53) | public int[][] getRanges() {
FILE: app/src/main/java/ai/saiy/android/nlu/nuance/Intent.java
class Intent (line 27) | public class Intent {
method Intent (line 35) | public Intent(final float confidence, @NonNull final String value) {
method getConfidence (line 40) | public float getConfidence() {
method getValue (line 44) | public String getValue() {
FILE: app/src/main/java/ai/saiy/android/nlu/nuance/Interpretation.java
class Interpretation (line 30) | public class Interpretation {
method Interpretation (line 41) | public Interpretation(@NonNull final Action action, @NonNull final Map...
method getAction (line 48) | public Action getAction() {
method getConcept (line 52) | public Map<String, List<Concept>> getConcept() {
method getLiteral (line 56) | public String getLiteral() {
FILE: app/src/main/java/ai/saiy/android/nlu/nuance/NLUNuance.java
class NLUNuance (line 29) | public class NLUNuance {
method NLUNuance (line 36) | public NLUNuance(@NonNull final List<Interpretation> interpretations) {
method getInterpretations (line 40) | public List<Interpretation> getInterpretations() {
FILE: app/src/main/java/ai/saiy/android/nlu/nuance/NLUNuanceHelper.java
class NLUNuanceHelper (line 42) | public class NLUNuanceHelper {
method prepareCommand (line 56) | public CommandRequest prepareCommand(@NonNull final Context ctx,
FILE: app/src/main/java/ai/saiy/android/nlu/nuance/ResolveNuance.java
class ResolveNuance (line 40) | public class ResolveNuance {
method ResolveNuance (line 54) | public ResolveNuance(@NonNull final Context mContext, @NonNull final S...
method unpack (line 67) | public void unpack(@NonNull final JSONObject payload) {
method getNLUNuance (line 84) | private NLUNuance getNLUNuance() {
method getVRLocale (line 88) | public Locale getVRLocale() {
method getTTSLocale (line 92) | public Locale getTTSLocale() {
method getSupportedLanguage (line 96) | public SupportedLanguage getSupportedLanguage() {
method getResultsArray (line 100) | public ArrayList<String> getResultsArray() {
method getContext (line 104) | public Context getContext() {
method getConfidenceArray (line 108) | private float[] getConfidenceArray() {
FILE: app/src/main/java/ai/saiy/android/nlu/saiy/Context.java
class Context (line 29) | public class Context {
method Context (line 40) | public Context(final double confidence, @NonNull final String context,
method getConfidence (line 47) | public double getConfidence() {
method getContext (line 51) | public String getContext() {
method getContextValues (line 55) | public List<ContextValue> getContextValues() {
FILE: app/src/main/java/ai/saiy/android/nlu/saiy/ContextValue.java
class ContextValue (line 27) | public class ContextValue {
method ContextValue (line 32) | public ContextValue(@NonNull final String identifier) {
method getIdentifier (line 36) | public String getIdentifier() {
FILE: app/src/main/java/ai/saiy/android/nlu/saiy/Entity.java
class Entity (line 29) | public class Entity {
method Entity (line 46) | public Entity(final double confidence, @NonNull final String name, @No...
method getConfidence (line 55) | public double getConfidence() {
method getContextual (line 59) | public List<Context> getContextual() {
method getIndex (line 63) | public int[] getIndex() {
method getName (line 67) | public String getName() {
method getValue (line 71) | public String getValue() {
FILE: app/src/main/java/ai/saiy/android/nlu/saiy/Intent.java
class Intent (line 29) | public class Intent {
method Intent (line 41) | public Intent(final double confidence, @NonNull final String intent, @...
method getEntities (line 47) | public List<Entity> getEntities() {
method getConfidence (line 51) | public double getConfidence() {
method getIntent (line 55) | public String getIntent() {
FILE: app/src/main/java/ai/saiy/android/nlu/saiy/NLUSaiy.java
class NLUSaiy (line 29) | public class NLUSaiy {
method NLUSaiy (line 40) | public NLUSaiy(@NonNull final float[] confidence, @NonNull final List<...
method getConfidence (line 47) | public float[] getConfidence() {
method getIntents (line 51) | public List<Intent> getIntents() {
method getResults (line 55) | public List<String> getResults() {
FILE: app/src/main/java/ai/saiy/android/nlu/saiy/NLUSaiyHelper.java
class NLUSaiyHelper (line 39) | public class NLUSaiyHelper {
method prepareCommand (line 53) | public CommandRequest prepareCommand(@NonNull final android.content.Co...
FILE: app/src/main/java/ai/saiy/android/nlu/saiy/ResolveSaiy.java
class ResolveSaiy (line 40) | public class ResolveSaiy {
method ResolveSaiy (line 54) | public ResolveSaiy(@NonNull final Context mContext, @NonNull final Sup...
method unpack (line 67) | public void unpack(@NonNull final JSONObject payload) {
method getNLUSaiy (line 84) | public NLUSaiy getNLUSaiy() {
method getVRLocale (line 88) | public Locale getVRLocale() {
method getTTSLocale (line 92) | public Locale getTTSLocale() {
method getSupportedLanguage (line 96) | public SupportedLanguage getSupportedLanguage() {
method getResultsArray (line 100) | public ArrayList<String> getResultsArray() {
method getContext (line 104) | public Context getContext() {
method getConfidenceArray (line 108) | public float[] getConfidenceArray() {
FILE: app/src/main/java/ai/saiy/android/nlu/wit/Entity.java
class Entity (line 30) | public class Entity {
method Entity (line 35) | public Entity(@NonNull final List<MessageBody> results) {
method getResults (line 39) | public List<MessageBody> getResults() {
FILE: app/src/main/java/ai/saiy/android/nlu/wit/MessageBody.java
class MessageBody (line 28) | public class MessageBody {
method MessageBody (line 42) | public MessageBody(final float confidence, @NonNull final String type,...
method getConfidence (line 50) | public float getConfidence() {
method isSuggested (line 54) | public boolean isSuggested() {
method getType (line 58) | public String getType() {
method getValue (line 62) | public String getValue() {
FILE: app/src/main/java/ai/saiy/android/nlu/wit/NLUWit.java
class NLUWit (line 28) | public class NLUWit {
method NLUWit (line 42) | public NLUWit(final float confidence, @NonNull final String text, @Non...
method getConfidence (line 50) | public float getConfidence() {
method getEntities (line 54) | public Entity getEntities() {
method getMessageId (line 58) | public String getMessageId() {
method getText (line 62) | public String getText() {
FILE: app/src/main/java/ai/saiy/android/nlu/wit/ResolveWit.java
class ResolveWit (line 34) | public class ResolveWit {
method ResolveWit (line 48) | public ResolveWit(@NonNull final Context mContext, @NonNull final Supp...
method unpack (line 61) | public void unpack(@NonNull final NLUWit nluWit) {
method getNLUWit (line 72) | public NLUWit getNLUWit() {
method getVRLocale (line 76) | public Locale getVRLocale() {
method getTTSLocale (line 80) | public Locale getTTSLocale() {
method getSupportedLanguage (line 84) | public SupportedLanguage getSupportedLanguage() {
method getResultsArray (line 88) | public ArrayList<String> getResultsArray() {
method getContext (line 92) | public Context getContext() {
method getConfidenceArray (line 96) | public float[] getConfidenceArray() {
FILE: app/src/main/java/ai/saiy/android/partial/IPartial.java
type IPartial (line 23) | public interface IPartial {
method onCancelDetected (line 25) | void onCancelDetected();
method onTranslateDetected (line 27) | void onTranslateDetected();
FILE: app/src/main/java/ai/saiy/android/partial/Partial.java
class Partial (line 25) | public class Partial {
FILE: app/src/main/java/ai/saiy/android/partial/PartialHelper.java
class PartialHelper (line 51) | public class PartialHelper {
method PartialHelper (line 74) | public PartialHelper(@NonNull final Context mContext, @NonNull final S...
method isPartial (line 102) | public void isPartial(@NonNull final Bundle partialResults) {
method shutdown (line 157) | public void shutdown() {
method isShutdown (line 186) | public boolean isShutdown() {
FILE: app/src/main/java/ai/saiy/android/permissions/PermissionHelper.java
class PermissionHelper (line 38) | public class PermissionHelper {
method checkSaiyRemotePermission (line 57) | public static boolean checkSaiyRemotePermission(@NonNull final Context...
method checkSaiyPermission (line 82) | public static boolean checkSaiyPermission(@NonNull final Context ctx, ...
method checkAudioPermissions (line 127) | public static boolean checkAudioPermissions(@NonNull final Context ctx) {
method checkFilePermissions (line 166) | public static boolean checkFilePermissions(@NonNull final Context ctx) {
method checkContactGroupPermissions (line 205) | public static boolean checkContactGroupPermissions(@NonNull final Cont...
method checkUsageStatsPermission (line 244) | @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
FILE: app/src/main/java/ai/saiy/android/personality/AI.java
class AI (line 28) | public class AI {
method getAILevel (line 38) | public static String getAILevel() {
method calculateAI (line 47) | private static double calculateAI() {
FILE: app/src/main/java/ai/saiy/android/personality/PersonalityHelper.java
class PersonalityHelper (line 33) | public final class PersonalityHelper {
method PersonalityHelper (line 38) | public PersonalityHelper() {
method isUserAGoat (line 51) | public static boolean isUserAGoat() {
method getIntro (line 61) | public static String getIntro(@NonNull final Context ctx, @NonNull fin...
method getUserNameOrNot (line 71) | public static String getUserNameOrNot(@NonNull final Context ctx) {
FILE: app/src/main/java/ai/saiy/android/personality/PersonalityResponse.java
class PersonalityResponse (line 42) | public final class PersonalityResponse {
method PersonalityResponse (line 47) | public PersonalityResponse() {
method getBeyondVerbalIntroResponse (line 58) | public static String getBeyondVerbalIntroResponse(@NonNull final Conte...
method getBeyondVerbalErrorResponse (line 71) | public static String getBeyondVerbalErrorResponse(@NonNull final Conte...
method getBeyondVerbalVerboseResponse (line 84) | public static String getBeyondVerbalVerboseResponse(@NonNull final Con...
method getBeyondVerbalExtraVerboseResponse (line 97) | public static String getBeyondVerbalExtraVerboseResponse(@NonNull fina...
method getBeyondVerbalServerErrorResponse (line 110) | public static String getBeyondVerbalServerErrorResponse(@NonNull final...
method getTaskerTaskExecutedResponse (line 124) | public static String getTaskerTaskExecutedResponse(@NonNull final Cont...
method getTaskerTaskNotMatchedResponse (line 138) | public static String getTaskerTaskNotMatchedResponse(@NonNull final Co...
method getTaskerTaskFailedResponse (line 155) | public static String getTaskerTaskFailedResponse(@NonNull final Contex...
method getTaskerNoTasksResponse (line 168) | public static String getTaskerNoTasksResponse(@NonNull final Context ctx,
method getTaskerExternalAccessResponse (line 180) | public static String getTaskerExternalAccessResponse(@NonNull final Co...
method getTaskerDisabledResponse (line 192) | public static String getTaskerDisabledResponse(@NonNull final Context ...
method getTaskerInstallResponse (line 204) | public static String getTaskerInstallResponse(@NonNull final Context ctx,
method getTaskerInstallOrderResponse (line 216) | public static String getTaskerInstallOrderResponse(@NonNull final Cont...
method getIntro (line 229) | public static String getIntro(@NonNull final Context ctx, @NonNull fin...
method getErrorProfanityFilter (line 269) | public static String getErrorProfanityFilter(@NonNull final Context ct...
method getErrorEmptyVoiceData (line 280) | public static String getErrorEmptyVoiceData(@NonNull final Context ctx...
method getErrorActionUnknown (line 291) | public static String getErrorActionUnknown(@NonNull final Context ctx,...
method getErrorRemoteFailed (line 302) | public static String getErrorRemoteFailed(@NonNull final Context ctx, ...
method getErrorRemoteFailedUnknown (line 315) | public static String getErrorRemoteFailedUnknown(@NonNull final Contex...
method getErrorRemoteCommandRegister (line 327) | public static String getErrorRemoteCommandRegister(@NonNull final Cont...
method getRemoteCommandRegisterSuccess (line 341) | public static String getRemoteCommandRegisterSuccess(@NonNull final Co...
method getRemoteSuccess (line 357) | public static String getRemoteSuccess(@NonNull final Context ctx, @Non...
method getNoNetwork (line 369) | public static String getNoNetwork(@NonNull final Context ctx, @NonNull...
method getNoComprende (line 382) | public static String getNoComprende(@NonNull final Context ctx, @NonNu...
method getRepeatCommand (line 395) | public static String getRepeatCommand(@NonNull final Context ctx, @Non...
method getCancelled (line 408) | public static String getCancelled(@NonNull final Context ctx, @NonNull...
method getUserName (line 420) | public static String getUserName(@NonNull final Context ctx, @NonNull ...
method getSongRecognitionResponse (line 433) | public static String getSongRecognitionResponse(@NonNull final Context...
method getSecureErrorResponse (line 446) | public static String getSecureErrorResponse(@NonNull final Context ctx...
method getBatteryResponse (line 461) | public static String getBatteryResponse(@NonNull final Context ctx, @N...
method getBatteryErrorUnknownResponse (line 474) | public static String getBatteryErrorUnknownResponse(@NonNull final Con...
method getBatteryErrorAccessResponse (line 487) | public static String getBatteryErrorAccessResponse(@NonNull final Cont...
method getSongRecognitionErrorAppResponse (line 501) | public static String getSongRecognitionErrorAppResponse(@NonNull final...
method getSongRecognitionErrorNoApp (line 515) | public static String getSongRecognitionErrorNoApp(@NonNull final Conte...
method getSongRecognitionErrorAppUninstalled (line 528) | public static String getSongRecognitionErrorAppUninstalled(@NonNull fi...
method getUserNameRepeat (line 542) | public static String getUserNameRepeat(@NonNull final Context ctx, @No...
method getUserNameError (line 554) | public static String getUserNameError(@NonNull final Context ctx, @Non...
method getWolframAlphaError (line 567) | public static String getWolframAlphaError(@NonNull final Context ctx, ...
method getWolframAlphaIntro (line 581) | public static String getWolframAlphaIntro(@NonNull final Context ctx, ...
method getNoMemory (line 593) | public static String getNoMemory(@NonNull final Context ctx, @NonNull ...
method getClipboardSpell (line 628) | public static String getClipboardSpell(@NonNull final Context ctx, @No...
method getClipboardDataError (line 640) | public static String getClipboardDataError(@NonNull final Context ctx,...
method getClipboardAccessError (line 652) | public static String getClipboardAccessError(@NonNull final Context ct...
method getSpellError (line 664) | public static String getSpellError(@NonNull final Context ctx, @NonNul...
method getEnrollmentError (line 676) | public static String getEnrollmentError(@NonNull final Context ctx, @N...
method getVocalIDError (line 690) | public static String getVocalIDError(@NonNull final Context ctx, @NonN...
method getVocalIDHigh (line 704) | public static String getVocalIDHigh(@NonNull final Context ctx, @NonNu...
method getVocalIDMedium (line 718) | public static String getVocalIDMedium(@NonNull final Context ctx, @Non...
method getVocalIDLow (line 732) | public static String getVocalIDLow(@NonNull final Context ctx, @NonNul...
method getEnrollmentAPIError (line 744) | public static String getEnrollmentAPIError(@NonNull final Context ctx,...
method getBVAnalysisCompleteResponse (line 758) | public static String getBVAnalysisCompleteResponse(@NonNull final Cont...
FILE: app/src/main/java/ai/saiy/android/processing/Condition.java
class Condition (line 31) | public final class Condition {
FILE: app/src/main/java/ai/saiy/android/processing/EntangledPair.java
class EntangledPair (line 27) | public class EntangledPair {
method EntangledPair (line 34) | public EntangledPair(@NonNull final Position position, @NonNull final ...
method getPosition (line 39) | public Position getPosition() {
method getCC (line 43) | public CC getCC() {
method getUtterance (line 47) | public String getUtterance() {
method setUtterance (line 51) | public void setUtterance(@NonNull final String utterance) {
method getToastContent (line 55) | public String getToastContent() {
method setToastContent (line 59) | public void setToastContent(@NonNull final String toastContent) {
FILE: app/src/main/java/ai/saiy/android/processing/Outcome.java
class Outcome (line 32) | public class Outcome {
method getCondition (line 51) | public int getCondition() {
method setCondition (line 60) | public void setCondition(final int condition) {
method getAction (line 70) | public int getAction() {
method setAction (line 80) | public void setAction(final int action) {
method setOutcome (line 89) | public void setOutcome(int outcome) {
method getOutcome (line 98) | public int getOutcome() {
method setEntangledPair (line 107) | public void setEntangledPair(@NonNull final EntangledPair entangledPai...
method getEntangledPair (line 116) | protected EntangledPair getEntangledPair() {
method setQubit (line 125) | public void setQubit(@NonNull final Qubit qubit) {
method getQubit (line 134) | public Qubit getQubit() {
method setUtterance (line 143) | public void setUtterance(@NonNull final String utterance) {
method getUtterance (line 152) | public String getUtterance() {
method getTTSLocale (line 161) | public Locale getTTSLocale() {
method setTTSLocale (line 170) | public void setTTSLocale(@NonNull final Locale locale) {
method getExtra (line 179) | public Object getExtra() {
method setExtra (line 188) | public void setExtra(final Object extra) {
FILE: app/src/main/java/ai/saiy/android/processing/Position.java
type Position (line 23) | public enum Position {
FILE: app/src/main/java/ai/saiy/android/processing/Quantum.java
class Quantum (line 98) | public class Quantum extends Tunnelling {
method Quantum (line 108) | public Quantum(@NonNull final Context mContext) {
method doTunnelling (line 112) | @Override
method onSuperposition (line 553) | @Override
method onEntanglement (line 691) | @Override
FILE: app/src/main/java/ai/saiy/android/processing/Qubit.java
class Qubit (line 29) | public class Qubit {
method getSongRecognitionChooserList (line 36) | public ArrayList<SongRecognitionChooser> getSongRecognitionChooserList...
method setSongRecognitionChooserList (line 40) | public void setSongRecognitionChooserList(@NonNull final ArrayList<Son...
method getTranslatedText (line 44) | public String getTranslatedText() {
method setTranslatedText (line 48) | public void setTranslatedText(@NonNull final String translatedText) {
method getSpellContent (line 52) | public String getSpellContent() {
method setSpellContent (line 56) | public void setSpellContent(@NonNull final String spellContent) {
method getClipboardContent (line 60) | public String getClipboardContent() {
method setClipboardContent (line 64) | public void setClipboardContent(@NonNull final String clipboardContent) {
FILE: app/src/main/java/ai/saiy/android/processing/Tunnelling.java
class Tunnelling (line 69) | abstract class Tunnelling extends AsyncTask<CommandRequest, EntangledPai...
method Tunnelling (line 97) | Tunnelling(@NonNull final Context mContext) {
method onPreExecute (line 107) | @Override
method doInBackground (line 127) | @Override
method doTunnelling (line 144) | protected abstract Qubit doTunnelling(final CommandRequest commandRequ...
method onProgressUpdate (line 146) | @Override
method onEntanglement (line 151) | protected abstract void onEntanglement(final EntangledPair entangledPa...
method onPostExecute (line 153) | @Override
method onSuperposition (line 159) | protected abstract void onSuperposition(final Qubit qubit);
method validatePosition (line 167) | boolean validatePosition(final EntangledPair entangledPair) {
method validateQubit (line 177) | boolean validateQubit(final Qubit qubit) {
method cancelTimer (line 184) | private void cancelTimer() {
FILE: app/src/main/java/ai/saiy/android/processing/helper/QuantumHelper.java
class QuantumHelper (line 27) | public class QuantumHelper {
method resolve (line 32) | public CustomResolver resolve(@NonNull final Context ctx, @NonNull fin...
FILE: app/src/main/java/ai/saiy/android/proximity/ProximityContext.java
class ProximityContext (line 24) | public class ProximityContext {
FILE: app/src/main/java/ai/saiy/android/proximity/hardware/ProximityBluetooth.java
class ProximityBluetooth (line 24) | public class ProximityBluetooth {
FILE: app/src/main/java/ai/saiy/android/proximity/hardware/ProximityWiFi.java
class ProximityWiFi (line 24) | public class ProximityWiFi {
FILE: app/src/main/java/ai/saiy/android/proximity/location/ProximityCellTower.java
class ProximityCellTower (line 24) | public class ProximityCellTower {
FILE: app/src/main/java/ai/saiy/android/proximity/location/ProximityContact.java
class ProximityContact (line 24) | public class ProximityContact {
FILE: app/src/main/java/ai/saiy/android/proximity/location/ProximityGPS.java
class ProximityGPS (line 24) | public class ProximityGPS {
FILE: app/src/main/java/ai/saiy/android/recognition/Recognition.java
class Recognition (line 32) | public class Recognition {
type State (line 39) | public enum State {
method setState (line 48) | public static void setState(@NonNull final State newState) {
method getState (line 74) | public static State getState() {
FILE: app/src/main/java/ai/saiy/android/recognition/RecognitionAction.java
class RecognitionAction (line 44) | public class RecognitionAction {
method RecognitionAction (line 64) | public RecognitionAction(@NonNull final Context mContext, @NonNull fin...
method resolve (line 90) | @SuppressWarnings("unchecked")
method sendErrorLocalRequest (line 188) | private void sendErrorLocalRequest() {
FILE: app/src/main/java/ai/saiy/android/recognition/SaiyHotwordListener.java
class SaiyHotwordListener (line 33) | public class SaiyHotwordListener implements RecognitionListener {
method onHotwordInitialised (line 52) | public void onHotwordInitialised() {
method onHotwordStarted (line 59) | public void onHotwordStarted() {
method onHotwordDetected (line 62) | public void onHotwordDetected(@NonNull final String hotword) {
method onHotwordError (line 65) | public void onHotwordError(final int errorCode) {
method onHotwordShutdown (line 68) | public void onHotwordShutdown() {
method onBeginningOfSpeech (line 71) | @Override
method onEndOfSpeech (line 78) | @Override
method onPartialResult (line 86) | @Override
method onResult (line 120) | @Override
method onError (line 127) | @Override
method onTimeout (line 134) | @Override
FILE: app/src/main/java/ai/saiy/android/recognition/SaiyRecognitionListener.java
class SaiyRecognitionListener (line 37) | public class SaiyRecognitionListener implements RecognitionListener, IPa...
method resetBugVariables (line 46) | public void resetBugVariables() {
method onReadyForSpeech (line 61) | @Override
method onBeginningOfSpeech (line 71) | @Override
method onBeginningOfRecognition (line 86) | public void onBeginningOfRecognition() {
method onRmsChanged (line 95) | @Override
method onBufferReceived (line 106) | @Override
method onEndOfSpeech (line 113) | @Override
method onEndOfRecognition (line 126) | public void onEndOfRecognition() {
method onError (line 134) | @Override
method onRecognitionError (line 158) | public void onRecognitionError(final int error) {
method onResults (line 169) | @Override
method onComplete (line 173) | public void onComplete() {
method onPartialResults (line 189) | @Override
method onEvent (line 199) | @Override
method onCancelDetected (line 203) | @Override
method onTranslateDetected (line 207) | @Override
FILE: app/src/main/java/ai/saiy/android/recognition/TestRecognitionAction.java
class TestRecognitionAction (line 45) | public class TestRecognitionAction {
method TestRecognitionAction (line 59) | public TestRecognitionAction(@NonNull final Context mContext, @NonNull...
method runDebug (line 88) | private void runDebug(@NonNull final Context ctx, @NonNull final Strin...
method toast (line 186) | private void toast(@NonNull final Context ctx, @NonNull final String t...
FILE: app/src/main/java/ai/saiy/android/recognition/helper/GoogleNowMonitor.java
class GoogleNowMonitor (line 37) | public class GoogleNowMonitor {
method start (line 55) | public void start(@NonNull final Context ctx) {
method restartHotword (line 114) | private void restartHotword(@NonNull final Context ctx) {
method shutdownHotword (line 129) | private void shutdownHotword(@NonNull final Context ctx) {
FILE: app/src/main/java/ai/saiy/android/recognition/helper/RecognitionDefaults.java
class RecognitionDefaults (line 24) | public class RecognitionDefaults {
FILE: app/src/main/java/ai/saiy/android/recognition/provider/android/RecognitionNative.java
class RecognitionNative (line 23) | public class RecognitionNative {
FILE: app/src/main/java/ai/saiy/android/recognition/provider/bluemix/IWebSocketCallback.java
type IWebSocketCallback (line 26) | public interface IWebSocketCallback {
method onOpen (line 28) | void onOpen(final ServerHandshake handshakeData);
method onMessage (line 30) | void onMessage(final String message);
method onClose (line 32) | void onClose(final int code, final String reason, final boolean remote);
method onError (line 34) | void onError(final Exception ex);
FILE: app/src/main/java/ai/saiy/android/recognition/provider/bluemix/RecognitionBluemix.java
class RecognitionBluemix (line 77) | public class RecognitionBluemix implements IMic, IWebSocketCallback {
method RecognitionBluemix (line 134) | public RecognitionBluemix(@NonNull final SaiyRecognitionListener liste...
method startClient (line 173) | private boolean startClient() {
method startListening (line 207) | public void startListening() {
method stopListening (line 306) | public void stopListening() {
method closeConnection (line 348) | private void closeConnection() {
method onBufferReceived (line 370) | @Override
method onError (line 436) | @Override
method onPauseDetected (line 468) | @Override
method onRecordingStarted (line 483) | @Override
method onRecordingEnded (line 491) | @Override
method onFileWriteComplete (line 505) | @Override
method onOpen (line 513) | @Override
method onMessage (line 540) | @Override
method detectFinal (line 696) | private boolean detectFinal(@NonNull final List<Result> results) {
method onClose (line 710) | @Override
method onError (line 722) | @Override
FILE: app/src/main/java/ai/saiy/android/recognition/provider/bluemix/mod/TrustAllBluemixWebSocketClient.java
class TrustAllBluemixWebSocketClient (line 48) | public class TrustAllBluemixWebSocketClient extends WebSocketClient {
method TrustAllBluemixWebSocketClient (line 57) | public TrustAllBluemixWebSocketClient(@NonNull final URI serverURL, @N...
method start (line 63) | public void start() throws NoSuchAlgorithmException, KeyManagementExce...
method disconnect (line 86) | public void disconnect() {
method close (line 156) | @Override
method onOpen (line 164) | @Override
method onMessage (line 169) | @Override
method onClose (line 174) | @Override
method onError (line 179) | @Override
method shouldError (line 196) | private boolean shouldError(@NonNull final Exception e) {
FILE: app/src/main/java/ai/saiy/android/recognition/provider/google/chromium/RecognitionGoogleChromium.java
class RecognitionGoogleChromium (line 70) | public class RecognitionGoogleChromium implements PauseListener {
method RecognitionGoogleChromium (line 139) | public RecognitionGoogleChromium(@NonNull final SaiyRecognitionListene...
method onPauseDetected (line 156) | @Override
method stopListening (line 170) | public void stopListening() {
method startListening (line 182) | public void startListening() {
method parseResults (line 503) | private void parseResults(final String response) {
method handleError (line 590) | private void handleError(final int errorCode) {
method audioShutdown (line 653) | private void audioShutdown(final String from) {
method closeResources (line 691) | private void closeResources(final InputStream inStream, final Scanner ...
FILE: app/src/main/java/ai/saiy/android/recognition/provider/google/cloud/GoogleCredentialsInterceptor.java
class GoogleCredentialsInterceptor (line 45) | public class GoogleCredentialsInterceptor implements ClientInterceptor {
method GoogleCredentialsInterceptor (line 53) | public GoogleCredentialsInterceptor(Credentials credentials) {
method interceptCall (line 57) | @Override
method serviceUri (line 87) | private URI serviceUri(Channel channel, MethodDescriptor<?, ?> method)
method removePort (line 115) | private URI removePort(URI uri) throws StatusException {
method getRequestMetadata (line 126) | private Map<String, List<String>> getRequestMetadata(URI uri) throws S...
method toHeaders (line 134) | private static Metadata toHeaders(Map<String, List<String>> metadata) {
FILE: app/src/main/java/ai/saiy/android/recognition/provider/google/cloud/RecognitionGoogleCloud.java
class RecognitionGoogleCloud (line 71) | public class RecognitionGoogleCloud implements IMic, StreamObserver<Stre...
method RecognitionGoogleCloud (line 113) | public RecognitionGoogleCloud(@NonNull final Context mContext, @NonNul...
method showPlayServicesError (line 191) | private void showPlayServicesError(final int errorCode) {
method startListening (line 214) | public void startListening() {
method onBufferReceived (line 295) | @Override
method onError (line 327) | @Override
method onPauseDetected (line 359) | @Override
method onRecordingStarted (line 374) | @Override
method onRecordingEnded (line 382) | @Override
method onFileWriteComplete (line 396) | @Override
method stopListening (line 406) | public void stopListening() {
method onNext (line 457) | @Override
method onError (line 595) | @Override
method onCompleted (line 618) | @Override
FILE: app/src/main/java/ai/saiy/android/recognition/provider/microsoft/RecognitionMicrosoft.java
class RecognitionMicrosoft (line 63) | public class RecognitionMicrosoft implements ISpeechRecognitionServerEve...
method RecognitionMicrosoft (line 105) | public RecognitionMicrosoft(@NonNull final Context mContext, @NonNull ...
method startListening (line 151) | public void startListening() {
method stopListening (line 161) | public void stopListening() {
method onPartialResponseReceived (line 177) | @Override
method onFinalResponseReceived (line 191) | @Override
method doSuccess (line 234) | private void doSuccess(final RecognitionResult response) {
method onIntentReceived (line 272) | @Override
method onError (line 298) | @Override
method onAudioEvent (line 308) | @Override
method convertConfidence (line 334) | private float convertConfidence(@NonNull final Confidence confidence) {
FILE: app/src/main/java/ai/saiy/android/recognition/provider/nuance/RecognitionNuance.java
class RecognitionNuance (line 70) | public class RecognitionNuance {
method RecognitionNuance (line 113) | @MainThread
method startListening (line 184) | public void startListening() {
method stopListening (line 209) | public void stopListening() {
method cancelListening (line 220) | public void cancelListening() {
method onStartedRecording (line 239) | @Override
method onFinishedRecording (line 251) | @Override
method onRecognition (line 270) | @Override
method onInterpretation (line 311) | @Override
method onSuccess (line 345) | @Override
method onError (line 354) | @Override
method tidyUp (line 390) | private void tidyUp() {
method getDetectionType (line 405) | private DetectionType getDetectionType(final int detectionType) {
FILE: app/src/main/java/ai/saiy/android/recognition/provider/remote/RecognitionRemote.java
class RecognitionRemote (line 42) | public class RecognitionRemote implements PauseListener {
method RecognitionRemote (line 90) | public RecognitionRemote(@NonNull final SaiyRecognitionListener listener,
method onPauseDetected (line 109) | @Override
method cancel (line 120) | public void cancel() {
method stopListening (line 123) | public void stopListening() {
method startListening (line 132) | public void startListening() {
method audioShutdown (line 328) | private void audioShutdown() {
method closeConnection (line 353) | private void closeConnection() {
FILE: app/src/main/java/ai/saiy/android/recognition/provider/saiy/RecognitionSaiy.java
class RecognitionSaiy (line 23) | public class RecognitionSaiy {
FILE: app/src/main/java/ai/saiy/android/recognition/provider/saiy/assist/SaiyInteractionService.java
class SaiyInteractionService (line 46) | @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
method onCreate (line 61) | @Override
method onStartCommand (line 81) | @Override
method onReady (line 103) | @Override
method onAvailabilityChanged (line 136) | @Override
method onDetected (line 196) | @Override
method onError (line 203) | @Override
method onRecognitionPaused (line 210) | @Override
method onRecognitionResumed (line 217) | @Override
FILE: app/src/main/java/ai/saiy/android/recognition/provider/saiy/assist/SaiyInteractionSession.java
class SaiyInteractionSession (line 32) | @RequiresApi(api = Build.VERSION_CODES.M)
method SaiyInteractionSession (line 35) | SaiyInteractionSession(Context context) {
method onCreate (line 39) | @Override
method onHandleAssist (line 44) | @Override
method onHandleScreenshot (line 48) | @Override
method onLockscreenShown (line 53) | @Override
method onGetSupportedCommands (line 58) | @Override
method onRequestConfirmation (line 65) | @Override
method onRequestPickOption (line 69) | @Override
method onRequestCompleteVoice (line 74) | @Override
method onRequestAbortVoice (line 78) | @Override
method onRequestCommand (line 82) | @Override
method onCancelRequest (line 86) | @Override
FILE: app/src/main/java/ai/saiy/android/recognition/provider/saiy/assist/SaiyInteractionSessionService.java
class SaiyInteractionSessionService (line 29) | @RequiresApi(api = Build.VERSION_CODES.M)
method onNewSession (line 32) | @Override
FILE: app/src/main/java/ai/saiy/android/recognition/provider/sphinx/RecognitionSphinx.java
class RecognitionSphinx (line 41) | public class RecognitionSphinx {
method RecognitionSphinx (line 70) | @WorkerThread
method setUp (line 95) | private void setUp() {
method startListening (line 160) | public void startListening() {
method stopListening (line 178) | public void stopListening() {
method onError (line 208) | private void onError(final int errorCode) {
method isListening (line 222) | public boolean isListening() {
FILE: app/src/main/java/ai/saiy/android/recognition/provider/sphinx/mod/SaiyAssets.java
class SaiyAssets (line 62) | public class SaiyAssets extends Assets {
method SaiyAssets (line 64) | public SaiyAssets(final Context context) throws IOException {
FILE: app/src/main/java/ai/saiy/android/recognition/provider/wit/RecognitionWit.java
class RecognitionWit (line 50) | public class RecognitionWit implements PauseListener {
method RecognitionWit (line 104) | public RecognitionWit(@NonNull final Context mContext, @NonNull final ...
method onPauseDetected (line 129) | @Override
method cancel (line 140) | public void cancel() {
method stopListening (line 143) | public void stopListening() {
method startListening (line 152) | public void startListening() {
method audioShutdown (line 355) | private void audioShutdown() {
method closeConnection (line 380) | private void closeConnection() {
FILE: app/src/main/java/ai/saiy/android/service/NotificationService.java
class NotificationService (line 49) | public class NotificationService extends IntentService {
method NotificationService (line 73) | public NotificationService() {
method onCreate (line 77) | @Override
method onHandleIntent (line 87) | @Override
method examineIntent (line 370) | private void examineIntent(@NonNull final Intent intent) {
method onDestroy (line 387) | @Override
FILE: app/src/main/java/ai/saiy/android/service/SelfAware.java
class SelfAware (line 118) | public class SelfAware extends Service {
class BoundSA (line 168) | public class BoundSA extends Binder {
method getService (line 169) | public SelfAware getService() {
method onCreate (line 174) | @Override
method onStartCommand (line 198) | @Override
method onBind (line 242) | @Override
method onRebind (line 265) | @Override
method onUnbind (line 277) | @Override
method isReal (line 290) | @Override
method speakListen (line 300) | @Override
method speakOnly (line 318) | @Override
method isHotwordActive (line 343) | protected Pair<Boolean, Boolean> isHotwordActive() {
method isListening (line 353) | protected boolean isListening() {
method isSpeaking (line 362) | protected Pair<Boolean, Integer> isSpeaking() {
method startHotwordDetection (line 371) | @SuppressWarnings("UnusedParameters")
method speakListen (line 398) | protected void speakListen(@NonNull final Bundle bundle) {
method speakOnly (line 416) | protected void speakOnly(@NonNull final Bundle bundle) {
method speak (line 434) | private void speak(final boolean isSpeakListen, @NonNull final Bundle ...
method stopSpeech (line 627) | protected void stopSpeech(final boolean preventRecognition) {
method stopListening (line 638) | protected void stopListening(final boolean shutdown) {
method checkInstance (line 648) | public static boolean checkInstance() {
method run (line 657) | @Override
method run (line 704) | @Override
method doSpeech (line 1229) | private void doSpeech(final int speechResult, final int queueType, @No...
method speechRequestError (line 1256) | private void speechRequestError(final int queueType, @NonNull final St...
method initTTS (line 1272) | private void initTTS() {
method initSaiyTTS (line 1297) | private void initSaiyTTS() {
method engineError (line 1313) | private void engineError() {
method resetPendingConditions (line 1328) | private void resetPendingConditions() {
method startForeground (line 1341) | private void startForeground(final int notificationConstant) {
method onInit (line 1364) | @SuppressWarnings("deprecation")
method onHotwordStarted (line 1430) | @Override
method onHotwordDetected (line 1440) | @Override
method onHotwordError (line 1491) | @Override
method onHotwordShutdown (line 1517) | @Override
method onReadyForSpeech (line 1533) | @Override
method onBeginningOfRecognition (line 1543) | @Override
method onRmsChanged (line 1550) | @Override
method onEvent (line 1557) | @Override
method onBufferReceived (line 1565) | @Override
method onEndOfRecognition (line 1572) | @Override
method onRecognitionError (line 1581) | @Override
method onPartialResults (line 1699) | @Override
method onCancelDetected (line 1724) | @Override
method onTranslateDetected (line 1750) | @Override
method onResults (line 1758) | @Override
method onComplete (line 1860) | @Override
method onError (line 1877) | @Override
method onStop (line 1885) | @Override
method onStart (line 1898) | @Override
method onError (line 1914) | @Override
method onDone (line 1956) | @Override
method onCallStateChanged (line 2003) | @Override
method waitGoogleCloud (line 2036) | @WorkerThread
method waitIBM (line 2071) | @WorkerThread
method waitMicrosoft (line 2105) | @WorkerThread
method interrupt (line 2143) | private void interrupt() {
method releaseVoiceEngine (line 2157) | private void releaseVoiceEngine() {
method releaseRecognition (line 2206) | private void releaseRecognition() {
method run (line 2239) | @Override
method restartEngineMonitor (line 2260) | private void restartEngineMonitor() {
method run (line 2272) | @Override
method restartStatusMonitor (line 2293) | private void restartStatusMonitor() {
method releasePartialHelper (line 2304) | private void releasePartialHelper() {
method getTelephonyManager (line 2315) | private TelephonyManager getTelephonyManager() {
method setInstance (line 2328) | private void setInstance() {
method destroyInstance (line 2335) | private void destroyInstance() {
method tidyUp (line 2342) | private void tidyUp() {
method onTrimMemory (line 2382) | @Override
method onLowMemory (line 2393) | @Override
method onDestroy (line 2401) | @Override
FILE: app/src/main/java/ai/saiy/android/service/ServiceConnector.java
class ServiceConnector (line 40) | public class ServiceConnector {
method ServiceConnector (line 60) | public ServiceConnector(@NonNull final Context mContext, @NonNull fina...
method createConnection (line 74) | public void createConnection() {
method doBindService (line 90) | private void doBindService(final Intent intent) {
method onServiceConnected (line 107) | @Override
method onServiceDisconnected (line 189) | @Override
method completeRequest (line 198) | private void completeRequest() {
method doUnbindService (line 243) | private void doUnbindService() {
FILE: app/src/main/java/ai/saiy/android/service/helper/AssistantIntentService.java
class AssistantIntentService (line 48) | public class AssistantIntentService extends IntentService {
method AssistantIntentService (line 57) | public AssistantIntentService() {
method onCreate (line 61) | @Override
method onHandleIntent (line 71) | @Override
method examineIntent (line 245) | private void examineIntent(@Nullable final Intent intent) {
method examineBundle (line 268) | private void examineBundle(@Nullable final Bundle bundle) {
method onDestroy (line 283) | @Override
FILE: app/src/main/java/ai/saiy/android/service/helper/IConditionListener.java
type IConditionListener (line 31) | public interface IConditionListener {
method onTTSStarted (line 33) | void onTTSStarted();
method onTTSEnded (line 35) | void onTTSEnded(@NonNull final SelfAwareCache cache, @NonNull final Sa...
method onTTSError (line 38) | void onTTSError();
method onVRStarted (line 40) | void onVRStarted();
method onVREnded (line 42) | void onVREnded();
method onVRComplete (line 44) | void onVRComplete();
method onVRError (line 46) | void onVRError();
FILE: app/src/main/java/ai/saiy/android/service/helper/LocalRequest.java
class LocalRequest (line 52) | public class LocalRequest {
method LocalRequest (line 87) | public LocalRequest(@NonNull final Context mContext, @NonNull final Bu...
method LocalRequest (line 99) | public LocalRequest(@NonNull final Context mContext) {
method execute (line 109) | public void execute() {
method prepareIntro (line 120) | public void prepareIntro() {
method prepareCancelled (line 142) | public void prepareCancelled(@NonNull final SupportedLanguage sl, @Non...
method prepareDefault (line 161) | public void prepareDefault(final int action, @Nullable final String ut...
method prepareDefault (line 179) | public void prepareDefault(final int action, @NonNull final SupportedL...
method getRequestIntent (line 194) | public Intent getRequestIntent() {
method getVRLocale (line 205) | public Locale getVRLocale() {
method setVRLocale (line 223) | public void setVRLocale(final Locale loc) {
method getTTSLocale (line 233) | public Locale getTTSLocale() {
method setTTSLocale (line 251) | public void setTTSLocale(final Locale loc) {
method setAction (line 261) | public void setAction(final int action) {
method getAction (line 271) | public int getAction() {
method setCondition (line 286) | public void setCondition(final int condition) {
method getCondition (line 295) | public int getCondition() {
method setCommand (line 310) | public void setCommand(final CC command) {
method getCommand (line 320) | public CC getCommand() {
method setUtteranceArray (line 335) | public void setUtteranceArray(@NonNull final ArrayList<String> voiceDa...
method getUtteranceArray (line 344) | public ArrayList<String> getUtteranceArray() {
method setUtterance (line 362) | public void setUtterance(@NonNull final String utterance) {
method getUtterance (line 371) | public String getUtterance() {
method setShutdownHotword (line 387) | public void setShutdownHotword() {
method getShutdownHotword (line 396) | public boolean getShutdownHotword() {
method setSecure (line 407) | public void setSecure(final boolean secure) {
method isSecure (line 416) | public boolean isSecure() {
method setIdentityProfile (line 425) | public void setIdentityProfile(@NonNull final String profileId) {
method getIdentityProfile (line 434) | public String getIdentityProfile() {
method getBundle (line 446) | public Bundle getBundle() {
method getSupportedLanguage (line 455) | public SupportedLanguage getSupportedLanguage() {
method setSupportedLanguage (line 466) | public void setSupportedLanguage(@NonNull final SupportedLanguage sl) {
method setQueueType (line 475) | public void setQueueType(final int queueType) {
method getQueueType (line 484) | public int getQueueType() {
method setSpeechPriority (line 488) | public void setSpeechPriority(final int priority) {
method getSpeechPriority (line 492) | public int getSpeechPriority() {
method setPreventRecognition (line 497) | public void setPreventRecognition() {
method shouldPreventRecognition (line 501) | public boolean shouldPreventRecognition() {
FILE: app/src/main/java/ai/saiy/android/service/helper/SelfAwareCache.java
class SelfAwareCache (line 50) | public class SelfAwareCache extends SaiyProgressListener {
method SelfAwareCache (line 69) | public SelfAwareCache(@NonNull final Context mContext) {
method shouldCache (line 82) | @TargetApi(Build.VERSION_CODES.LOLLIPOP)
method doAudioCache (line 143) | @SuppressWarnings("deprecation")
method onAudioAvailable (line 180) | @Override
method onBeginSynthesis (line 187) | @Override
method onStart (line 195) | @Override
method onDone (line 202) | @Override
method onError (line 234) | @Override
method speechMaintenance (line 247) | private void speechMaintenance() {
method shutdownTTS (line 280) | private void shutdownTTS() {
FILE: app/src/main/java/ai/saiy/android/service/helper/SelfAwareConditions.java
class SelfAwareConditions (line 134) | public class SelfAwareConditions extends SelfAwareHelper implements ICon...
method SelfAwareConditions (line 207) | public SelfAwareConditions(@NonNull final Context mContext, @NonNull f...
method grantAcquire (line 234) | private boolean grantAcquire(final int callingUid) throws SecurityExce...
method checkSaiyPermission (line 293) | public boolean checkSaiyPermission(final int callingUid) {
method checkSaiyRemotePermission (line 305) | public boolean checkSaiyRemotePermission() {
method checkAudioPermission (line 317) | public boolean checkAudioPermission() {
method checkFilePermission (line 329) | public boolean checkFilePermission() {
method isUserInterrupted (line 347) | public boolean isUserInterrupted() {
method servingRemote (line 361) | public boolean servingRemote() {
method shouldAction (line 387) | @SuppressWarnings("ConstantConditions")
method isHotwordActive (line 439) | public boolean isHotwordActive(@Nullable final RecognitionSphinx recog...
method isListening (line 448) | public boolean isListening() {
method isSpeaking (line 459) | public Pair<Boolean, Integer> isSpeaking(final SaiyTextToSpeech tts) {
method proceedPriority (line 529) | public Pair<Pair<Boolean, Boolean>, Pair<Boolean, Boolean>> proceedPri...
method removeInterrupted (line 605) | public void removeInterrupted(@NonNull final SelfAwareParameters param...
method stopSpeech (line 618) | public void stopSpeech(@Nullable final SaiyTextToSpeech tts, @NonNull ...
method stopListening (line 694) | public void stopListening(final RecognitionNuance recogNuance, final R...
method getCallback (line 1000) | private Callback getCallback() {
method killCallbacks (line 1012) | public void killCallbacks() {
method validateRemoteParcel (line 1026) | private boolean validateRemoteParcel(final ISaiyListener rl, final Req...
method addCallback (line 1069) | private void addCallback(final ISaiyListener rl) throws RemoteException {
method manageCallback (line 1103) | public void manageCallback(int callbackType, final Bundle results) {
method checkNotificationInstruction (line 1280) | public int checkNotificationInstruction(@Nullable final Intent startCo...
method isCancelled (line 1323) | public boolean isCancelled() {
method resetCancelled (line 1330) | private void resetCancelled() {
method setCancelled (line 1341) | public void setCancelled() {
method getDefaultRecognition (line 1350) | public SaiyDefaults.VR getDefaultRecognition() {
method getDefaultLanguageModel (line 1386) | private SaiyDefaults.LanguageModel getDefaultLanguageModel() {
method getDefaultLanguageModel (line 1400) | public SaiyDefaults.LanguageModel getDefaultLanguageModel(final boolea...
method getDefaultTTS (line 1413) | public SaiyDefaults.TTS getDefaultTTS() {
method isNetworkAvailable (line 1426) | public boolean isNetworkAvailable() {
method shouldWarmUp (line 1445) | public boolean shouldWarmUp(final SaiyTextToSpeech tts, final Intent i...
method setVoice (line 1494) | public void setVoice(@NonNull final SaiyTextToSpeech tts, @NonNull fin...
method getTTSLocale (line 1522) | public Locale getTTSLocale(final boolean servingRem
Condensed preview — 501 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,331K chars).
[
{
"path": ".gitignore",
"chars": 117,
"preview": "*.iml\n.gradle\n/local.properties\n.idea/**\n!.idea/codeStyleSettings.xml\n.DS_Store\nbuild\n/captures\ngoogle-services.json\n"
},
{
"path": "LICENSE",
"chars": 34520,
"preview": " GNU AFFERO GENERAL PUBLIC LICENSE\n Version 3, 19 November 2007\n\n Copyright (C)"
},
{
"path": "README.md",
"chars": 13455,
"preview": "<a href=\"https://play.google.com/store/apps/details?id=ai.saiy.android\" target=\"_blank\">\n <img alt=\"Get it on Google Pl"
},
{
"path": "app/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "app/assets.xml",
"chars": 978,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project name=\"assets\">\n <property name=\"assets.list.name\" value=\"assets.lst\"/>\n"
},
{
"path": "app/build.gradle",
"chars": 6558,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/proguard-rules.pro",
"chars": 6361,
"preview": "# Useful - https://github.com/krschultz/android-proguard-snippets/tree/master/libraries\n\n# Suppress warnings from gRPC d"
},
{
"path": "app/src/androidTest/java/ai/saiy/android/ApplicationTest.java",
"chars": 1078,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/AndroidManifest.xml",
"chars": 14348,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n ~ Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n ~\n ~ This program "
},
{
"path": "app/src/main/assets/sync/assets.lst",
"chars": 180,
"preview": "basic.dic\nen-us-ptm/README\nen-us-ptm/feat.params\nen-us-ptm/mdef\nen-us-ptm/means\nen-us-ptm/noisedict\nen-us-ptm/sendump\nen"
},
{
"path": "app/src/main/assets/sync/basic.dic",
"chars": 841,
"preview": "okaygoogle OW K EY G UW G AH L\nokaygoogle(2) OW K EY G UW G OW L\nokaygoogle(3) OW K EY G UH G AH L\nokaygoogle(4) OW K EY"
},
{
"path": "app/src/main/assets/sync/basic.dic.md5",
"chars": 33,
"preview": "56c42b4b20fe1edc953b9f3987e9af9f\n"
},
{
"path": "app/src/main/assets/sync/en-us-ptm/README",
"chars": 1617,
"preview": "/* ====================================================================\n * Copyright (c) 2015 Alpha Cephei Inc. All righ"
},
{
"path": "app/src/main/assets/sync/en-us-ptm/README.md5",
"chars": 33,
"preview": "45c80a79247b52dc6b48f2f07744d91d\n"
},
{
"path": "app/src/main/assets/sync/en-us-ptm/feat.params",
"chars": 167,
"preview": "-lowerf 130\n-upperf 6800\n-nfilt 25\n-transform dct\n-lifter 22\n-feat 1s_c_d_dd\n-svspec 0-12/13-25/26-38\n-agc none\n-cmn cur"
},
{
"path": "app/src/main/assets/sync/en-us-ptm/feat.params.md5",
"chars": 33,
"preview": "ec1566c9d8cf37c2a01571bcaff0caaa\n"
},
{
"path": "app/src/main/assets/sync/en-us-ptm/mdef.md5",
"chars": 33,
"preview": "ba13d30c2fee63e039e119ab449bd618\n"
},
{
"path": "app/src/main/assets/sync/en-us-ptm/means.md5",
"chars": 33,
"preview": "d0ee21e7d0e03575f27497b2833c6f02\n"
},
{
"path": "app/src/main/assets/sync/en-us-ptm/noisedict",
"chars": 56,
"preview": "<s> SIL\n</s> SIL\n<sil> SIL\n[NOISE] +NSN+\n[SPEECH] +SPN+\n"
},
{
"path": "app/src/main/assets/sync/en-us-ptm/noisedict.md5",
"chars": 33,
"preview": "05034ffef21f4810d10d3c76a6f5e921\n"
},
{
"path": "app/src/main/assets/sync/en-us-ptm/sendump.md5",
"chars": 33,
"preview": "75328625279cdbb72f800b315365ff45\n"
},
{
"path": "app/src/main/assets/sync/en-us-ptm/transition_matrices.md5",
"chars": 33,
"preview": "7a63d8971f81eef2154ea38b8bdfe520\n"
},
{
"path": "app/src/main/assets/sync/en-us-ptm/variances.md5",
"chars": 33,
"preview": "d4d6ba74707952aa7e00c3bc1e7d0fb4\n"
},
{
"path": "app/src/main/assets/sync/hotwords.txt",
"chars": 58,
"preview": "wakeupsay /1e-20/\nokaygoogle /1e-30/\nstoplistening /1e-20/"
},
{
"path": "app/src/main/assets/sync/hotwords.txt.md5",
"chars": 33,
"preview": "60940e64061013741db9a82f0ffc9793\n"
},
{
"path": "app/src/main/java/ai/saiy/android/accessibility/SaiyAccessibilityService.java",
"chars": 46904,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/algorithms/Algorithm.java",
"chars": 5453,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/algorithms/distance/EditDistance.java",
"chars": 2629,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/algorithms/distance/jarowinkler/JaroWinklerDistance.java",
"chars": 14880,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/algorithms/distance/jarowinkler/JaroWinklerHelper.java",
"chars": 9933,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/algorithms/distance/levenshtein/LevenshteinDistance.java",
"chars": 16744,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/algorithms/distance/levenshtein/LevenshteinHelper.java",
"chars": 10231,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/algorithms/doublemetaphone/DoubleMetaphoneHelper.java",
"chars": 8882,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/algorithms/fuzzy/FuzzyHelper.java",
"chars": 11213,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/algorithms/metaphone/MetaphoneHelper.java",
"chars": 8725,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/algorithms/mongeelkan/MongeElkanHelper.java",
"chars": 10573,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/algorithms/needlemanwunch/NeedlemanWunschHelper.java",
"chars": 10451,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/algorithms/needlemanwunch/simmetrics/NeedlemanWunch.java",
"chars": 5708,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/algorithms/regex/ContainsHelper.java",
"chars": 4308,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/algorithms/regex/CustomHelper.java",
"chars": 4769,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/algorithms/regex/EndsWithHelper.java",
"chars": 4339,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/algorithms/regex/StartsWithHelper.java",
"chars": 4356,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/algorithms/soundex/SoundexHelper.java",
"chars": 12389,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/api/SaiyDefaults.java",
"chars": 7515,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/api/helper/BlackList.java",
"chars": 5972,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/api/helper/BlackListHelper.java",
"chars": 5085,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/api/helper/Callback.java",
"chars": 2393,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/api/helper/CallbackType.java",
"chars": 1650,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/api/helper/Validation.java",
"chars": 30047,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/applications/Install.java",
"chars": 5527,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/applications/InstallAmazon.java",
"chars": 2134,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/applications/InstallPlayStore.java",
"chars": 2918,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/applications/Installed.java",
"chars": 15213,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/applications/UtilsApplication.java",
"chars": 11849,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/audio/AudioCompression.java",
"chars": 13394,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/audio/AudioParameters.java",
"chars": 3365,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/audio/IMic.java",
"chars": 1109,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/audio/RecognitionMic.java",
"chars": 13644,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/audio/SaiyAudio.java",
"chars": 5165,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/audio/SaiyAudioTrack.java",
"chars": 10959,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/audio/SaiyRecorder.java",
"chars": 10277,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/audio/SaiySoundPool.java",
"chars": 4399,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/audio/pause/PauseDetector.java",
"chars": 7414,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/audio/pause/PauseListener.java",
"chars": 893,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/broadcast/BRBoot.java",
"chars": 3474,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/broadcast/BRRemote.java",
"chars": 12172,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cache/speech/IAudioCompression.java",
"chars": 986,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cache/speech/SpeechCachePrepare.java",
"chars": 3586,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cache/speech/SpeechCacheResult.java",
"chars": 1457,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/AnalysisResult.java",
"chars": 1856,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/AnalysisResultHelper.java",
"chars": 57496,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/BeyondVerbal.java",
"chars": 5499,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Analysis.java",
"chars": 2324,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/AnalysisSummary.java",
"chars": 1228,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Arousal.java",
"chars": 2087,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/AudioQuality.java",
"chars": 1953,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Composite.java",
"chars": 1443,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Emotions.java",
"chars": 1819,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Gender.java",
"chars": 1993,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Group11.java",
"chars": 1439,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Group21.java",
"chars": 1439,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Group7.java",
"chars": 1437,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Mood.java",
"chars": 1797,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Primary.java",
"chars": 1362,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Result.java",
"chars": 1989,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Secondary.java",
"chars": 1366,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Segment.java",
"chars": 1610,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Summary.java",
"chars": 1546,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Temper.java",
"chars": 2084,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/analysis/Valence.java",
"chars": 2248,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/audio/AudioConfig.java",
"chars": 3894,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/audio/AudioType.java",
"chars": 1300,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/containers/BVCredentials.java",
"chars": 5273,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/containers/StartRequestBody.java",
"chars": 3212,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/containers/StartResponse.java",
"chars": 1808,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/http/BVAuthRequest.java",
"chars": 8014,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/http/BVEmotionAnalysis.java",
"chars": 8289,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/http/BVSendFile.java",
"chars": 5638,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/http/BVStartRequest.java",
"chars": 7301,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/http/BVStreamAudio.java",
"chars": 14527,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/language/SupportedLanguageBV.java",
"chars": 2825,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/emotion/provider/beyondverbal/user/MetaData.java",
"chars": 4519,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/Speaker.java",
"chars": 3213,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/SpeakerEnrollment.java",
"chars": 8374,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/SpeakerIdentification.java",
"chars": 8027,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/containers/EnrollmentID.java",
"chars": 1153,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/containers/OperationStatus.java",
"chars": 2533,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/containers/ProcessingResult.java",
"chars": 3137,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/containers/ProfileItem.java",
"chars": 3128,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/containers/ProfileList.java",
"chars": 1127,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/http/CreateIDEnrollment.java",
"chars": 13319,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/http/CreateIDProfile.java",
"chars": 7764,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/http/DeleteIDProfile.java",
"chars": 5324,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/http/FetchIDOperation.java",
"chars": 8398,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/http/FetchIDProfile.java",
"chars": 7669,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/http/ListIDProfiles.java",
"chars": 7284,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/identity/provider/microsoft/http/ValidateID.java",
"chars": 14397,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/WolframAlphaCognitive.java",
"chars": 10091,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Alternative.java",
"chars": 1756,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Assumption.java",
"chars": 2820,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Assumptions.java",
"chars": 1651,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Definition.java",
"chars": 1530,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Definitions.java",
"chars": 1651,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Info.java",
"chars": 1625,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Infos.java",
"chars": 1549,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Link.java",
"chars": 1420,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Pod.java",
"chars": 4149,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/QueryResult.java",
"chars": 6325,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Reinterpret.java",
"chars": 2609,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Source.java",
"chars": 1430,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Sources.java",
"chars": 1587,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/SpellCheck.java",
"chars": 1713,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/State.java",
"chars": 1441,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/StateList.java",
"chars": 2120,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/States.java",
"chars": 1966,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/SubPod.java",
"chars": 1906,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Unit.java",
"chars": 1484,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Units.java",
"chars": 1549,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/ValidateQueryResult.java",
"chars": 1600,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Value.java",
"chars": 2111,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/parse/Warnings.java",
"chars": 2050,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/resolve/ResolveWolframAlpha.java",
"chars": 13546,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/resolve/WolframAlphaRequest.java",
"chars": 2140,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/knowledge/provider/wolframalpha/resolve/WolframAlphaResponse.java",
"chars": 2654,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/motion/provider/google/Motion.java",
"chars": 1387,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/motion/provider/google/MotionHelper.java",
"chars": 5624,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/motion/provider/google/MotionIntentService.java",
"chars": 7897,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/cognitive/motion/provider/google/MotionRecognition.java",
"chars": 6475,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/battery/Battery.java",
"chars": 4401,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/battery/BatteryInformation.java",
"chars": 15115,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/battery/Battery_en.java",
"chars": 8064,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/battery/CommandBattery.java",
"chars": 2964,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/battery/CommandBatteryLocal.java",
"chars": 2108,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/battery/CommandBatteryValues.java",
"chars": 5310,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/cancel/Cancel.java",
"chars": 6029,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/cancel/CancelPartial.java",
"chars": 3630,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/cancel/Cancel_en.java",
"chars": 11858,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/clipboard/ClipboardHelper.java",
"chars": 8089,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/custom/CommandCustom.java",
"chars": 11816,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/emotion/CommandEmotion.java",
"chars": 3328,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/emotion/Emotion.java",
"chars": 3304,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/emotion/Emotion_en.java",
"chars": 4291,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/helper/CC.java",
"chars": 2888,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/helper/CommandRequest.java",
"chars": 6044,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/hotword/Hotword.java",
"chars": 3304,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/hotword/Hotword_en.java",
"chars": 5450,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/pardon/Pardon.java",
"chars": 3287,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/pardon/Pardon_en.java",
"chars": 4490,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/songrecognition/CommandSongRecognition.java",
"chars": 11263,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/songrecognition/SongRecognition.java",
"chars": 3485,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/songrecognition/SongRecognition_en.java",
"chars": 4143,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/spell/CommandSpell.java",
"chars": 5826,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/spell/CommandSpellLocal.java",
"chars": 5495,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/spell/CommandSpellValues.java",
"chars": 1651,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/spell/Spell.java",
"chars": 4313,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/spell/Spell_en.java",
"chars": 6598,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/tasker/CommandTasker.java",
"chars": 13771,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/tasker/CommandTaskerLocal.java",
"chars": 2351,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/tasker/CommandTaskerValues.java",
"chars": 1731,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/tasker/Tasker.java",
"chars": 4337,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/tasker/Tasker_en.java",
"chars": 7684,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/translate/CommandTranslate.java",
"chars": 4156,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/translate/CommandTranslateLocal.java",
"chars": 10420,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/translate/CommandTranslateValues.java",
"chars": 2661,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/translate/Translate.java",
"chars": 5489,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/translate/TranslatePartial.java",
"chars": 3687,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/translate/Translate_en.java",
"chars": 10464,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/translate/provider/TranslationProvider.java",
"chars": 2544,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/translate/provider/bing/BingCredentials.java",
"chars": 4032,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/translate/provider/bing/BingOAuth.java",
"chars": 8946,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/translate/provider/bing/BingTranslate.java",
"chars": 40244,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/translate/provider/bing/BingTranslateAPI.java",
"chars": 7877,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/translate/provider/bing/TranslationLanguageBing.java",
"chars": 3801,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/translate/provider/google/GoogleTranslate.java",
"chars": 35068,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/translate/provider/google/GoogleTranslateAPI.java",
"chars": 3965,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/translate/provider/google/TranslationLanguageGoogle.java",
"chars": 4761,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/unknown/Unknown.java",
"chars": 1114,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/username/CommandUserName.java",
"chars": 4527,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/username/CommandUserNameLocal.java",
"chars": 2224,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
},
{
"path": "app/src/main/java/ai/saiy/android/command/username/CommandUserNameValues.java",
"chars": 1732,
"preview": "/*\n * Copyright (c) 2016. Saiy Ltd. All Rights Reserved.\n *\n * This program is free software: you can redistribute it an"
}
]
// ... and 301 more files (download for full content)
About this extraction
This page contains the full source code of the brandall76/Saiy-PS GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 501 files (3.0 MB), approximately 826.8k tokens, and a symbol index with 3123 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.