private void onShowViewModel(GlassShowViewModelMessage request) { var shouldPublish = ensureLiveCard(request); if (GlassViewModelAnnotator.Annotators.ContainsKey(request.ViewModelType) && shouldPublish) { var rendererType = GlassViewModelAnnotator.Annotators[request.ViewModelType]; if (rendererType.IsSubclassOf(typeof(GlassDirectRenderingCallbackTarget))) { var renderer = Activator.CreateInstance(rendererType, new[] {request.SenderAsService}) as GlassDirectRenderingCallbackTarget; renderer.attachedService(request.SenderAsService); request.SenderAsService.attachedRenderer(renderer); try { _liveCard .SetDirectRenderingEnabled(true) .SurfaceHolder .AddCallback(renderer.RenderingCallbackWrapper); _liveCard.Attach(request.SenderAsService); var menuIntent = new Intent(request.SenderAsService, typeof(CompassMenuActivity)); menuIntent.AddFlags(ActivityFlags.NewTask | ActivityFlags.ClearTask); _liveCard.SetAction(PendingIntent.GetActivity(request.SenderAsService, 0, menuIntent, 0)); } catch (Exception ex) { } } else { //var rv = new RemoteViews(request.SenderAsService.PackageName, Resource.Layout.ViewMapNotFound); //rv.SetTextViewText(Resource.Id.LivecardContent, "Unsupported view type: " + request.ViewModelType.Name); //_liveCard.SetViews(rv); } //var rv = new RemoteViews(request.SenderAsService.PackageName, Resource.Layout.ViewMapNotFound); //rv.SetTextViewText(Resource.Id.LivecardContent, "Up and running " + request.ViewModelType.Name); //_liveCard.SetViews(rv); } else if (shouldPublish) { var rv = new RemoteViews(request.SenderAsService.PackageName, Resource.Layout.ViewMapNotFound); rv.SetTextViewText(Resource.Id.LivecardContent, "Could not locate annotation for view model: " + request.ViewModelType.Name); _liveCard.SetViews(rv); var menuIntent = new Intent(request.SenderAsService, typeof(CompassMenuActivity)); menuIntent.AddFlags(ActivityFlags.NewTask | ActivityFlags.ClearTask); _liveCard.SetAction(PendingIntent.GetActivity(request.SenderAsService, 0, menuIntent, 0)); _liveCard.Attach(request.SenderAsService); } if (shouldPublish) _liveCard.Publish(LiveCard.PublishMode.Reveal); _liveCard.Navigate(); }
private bool ensureLiveCard(GlassShowViewModelMessage request) { if (_liveCard == null) { _liveCard = new LiveCard(request.SenderAsService, request.SenderAsService.GetType().Name); _liveCard.Attach(request.SenderAsService); return true; } return false; }