Beispiel #1
0
 public static DrawerListenerImpl GetOrAdd(DrawerLayout drawer)
 {
     return(ToolkitServiceProvider.AttachedValueProvider.GetOrAdd(drawer, "!@!@dralist", (layout, o) =>
     {
         var listenerImpl = new DrawerListenerImpl();
         layout.AddDrawerListener(listenerImpl);
         return listenerImpl;
     }, null));
 }
Beispiel #2
0
            public bool TryHandle(object sender, object message)
            {
                DrawerLayout drawer = FindDrawer(sender as View);

                if (drawer == null)
                {
                    return(true);
                }
                DrawerListenerImpl.GetOrAdd(drawer);
                return(false);
            }
Beispiel #3
0
        private static bool ViewDrawerIsOpenedGetDefaultValue(View view, IBindingMemberInfo bindingMemberInfo)
        {
            DrawerLayout drawer = FindDrawer(view);

            if (drawer == null)
            {
                BindingServiceProvider.VisualTreeManager.GetRootMember(view.GetType())?.TryObserve(view, DrawerInitializer.Instance);
                return(false);
            }
            DrawerListenerImpl.GetOrAdd(drawer);
            return(drawer.IsDrawerOpen(view));
        }
Beispiel #4
0
        public static void RegisterDrawerLayoutMembers()
        {
            MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.View.DrawerIsOpened,
                                                                             ViewDrawerIsOpenedChanged, getDefaultValue: ViewDrawerIsOpenedGetDefaultValue));
            INotifiableAttachedBindingMemberInfo <DrawerLayout, bool> actionBarDrawerToggleEnabledMember =
                AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.DrawerLayout.ActionBarDrawerToggleEnabled,
                                                         (layout, args) =>
            {
                if (!args.NewValue)
                {
                    return;
                }
                Activity activity = layout.Context.GetActivity();
                if (activity != null)
                {
                    DrawerListenerImpl
                    .GetOrAdd(layout)
                    .SetListener(activity, new ActionBarDrawerToggle(activity, layout, Resource.String.Empty, Resource.String.Empty));
                }
            });

            MemberProvider.Register(actionBarDrawerToggleEnabledMember);
            MemberProvider.Register(typeof(DrawerLayout), "ActionBarDrawerEnabled", actionBarDrawerToggleEnabledMember, true);
            MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.DrawerLayout.DrawerListener,
                                                                             (layout, args) =>
            {
                var listener = args.NewValue as DrawerLayout.IDrawerListener;
                if (listener == null)
                {
                    var func = args.NewValue as Func <DrawerLayout, DrawerLayout.IDrawerListener>;
                    if (func != null)
                    {
                        listener = func(layout);
                    }
                }
                if (listener == null)
                {
                    Tracer.Warn("The DrawerListener '{0}' is not supported", args.NewValue);
                }
                DrawerListenerImpl.GetOrAdd(layout).SetListener(layout.Context, listener);
            }));
        }
 public static DrawerListenerImpl GetOrAdd(DrawerLayout drawer)
 {
     return ServiceProvider.AttachedValueProvider.GetOrAdd(drawer, "!@!@dralist", (layout, o) =>
     {
         var listenerImpl = new DrawerListenerImpl();
         layout.SetDrawerListener(listenerImpl);
         return listenerImpl;
     }, null);
 }
Beispiel #6
0
        protected override bool LoadInternal()
        {
            PlatformExtensions.LayoutInflaterFactory = (context, dataContext, factory, inflater) =>
            {
                if (factory == null && !ServiceProvider.TryGet(out factory))
                {
                    factory = new ViewFactory();
                }
                if (inflater == null)
                {
                    return(new BindableLayoutInflaterCompat(factory, context));
                }
                return(new BindableLayoutInflaterCompat(factory, inflater, context));
            };

            IBindingMemberProvider memberProvider = BindingServiceProvider.MemberProvider;

            //View
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.View.DrawerIsOpened,
                                                                             ViewDrawerIsOpenedChanged, getDefaultValue: ViewDrawerIsOpenedGetDefaultValue));

            //Toolbar
            memberProvider.Register(
                AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.Toolbar.MenuTemplate,
                                                         ToolbarMenuTemplateChanged));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.Toolbar.IsActionBar,
                                                                             ToolbarIsActionBarChanged));

            //DrawerLayout
            INotifiableAttachedBindingMemberInfo <DrawerLayout, bool> actionBarDrawerToggleEnabledMember =
                AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.DrawerLayout.ActionBarDrawerToggleEnabled,
                                                         (layout, args) =>
            {
                if (!args.NewValue)
                {
                    return;
                }
                Activity activity = layout.Context.GetActivity();
                if (activity != null)
                {
                    DrawerListenerImpl
                    .GetOrAdd(layout)
                    .SetListener(activity, new ActionBarDrawerToggle(activity, layout, Resource.String.Empty, Resource.String.Empty));
                }
            });

            memberProvider.Register(actionBarDrawerToggleEnabledMember);
            memberProvider.Register(typeof(DrawerLayout), "ActionBarDrawerEnabled", actionBarDrawerToggleEnabledMember, true);
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.DrawerLayout.DrawerListener,
                                                                             (layout, args) =>
            {
                var listener = args.NewValue as DrawerLayout.IDrawerListener;
                if (listener == null)
                {
                    var func = args.NewValue as Func <DrawerLayout, DrawerLayout.IDrawerListener>;
                    if (func != null)
                    {
                        listener = func(layout);
                    }
                }
                if (listener == null)
                {
                    Tracer.Warn("The DrawerListener '{0}' is not supported", args.NewValue);
                }
                DrawerListenerImpl.GetOrAdd(layout).SetListener(layout.Context, listener);
            }));


            //ViewPager
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.ViewPager.SelectedItem, ViewPagerSelectedItemChanged));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.ViewPager.GetPageTitleDelegate));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.ViewPager.RestoreSelectedIndex));
            var itemMember = AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.ViewPager.CurrentItem,
                                                                      ViewPagerCurrentItemChanged, AdapterViewCurrentItemAttached, (pager, info) => pager.CurrentItem);

            memberProvider.Register(itemMember);
            memberProvider.Register(typeof(ViewPager), "SelectedIndex", itemMember, true);
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.ViewGroup.ItemsSource.Override <ViewPager>(),
                                                                             (pager, args) =>
            {
                var pagerAdapter = pager.Adapter as ItemsSourcePagerAdapter;
                if (pagerAdapter == null)
                {
                    pagerAdapter  = new ItemsSourcePagerAdapter(pager);
                    pager.Adapter = pagerAdapter;
                }
                pagerAdapter.ItemsSource = args.NewValue;
            }));
            return(true);
        }