// Called when radio button is selected
        public async void OnSelected(object sender, SelectedEventArgs args)
        {
            Console.WriteLine($"Radio.OnSoundSelected!! value:{args.Value}");
            Radio radio = sender as Radio;

            if (Application.Current.MainPage.Navigation.NavigationStack.Count > 0)
            {
                int index = Application.Current.MainPage.Navigation.NavigationStack.Count - 1;

                LanguageSelectionPage currPage = Application.Current.MainPage.Navigation.NavigationStack[index] as LanguageSelectionPage;
                //Error CS0023  Operator '!' cannot be applied to operand of type 'string'
                if (args.Value != null)
                {
                    Console.WriteLine("  < UNSELECTED >  XXXXXX sender " + sender + " -  " + radio.Value);
                    currPage.ignoreRadioSelection = false;
                    return;
                }
                else
                {
                    if (currPage.ignoreRadioSelection)
                    {
                        Console.WriteLine("\n\nRadio_Selected  >>>>>>>  SKIP!\n\n");
                        currPage.ignoreRadioSelection = false;
                        return;
                    }

                    Console.WriteLine("  < SELECTED >  XXXXXX sender " + sender + " -  " + radio.Value);
                    SttLanguage item = radio.BindingContext as SttLanguage;
                    ((MainPageModel)currPage.BindingContext).CurrentLanguage = item.Lang;

                    ((MainPageModel)currPage.BindingContext).SelectedItemIndex = item;
                    await currPage.Navigation.PopToRootAsync();
                }
            }
        }
        void GetSttService()
        {
            if (_SttService == null)
            {
                Console.WriteLine(" GetSttService()  ------------1-  CurrentLanguage : " + CurrentLanguage);
                _SttService = DependencyService.Get <ISpeechToTextService>(DependencyFetchTarget.GlobalInstance);
                Languages   = new ObservableCollection <SttLanguage>();

                // TODO: how to check if the current language is supported by STT engine.
                //CultureInfo _cultureInfo = new CultureInfo(CurrentLanguage);
                //RegionInfo _regionInfo = new RegionInfo(CurrentLanguage.Replace("_", "-"));
                //Languages.Add(new SttLanguage(CurrentLanguage, "Automatic", Regex.Replace(_cultureInfo.DisplayName, @"\t|\n|\r", "")));

                _AppDataService = DependencyService.Get <IAppDataService>();
                var dafaultLang = "en_US";
                // Restore the selected language for STT or use the STT service's current language
                if (_AppDataService.Contain(LANGUAGE_FOR_STT))
                {
                    dafaultLang = _AppDataService.GetValue(LANGUAGE_FOR_STT);
                    Console.WriteLine(" IAppDataService.GetValue =>  language for stt  : " + dafaultLang);
                }
                else
                {
                    dafaultLang = _SttService.CurrentSttLanguage;
                    Console.WriteLine(" IAppDataService no value =>  CurrentSttLanguage  : " + dafaultLang);
                }
                // For updating STT service's CurrentSttLanguage
                CurrentLanguage = dafaultLang;

                foreach (var lang in _SttService.GetInstalledLanguages())
                {
                    CultureInfo cultureInfo = new CultureInfo(lang);
                    RegionInfo  regionInfo  = new RegionInfo(lang.Replace("_", "-"));
                    //Console.WriteLine(" [GetSttService]  lang : " + lang + ", " + cultureInfo.DisplayName + ", " + regionInfo.EnglishName);
                    var stt = new SttLanguage(lang, cultureInfo.DisplayName, regionInfo.EnglishName);
                    Languages.Add(stt);
                    //Languages.Add(new SttLanguage(lang, cultureInfo.DisplayName, regionInfo.EnglishName));
                    if (lang == dafaultLang)
                    {
                        stt.IsOn          = true;
                        SelectedItemIndex = stt;
                    }
                }
#if ENABLE_DEBUG_PRINT
                foreach (var lang in Languages)
                {
                    Console.WriteLine(" Languages  -- " + lang.Country + ", " + lang.Name + ", " + lang.IsOn); /*+ " vs. " + lang.isNotOn*/
                }
#endif
                Console.WriteLine(" GetSttService()  ------------2-   " + _SttService.GetHashCode());
            }
        }
        /// <summary>
        /// Invoked when an item is tapped
        /// </summary>
        /// <param name="sender">object</param>
        /// <param name="args">ItemTappedEventArgs</param>
        void OnItemTapped(object sender, ItemTappedEventArgs args)
        {
            ignoreRadioSelection = false;

            ViewModel.CurrentLanguage = ((SttLanguage)args.Item).Lang;
            SttLanguage item = args.Item as SttLanguage;

            for (int i = 0; i < ((MainPageModel)BindingContext).Languages.Count; i++)
            {
                if (((MainPageModel)BindingContext).Languages[i].Combo == item.Combo)
                {
                    Console.WriteLine("OnItemTapped : *" + i + " )  FOUND!!  IsOn will be true! ");
                    // The following code makes the Radio button of SttLanguageViewCell is selected.
                    ((MainPageModel)BindingContext).Languages[i].IsOn = true;
                }
            }
        }