示例#1
0
        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();
        }
示例#2
0
 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;
 }