►
From YouTube: .NET Design Reviews: Xamarin Essentials
Description
We'll take a look at Xamarin Essentials today
A
C
D
Got
a
few
other
people
on
my
team,
the
components
xamarin
team,
matthew,
Leibowitz
who's
done
some
work
on
essentials,
David
Humphries,
who
works
on
some
other
things
and
Mel
who
works
on
Android
support
and
plays
services
in
Israel
who
works
on
mostly
iOS
bindings,
but
a
good
mix,
everyone's
kind
of
familiar
with
essentials,
and
then
a
little
bit
of
work
here.
There
all.
D
C
The
kind
of
perks
and
advantages
that
we
have
for
mobile
native
development
is
that
we
offer
100%
API
surface
for
the
underlying
iOS
and
Android
API
s
in
c-sharp.
So
if
you
want
to
access
location
on
iOS,
you
have
access
for
location
api's.
We
create
these
bindings
in
c-sharp
and,
as
you
char
features
like
async
await
lambdas
events
and
delegates.
We
do
the
same
thing
for
android
and,
of
course,
if
you
are
writing
uwp
or
other
WPF
applications,
there's
those
dotnet
it
kind
of
equivalent
SDK
level
API.
C
C
C
C
All
of
the
platform
API
is
into
a
single
cross-platform
Donette
API
for
developers,
so
we
attempted
to
look
at
what
are
the
most
important
hardware
features
that
developers
are
trying
to
get
access
to
from
their
shared
code
and
give
them
a
consistent
library
and
API
that
they
can
use
of
a
single,
immediate
library
that
they
can
pull
in
so
their
iOS,
Android
or
Windows
projects
and
the.net
standard
is,
is
basically
the
API
surface
and
that's
what
we're
looking
at
here.
So
we
use
kind
of
a
bait-and-switch
technique.
C
So
when
a
developer
calls
a
method,
it's
still
calling
the
underlying
iOS
or
Android
or
Windows
implementation,
but
they
don't
don't
worry
about
it's
one
API.
So
this
means
for
an
API
like
compass,
which
could
be
hundreds
of
lines
of
codes.
It's
two
lines
of
code
right,
just
start,
stop
and
add
an
event
handler.
So
we
aim
to
do
that
and
that's
what
xamarin
essentially
is
it's
a
30-plus
platform
abstracted
api's
so
when
you
say
Vegas,
which
basically.
E
C
Correct
so
we
implement
the
same
API
across
iOS,
Android
and
Windows.
So
when
a
developer
adds
the
library
they
must
add
it
into
their
target
platform
and
then
a
runtime
that
will
choose
the
IAO
favor,
the
iOS
DLL
implementation
over
the
dotnet
standard
version.
That
just
throws
exceptional
musically,
and
this
was
very
popular
eyes
in
a
lot
of
different
libraries.
To
do
things
like
this,
like
our
plugins
and
things
like
that,
so
we
wouldn't
van
der
dies
everything
into
one
library
and
it's
architected-
to
be
very
user
friendly.
C
E
C
That's
a
good
question.
So
when
we
do
an
API
spec,
we
take
that
into
consideration
for
each
and
every
single
API.
So
a
good
example
of
how
an
API
would
differ.
Let's
say
the
compass
API
is
a
good
one.
On
Windows
and
on
iOS
there
is
a
literal
compass
API
it's
get
access
to
now.
C
They
offer
different
information
between
that,
but
we
picked
like
heading
my
magnetic
north,
for
instance,
as
this
is
something
that
all
of
them
represent
and
what
developers
are
most
once
now
in
Android
there
is
no
compass
ap
on
you
actually
have
to
spin
on
multiple
sensors.
Do
some
math
combine
them
together,
so
we
offer
we
just
hide
that
from
the
user,
so
the
end
results
is
expected.
C
So
that's
there
now
in
our
documentation,
though,
we
do
sometimes
offer
some
functionality
that's
available
in
a
single
platform
that
maybe
falls
back
to
something
graceful
and
the
other
ones.
So
a
good
example
of
that
in
our
documentation
would
be
if
you
were
to
open
the
Maps
application.
So
this
is
our
Maps
API,
so
the
inside
of
the
documentation.
C
What
we
do
is
we
reference
if
there's
any
setup,
any
permissions
you
need
to
set
and
then
specifically,
we
have
a
section
called
platform,
differences
and
platform
implementation,
specifics,
so
platform
differences
highlights
anything
that
when
you're
calling
a
shared
API
is
a
little
bit
different.
So,
for
instance,
on
this
opening
Maps,
you
can
request
open
bicycle
driving,
walking
a
default
or
transit
but,
for
instance,
Android
doesn't
support
transit.
It
does
support
bicycle,
for
instance,
so
developers
can
take
that
into
consideration.
C
It
would
fall
back
to
the
default
at
that
point,
so
there's
a
default
that
would
be
selected,
so
it
would
most
likely
or
what
it
would
do,
sorry
and
almost
like
what
it
would
do
is
it
would
open
the
location
and
then
have
the
user
select
the
transportation
mechanism
instead
of
selecting
one
for
them.
The
default
is,
don't
select
any
and
just
start
navigation
on
it
and
let
the
user
decide-
and
this
is
the
they're
very
rare
cases.
So
it's
not
the
it's
the
exception
to
the
rule,
not
the
rule.
C
And
you
know
we
try
to
do
things
that
that
make
the
most
sense
so
for
launching
the
map,
application
on
iOS
and
Android.
There's
a
specific
API
to
do
that
on
Android.
There's,
not
you
have
to
use
the
intent
system
that
you
pass
it
a
Geo
URL.
So
in
this
instance
we
actually
have
no
control
over
what
will
happen
like
what
map
application
will
launch,
but
we
document
that
so
we
can
only
do
what
the
API
gives
us.
So
we
can't
force
ways
or
we
could.
C
C
D
Also,
some
cases
where
we
have
platforms,
specific
api's
in
the
platform,
specific
assembly
and
there's
a
few
instances
like
one
somebody
had
requested
with
secure
storage
on
iOS.
You
can
actually
set
the
keychain
data
to
be
available
like
after
the
first
time
that
you
unlock
the
device
or
it's
available
as
soon
as
the
device
is
booted.
So
we
set
a
sensible
default
in
that
case,
but
the
you
know
the
user
really
wants
to
get
down
to
the
platform,
specific
implementation
level
and
kind
of
override
that
default.
C
Yeah
and
in
those
instances,
though,
those
would
be
compiled
into
the
iOS
or
Android
specific
API
level
and
would
not
be
in
the
dotnet
standard
versions,
since
it's
specific
to
that
platform,
because
this
library
could
also
be
used
not
from
Adana
s,
Android
library
at
all,
it
could
just
be
used
from
an
iOS
project,
for
instance,
and
then
that
would
be
a
case
where
maybe
they
want
a
little
bit
more
functionality.
I
guess
those
are
usually
edge
cases
and
we
look
at
those
on
an
API
basis
and.
A
A
D
They
can
kind
of
do
a
mix
of
it
too.
Right
like
they
might
use
the
from
their
nest
standard
assembly.
They
might
use
the
secure
storage
that
the
same
API
you
know
in
that
shared
library,
but
that
can
also
in
their
app
project
their
iOS
app
project,
use
that
specific
platform
API
that
we
make
available
to
change
like
when
that
keychain
data
is
unlocked.
So
you
can
kind
of
have
a
mix
of
both
as
well.
A
C
Use
this,
for
instance,
you
know
doing
like
the
accelerometer
or
compass,
the
iOS
API
is
very
elegant.
To
be
honest
with
you,
the
Android
one
is
like
a
hot
mess,
just
as
you
can
look
at
the
code,
so
I
would
rather
use
our
API
and,
for
instance,
secure
storage.
Maybe
we
wrote
hundreds
of
lines
of
code
to
abstract
it
into
a
simple
one-liner.
So
for
me,
based
on
the
level
of
control
that
I
need
in
my
application,
I
always
give
this
good
for
a
long
time.
I've
always
said
8020.
C
A
So
the
typically
usage
to
video
all
time
things
like
apps
using
it
directly,
then
you
have
longer
center
projects
using
it
directly.
Do
you
have
many
usages
in
multi
targeted
projects
as
well
or
what's
the
other
one
called
the
the
shared
projects
which
will
the
old
multi-headed
approaches
is
also
something
that
you
typically
see
people
using
your
stuff
in.
C
Yeah
I
think
our
developers
are
defaults
or
Donette
standard.
Oh,
when
you
create
a
new
project,
so
I
think
that
is
our
good,
which
I
don't
be
usage
specifics
or
could
really
talk
to
you,
but
I
do
most
of
our
developers
that
I
talk
to
and
even
myself
we
defaulted
on
that
standard.
There
are
something
that
there
are
some
shared
projects
out
there
and
then
in
that
instance,
you
would
be
falling
back
to
the
platform
api's
that
are
in
there.
C
So
you
would
run
into
maybe
seeing
and
I
am
a
specific
API
in
there
and
you
have
to
conditionally
compile
that
what,
of
course
your
compiler
would
catch
up,
you
can
do
Android,
that's
what
we
minimize
the
specific
calls
as
far
as
multi
targeting
for
apps
would
be
low.
I
I've
always
recommended
multi
targeting
only
for
library
creators,
not
perhaps
developers
right
in
general,
at.
A
The
only
reason
I'm
asking
is
basically
so
there's
a
few
issues
that
we
recently
talked
about.
One
of
them
was
so
I,
don't
know
whether
you
saw
them,
but
we
just
added
reflection
emitted
on
that
standard.
So
we
added
the
capability
API
groove
that
so
you
can
actually
check
whether
reflection
amid
wool.
Basically,
it's
all
puffs
from
one
supported
and
we
added
another
capability
API.
That
indicates
how
good
it
is
supported.
So,
like
the
zevran
runtime,
people
are
working
on
the
and
I
an
aisle
interpreter.
A
So
if
you're,
using
reflection,
Amit,
for
example,
to
speed
things
up,
you
probably
don't
want
to
use
it.
If
you
know
that
the
aisle
is
actually
ending
up
being
interpreted,
in
which
case
whatever
you're
doing
is
probably
faster
than
going
to
ref
emit,
and
so
we
basically
to
capability
API
is
that
people
use,
but
the
key
scenario
there
is,
if
you
think,
I'm
a
library
stamp
on
you
having
ap.
A
Is
that
throw
makes
a
lot
more
sense
than
not
having
the
API,
because,
if
you're
not
having
the
API,
you
force
everybody
to
effectively
multi
target
right
and
having
the
API
and
have
that
just
not
work.
If
you
read
the
better
approach,
but
it
seems
like
you're
kind
of
going
down
the
same
path
because
you're
basically
exposing
concepts
that
may
not
work
everywhere,
but
if
they
work
in
enough
places
it's
still
worthwhile
having.
And
then
you
just
deal
with
the
fallout
if
the
API
is
not
available
to
you.
Yeah.
C
Yeah,
so
in
this
instance
in
this,
in
this
Don
is
standard.
If
we
look
at
this,
secure
storage
get
remove,
remove
all
set
those
are
implemented
in
every
single
platform
that
we
support
as
of
today.
Now,
if
you
don't
install
the,
if
you
don't
install
the
new
get
into
your
iOS
project
and
you've
only
put
in
your
done
a
standard
and
you
call
get
async
that
will
throw
an
exception.
C
It's
a
custom
accession
assumption
that
we
have,
which
is
that
they're
not
implemented
in
reference
assembly
exception,
which
is
a
very
long
name
but
describes
exactly
what
it
is,
which
is.
It's
not
implemented
in
a
reference
assembly,
and
that
throws
a
helpful
they're
telling
you
that
you
need
to
install
it
into
your
platform
project.
C
There
could
be,
there
is
no
graceful
way
of
detecting
is
secure
storage
implemented
on
the
platform
today.
So
as
if
someone
was
implement
this
in
or
install
it
into
a
Mac
project,
for
instance,
it
would
just
throw
a
reference
or
a
WPF
project,
for
instance,
because
it
is
not
a
Sanders
I
would
install
right,
but
it
would
just
throw
an
exception.
C
A
I
think
you
talked
about
this
I.
Don't
think
you
may
say
you
don't
have
like
anything
in
them.
An
essential
does
not
have
a
meaningful,
but
it's
in
an
implementation
right.
The
only
implementations
you
have
are
the
UWP,
ios
and
android
ones
right,
so
you
would
always
throw
from
the
docket
senate
one.
That's.
A
The
one
thing
may
be
talked
about
is
probably
want
to
add
some
notes
for
the
capability
API.
The
question
is
where
to
put
them
and
I
call
that
would
look
like
I
think
when
you
show
me
the
source
code,
you
have
an
internal
one
currently,
which
I
think
is
on
the
actual
types
might
see
have
like
browser
that
is
supported
or
parameter.
That
is
supported
and
I.
Think
the
question
there
is
that
makes
sense
of
it
doesn't
make
sense,
I
think
from
a
more
general
like
I
mean
to
be
fair,
we
don't
have
many
capability.
A
Api
seem
to
be
CL
today,
because
in
the
past
we
didn't
care
that
much.
We
just
made
it
work
in
all
the
places,
but
moving
forward
I
think
we
have
to
model
this
place
more
often,
and
the
general
idea
is
that
you
want
to
put
the
capability
API
it's
as
close
to
the
feature
as
we
can,
because
it
helps
people
to
understand
that
there
is
something
to
you
know,
think
about
when
they
call
the
API,
so
I
think
having
it
on
barometer
or
whatever
would
make
sense.
A
Now,
if
you,
if,
in
your
case,
basically
it
always
returns
true,
unless
you
are
not
incident,
in
which
case
it
always
returns
false,
that
might
be
a
bit
of
busy.
But
you
set
yourself
up
a
bit
more
for
success
and
I
think
we
talked
about
having
a
desktop
implementation
right,
because
you
currently
only
have
you
WP
implementation,
so
moving
forward.
If
you
want
also
support,
let's
say
you
know,
thought
in
fabric
apps
or
doing
regular,
desktop
apps.
We
don't
request
vo.
A
So
then
the
question
is:
how
do
be
yeah?
How
do
we
model
this
in
the
capability?
Api?
Do
we
have
two
of
them
and,
if
so
like?
What
would
the
name
be
and
then
also
what?
What
is
the
expectation
for
the
customer
like
if
it's
a
property
and
the
check
for
seeing
whether
you
have
the
permission
is
super
expensive?
The
many
properties
don't
make
much
sense
right.
I
think
those
are
the
two
things
you
may
want
to
talk
about
and
then
I
think.
A
D
With
the
capability
stuff,
I
think
you
know
one
of
the
other
layers
that
we
get
into
with.
That
is,
you
know
yes,
first
its
permissions
and
whether
or
not
we
have
permission
to
access
it
and
then
also
as
the
device
actually
support
that
capability,
but
that's
kind
of
got
two
parts
to
it
as
well
like
one
of
them
is,
is
the
device
have
a
camera
and
if
it
does
is
the
is
the
policy
for
that
device
set
to
allow
the
camera
to
be
used?
D
D
E
A
E
A
A
F
Mean
I
slightly
noticed
just
because
it's
on
the
most
screen
here
that
you
have
a
thing
called
battery
and
it
very
much
looks
like
you're,
assuming
that
a
device
only
ever
has
one.
You
know
that
certainly
can
be
not
true
for
PCs
and
depending
on
how
different
phones
model,
having
extension
packs
attached
that
button
people
true
for
a
phone
either
yeah
yeah.
A
So,
like
I
said
just
like:
let's,
let's
cover
the
the
capability,
API
so
maybe
generally
and
then
just
walk
the
api's
and
then
I
think
namespaces.
We
can
maybe
cover
later
so
I
think
yeah.
The
question
really
is
like:
what
is
the
model
to
do
that?
I?
Think
the
the
general
idea
of
capability
API
says
you
want
to
expose.
What
do
you
expect
customers
to
actually
write
code
for
right?
So
if,
if
there's
no
point
in
writing
an
if
statement,
then
exposing
that
as
a
capability
API
may
not
make
a
lot
of
sense,
I.
A
Think,
generally
speaking,
the
notion
of
you
know
if
you,
if
you
have,
for
example,
like
I,
think
the
in
Windows
8
that
the
same
example
with
the
printer
API
right.
So
imagine
you
have
a
printer
API
and
you
want
to
make
sure
that
you
work
in
data
centers
where
there
is
no
printer
right.
One
way
to
model
is,
is
to
have
a
property
that
says,
you
know,
has
support
for
printer
or
something
another.
One
is
to
just
have
an
API
surface.
A
That
kind
of
implies
sort
of
the
battery
examples
like
oh,
you
may
have
multiple
of
those
and
one
correct
answer.
Is
you
have
none
of
those
right?
In
which
case
you
have
an
API
that
says,
get
printers
and
giving
an
empty
array
back?
It's
a
completely
valid
implementation,
in
which
case
the
API
shape
itself
has
a
very
graceful.
A
Well,
if
you
have
either
you
know,
a
list
of
cameras
that
you
can
ask
for
whether
maybe
have
no
cameras
is
also
a
better
return
value
right,
in
which
case
you
may
not
actually
actor/model
the
fact
that
you
know
we
have
an
implementation
for
the
platform
versus
this
device,
or
this
particular
device
doesn't
actually
have
a
camera.
That
might
be,
you
know
not
useful
distinction
anymore.
Does
that
make
sense,
yeah.
D
C
I
think
that
GPS
of
all
of
our
ApS
is
the
most
complex
API,
especially
around
Android,
and
this
is
a
very
unique
scenario
on
Android.
So
Android
has
the
concept
of
providers
so
like
a
Wi-Fi
provider,
a
passive
provider,
a
database
provider
actual
GPS
provider.
So
what
we
do
is
based
on
the
parameters
that
the
user
gives
us.
The
developer
gives
us
we
figure
out
the
best
provider
to
use.
No,
it's
very
intriguing
here
is
that
if
there's
no
providers,
then
that
means
that
it's
disabled.
C
However,
you
cannot
get
a
list
of
providers
until
the
user
gives
you
permission
to
actually
access
GPS
during
this
weird
catch,
where
you
can't
even
detect
if
there
is
a
GPS
until
your
request
permission
so
in
a
user
today,
request
geolocation
from
us,
so
there's
no
API
on
geolocation
to
say:
do
I
have
GPS
as
it
enable
like
is
it
available.
Is
it
enabled
we
had
old
libraries
that
did
this?
When
you've
got
this
weird
mashup,
you
have
to
async
of
I
everything's,
you
have
to
handle
permissions.
Do
you
let
the
user
handle
permissions?
C
Do
you
handle
permissions?
So,
in
this
instance,
our
workflow
is
pretty
simple.
When
someone
requests
location,
we
check
to
see
if
they
have
permission,
if
they
don't,
we
prompts
for
permission.
If
that
fails,
we
throw
an
exception.
Then,
if
we
do
get
permission,
we
check
to
see
if
geolocation
is
enabled.
So
are
there
any
providers
that
fit
our
requirements?
And
there
is
not
the
exception,
it's
a
very
exception
based
and
then
we
actually
try
to
get
the
location
and
that
other
passes
or
fails.
C
So
there's
multiple
tiers
there,
so
even
in
that
instance,
which
is
a
an
edge
case
right,
but
something
to
be
to
think
about
which
is
it's
impossible
to
know
if
there
is
even
geolocation
enabled
until
permission
is
given,
so
is
that
a
API
concern?
Is
that
a
documentation
concern?
Where
does
that
fall?
And
that's
a
weird
case
so
for
this
API
is
of
today
we
didn't
introduce
any
of
those,
and
we
went
with
this
exception
based
route,
but.
F
A
F
C
F
We
start
looking
at
you
know,
taking
an
API
like
this
and
putting
it
with.
You
know
the
Arduinos
and
any
of
those
things
how
many
different
sensors
did
you
hook
up?
That
will
report
as
being
one
of
these
things
like,
if
you
think
of
it,
just
as
a
phone
yeah,
there's,
probably
only
ever
gonna,
be
one
temperature
sensor
in
it.
But
but
what
is?
Is
the
API
really
that
scoped
or
does
it
make
sense
to.
F
E
F
E
C
I
think
it's
something
I
didn't
necessarily
think
of
because
of
usually
you're
right,
usually
on
mobile
devices.
Only
ever
gonna
be
one
battery
orchid
or
the
API
will
combine
it
together
and
that
in
sense,
but
you're
correct,
you
could
maybe
throw
in
twenty
barometers
and
then
and
that
gal.
The
ideas,
then,
are
you
subscribing
to
that
specific
barometer?
C
And
how
would
you
abstract
this
generic
barometer
to
understand
it
in
an
iOS
or
Android
level
in
general,
when
there
is
like
on
those
platforms,
there's
always
a
single
tin,
so
I
guess
you
would
always
pass
back
the
same
class
barometer
so,
instead
of
barometer
being
a
start/stop,
it's
actually
a
physical
class
that
represents
a
physical
device
right.
I.
C
E
A
somewhat
related
question,
but
also
not
exactly
so
I
understand
the
ease
of
use
of
the
static
API
start/stop,
but
I'm
wondering
how
that
works.
When
you've
got
maybe
multiple
libraries
in
your
application
that
are
all
communicated,
for
example,
multiple
libraries
such
got
a
reading
changed
event.
They
individually
call
start
and
stop,
but
then
after
they've
called
stop,
they
made
still
getting
events
because
someone
else
started
it
again.
C
She
was
very
honest,
but
yeah
yes,
I
mean
in
an
instance.
Let's
say
you
call
start
and
then,
if
you
call
start
again,
it'll
already
know
that
it's
monitoring
so
won't
start
and
trigger
new
events
or
when
anybody
calls
stop.
Since
it
is
static,
it
will
stop
that
any
readings
that
are
subscribed
and
if
someone
you
called.
E
A
I
think
that's
something
we
should
probably
talk
about,
so
the
guidance
then
I
think
the
essentials
team
has
received
is
the
day.
You
know,
as
James
said,
like
the
typical
thing
that
people
have
done
in
the
past
is
that
they
have
an
eye
sensor
and
then
an
eye
iOS
sensor
and
an
eye
that
iOS
sensor
on
an
android
sensor
as
implementing
those
interfaces.
A
A
So
it's
super
super
super
simple,
I,
think
in
general
that
pattern
works
when
I
looked
over
the
API
of
James's
I
said
some
other
things
there
are
some
API
is
here
that
seemed
to
me
to
maintain
state
and
the
general
guidelines
that
we
have
is
the
vignette
aesthetic
type
or
when
you
have
static
members,
there
are
supposed
to
be
thread
safe,
so
meaning
you
need
to
be
able
to
have
a
policy.
What
happens
when
multiple
people
on
different
threats,
calling
the
same
static
methods
right
and
I?
A
Think
some
API
that
you
have
like
start/stop
or
having
global
event
handler
it's
kind
of
asking
for
trouble
in
the
sense
that
you're
you're
you
you
basically
now
subscribing
you
know
on
your
end,
to
handle
the
essential
threading
issues.
If
you
just
make
this
a
class
that
you
can
just
instantiate
well,
then
you
know
your
policy
can
sensibly
be.
A
I
only
saw
only
support
one
thread
if
you
want
multiple
threads,
whether
you
use
multiple
instances
of
this
type
right
and
then
it's
very
clear
that
well,
if
you
subscribe
to
events
on
this
type
well,
you
only
receive
them
on
this
type,
but
not
some
other
instance
that
something
else
abstract
you
that
might
actually
make
your
implementation
less
buggy.
But
it
means
that
some
of
the
types
that
are
currently
static
may
not
be
static.
Moves
forward,
but
I
think
from
usability
standpoint.
E
A
C
I
can
tell
you
exactly
how
this
would
work
so
at
least
in
the
world
of
Android,
for
instance.
Let's
say
you
start
up
an
accelerometer,
you
would
get
access
to
that
sensor
and
you
could
say
sensor
speed
fastest.
Then
you
start
listening
now.
If
you
create
another
instance
and
get
that
sensor
and
start
another
listener
at
a
slower
speed
that
slower
speed
will
take
preference
over
the
last
call
so
both
of
your
reading,
so
you
apply
listeners
which
really
it
basically
event,
handlers
and
those
listeners.
C
E
F
E
C
E
E
Mobile
applications,
you
get
a
library
that
uses
the
wrong
I
mean
or
do
dessert
him
to
happen
at
a
library
level
or
at
the
application
level.
For
the
most
part,
I
would
assume
there
be
libraries
that
interact
with
the
DEP
again
yeah,
but
I
would
assume
it's
uncommon
for
an
application
to
pull
in
multiple
such
libraries
simultaneously.
Yeah.
D
E
C
Mean
I
think
that
there
may
be
a
you
space.
Let's
say
you
bring
in
a
3d
game
engine
that
happens
to
use
a
mer
and
essentials
and
to
using
our
orientation
sensor
to
orient
things
in
the
real
space,
and
then
you
developer
come,
and
you
say
oh
I
also
want
to
use
the
orientation
sensor
here
and
I
want
to
do
something
else
in
the
background
for
some
reason,
so
you
start
now
on
an
Android
level
on
a
platform
level.
Let's
say
you
were
doing
this.
Just
a
job
or
Kotlin
you'd
have
the
same
issue.
C
You
could
create
some
other
third-party
library
that
may
be
brought
in.
That's
messing
around
the
sensors.
Now
wouldn't
stop
yours,
though
that's
the
difference,
I
think
on
Android
you're
in
pure
Kotlin
world.
You
may
be
interacting
with
the
sensors,
and
perhaps
your
sensor
speed
changes,
because
another
library
is
changing
and
subscribing.
The
difference
here
is
that,
if
that
third-party
library
with
Sam
urn
essentials,
is
using
that
orientation
sensor
and
they
call
stop,
then
your
events
would
also
be
stomping
right.
So
it's
like
you,
don't
have
a
unique
instance
of
that
of
that
orientation
sensor
there.
C
F
Other
problem
with
the
static
event
is
Steve
mentioned.
The
you've
called
stop
and
now
you're
surprised
when
you
get
more
events,
because
someone
else
called
start,
there's
not
actually
a
correct
time
for
you
to
register
your
event
handler,
because
if
you
register
an
event
handler
pointing
at
an
instance,
you
might
not
have
finished
configuring
it,
but
somebody
else
has
already
called
starting.
F
C
C
A
The
other
problem,
if
you
have
a
static
event
endlessly,
because
they
point
back
to
the
object
instance,
you
have
to
be
very
careful
that
you
don't
keep
your
objects
around
forever.
Basically,
so
typical
example
here
is,
you
have
a
user
view
model
summer
that
subscribes
to
let's
say
the
barometer
event.
Well,
this
guy
never
unsubscribes.
In
this
view,
model
will
not
stick
around
for
all
eternity
of
the
app
so
that
gear.
A
Basically,
people
have
to
be
very
careful
that
they
unsubscribe
from
these
guys
or
bad
things
will
happen,
and
if
you
look
around
in
UI
code,
unfortunately
really
unsubscribe
from
anything
and
then
they
find
out
the
hard
way
that
they
kept
their
what
they
thought
short-lived
objects.
You
know
around
for
a
very
long
time,
so
that's
why
people
often
ask
for
you
know
week
event,
handlers
and
I'm,
not
sure
we
talked
about
this.
You
know
a
few
times.
A
I,
don't
even
have
a
very
good
story
internally
to
deal
with
that
right
now,
you
can
probably
do
some
crazy
messes
with
weak
objects.
Also,
big
big
references
yourself,
but
I
doubt
the
double
work
really
well
for
you,
because
you
will
at
least
leak
the
underlying
element
in
the
linked
list.
You
have,
but
it's
probably
better
than
leaking
the
entire
object
reference.
D
A
You
basically
fire,
did
you
see
so
I?
Don't
know
like
what
is
your?
What
does
the
abstraction
seven
forms?
Look
like
you
have
you
ones
they're
disposable
is
there
like?
Do
people
have
an
easy
way
to
unsubscribe
like
and
I
subscribe
to
a
closed
event
or
whatever
really
I,
don't
the
screen
or
something?
Because
that's
you
read
the
problem
that
you
have
there's
no
convenient
way
to
register.
That's
yeah.
D
I
mean
usually
like
on
you
know:
different
forums
has
I,
can't
even
stop
him,
but
there
is
a
page.
Closing
event
may
be
appearing
and
disappearing.
Yes,
so
typically,
especially
anything
UI
related,
you
know
on
the
disappeared
event,
he
would
unregister
your
handlers
and
clean
up
I
see.
So
as
long
as
you
been.
F
Again,
looking
at
you
know
the
barometer
specifically
I'm
thinking
about
threading
I'm,
also
curious.
You
know
if
one
library
sets
up
a
handler
calls
start
and
another
library
sets
if
I
had
learned
calls
start
and,
let's
assume
we're
in
a
sealed
room,
so
the
pressure
doesn't
educate.
F
C
Correct
I
mean
there
are
in
yeah,
so
it's
for
sensors.
It
is
reading
provided
for
certain
things.
It
is
actually
changed
so,
for
instance,
a
battery.
We
guarantee
that
all
the
properties,
at
least
one
of
them,
has
changed
inside
of
it
accelerometer
we
don't.
We
provide
just
reading
triggered
in
general,
and
the
underlying
systems
from
our
findings
are
only
when
they
actually
change.
C
So
if
it's
sitting
still,
it
doesn't
trigger
it,
but
that's
not
necessarily
guarantee,
but
the
underlying
platform
basically
guarantees
that,
but
I
do
think
that
you
may
run
into
that
scenario
that
you
described
I.
Think
any
of
these
scenarios,
a
start-stop
from
multiple
callers
could
run
into
this
scenario,
is.
E
C
On
some
of
them,
yes
on
another's
new,
so
on
Android,
for
instance,
no,
you
cannot,
you
have
to
apply
a
listener
and
then
the
moment
that
you
apply
a
listener,
you
will
get
an
immediate
call.
That
will
tell
you
on
iOS,
for
instance,
you
can
just
say
give
that
to
me.
The
iOS
apos
are
very
beautiful.
That
will
did
a
great
job,
but
for
most
of
them
I
would
say
not
all
them
they're.
C
F
I
mean
on
platforms
that
don't
you
could
theoretically
just
do
a
subscribe,
ask
for
this
and
you
know
depending
on
if
they
let
you
know
that
they're
already
running,
and
so
you
don't
to
configure
polling
speeds
in
my
life,
but
right
like
theoretically
that
could
be.
You
know
you
can
you
can
provide
the
polling
API
on
platforms
that
don't
have
it.
C
E
C
E
Also,
looking
at
like
the
accelerometer
stuff
like
that
on
iOS,
and
they,
as
was
much
earlier,
they
use
Singleton's
for
everything.
So
you
it's
completely
unexpected
that
you
might
have
two
different
libraries
within
a
single
application,
both
independently
trying
to
use
the
accelerometer
like
apples.
Documentation
clearly
calls
out.
Do
you
not
do
that?
You
who.
E
F
E
D
F
F
A
I
think
in
general,
yet
you
know
the
other
week
we
did
the
review
of
the
GPIO
stuff
right
and
you
know
Jana
is
the
point
there
that
maybe
the
API
will
not
last
super
long,
given
that
this
market
is
evolving
very
quickly.
So
if
you
may
find
ourselves
having
to
rewrite
the
API
so
anyway,
so
in
that
sense,
given
how
mobile
works,
I
would
say
the
same
applies.
Probably
here
we
can
try
really
hard
to
make
it.
A
You
know,
go
to
API,
but
I
think
similar
to
HP
net,
where
something
you
just
have
to
have
making
changes,
because
the
ecosystem
has
just
changed.
It
seems
reasonable
to
so.
I
would
I
would
generally
say,
like
the
goal
of
the
library
clearly,
is
to
make
users
life
easier
and
drive
convergence
between
the
platforms.
From
our
point
of
view,
so
I
would
I
would
say
that
in
general,
proving
ApS
is
a
good
thing,
but
it
does
conflict
with
e.
Let's
have
a
simple
API
right,
and
so
we
should
probably
focus
on
that.
A
E
F
E
These
types
have
units
on
them
like
acceleration
barometer
stuff,
like
that,
are
we
normalizing
those
between
operating
systems,
interesting
and
so,
like
I
was
looking
at
apples.
Documentation
of
acceleration
on
all
three
axes
is
listed
as
G's
I,
don't
know
if
it
just
straight
up
meters
per
second
square
on
other
platforms,
I,
don't
know
yeah.
C
So
we
normalized
every
single
one
of
these.
We
document
what
they
are,
for
instance,
and
there
are
some
instances
we
tend
to
normalize
towards
the
windows
API.
To
be
honest
with
you,
the
uwd
api,
because
it's
the
more
dotnet
ii
api
of
them.
So,
for
instance,
if
it
is
meters
per
second
square,
then
we
will
normalize
on
that
yeah.
That's
of
a
key
objective,
I
would
say
in
instead
of
learning
three
EPs.
C
It
give
you
three
different
results
that
no
matter
what
is
coming
from
us
as
a
normalized
result
for
the
excel
of
Celoron
or,
for
instance,
and
then
we
will
document
that
they
are
reported
back
in
G's,
and
we
even
will
tell
you
that
that
you
know
exactly
what.
That
means
that
it's
a
gravitational
force,
bla,
bla
bla,
you
know,
9.8
blah
blah
blah
except
accelerate-
is
that
we
did
you
do
that
they.
E
A
G
A
We
have
pushed
back
on
api's
when
somebody
had
an
in
time
and
it's
like
okay
Quay,
which
would
unit.
Do
you
take
we're
like
time
since
Miriam
videos
so
like?
If,
if
there
is
a
type
I
would
prefer
the
time,
but
there
is
no
time
but
is
mainly
what
the
metrics
are,
but
for
things
like
I,
don't
know
how
would
you
name
the
accelerometer
result
like
Bay
ug,
like
I
mean?
How
do
you
see
force
well.
C
Yeah
in
the
beginning
of
this
API,
we
were
returning
an
XY
and
Z,
and
what
we
decided
was
that
vector3
itself
provides.
This
is
from
our
documentation
team,
provided
me
back
when
they
were
using
the
guy
that
if
we
were
to
use
a
vector3,
especially
for
the
orientation
sensor,
that
provides
a
lot
of
helper
functions
to
actually
iterate
on
it.
So
we
take
a
dependency
on
the
system,
numeric
ambassador
package
in
the
inside
of
here,
but
maybe
it's
implemented
on
every
single
system.
C
Besides
a
standard
one
which
we
do
have
a
sim
compatibility
for
just
for
the
sake
of
doing
it,
so
so
we
do
bring
down
in.
So
that's
why
it's
a
vector3
compared
to
previously
it
was
acceleration
X,
acceleration,
Y,
acceleration,
Z
or
XYZ,
just
in
general
yeah,
which
we
thought
was
not
great,
but
that
was
what
I
thought
there:
okay
yeah.
A
All
right,
maybe
we
should
just
walk
the
api's
top
to
bottom.
No,
no!
Let
me
actually
talking
about
the
generics
quite
a
bit
pun
intended
there,
all
right,
so
don't
worry
doing
it!
Some
of
this,
if
you
have,
is
monitoring
which
I
guess
means
at
least
somebody
was
calling
start
at
some
point:
correct
and
then
you're
the
event
and
then
so
starting
to
stop
is
no
traffic
on
that
right.
So
last
one
wins
right.
Last.
F
C
It's
not
available
so
there's
to
to
change
the
sensor
speed
you
would
on
some
platforms.
You
would
have
to
stop
anyways
so
on
Android,
for
instance.
To
do
it
properly,
you
have
to
unsubscribe
a
listener.
Andrey
subscribed
a
listener.
Of
course
we
could
do
that
for
you
under
the,
so
it
wouldn't
really
matter,
but
I,
don't
know
if
we
document
this
use
case
of
calling
start
twice
and
what
would
happen.
We
mostly
document
call
is
monitoring
first
and
then
start
hell.
Stop
you
know,
type
of
thing.
Okay,.
A
E
A
Because
the
reason
I'm
saying
that
is
because,
if
you,
if
you
ever
hit
this
case,
it
needs
to
know
all
maybe
I
should
check
its
monitoring
before
and
then
maybe
you
start
thinking
about
your
own
logic.
Well,
what
and
what
happens
if
it's
true
like
what?
What
am
I
supposed
to
do
with
that
information
right,
it
means
probably
an
error
somewhere
in
your
code.
A
F
E
E
E
E
F
A
E
Yeah,
the
acceleration
should
probably
be
a
read-only
field
instead
of
a
property.
Would
that
be
because
the
destruct
itself
is
mutable,
which
means
that
if
someone
says
my
accelerometer
data,
dot
acceleration
dot,
X
plus
plus
it
will
look
like
it
works,
but
nothing
will
end
up
happening.
Is
you
it
might.
A
A
F
A
I
think
that's
a
that's
the
sense
of
the
bond
way
to
say
it
will
be
nice
if
we
could
at
least
construct
the
event
arc.
So
you
can
indeed
simulate
who's
the
receiver
of
that
the
polymers,
though
that
you
know,
depend
on
how
you
write
the
code
you.
It
might
just
be
the
first
thing
you
do
and
then
the
second
thing
is,
you
always
should
subscribe
to
the
static
classes
and
then
you're
screwed
right
you're,
going
to
at
least
split
that
apart
any
but
yeah
I.
Think.
H
A
F
D
D
F
C
Yeah
so
iOS
calls
this
so
iOS
calls
this
open
settings,
URL
string,
so
you
give
it
a
URL,
you,
okay,
the
URL
specifically
and
is
called
open
settings.
Url
string
and
you
WP
calls
this.
It's
a
hard-coded
string,
that's
MS
settings,
:
apps
features
app,
which
is
obviously
very
intuitive.
Android
is
very
generic,
so
you
give
it
package
and
your
name
and
it's
the
you
open
up
the
actions
application
to
detail
settings.
So
that's
the
action.
C
F
A
E
D
F
About
having
it,
I
was
thinking,
something
like
you
know,
device
interaction
but
then
it's
like,
but
if
you're
trying
to
open
your
app
settings,
that's
different
than
saying
just
go
pop
like
settings
not
app
and
but
then
maybe
that
would
be
open,
app
device,
dot,
open,
app
settings
or
maybe
it.
This
is
the
right
place
for
it,
but
again
poke
around
and
see
if
there's
something
better.
So
that's
just
a
considered
yeah
the.
A
B
C
F
Pressure
I
mean
I,
assume
that
you,
based
on
your
previous
thing,
that
you're
normalizing
it,
but
it's
now
we
get
the
u.s.
people
expect
it's
psi.
Europeans
expect
it's
passed,
gals
meters
of
murky,
whatever
the
tint
no
well.
Yes,
so,
pilots
want
millimeters
of
mercury
non-pilot.
U.S.
citizens
want
PSI
somebody
in
Europe
once
whatever
1033
is
yeah
I
think
you
one
bar
I,
think
oh
yeah,
that
might
be
bar
or
millibar
like
somebody.
B
C
F
F
E
E
Flipside
to
what
Jeremy
mentioned
earlier,
like
Jeremy
mentioned,
there
are
scenarios
like
this
laptop,
for
instance,
has
two
batteries
in
it?
I
think
there
might
actually
be
some
areas
where
you
have
no
batteries.
Imagine
you're
on
a
kiosk
right.
It's
not
that
difficult
to
imagine
that
there
might
be
an
iOS
or
Android
device,
but
that
will
be
the
night.
You
would
be
connected
to
power
right
yeah,
but
what
does
charge
level
return?
Well,
whatever
it
does
in
your
yeah.
F
C
E
C
So
in
this
instance,
we
do
have
a
battery
state
which
is
not
present,
which
means
that
there
is
no
battery,
so
Windows
specifically
exposes
that,
and
in
that
instance,
if
there
is
no
battery
at
all,
we
report
a
negative
one
for
the
charge
level,
because
if
the
system
itself
is
telling
us
that
there's
no
battery
and
cannot
report
a
dollar
charge
level
or
we
return
negative
one
interesting.
That's
that's
strange
and.
A
The
question
is:
how
will
people
use
charge
level
right?
That's
why
I
would
probably
return
1.0,
because
probably
you
want
to
have
like
a
policy
like
oh
I,
give
a
user
a
warning
that
the
battery
level
is
below
some
threshold
right
and
if
you
always
return
one
point:
no,
it
works.
If
you
do
minus
one,
you
get
these
weird
apps
that
start
and
say
sorry,
consider
plugging
in
because
you
have
minus
1.0
better.
We
left
right,
yeah,
I,.
F
E
C
Mean
you
may
want
to
turn
it
called
charge
level
to
understand
if
you're
doing
advanced,
animations
or
getting
something
intense
on
the
battery,
for
instance,
let's
say
I
want
to
call
geolocation
and
I
noticed
that
my
battery
is
under
5%.
I
may
want
to
get
a
very
just
last
known
instead
of
querying
the
GPS
location
in
general
number.
D
That's
like
1,
so
I
think
from
the
two
examples
on
that
we've
heard.
In
both
cases
you
know,
if
you
don't
think
you're
plugged
in
you,
want
to
assume
that
you
have
enough
power
to
do
whatever
it
is
that
you
need
to
do
like
not
warm
the
user
or
to
actually
use
GPS,
so
yeah
I
think
charge
a
level.
1
sounds
quite
reasonable.
Yeah
yeah.
C
Good
example
is,
by
the
way,
is
my
desktop:
computer
doesn't
have
a
battery,
I
mean
it
has
a
power
supply,
it
doesn't
have
a
battery
right.
So
in
that
instance,
it
has
a
power
supply.
So
what's
the
charge
level?
Is
that
one
I
think
I
guess
I'd
have
power
so.
C
E
C
F
F
C
Believe
Android
is
the
same.
To
be
honest
with
you,
I
OS
only
has
one
battery
ever
so
Android
I
believe
is
the
same.
I
have
to
double
check
on
it,
but
their
API
is
literally
just
give
me
the
battery
information,
and
it's
probably
whatever
is,
and
it's
whatever
is
displayed
to
the
user
on
the
top
right,
yeah.
Okay,
so
make
sense
what.
A
C
That
is
an
accurate
statement,
usually
on
Android,
because
every
single
battery
every
single
device
manufacturer
technically
these
are
not
eating.
These
are
just
you
know,
integers
coming
from
Java,
so
we
map
them.
However,
like
it's
kind
of
impossible
for
us
to
know
it
to
sometimes,
if
someone
reports-
something
that's
not
in
the
official
documentation
anytime,
that
your
wrapping.
F
A
E
D
C
F
E
E
Yeah
I
would
just
try
and
I
think
it's
either
spine.
It's
a
little
weird
if
the
task,
what
could
never
fail
and
then
what
are
you
waiting
for
so
I
would
just
be
consistent
with
anything
that
opens
UI
like
this
and
either
if
it's
truly
fire
forget
and
you're,
never
gonna
get
an
error
back
to
get
to
the
user,
then
make
it
void.
If
you
might
get
an
error
back,
make
a
task
returning
and
do
that
across
the
board.
C
B
C
E
C
C
So
right
now
is
basically
a
fire
and
stop
fire
and
forget,
because
we
are,
you
know
we
would
bubble
up
them
and
it
dawned
I
guess
there
would
be
no
exception
that
would
occur
bit
or
turn
to
fall.
So
in
this
instance
there
is
no
exception
that
could
occur
on
iOS
or
Android.
From
my
understanding,
looking
at
my
code
today,
yeah
but.
C
C
Yeah
correct,
so
we
wintered
this
assumption,
and
this
was
someone
that
from
the
community
asked
us
was
you
know
the
two
of
the
platforms
don't
require
async,
but
the
third
one
technically
has
an
asynchronous
API.
You
have
to
call
so
what
we
do
for
ours
is
that
we
say
if
one
of
them
is
asynchronous,
we
make
everything
asynchronous
right.
J
E
E
F
C
What's
the
difference
between
external
and
system
for
version
yeah,
so
X
so
system
preferred?
Is
the
default
and
system
preferred
uses
on
iOS
sf
Safari
view,
which
is
an
optimized
browser
that
kind
of
it's
not
in
your
app,
but
it's
more
attached
to
your
app.
So
there's
like
a
done
button
and
that
done
button
will
bring
you
back
into
your
app
and
on
Android
uses
chrome
custom
tabs.
C
So
it
feels
more
integrated
where
on
external,
it
basically
launches
an
intent
system
out
so
on
Android
it
could
launch
of
different
browser
prints,
and
so
it's
kind
of
external
to
your
application
on
Windows.
It's
always
just
launches.
Whatever
your
default
is.
We
don't
have
control
over
that,
but
if
system.
F
B
C
C
C
E
E
A
F
E
A
F
C
G
One
thing
that
let's
do
with
the
sick
ticks,
which
is
a
little
different,
is
that
it's
not
guaranteed
to
be
complete
when
the
method
returns.
So
you
could
course
it
takes.
It
takes
tread
away
and
it
hasn't
actually
been
sticky
and
sort
of
like
operating
system.
You
know
sickness
ticks
that
into
the
I'm,
leaving
it
up
to
you.
So
I
noticed
that
I
think
it
was
will
need
an
order.
You
WP
I
would
save
the
pigs
and
get
it
right
away.
G
E
E
C
A
A
C
C
C
C
D
F
D
C
D
F
C
F
C
F
I
mean
so
technically,
if
you're
using
a
compass
that
is
usually
implying
that
it
is
based
on
the
magnetic
heading
yeah.
There
is
the
difference
between
magnetic
north
and
true
north
and,
if
you're,
trying
to
tell
someone
where
they're
going
there's
a
difference.
So
I
know
that
at
least
apple's
compass
app
does
do
the
true
or
does
do
the
GPS
integration
and
can
tell
you
true
versus
magnetic.
But
that
may
be
an
app
feature
instead
of
a
composition,
yeah
great.
A
C
F
C
C
A
A
A
A
F
Just
from
the
extension
model,
I
would
put
other
I
would
read
a
my
hometown
note
and
I
would
give
it
0.
So
that
is
more
connection
profile
types
come
on
in
the
future.
You
don't
have
other
being
in
the
middle
yeah
yeah
and
then,
if
connection
profiles
ever
used
as
an
input
on
something,
if
it
would
ever
be,
then
the
zero
value
being
the
other
slash
unknown,
is
a
clear
like
I,
don't
know
what
you
want
me
to
do.
Instead
of
oh,
we
default
at
the
Bluetooth
yeah.
A
E
Internet,
like
behind
a
it's
in
China,
no
I
like
behind
a
like
a
big.
F
C
F
C
A
A
F
C
A
C
J
E
C
F
F
F
C
The
reason
the
reason
we
don't
put
active
and
I'll
tell
you
specifically
is
because,
let's
say
return
to
Wi-Fi
and
cellular.
That
means
most
likely
that
the
actual
active
one
is
going
to
be
Wi-Fi,
not
cellular,
but
they
are
technically
both
there's
the
system
could
determine
based
on
different
demands.
What
to
use
yeah.
You.
F
Know
it's
the
just
making
sure
that
it
feels
clear
to
you
and
your
average
consumer
that
that
this
means
the
that
have
IP
addresses
and
not
things
that
could
have
IP
addresses
like
when
Wi-Fi
is
in
searching
mode,
and
it
probably
doesn't
super
matter
but
I'm.
Just
thinking
out
loud
yeah
high
data
transfer
makes
no
sense
to
me.
C
So
I
hate
the
name,
data
transfer
and
again
from
Windows
I
used
to
call
this
share.
So
the
idea
is
that
this
is
when
I
like
hit
a
share
button
and
I'm
gonna
share
it
text
to
another
application.
So
you
know
I
tweet
I
go
to
tweet
something
right,
so
you
make
a
share,
share
request
and
normally
that's
text
or
images
or
something
else
so
you're,
literally
sharing
or
transferring
data.
If
you
will
between
one
application
to
another,
we
went
with
data
transfer.
Just
because
that's
the
uwp
name,
I,
don't
know
if
share
is
correct.
C
A
Say
I
mean
my
personal
opinion
is
maybe
that's
what
the
most
informed
one,
but
I
would
go
with
something.
People
are
likely
to
look
for
like
I.
Think
sharing
should
probably
be
the
name
somehow,
because
if
it's
sharing
I
mean
they
see
how
the
UI
refers
to
it
across
all
platforms,
even
on
Android
I,
believe
it's
called
sharing.
If
you
actually
do
that
as
a
user,
which
is
probably
better
than
whatever
the
underlying
talk
phone
call
today,
DIYs
yeah.
F
A
F
Know
frame
things
from
my
head,
but
the
the
button
that
you
use
to
send
things
to
other
applications
in
Safari
in
for
flight.
They
use
that
same
icon
and
call
it
sent
to
so
maybe
maybe
that
makes
more
sense,
but
I
don't
know.
If
there's
the
universe
agrees
on
what
knee
box
with
an
arrow
eating
out
of
it
means
exporting.
E
C
I
F
Cuz
to
me
that
sounds
like
Network
play
in
and
I'm
surprised
that
there's
no
answer
or
that
I
can't
route
in
this
case
it's
weird
cuz
the
data
transfer
request.
Well,
that
sounds
like
I
want
to
download,
but
you're,
not
giving
me
the
download,
and
so
that
was
actually
my
first
impression
was
the
data
transfers,
download
or
upload.
J
A
C
Yeah,
so
this
is
the
device,
it's
not
your
applications
dimensions.
It
is
the
device
dimensions
so
for
Windows,
for
instance,
we
get
the
current
view.
So
the
current
physical
review
that
you're
on
whatever
windows
decides
I
guess
at
that
point
of
view.
So
it's
a
screen,
width
and
the
height
of
the
monitor
on
iOS.
A
A
F
E
D
A
D
C
By
default
on
Android,
we
support
every
single
Android
device
on
iOS,
TV
and
watch.
Os
are
completely
different
platforms,
which
xamarin
essentials
does
not
support,
so
it
would
actually
say
unsupported
in
that
instance,
because
we
don't
know
what
it
is
I
mean.
I
guess
I
would
actually
throw
an
exception
to
be
honest
with
you,
because
you'd
be
on
an
Uncle
Tom
supported
platform.
But
I
do
think
that
watch
should
be
added
here
because
technically
on
Android
it
could
be
a
watch,
and
that
is
a
supported
platform.
C
So
on
iOS
and
Android
like
on
iOS
9
iOS
right
technically,
it
would
be
a
new
platform.
So
here's
what
becomes
interesting.
So
if
you
think
about
this
is
there's
idioms
and
platforms,
so
technically,
technically
winter,
there's
where
OS,
which
is
androids
where
OS,
but
the
underlying
platform
is
just
Android
right,
but
for
iOS
it's
not
ILS
on
TBO,
as
it's
TV
OS
and
watch
OS,
so
they're
completely
different
operating
systems.
That
are
there
right
and
you
could
run
a
uwp
application
on
an
Xbox.
C
So
the
idiom
would
be
Xbox,
I,
guess
or
TV
at
that
point,
that
wouldn't
it
would
it
be
Soviet
a
uwp
yeah,
so
I
think
that's
how
we
look
at
it
is
like
at
the
end
of
the
day
what
the
user
is
compiling
the
application
into
is
the
platform
so
I'm
compiling
a
Android
wear
OS
app
into
a
Android
application.
There's
no
differential
like
from
our
platform,
we're
idioms
are:
where
is
that
application
running
so
they're
kind
of
duplicated
in
a
way,
but
also
not
really
so.
A
D
F
Get
to
an
Xbox
and
guessing
that
it
would
go
to
TV
like
if
I'm
in
this
and
I'm
thinking.
Maybe
this
tells
me
what
sort
of
events
I
should
be
expecting
expecting
things
from
an
xbox
controller
and
a
remote
control
feel
slightly
different.
Like
I,
don't
know
if
the
if
the
Smart
TVs
would
be
a
uwp
thing
or
some
other
OS
completely,
but
that's
I
just
got
to
thinking
of
Xbox
as
sort
of
TV
and
sort
of
not
so
yeah.
C
I
think
we
we
sort
of
think
of
what
the
display
is.
So
what
is
the
display
that
you're
running
on
form
factor
wise
so
for
for
an
Android
TV
application?
It's
running
on
my
Nvidia
shield,
but
it's
running
on
the
TV
and
that
Nvidia
shield
does
have
a
game
remote.
So
it
is
a
tricky
situation
in
that
instance,
so
I
think
we
think
of
idiom
as
the
physical
display
that
the
user
is
looking
at.
D
C
F
G
G
G
We
want
to
be
able
people
to
compare
backhoes
Aaron
with
the
general
form
stock
platform
and
then,
if
we're
going
to
do
an
actual
string
equals
just
because
someone
might
do
that
and
then
the
other
one
was
I
think
for
extensibility,
because
if
we
had
an
enum
with
month
break
cause,
we
had
like.
The
thing
is
like
that:
it's
like,
okay,
let's
say
we're,
gonna,
add
ties
in
support
or
something
like
that.
G
Then
in
there
all
we
have
to
do
is
that
the
next
version
library,
we'll
just
have
a
new
platform,
or
only
in
case
of
of
the
watch,
you
just
edit
and
then
the
property,
the
device
info
time
platform.
You
know
it
is
just
a
string
and
if
some
custom
user-
let's
just
say
the
bean
team,
comes
out
with
a
new
bing
device,
then
the
the
platform
would
be
bing
device
and
it
doesn't
have
to
Adam
UI
continue
the
do
an
email
or
something
they
have
just
returned.
They
pass
some
string
to
Lee,
so
we.
F
We
have
a
pattern
that
we've
used
a
bit
called
strongly
type
string,
which
is
you
have
a
struct
that
only
has
one
member
which
is
a
string,
and
then
the
struct
looks
like
an
enum
to
most
people,
but
it's
actually
just
a
accelerator
for
wrapping
a
bunch
of
constant
drinks.
So
if
you
look
at
the
hash,
algorithm
name
type,
this
that's
an
example
of
this.
So
it's
uses
strings
for
extensibility
reasons,
but
it
looks
like
an
enum
for
program
at
ability
reasons.
Yeah.
A
Well,
the
one
that
linked
here,
which
is
always
a
platform,
yeah
same
same
concept,
no
I,
think
the
benefit
of
this
is,
if
you
have
a
property
that
returns
a
string.
Well,
it
no
returns
whatever.
The
type
is
right
so
like
it's
strongly
typed
in
the
sense
of
people
discover
that
there
is
a
basically
human
behind
that
yeah
and
but
you
don't
lose
the
accessibility.
As
you
said,
when
you
just
passed
the
US,
you
get
a
string,
you
put
it
into
the
in
ermand
and
nothing
bad
happens
in
v2.
So.
F
A
And
x
are
both
good
and
bad
I
mean
what
they
what
they
do,
is
they
make
the
type
less
discoverable?
As
that's
what
you
want,
it's
good.
If
it
that's
not
what
you
want,
then
that's
bad
right,
so
I
would
I
would
generally
suggest
that
if
you
make
these
strongly
typed
strings,
I
think
having
them
as
nested
types
is
fine,
because
people
would
see
them
in
the
signature.
A
A
How
do
you
even
all,
because
idioms
I
guess
that's
why
it
works
yeah,
so
I'm,
like
their
names,
seem
to
conflict
but
yeah
yeah?
They
don't
I,
guess
yeah
the
plural
and
singular
of
the
property
kind
of
ties
them
together
in
the
intellisense.
That
might
be
actually
good
enough,
as
it
is
come
up
with
you
making
this
what
I'm
thinking
about
it
but
yeah,
but.
F
A
I
use
that,
like
I,
think
it's
generally
a
better
way
to
do
it.
It
doesn't
cost
you
much
all
right.
We
are
now
basically
over
time,
so
we
can
hone
over
time.
We
have
there.
Two
minutes
left,
I,
think
the
so
the
question
that
I
have
is
so
we
you
know,
look
at
the
scroll
by
here.
We
went
through
what
is
what
1/3.
Maybe
we
can
do
one
of
two
things
we
can.
A
So
I
will
basically
do
the
same
thing.
I
did
last
week.
I
would
just
output
the
whole
thing
to
Hawaii
I
view
repo.
They
will
have
the
entire
API
surface.
Plus
these
comments
here
cool
and
then
we
can
do
it
offline.
If
you
want
to
calm,
does
it
make
sense?
You
guys
are
planning
on
shipping
in
what
two
weeks,
two
weeks
or
something
like
that.