From aed4ced6556383483209f454c9e4872e8ad28ebf Mon Sep 17 00:00:00 2001 From: Scott Main Date: Thu, 15 Dec 2011 10:25:41 -0800 Subject: [PATCH] Android U Class: Developing Android Applications for the Enterprise. This class uses a sample app. Change-Id: I508edbb98c8e9dea1d3ea26c8dcd9da213330d87 --- Android.mk | 5 +- .../device-mgmt-activate-device-admin.png | Bin 0 -> 42791 bytes docs/html/resources/resources-data.js | 10 + .../shareables/training/DeviceManagement.zip | Bin 0 -> 19978 bytes .../enterprise/device-management-policy.jd | 220 ++++++++++++++++++ docs/html/training/enterprise/index.jd | 51 ++++ 6 files changed, 285 insertions(+), 1 deletion(-) create mode 100755 docs/html/images/training/device-mgmt-activate-device-admin.png create mode 100644 docs/html/shareables/training/DeviceManagement.zip create mode 100644 docs/html/training/enterprise/device-management-policy.jd create mode 100644 docs/html/training/enterprise/index.jd diff --git a/Android.mk b/Android.mk index 742c9b26fd..b4fb73231d 100644 --- a/Android.mk +++ b/Android.mk @@ -483,7 +483,10 @@ web_docs_sample_code_flags := \ -samplecode $(sample_dir)/XmlAdapters \ resources/samples/XmlAdapters "XML Adapters" \ -samplecode $(sample_dir)/TtsEngine \ - resources/samples/TtsEngine "Text To Speech Engine" + resources/samples/TtsEngine "Text To Speech Engine" \ + -samplecode $(sample_dir)/training/device-management-policy \ + resources/samples/training/device-management-policy "Device Management Policy" + ## SDK version identifiers used in the published docs # major[.minor] version for current SDK. (full releases only) diff --git a/docs/html/images/training/device-mgmt-activate-device-admin.png b/docs/html/images/training/device-mgmt-activate-device-admin.png new file mode 100755 index 0000000000000000000000000000000000000000..1be1831e39c1a1b1be608e17b090cdd76f4f2393 GIT binary patch literal 42791 zcmZ^KcR1GV`~PiZB_lK0gzUYu_ueZz*_$MLkBE?+m6dF=Hz5fjSy>@_uPA&^&*%94 z`MZzfd2$%{{eEBX^E%Jhx}r7Ik^f0umo z9e%W){T{lin-p6sJIbmZLGQ%CPEp{|2y{ za!5g0X$;zkTvUYl;1kPbga#YJoH6kCI3g(PPr5G>;_(|ABBa~|1U13aC>eyU2%>C6 z@1-olfD=Jzt^7#{F~x@9RMfXtKvXp#I*0LY*B~&k5uBP);SUk0z6kTrbadW`uyh2W z+@Zec0ZRqm8Z)d^dW~oky^w71V+=MobbWnxN~U2&5*9*!3uKE73HI(6>G!yUd2tty zz9JC02}E$WN0;8iI2FUg{BiX-W^9`sXxFrsmdjVGBc-kq2*i?Sz~~h#M=e>92wITS z)w>6~sJ5oJbDy2XSl8f6)FE;=X7rC-Z`MXO?{(Ak^yC}InIh$?$AB;N$K_a;wJPL&z)3_Lr3ogom1 zEiPT(nJ`d-Y(tkuo?q{YU&`k`Km=JUCb}UIrZV*GI$vtV`!Ns*ncQIJD#`oDU8Jm? zXyjeDes7Zw=VT}-XPn5dGUF$gSZW}=WRUmDQGVUVPU|DowpK)oA7PdyMts7b4wz^A~a z^-_mgSApX2kvp zZss@lk7SQx`SaGkmD=LY#EVJyb9SziqVs%mIo`CmRhR{$bv7&Ne`MczCGFuYcGrP)l&u09&WJnO+1vF}6>h4x3;Fx|@}MJKhn_nfpcO{M7Gc+9 zs)wfiyqH_kE-6}K9(^du6O!gp;?b|wI(lO*j=r4c_UEmq8s-{Paq3aP%Xz}Rhrb@) zFXB~c;(BWA@F68N#h_H7RI^lmtBt>6r#P#qO}54GZ!nHzzY?P{qr6T0@U5&h?P=|~ zVyt3f)knf773?1z3h(E&$UN_GF5XScZZ{3eR&gnwf6=yfLGI6SsdMRcQG6ngZGcvb zO^-HYQ;vDUw@ zZ+xm)vtm?axLe=q9Bw3JSZJVYWKt_vo>l(fM@xB2F@ABAT9R66_79t$s)PE0`jUow zRjX5IvlaDD_5Kz%mLxU}y%jyXNo`5~&Hk@0AEDogoW?1oFrocKX3Yjhk>I1=>BC#xC?pMN;B*dq};6?4y77F!k-nCG51H2W&h+3>kxP`$?`+bn!R zI*{(#>e}ae6j2=X0Lca=I#@FJG4kI(K7KSEapJOz%lN_@;>AK2|hX9Svgo5lOstqs3U7-ShJIx3S3u`^fjJ3F>7{M$K- z{FU|V_OdTY8pmf7*B5!i-N)g@#3k%^S%p(1RHD=b-|S1`F~28{eQ-$d{6QSni*AZ; z8(NN0{?Vu@X=7$ewL=AFRiDJ|gjT*6^u0WVtgB67j3uvIRqm+FWeR5#XLwONaX%7n z;|fhoc_Em?oLg zYiyqCTXzgae-TP4&1Mv%EwIZO6!AI30*tF|QNLL+_!`5wGtkrP;t)G)SCh7(p zh6{BT7ZF+a#fYL`RuImTq!I;AG5z#jy&viFr6c|4n~x=>pPH;jtjDZ3e$TUIKgLP< zkor3n$NA3m%*Q(mdLMUAPGx5~QiqskTSDuloANtE8(W_i4-5~9i0c&S9P3=@@b8Yz z)mcpbaUR{h@7sFHyFD@cxb^H(Y@mHs7fDxj!g}KAU&X(*XW|vnA2$A^{B<%ZS95aP z=|>quxkRVKsh@26K0z_|NJlIF2g{Z`PCr%qRo32fwmbZHbYH#g`$gv}^I~P=40GX( z@{aI~SFCT@68bom7ljQ4hrLwBVTN3$cE;bwmXDj&zlx3i*qrzICqGMt`<7SK@P*Qm z&Vb#_M#y-Q&EZIFR&thq0Q>n*^VxUxzH3j07wmCe_L}iLm&RnTW7b4kMTU(J8$Aze zW>*RH8}&0Ph0UBcJvT+KlE&5hTi&*0R5TeoH0}Dd)%jYVZQRcm7@j+BdvQQ~{bM3q z=+Ru;k&nw+@7c)$@mzpAa0HVX(7%~Dxj2L6TDxpYe){DbMLVCaEB+$OmB z4+)X+mK45;?y0CMi$05ehX|GE^%l{HNq*q&kGCGDyj?5_ovYe2x)e+bq*(1xfQQ z9Z`mdqT_wqoYJPXKc~Nf*wc2 z!MR`3z)Hriz$90GOAoxbCm8aA5w>BrFN+?2wJ27+e^DM2g12e&u!ZfoGUYlnYU0|- z%*-sb3(?{4=cmFjj%Z0sOssL7u4#F`XH>37^5oK))?0zK-;dTXLEBJs+`wXaO8Tx_ zjsme+gpgyD7xhaS+!PxF)*o+$JQ!5c%xkBGg@v!^@~zJTGY41MO`1Qxf6qiq`>wjW zy1d*;LR%4UX=%x_T2NF}l!GIFaJ5+{YtO!$vO(Ump%#bndY`2mr_3k= z#nbPaL$X${KA4b9bM0os{w0DbF*+{ z&*(KBa&V`8ojos^SWe*S_Vn}l7mPwe=Re9H(S9>d1eO(e86EoZ3V&?5F_*psZ^_;U!?et}=;JlZ7{THDwn>lmh8bD58eC`q=vlLh;`Dj>@2iFVYp&hCDf#D)BsA zW^xyGs+-#Ok~edZ6q>3dqVQ_DT(rrltFJE-JNEYQs5P?K>EB;GI?oBX*eKC1o)7rz zRHE||?_$3PSN!VFa-GAZX_Nb{DGBz}P~o$St;&&f9-FIw=UrW0`+p8s2N!(z+K5>6 zuxdxi)(T!$Fdn#kT zstVkH5JA&UO3<{7bDJzlPW%wf@EOT7{$KpJRfRiUHZT1jEMEB$L(dWx_xbV{uWDX|t!@%I5?V6BF75+w;R!-?LqlI(s68Z_26cKy>Ko z>8lJ_!@i9bDmyqhOxW{DF>!Lbt_^2l(Dd1!6BQjFAHNlTX7BIsZ)y2%&RHHKf&Ss$ zXr`C$9v&>LtY1e)_D;H>Uc;qm5)@d8W8&jS?z^;FaHm(8wEVWLSy&?3c%LU`rY3$N zzWpcCtro}bv0@B!Rc%QSt*3RPs7v!pp~iUGeH!@hT=#@F^RmpG!)e_FHIGHV;?KoJNQ8C6EcA;% zegQ9D2uZ!q&wujyH4RnZzXNnCKMhmUcJnUeFby>|9M$oSjg1BWv$>_7NL+G3PV28} z!DPaOviGpjUcUR|Czd%>WJeZ2fNH@>dNGQl$}qk$Ud+SI{mGI`R+CXZo0WydgKKJU zrUPH<^Ng%bfRaz7#f;w9_XYH(Y12`$SxlB#UR%`XxN-mV?|$LTp@G}sbs|-zdnrR0 zt-v|<_ZcFQ{^@ug?GUCvV*>G!h1#-Y_;lwJnpPL05$oD6hT-+p>oI~njmpVNvkpp{ zom6yZ5T^&mZq#iN)2`iSOUT@G>6xo(^RS%+1YhZElj?zklM>He{X2 z{S+(0LcsZFkdj`dY1@k<>j>R_F;lXd{QUgF!f<-UV2RFE_a)P{4 zUE0W=g$1gW!kFqS)v@|f@jylU$0aFRGr0xI0R_8e#TWS1Z%`7vWQ1P#yi{O$w;lD7 z`pXi1u&;@y2=`_JI{$ZD4O3R%Xl0sA{AtyWU38*o89%X{k+oUJ`kmPZ4wwj~rKM0Y z{c#jL)?XW4m%7uqo_OudKr>YxhX%ISaec)zB1(5R8oKkS?bo3p|K(Q#68k5N4@HE9 z+pn*DT@6*!xqF=(2v8H!(_b9@9tu`@XTX{*9w-*mn<4UiH`Od)ql9w z^;T5V5NNvr{D_{%Th&83Yp5MjA1#gkvhx4yD zrISez*^!;h31iEfq4$UEHHI3xl!<@yBeYa13uK+&^XK#tmGiTdOxXLT%AAx93(q)y z$g};_hp$S9E$?-^R9X7uftg)KA15{;f1hH&Qui%6%-6KPbFNxQth96-eoQ0#INPkz+Z2LCr zp$KPoz(Oc##ItA5HavxEr&aL6T3T8(n6{HS49AO9^L^=TTk7hbjTI_Ggz|Jv}`a1=aAv^h#gF#`^6xtvN5W-!Y3h^Q*FX@Rca0_ni*25IN3U^UYGL zO4PyMtE(s5wIjrYga+k$A=Gc>=WB7Xk)kFqPPT-|)igB|R2b+KYbuM-$I=5XzFJoE zlBt@TFT(!v_4;e9L54dSUpY3QQ-q=U>spqR*zWCySeEfmQsFr&zg{JC=}hnH3DG^*sH zpmW1)uVwYLBU(ksu9Mg+@A5}4t zP*ycZ>@tR<9YGj(adA;rRz@QoL5hv`N^W^+3285E&N&kE+4JXnub|-lcc&o|muh!+cX-uZL`3A7Foj|w2#>4o)doME_B!2+i^t*9rU)W& zD6npsd)n6-<&O%IA~E`N0Egp!gHIT%4>)i9fxkpY7`vS+%%B}ax96B|2B z@|mY6LhBAMTe8xQm#>2Z%XTY(=kf8Ro+ZH;+Sd=5lfPKkY7+J?xvsbiDe&RFCVLf8 zWcNyrE?Mc}%Mg9dJdI8V+`U8%rZ)=oK5dji_7Cnx8?)O~8%X8tcLt+K<#E!}e{yap z)nPVJNE$#@fAQi)7enonejIgm^}s-Q{OOoh)dqK?Wf+oR_LUho9S&!S2nh)R#8`80 z@@dN+T+JA=j_IXMR(i^vu2sTIij5PA^6?f22S=F3)2C164+hbxL%YN=^y-m71T1Ox=|{_qj8dV-cSGP&W& z(f)@vXGC2^L9;k4A$izUU`F#VieU0o$5gQp#T zADzc41uZu!6?VJ%!G|2JjZpDBrkPg8$Hs;^X%=cJ7LFye=ob|i%ge~TdGqGu$B&Z=deWQj=z6X6jcMZ|v-3Wo5NJ9V8aZG1Jw3fQJF!2l$|0X24}L{B|^7UVxXE z2^3T%KDS?=RtHnnbHph654yXhDC7InpaB}P5{FR3W*i$Iw;9SHA}2T2(n7{^e*8F7 zgURn=qnIk-&(i+BYyK!H5z(`q8NPBoC^#}gLK)5PfWhETWHoj4^nSFyI7(qP%a$_yco-;-v6{;OY-V`F0hvHAM=?9Mh+Ha2?0 z6N4LuR%*pPuZ&}^l-Hj(DD=Q1Q93Bv&tUMzlqqDQKv9S@fiTZ|{R}#IUnHfj25*zVg ze!Q5^##o`iytg!a>O%9gt*_}kTwGkR7g7gTb6<9~D$pmUn)+b&AN>4joJddQf2>K~ z505qRf%5KrTZ{9YFcnqKja&d4h<35s<*yhHXgBh4u)zi_5>b1-ql1nV; zSu(FSfSz^@q%EFY2=<8%-2JLMKwQ}WO#zn|@EN5OA13V0d^QSilduPQqS8sT5>Nj4 zVcO#Lihdv^C8emS$Z58|dU_iw5k!@7-Zq#rc^YZS$+zAMe*GXw9)~OTC+OXKc#5w` zxulqruSTx_#j7x|FfoyecsXilXlQE_tjENI*sT0H<~aFU0tF@8Q9v>J6?ra(_>?I$;q*&eCQS1kA_9&=jUPmh>3~8 z&f41EF0i}!mM0A(E&k<8W;Qk_TU(9N38}oQ>T3M@ja#>gjobasVJ9OYA>EW4Cj;7op5elI}IHX#vJ?|J9`Dpm%KcrK3PpdjE#<~lShG|$^Tg%Cz#VrFOd-$-Vre@5FJG$304JoGg*XpV)o{X25mw`c=3Ioa@ ziSZK;Xlep3*%S7+_-^CXbqyd!fRWwfv6hjMc}@Q?K_Tc>nVtg-Ol|F?IcHo<%r3Xq zq9SYP)SP%B)Pz{!16E}Gj--l-ps1BjgzUbb+^RETi(4L^s$KM1KJcc-K}JCV-N~r@ z^z5u*b|-cf)*tKk?fYb8aj-vseTs(lgbQ0*q9MdWdW`!UfOfEi>*=;(w9K!yHF?c9 z0D1QJ71Y(AdwB4Wy=rf7*VWafj_BMCZc0=t^b>>ev#_ubxWCwi7P_>S6FB_&bI<_v z8UdI2H%f)jx9AmTcD!2VuAm=YfvzSWPYIZEhv-cuiQ<4|^&6$95)wfY)M?QEV(;-R z(n{jNL(9{^2$$Ml=x(`n!o9)vmI9StQK@k3@7bORc^u5bA3uHo`anU)39`RwvtzuM zmuCz5`ucy*&%3^J#%mL9sqn&Q&MVnT|%}M%gf8-)U4W((lyt}59}>r#6Tu5j6Jy%`&rQ0 zx7nntKHO3z3tRipTa+^XY~FWIHCyyWSI8|~@qhb_Iey)_2|aHGMdUhd$G1+Pf=?#R zTpS!)+*g%gOh)0;b=vjr5$D~7C5{RvKg(3ueSz#Q#Xk-Cn~n`uX}7l&2~3K)$d zK5p4(AGAMAY{Gy5QUuN8&ap=AbgTd0Q^h0(f6$I{*MOX**`~>)!A5EsB8%_WF3}+( zB7!yu6PI2Qq}nH>`~W=F)kg}IQ?XEy&B>x=x*Zicy+f#D<>+KJp<9Z3?^8$Nl}<1x zD|J~tNi!(a>N3eFlC%vr>#?i`vM@0@xd;8~QxyJUG-0$1v<@hn!oosm7cg5`cPuDh@ENZ}VaCy}(bu=b_h0N^;+p0>mR?cUVd)Rf+9nXbYB z(EC4xUZ7QS^cdB>t)|8u`jllg>09Tv2>yN3xg=3am#Hd?2In~`jA$9!1O+SZ^uxo$ z#KgouepjF+p&%p6#gZoE-`q_4Reld^xBvuDc|y&*7QqmGW_LxIn4&MBG8a4e#ja&|%&wq5;&|+|(p1 zCwDV%l?vT2jyH1Oxe30_6mS8$AwWZelsf}$7sd@p_3{0KLqil|e%|nDAbTn%evMHc z=gl1Yv2_BU0BGIb$%*aZLr|+%+?&eF%kAqfR#VNq1j&8c=A9cN!^4FJ??-6DyiqI8 zxAOr}#Z{9UkC2%7;`|)s{rM)3esj*RZ-tWVMql(bH`VwGe{8AyEZVEnZCq`@YRs-* zIx*u|KRi4f5`w%>)M)}J%=KXq{g(5sWx<$UduQitfUcF5m9Rr)B6OH_OLRcPu;rca z2oz^yQ_UZ>vatazEiv)%XhfW6n&fS9uPrYQrKli0Ou-KvsUBxL_j@?Y^+eo$$*`wp zW@YUxFQd5BrlwB9xGPf25`OyS4J?aktG64hp>hiA(t)>8xfcvF`?}`#_JGL>6Icaw z9P%I>H$ifcWVsDZP3M6m|GT_=zBBWH5Ubbn0N_rMdQSWEy?Ic$`7=#`CbSeAu(GqW zt0^msc&=+GD-YV__@7Sbn?Y@XKwDZ~{;GfZ;QXISix*UroIvV;6$oBHTBd8BDuYcR zi3em4ShgsoI(sT8bq|@C)?EVs-v6ZB*4pZ|`_qn-G*@3;^gzbdmD7N-GZk7RHQu5i zJ0X@hKvJk-3h@BrJPpvhcNaRKpPl>%Zwgc6$c5f%Fo`~TB$;pq>_PU{k{jGAP${(x zUPb0)P(pAiMboG;5)?dPA_G)Xt^HRe{zJp~z!PfL>fJ-1Pj+f1n_C@ujlPJaLHDo7p}cul~l2D2?%#vN(| zl+Qa4-ZMnu8(%(L35x)$jkQwWNK?`Q%rPp zaL{H>=1#|UJo@%cgFW@Jkr9@|^uz=aC1r&U^MrjJYyu`i!8nw_``8hEeR9DPxq78} z4U5EZpXh}t(*jQX_fd`Je*Oe09d5K(C0$EX6Y2D|QF&Z!?3=+=m{Cw$wbnx+GJK)v zxWriDHyC%o3K}3iJt`Utaf~iA+z-rXCu)Lz; zx2vG0rsk_xuc*r}|NZOi|M~6Px3Mu~NxV8E3Swf0)Is3F@Va~VuDP?Miym__G)KpT z#|_TF`Cs_@N=t)21t8$+>I&eOR$!1nL$VSmK7(JrK%0@E<|M@)9UX;hWk|ww9aUu@ zi0Q?`#C*uYf)Z*cp@M0}O9t2lULIr6psAlGDbUj@j+t`?v9S_jb-m%q90GNw-z|#l z{wujf@%IFl%m7f$2|#e;&%A?%62`)b4X`g)ue%E)X#j?JE?Uc+Gbbq!y|`sRF{+Fw z$3#=M3W=!T)WMZV<>9@HtD4|`e?XfM^+F?m^ff(Zn`K;LkSf-M6r*C|imRYyHS8Mf z9u)=xrWQO)B=vR=n{6)<@@Vi7fk@l(c4OjV_oVq#Id|Pgn*k~g#6}}tt+n4*z;u`_bQKAZt$F>G`Of{RY-6O^Q&w`lz9y2YOm z&dswpyN*g{&nUVxhK=Gpf}Qz1eN!w-Ob2-;TTI-XD-MaPFaBQ^VC`X;v$_z8HRWE> zuVeCu9^qVM&3tp^-R(Fh&se_I@;v&x;dfE6<|(wcyM1z2NxW5W&~{p|hAbri0j*ua zU)5zK`#8XJsL8AE%AHcT;djZyc~uLvNs;V*%YMajDN-Rrvrmc zMW)O1oNxKWy}y33Zo`H)HsCxvDIqtiFK|I+ZI<=PcQrad?iceS^S(TZtN+=~J8_Dp zv@u!sBF}`FfLG1FKosIiI|Ex0zKc|UA;@s8oH%x43~a!E3Cdc{|G5M=p22Zo+`}w! z6*sUHu)`kE(>Gdo{V(;9{N~y#IN)}J3T1yvK-WTiYo;+pLc!Q#bPInxS@!+@L`@bYbMYebQ4R}?%6s^c;utzQLO{yCC zAGqc_q?jC=rzJ8<`8`jXmPq>8D{0u|SRGnpPI_A!!W87of=oPd)rvF2-GZViopNNZ zVFskBa@T@PBX<*NaY=HUV*+?i?pf3Cd@PLNCarU)4R||394g6CfP&fLn>tFmcA$a? zWUe_(P^FfUgmPf#FwB)@U*rO)(clnYb>f}ddNg?$9#a4 z!{V4)^Plat&2fr#d6Q}1ZGOXvfnbihbq|!e#MwKtysB|0W{e~<6D7`u+j6ni+PnkR z_&8&`undnli>xfdUO$S$yYRuH<@?=7y4O#5;V#y%`sFtN>__Cd_`aWx&!_OaACQZq zJCWcyTeqadx5P{X{tGL5h@aW>)DUmebEqbU68k}{Qm)+>OP+K#pStSckJ@^rz4m;M zovbqo*z{^A?70j-@+v+qGa)V=u&?_@?^I33#vj^iT{RQStJ-n2+ftG4If^p=@L`4= zhBRRuU3S{C3u8I&t5IGx?Z#>AZris-T*P#FFF2!j8!75AU^OYoM|9yRZrz!(?XhD}Ip zobR~8E=6cve>S?o-w+U~j>ii=JFen7nwoAqGj%zES1+hh zu2uQ2OXwd+bx>2BO4G}Z5q8`0D<;f2=TVwJyoA;&h0%68;{bdORA&GbLDZu5-`@lN z01@2pd^HtR&$(=5Rv`s-)L)x`IpF5N=YKBXIQ2Rwr^9-PEKEZ}q7x*+j?2?oXYP%q zNGf(_<}cvp{)%Qyi@8y5U{!D_gje?V;_;A;-{;H6gVW^?*9UI}5~r1p&iB&Fb{|-@ z%8o1Hn*<0d=9^qbD!=_MKrK0bhXb&pH=q;5&AH|~8)}sP$D@*=Xmt$@Bbfpmf`Vy9 zcF&)mbzEQWfj$ekFdZUF7q{3Qmit}-hZ*_u%+_i=y6)UeYl zeKwHz00>q5qf=6;&$F|Ci*o{meU6!=Z2#;p-2@YunEpUwB{U?2x^xC&E2iE{;Q#<{ zr~=T`KrehUDk}BF0=-gz8qMvBl{`#*J3C*D+J-ydgi-OTy3E!)1r4=bU2O5HhW@;O zrLoNbn;^n~746@|uV0oKMM%0C{mWqKAk9pH3~HBg^UnBEH`iB?1PW?pd3m@FD;QK& zCS$z*7sqyM#M08zb{PR%)GT ziry96r)|a+c#ih=_O=;l&NrWFZVZG9fCek^R?}K`zTL%_WEPNVi|u>{Q`j)_7_+@Y ziZ&oqW%K>LCa-Fa=!?7j>PblWjH^h&rY!yOo|lZRK#e!U5q?n|F4VeUi)Ed12&H?+Q<@lP8()U18S~h2yGa|X3!27p~l|X`GDqgz3)|R zpt1^R3fwPVRj9knr67oKpPwH-%_xE!kH`B^Ru+$BVsu-Fu z2_sQxc?Smv;5acd_BXK^BsVMs+@F670ykY4f}USooQlR1wr`OyAol#x&by$u0qF+R zI~DHhc2Hx0L1X>{B<*(3UthnfynF{Wv`7(T#SRSyAS}NzNPIYv%e%YtP_%}InD$_j z#YaY>$Mk}OQd&}ypi~GL6g!3IyB`#Nx=Kn~njnPfUdbip0R zs58N@7`6QerApekE8dca(s+73qn}|Ot?)&T4n1c_Z~jGn)#d9MW2Xlv`U7n40p4G8 z!`(ttEC}Z+Y&}wa2ps1n%y7u%G1@LROGUi4&DoJRA2k}awzc6)k-aLKBxiYzBFmo2 zbMc^T=&?&%9RzHk-+&ghapEJV83!IfbTp0PO`}J6lYj<9L2*YEm5p1W;H!4fF}BOC zMS(N>F)krYQna092axnY!QUU1r*Z=R3Jn6hZkjjA$#r()3<&=TTV7V;K}UX|iInl^ zGv(8c5nW=3pXm^J4!{*~B0c6uph@~bXLD&g(X+Bzf!NBudo^6;7{onnbpv$)CrBl92D_!!;$?JQ=a&P*SZh}8p*-{kHXDIZPD2z0PL z{+-L_*WIRVHuu!!ud2#`L_4zo<;i4~H`KfLMqw(R6nI8qpQv6dVp`+M=g``*2KuzexP1mYC1;r*qaN|<8@%l+WX!!U$|6b$fJ7E^B?YD-{Ajca(o z1!-!ILYI9ZIv-8Ih$of%2Ydk^NROVM59Nqcy?#N{fFb&K!NULgNzN6ckV2$%-yOTr zr#Z}KT0aAH6ub!mNJpSUfJqL19Vk{XXs-VSIdi z;l*0k`nqjoPc>XAxF?Q38xH`1?6sYlDkwx9{YIM^gqA?!X4v_9{V`Jao z4p?h&buAc7LQN~LYZbqU`SSSv*}pH~+_^0ht*+I1pyNs8uPYd%?p6Q7L@!ssamiyac4@aslzwV|CMxqz!`S|!q{otIc$+G*FD+v<$(9lp-LybXM zo^)i07KleZ-QA!FKn{U0E-DHH1!$q>m_u)cjv}c7rs|z$w_sOwZSqz&qMte2~48Tbqk~r%1E(BJZ#%uHqMFFo#)%e^$81&YNjDuk)zo z?m6veKZ>wc4cqFt=4}dP`ev_o7b+;~uO27E`n%&kmB@eDmPIuFb_YHev#O^oU*!^!U(Gj}6B zn(dIm*s6KvZkRaQ?hsO-eVfqicO6B6ozm9>mOas(2jmPi|E`Cwghrl-lSlhddxLXX zRaFH;Y$$`zVUc{J_22a%`E+fs^TX^5W+93B&AP+uc1}8iG&kg~KE;_}+ZAfIR~aIr z-E3M{QN`3XavmkJ*F3?uZ#i6*J0a=m^G8{=0xJ`Mi7{L&TcOEdiLM%FX4uzPZJ8J+Yy5#2^7m)DC^ zov7zY%C|@^`4y+xxTvL~iXM_zTecEM3k8VQADbR!v->jU>?3gRMqJquj7Ih0=hc00 zDVmbS9aA3&^B^r5=)UC?A*$ZRiCyh1a5W^C@xoCcqsTS`Se0Z7SNtbIF!P4CCY6auPIlVzC zQB{?TnK9SoeCYgjYa~|0f%=D!$U*qu9Bf^M{Q z*aob6;PCnVja?ReW3{>Ab!(q_afIthpNy=mkiZw-PybwX=o-270<%w zZq9ppY?OI~-6^oFl7%V>wlg}8m5@FkFg6LPE&loAW6vhz`SPSTFYGVR@9PLiZvFGF z>}}>l%G%&x!%ex8utnw1yaYrqg2L5pV+$^I_dYq2g)fja&o3^J}1z(VI)Efw3vyRnRyeCBk&>MDL3pUX9NPy-jEaQGDobF z8|;1j$Q#ppmx}6o?)gGfQxgPjSAX@!G`K9tVL&PaC=n4MA-RZGY|j!agi+SNnV0t%oE&vf zu2odPg#u*Z`1tWG6fuYt5bD4PX@o!+WJ3^h_u4zHnyVo$^YWcqj@V870es0DNdag$ zoYJAC{RQL{{3jb3nNI+b)`l_}lLk)r767N;cz~dcfUF_F&tGG}+GZNK*ohSOE#%hi zpL26S&lL^a^G9v@!5NzO17Hf#_=b6(7&}k6Ye?9G*WmX%-3GukDA1|wCZKa~0`8xf z-~+G_8;czz;IkA?0$Oms{>{-M7M87W5>p9`2Mi1liUf290gFRmnLznm{bxSf!9xUU z4%sWPGT^v`vbuVFRFs0U@?R*EaH%{H;(wBcOO1a2?g;_C#m|5K`~jSo^Ac;?eB-E!%gCCObZH?imC$=Xt35ecxk50$?(*A1p8mzkHiC? zPz?OEXU|RmbT&6PL!1c$vF#w1K;f^gtwC-ABC^#6-|e4)`R?xzd49021>+#=;tm@D zoGu8^XNvg?OX7h*18dy+d@ozA_~_sO1peitbLe4SEhhALh4u;@`CC9g0*nT~2p|J? zY-L4-9upx%BWY;5W@kkpMF;6taCxA(czM6i&9y=5w7&kw+}tCm0Eh$9E2g}86BZHi zOOX9;bfYn39vxj=1Tu#J!a!|GN8&)1j1m$tV3L=ye>N8v@3_HUBO@FP48OmZXhRnD zrq|?t)*^fcCwzeaLHa*DA_Cm+bq{c7A*P}oJz(W7NG=#>V{QFoV#1`|@7|&hxD1_- zA=htOIsxbhhm1F>XKCG2*u4Mr)a&^6RI+I$nE28duc*YYATRsAq(lgea}XLNEBDPiYO)SH+hJ>ar5xpLhdRvtTpvNnE>&RpO5e4I{X^WFhF3& z(Xp)8@}96KlO!ImYR{tN2@OWb5+&3_+0#(|q4yK(B#ziEb2xYwUM&>V#)w~Dz=Plg zl3kmWEtn0&F}G~Bu=zn9;7*6bFI%v7fX&+=>jG*=>(MYoBB6L1AXK4m`eGIIGj#=p zKM>NWcbs-#`HT;1iQhC+tAzF+uS@i_2#8- zZf*`1nhFEh&z~SxSZhDQj2PN2o(EdA4wmfAF*hhtu=ws05J0RBN%=V>WZj#{3#6>9 z3LqTd=hr%6|Fm}6m_3zVFEWv5}Ew{eD9{lItzP^jUf8m4+ z$VDSi_FP<}w!BcXN`+b)=5V}E?9XB-gfr;Epd66M={LbLTbj5 zqB9#6TZR-P!XoGwdJ9tAvLpXv`n#7Wkg@um>GGB&gc<{GBuoR+u#2BU$c8u{N#X&D zK$TR<;01mDW$!PLXFwK%_*#8Qi5(=35Tv*B2{2Iig+T;bTU~`zLt~B~W=H1LK_7HR zK8GJb8>-+83oR|YH=Kg{*DD~aY0N$eR3DDG)YqT>FA=uI5*U)1ISbhu7%W2yjgTpV zO%KAjGsL2Uo}@r}0D_ucJ4PUx+?dt+`UI$5Yez?ihXq<2PvRdz8h3qf&&=5PZF>6o zH)-5Q0DtQ0>L3i5pg<4c1yUjJ?1aU{u7Kw=CvU=V=yYp^kYiPqE8K)pd3{k4+RCRY ziylZ#78HnH&C9X`@j1!{`p zo)BnjY55DG2WcrO*Z}JSuUSKb&#WZEL2y)1_zZ6b$c>1U6hkqkS#u<-jq#1)bxWZ7 zr`ju;NlFYUqXza%o^l~oo^l9dK=vJGEKDm{E;tgw^vwbNVv|R8+LvE1s1=-rDpc?|op@B8VV2w#DH zPgPnd7b14~>eZ!+qM}v8$1*Z9m|0M5Oc6fbZ6KE*1I74kb~Xc;467S6{R9G;@g1Z2 zhwu@pK5UJyf4|L#ehV?(pwJ#6f3zIEk+Y*O)TRD$@+MhqJRYbff|PpOqfBDEwX5z4yL1gNlafxkc8)AJIFR zZ~PVa&9o%Y8-5di3-RLO$Icdzw7q-wq@MaR(Wzo*c6#4$t9+(5T`x`_4V$AQ=CYek z?udjY?+dP)@;YvXyVbP^69@Jz@AvwmMlpDejKyW0E0h8@M8 zilQxFuT3n8u4-QERN>EF{IY?Zy%s6R{48RZVzu)`(b@=GMNVdWFjgd_B4?NXj7;oHmK(C}){ zmS_p;!h=akPgZ&5pUeB9{oQQIF73qW`eeZuXkVW?PB_(Eh;Nj>H9PRDZgU5RbD;ov8rN{UN z6RhDA;t1jf9N3r)C;CtRf73ND3qO5YSu)9;(gdd0F~=1UbIr_p{m49aEV6B@j7VO< zyE`zL5TUfU2SnNj1$9!O#`IHhUbG0M>if5Ey^cHPIG;k&M{|Q(8u*rAj^snkQy>)Q z(>AVOf35Ad3Q=d1p(^k?P1D1vzf-M-Gay^O_{NhbPY4FgX1SHgstK+ayah@F+z0MS zb^Q5*C}So4l4wNc@#F7)&zynys%Yx%3#$uW#7HS2vHSl0``+gA-5w^=H7~g7Y9z@ZV`N|d}82`8z2T$F9cb1)ZWZHn!Y@#AHg_!3&178~yOZ zIQODX?wj6ww`RhvCA{+5T9@q;kQeqr?Jw@^GfaQU&Fyq0LyQ8T^jXf(%Mi3Eu*ohwG@%Q9&iGJR zSQsfb!rXyMN(c7r(F<&CC?6UU#ODHm?lSEzgc1grmoU_no4FpwGccHc^byTCg~4|! zxuZ7masRQbc268Lb?V?tKdBjldb)ngoEbZA+{63#uLrg*adUf#Mu3isWmv)HI5B~t zC39_~9k;en<1&~XLh2$@oxXN0wXT$`PUTU=waq)_{4+mFy5jHGPoIvgcwSa!nd1~b z_u#`1^_SO;nlNE+<(ED$#&pOw&bd&hz5nhoVb6104Kk)M3J_pZ>gti|mBb4aV@_JT z22ZhZctYm&S1l&D6CPQmMArkGP7w(J7=|b6)_D!n+<)MJ5i*ez$?$BsVOf#hD(MT( zm~8mu#E3zVu67OSLcK(_=**N29`A`05>XZvOT6+I{M^!YGj@O<`cKz&G8UwI3YMfw zFLhfQrznfwhtkR#?Q@*^_U#MsVIN2)XW(1iydKzsVJ&T**fgo#i_gWF02W!^Rt7v^ zPY}hfFaG9l*bwQ&;u8ofo8hz4fzV0wV&$#p&7VI9)QA53qKkHJB_aI2`?%M-%G?Y zqfwgStu25vklkIhz0a@c8e*As{=D2x#R0oP{GkS`$v|q)wAYjoS8LhP9Tt?3^Yjy8 z%wo-@#W|FOfKqVIkrPQsOVfVpXlgPlLUv&EW)p)83MsM|AWnPf7@?ws4njt?*FTk7c+IzBdd?=WywpR;?Z?YuBy2`{02II0+(9_SXa0^*~%{M(e!k`@R+ZJL{$sQ*Dl}Uv$FDlgk zuR}56rUQc;Q6+i==zbj$ z*i%%cTNkzkLNPX`)V_0P#vXMvt2&9(p_3Y^CX{-F297Y7fqMgA)X2zHV=o1hWYmp{ ziVE5&l%e!ADfSv0GF`Nzg_Y3IN+24*Bx5w14t2ZzsZ$f|)TwH|2VUdVG2Qr2B!-}a zV1D$-5j%~&i_gKX+67(zjbAl03!bslnPIm}Ov-{$c^ zjDGjS+qZCmsWHOC!(scQ^$wIM)7?H^uM4y!h}G@cNWo>+)4T4rdiDLvN~Q5jtfnzp znLjAC-AWvUfyhmojJvf2I|T0w%k=7aM}LA$Qkzf%b6ci_1nROU-~aU+T)TroB{T(m zDWu&VsviDwJ5g;0K$$=s1yTkqQM5B8Z8oHhLe&0bTBhG&X061L0K?Sm>})_cp>nc0 zqA?y7Wr@Z&6w)U&1zZ=!=+W|VTr$kqC<}-A^FK5-;bozgl=aAm&+Q(%_1j>XTTg%P zdZ@5(tgol*Zk_AX2j$F|7bmfC>AC4U57rJ@^+a7`e39*t0r8@FHc#H>ZR%q#FZuY` zi0i+La$AJ1wtVgEHmqMB{9R{ciqG>Y>Bajz?_7syu=T6a@52u%1{mmZ4>XHJL?&U7 znE)a%?6D&R&6;)p-aQLTOQ;?HXfi7vnD1<5Y%4Dz2uP{Ao)&b|bc|%PVGgbcupAr& zrReC}j9#xC{bwL#Z9>z90O>j}Ayc=5Vly$RzL zVEwA*_1KJD3kBg>x^yXgb^veyt>3o>xp#IK-1_hx@LhWE+TVq z;w;SEg(xae5N$oOOr%>|%5y339G#|!kU8>|+=}mk#;aF8q#w(N~)Ux}#j)x8`&2dj2278@G*@)ZLh zP(g~$)=>=)BaKG17uQLTmY2BXKQP@JrZ|9x)~Kd$?>~J)aOA0Q`mwrUdR0Y1PErPy zoyd+U4P)y+`VAg3zQHP4?*Y_;;RK6B;DU&vJrU%rf$iv>YL>$6|mRp|3VSrIVy zPIz^Ost?$=$N(t~!y_Vwc}Kt6D433v@A5IQCn&Zsh{q+}sd1 z5dv_pq935NvX>VS0a+*f@pN@%)8K0i*8wNuZFVFi3{h01OLok8a{IP7$}*Z&#t2l7 zPo6z9#Z6-M>NCiku3p{BeJ@({3Y5lH{V|;bic$gB?Z`)vkfBqz$SW&<`tX5gxf%62 z#ZXg|<#ER^EiD+${403#q0?P>vwqPZKmSFjsR?46n;(w^q2VG$%$d$55|dL?f!+lJ zCO+IEn=Q5TzBkkR-P4aDq7z(9P)F|d>#xenM(FCcGR=Yb0)ADSMxJIQlh^sWXxl&b zBG<*&(qN{gy@D`9vA)9Fdm~tupqy6R3GHsUID*l8O>MruzRssz)_$%TJ8@!uMaA^X zZYB&m=|iakfYL^d8dY{FpX-2eHe$q4Y5~A|K`!vYH|91~4zjgbI{W7%=jTsHjznSf zAZ2_L^)!_cZaSZda@)7(78LA?kMC;Q?B7#4HO8amCJSNcmiVT_v?ySUQgt$&)NFHPShAA9oKULM$7YYi>g9H~RKy82h zI+>H>>f(as30KCLDJwgBd#Oi;rl3=Q@&u@vpT+L(gbB&*XUi^4mA4*h5>#7NB{Os= z6v$Zu8I1!mbJ?=v=g#@Ddugeu2pUx5ZO}l_8Lc4)czUv2mg*g75N22k(0b=xI|faQ z3;pRt-*VFkD6|#eRWbjuwBKEoTfEy5az={yU4bDJZ>2X&H~*Kw zsMxuD^RsI)M2yHD|?4gq&q@b6WX}v^J!E-Z4gJI z4<0;lpwz@pD5UT4YXR@#rmO#LD<8^e&0}<x?CkCGeKj)+_{(xKS(!a`WQyFn9{)H%th$g z)2Dr|wt$GvoGBTuMuMcB<&ipX`~B>M0gew51B8=mNm)U%4hftgkR5fk2cbKPaP2A$vS?T&S4!b;H|J$N9! zazl^z8D?A;^7FfPXuh7VQr_M5E#x7T_=*rDN5by0VPUZKilMs**@x~A2@<3FN$xTrOm#i|;sMK!YcDQ$ zZvOlkiyleI9jI!DiMKPD>ObH5<#1{Y-44`Xo)0B zbQX+onG`WpAVxXn$Xh#5M6++%k_`1Iu9`o6(phk^0tGg+4RZC#m1mgszzio9kN~)# z^^?)2A!r5kWaftKa^`=YD$$XV=o3y~d49}xFCeJT(xr13EYR9p*%8!DJ?7!*nR(_+ z*QcjrCa0ND^kHiQbApkknhf@0yrrr~k5>5jRMpf7WScQDF$D#iNYNo7#b_y+H!x}h z(QA7D-r3!KDDWJB-PyC?*IdEp&z~iKoCPjrDqA(8VZThQ6^H`kR{-v(j~lv`_guDYWUSSK3*NIfZw47= za|Y8nmX!3`af|oGH^Gg-MxvrZT=Us7J*8dcfUT;g!9ljRmAm^$^oYztF1zfb ztO&#T?K^kcamjvuq!-FJ{7QiPxHtnnz4o@Yyi3p>t&Tpb_5DSAMbNwCS5GIIVYeC| z98|AF{T;WSUsyheHi-Tz_sW{O^MEWTm~d8B_Pta#T>SCNmr_stz_E9i65zkq<_Vkc zhT1)K>UFX!6M8D}#=GZw|Bfjt>ZX>G75M|F7>*u4i`?A!#?xoc7_5E{9=puLqZO*h zyZ7(g1FzABsEG>=R)RV#urUBDR@m{A)jdL7Xyi6#XZBeX6M*X^=5{Jo7i1k0pvtUvAL^*n0C>q zSjdPdnqtsMMWs7gv9tDummV#^;-a9-cx=#=pAHvJ+Vx@$s{$LlELuSF>U6 zKX@?2G}zcV+p-Vb1CqOaxjWM16@r~XzmaLP=lb<+*itw;?xEg2eE2n-Tmp`(wzIdl zhVw><@HxkhS!pYl`ePKFt0Qbg33tY@QTEH=i!qAgHBIsr<8J?5Rtaa0r4Q5NoG#_3~v5s_@L2Y-B`EqRbz!CW@Y7H!+g z*8^G*AaomOOLARKQ&3W+GUK8(WYz|^F0oRuKFI1*)zmWnEAvsMr`&-@4Zyp%^5goy zzy>JCe&Ee?W0j4}Tee5Qgh6HPHQ0lNH`+$ z6|QRkIy!ni6N$AFl?Ch*CMN1mR#HqF zKXcb+$=bfPmW{D^P6D2cd2EqYZKNuF!0xumFd1oi{|KYr=*GhhF&ey(pt!ecw~*NR zp}roshJ+0+kL-UxVv^+-oz8qUk$bY?`-HFVy7RfFstV61xcpSVtYBh{}TcP{>VNLbI+12>8-M$lT)Y(ma~^zm9^u1Ig8?evsKkB*47YXALv z=*V#ccPrAV z{z`0NB#C+k=z?;V2BY}z3C2^P>eK3@;9iC3S}Mg_0b{792H(6IL1|yM?6|CmE4A(0 zw%`v_h8Wp)`~$0ET|cR>@0s$aDQ|iOLkrXPB@qU*C#>}G(RRu0rPq(LmIjs93P=TZ zwdUy2N{WgpOn*s5K0cZK+n=XvrF62-fUw~$H0>AU8-+iP@cZv ztJk;W|2N_hjTCI5k`ttJDgb87Ko(nmt_0p;0FdX>!YsM+FzG8OgaR8=2@2ZASRN7@ zLQ*;&HkY9|@>bv}`S@fXK0KuA?16&^6$TC*oh(3jFdYdIgo>CD78fVc(oCZP8EkiEuRET!GTXO{)0k7q z@Q~m(XbIqTDJ+7rSHKHdgp@lo??1$v~`}c4BDro1RB*7YySsE8*<$$FJ^%SL-tVrYc zKMZhmw6#Gg=^6(^>yeOHKu<~Wzx-ZG-m<&<0J&(}TuO6&9t{T$8$I^~#B@r&<#atA zdmaat!TdT8%ZQN_qbJxlpmd~tXi?On;4Yhhgqfg1f%Ve+1J$$n+qZM4PEq&_l{(EN z9A?jx$B*e``n^2EG9Y(=z%!Nk_2UPr-<7EaQ`EOwy(yOgxUgSED1?W*R#mb|NcYQo z_XO+*auZL1ViXQ4Ifsgpjua{uL%_TD?h&>ZtG z==M$AcgpX_WY?M+rhSld&j8=x>4P>9`WzPyw;Qs+%i<6L9Z05d+tTB{D_7pZEuKfv z+&o@ipMnQ?>S1N&WsIw1WBZ?~3&DT~i-Q0ex zu&@InLdu-*BlPY9)diCj;ArTrNr{PTdCI(*CA%mUiW#w5Ti>Dp!7PSu>&MTZY&XFx zef5eBN&KIaHaQs*D)FhNMqrXGC%1?GH7V)GeS>pX2Kr4RmJ z8361ML#bSGv00cm50pz@f)a38+s3ZHKlx**nM%sa%++by`I>c?UjoZ@?tA&05g6Bk zWzjCR?QS}w5~q87$9B<8N6c~KZhUX>n+!ZTBV$>Kvs@wmR#sNd!3wyx5`C8-jvLm1NyD00f52e46rv4+?9TqSHN?r&-IL8Qim&Q&3h^u6nOjZW-7U~ z511);k{&>k-W6dp- zWVwH&T;BtBkO2txyKTW=N?uD|a|_%8x^l61K&GnnD3}vRj=X`=UNY@leTn02=n+sw zDNv)f(>{jcSQ>8=u_1$pz}Mw=Jh^r2_{ED!IMW5x>( z_4SV)VJHZJIqdC_H?wr_LyCF&`0*Cb#|REK(fCV{BSBE<1;fUK6C}=KL?b8@Yoj z7XvsNu&O@2zm2=C-ggtxWaEYnEbH$-eqdq8qgULfw(otPk+)?~xT8`og zfVl#>bb7&(Q<@x$p?HP>?4u%8U)$G3V*qAR=OJi8m+QUiDm*rnw+{002?;oD0%Y&L z`wrR$BvDc{*_0FnKjJc?Bc{*9U9=0VRxG-&P45uTJ46N+_|R%Al;6CGyV_?~`^VWzpbVq&YF8vVTIV0|8AMq!xJ+Ce- z@2~yrMtO6go6aSB(W{5>Ip@2y@NK_`;Nb*T({1N_bQHJzn!5afDu$PAK1|Q(VA%zjZU7Er5zN9;TNC4- zmXPp(8OO8w`VbD2;PpU!fmXnj4&b~KwK)@R>RcluBfzTllV81fq2jn2K&s@v;nrWi za1bP-1oo1tsXL>Fft!w1*ul{w&;S9-$?mbSwgMlwCjv~A*_+_tj73*Cvo#FCy#)V&`WPK*_t{D&v_hkhwrV#?j$cQ4Fgnq-%v(Yna8c8Fm zMT=H@cwkUYngzCJs@&Q6XPx$ynwKww5XoiQyUd+So%x`t4ekgLoZ2c+T|h`A6ys(T zqgFvF%~>@6GjHUPBFWQ(?1tF~^CQS4fDbMU7ea=;4r8CR6?1o8KtM-Ou%F+!UFBRK z#*}AIo;;tM>*MG5;rk!@VgderY&hK?7LkCgvm<`+np0S9{n@T)Avt2bng?0!8EisA(vc+}-=Tid77?sF1LB5RGUf zgb{+~15FVdU4HGX^jb1U;iPH&)G)y!=9^zC46shE9tz`B`{)Gz>+e&it z`v)y)I2iXAn(*WAE!X+JM>yqXrWt=Ujaqzo1$+BUpe zfO=J0cnvOtNMT_J123_B`Y6b1OvX6j@@0X~2D9vu;c67Iz_tA6x$d)vCzAV0Oxe_V8=_ss6twibb3`V<70E<*Op zjxtid`M8H3jWj(~)wMXdi`#7LM<;XhyuiHV5G|g`!am=J`F@`mY!FV9)EPTc*t1Qn zW-uqDoZ0R?cW%Vu&_=OMeHLnqsf_EptmBjmVzAgVQ!QnVq2K-&KW|fsw{fnivhXEQ zktqWf_KHsS0xM@p=^gOB6*rK5OfNtXE3X&%_7MFcAA3$KOies^^T3S@JEIzo-SN`% zF|J7?Y`1hWlQo=`<8-4GP~=+wSs%;O!%f#2jM#B2VEuY48C<=k7CM@uHxZ=*?dTuz z|2%jO(a;QO`_*;5LXLyf@U?)3XEW)iP3!O928?xQT$Bxz{5#>G-CsEA3_ZZruqjKT#@Q;J!vFrq z`Pi^wV$nQHt>5(tD}T>XzVxKI=ev)i_NUF49#8XY$?ePpZN-OLLKAGZbb%nzf!>>W zD%Y-Dx?%-i8QVRmW9$p4F2c*sWM`W>`~d9o5Bi_^u(bm|tn&tfxPb^ST{^<4>p3>L z_aUz_=19rbaOPO|= zow0;xi2XK|*c#K099=LLnNj0jCYXuLv3 zKB+I`1kN&i9_3_JG;>Ne9taa8eR*p#1QV^^`vP(uk7z!xsri-O(y)8Ns^I`V5- zQK0<{5p$B5z5FaNNlD2uax7|xKZH^BUw-_E_b26m6lmZSvZ0)-`U(mW2GLR>|8Z zr(J4GO|#8#c{%2Cx9hVszXicR|Kb-QkUoRHGF|EU`>Z(Q;xi&8DFC5X=tewz(^ z`$x>!&;j%yVouDL5#b;+Dbb@u-qE91P?`h||AR1wwmXPG3rmIy5;pNclWkiB)!q8_ z)YQKIoIR*-V8HvJc||UrjsvmNjaf5h5U?R3<>!|!SZ_b2Rhe8jYgW|t#N2@*N%Vqv z*+?5XgVhPmXo8h(UpH+2rLy}-c&PuOzA;9Tm+14KZh$9QkeKKIvv=|0!|-i0lMs(h z-g0n9@uR2xed>Pfh)OGX9kYD(nX)ZYrdaLYwCVQX6+KVyGF9PNm-81cgx#;D3f(x4 zStupP?&<0b5u@&muMe5Ne5j~Ntp}nPND_98^BFO1-MrcS)eN(M0D$oOEC;4Z(2!sAaE`Y_NDHlsYDB4s=cc?kp=>Rx! z*^GWS=4MDXs4>YEGH8;?GkE!QZPZhYVR65`D#8p@vT-^Byu*CrDt-~<94KZ_aXw(d@&*I9s^ zHV!{vcm~ewp_0DrhJ)x&qGO!Z@YZqc9R$c`NMbFg4>^9hyB{M9=v{&)i%^87RR_*cW7th%I zJ>e(c;}|wb<=ezP(~p&kwdp83?-;70)L2|wY36V)V7JxqQgz{Phff-d>x3y-1bO&( zD2MdzR&CJ_yfWj^G{cYz(WPUszgne0N^=`gQ9f4vH5)mwOx%77|Ch8>}@c z{HosDuIBX&uB+RUj`~Z-lwnZ#yy2EoS*%b3v|2O&l}Ys<#P65=8(Wt4E1{^<^rAB} zMH6&j#6G%^HaC?KJ2%lw0=HNuIMYiO7!U!9d|C_8g& zf^qwsnAtQ7;*$^sV5}YAaB63(PYLa5p5rVxolVS&T94mPn=VU5>p?pO)IJI zh?scMe_E|0w6&$qy%b!^we6>^FMhV2H&Ke>jtZgGv~^;61`h z;$#DJclY#C56EaK2M*Ldf6j!4?_5r@p>_pi31)+X26kkm*uAIL%FLceZEx?TtgH;l z?$`|Z zh;9a72JirENnEsVODsQ2=Vxr33Jw7pqw7!Eyn@D+$21YTZZq@ErOD}la~7?{$l ztFx06dg`jG{27JQEE0SW-jJ_}&T}=BQ0Rf`aC&MQKtFCYckfC%+N1VgKp)BYgARzG z(eMJr1biC-BbCpEN5li`<~KN3OanNFx0xGe>dNeesW$`!`U#XDba(u2Z}!7)#b~gN zOif*HBZaXGH~;~I#&<9Wm)@3gF&(C`gBd13_ewm4fKmyR#7}w%GVXOYHIG1`TRe1M zz+-q z)W)>&fX+;>Stbgh4o(WQ3E~@AC`$smCFKQO!QCD6lm?tMaZqi*E&0dZrUViv=Z6xRP^Mxu2GbOEb0GBiZ~O8e@|LLQz-gUP6c zcnSz2-M$dlgt;f|j6j5V=!`9xK{L}6KmoyBTVNspjFe2@`o{`fIeA3@t4LGAvqcx@B*h{y(662Rf$X27{XBy;a{cL&q@ zQVRmlfnTsKMV+7|WGXqCQ||IX-&!OgY(Ug){_+JB94U5`wgU%!o2mJ8 zR01dF;GNPIsJP34ks=V{j2U-mK+JBScoozUzgiANMZpv_d&dM*Y`r%GLJrwjwPHnY zS;(}Omj#juN;wLmx9{Jh%ZBvK>KQKnh85%KDJvs`CWyce+D*{~0iH9=oU~vGl!#yK zIXk0{`Af<+u{W!s(=0x0r%@(eo1vla-N*b7$54uVkr5#Shu-8^lF~x$ur|fpNYgP+ zq-tQ(fE*>W^OpYj)vKyO5JQXuTXEQZ<8Np`70SaAO|8V~R4@e)o(2rq%bIOU4z+h$caszjV(2DNdZok-rbkdP45AJS)!+iP;OR{KY{(2Z*srDPDVLX~Q(R6UIR~%=HS8x__z{ifZrq_S7NA<(t5S z1X!F{0|B6S;@EICz&FOdSTL~ybHzV@JDJ2zg+{=Rgi*EIAL zy>s20di7ErZEI!jG_#t$gGC}B98a+d65K2f$@~qI%;O84F9RdNocRz%^=U~8czb`& zqFeHAAwo$K2Xh_{p*=0OOjpt6v1-REHpZWz?#R9aw6(Q!8}UZD@rS*nkWG%Ut`-n@yPHzGMW)%TUcO*^na%!?r_SRQ@!dW-B=Q=O0*!xQ19a+(+o z)g+`m0D}Zm?7dJLz@1V zK`+CP`{jVB@+P*<^`Jj;LqO?eNKf7uxD_QS8+zY}QeAz0s=o&u&`ke<-W>Abr4_wv z%c#5tO5B3p!m{V0Aa}7+SVEfeaZyp$3l^!jnHxT01V{WrC2)1E15F{F?MGIalXD<35!~PsG&Gu3q6Qx%kVmxC=0O4& zic1&4a>IsvMtQXJwAL6(C}8+EN8D$rj=ag{Y`Gz2F{APV{**16Xy_5`;M70iN{;d1 zp|g(JYbs`nbRR}PklO)6n!I)6#>kyb8w(2ucbnJtYuhwrjf#xh_CdFHUw3XkJ;Qt8 zzxcIPCojreU0LxvT=rno&^SNi+a=w-V?_Q4c9L#7Hom+A7yD&eb9P~S=Vio=T+P@PwZk9njpFUqK%dXz@ z{kL87XJ`k(rhktNc1hlQp3%Y7TJaB>$#;Oa>7`FqD8HFCV)^K4!Cx!B{OPxOlG@n8 zeC$Xmj-O)U|60?)u;XF9hMh6FP|dh~n$E1hmeo6XX}l9qZJ=FB6To-jPvfV{QLLSH zy%2rhn>EagSOCvJGv;tdGPPL$Ap{n{=J>ccy@?aiU@?IE1BL_->CBlg3f-VMpFx4hRh-3$x(ERo|;eAC?lY=z#P$Z4$94orgJ&y-Em@A9wz)drmZ$Ky#r1i|qJZMTJ5rHy{<-k&5hyQJ(c3_LIQJ#*+qWd)AXJwLOo#<8iR3J_aoQ8-ySd$K^e2@9Gw>b+!%gZGMif+h6-tP3 z6a##yu(=No8Y(IAV2Vho4egyE#r*+aF(8Dn&afehH^hhzypF1n#CrHke~AUgu*sl? z(H97XnK6pF@~x#M2$~RI2b1jIzkeJ8MJ;A#GPq+sJ(sI?4Ft9EQ<3M$?8Y!v)>jyD z3);ke)77a(Nwdi6Zr+53R0wo$?LgB=X`hvqMZwJPot>Qw9FXU5y{W0Gg7MDHn^3b~ zL2A_3m*1BQRp~@g(Q6t3ZkCD}Fa+)&x(~(++!Ud}Z)#4*s4?%T#E4>%7Q>ERYF*RM z6gxQRIZ(ME_E563c~&i5ioHJS`gw~MZ6mh8zQ8l0!F5B7>Rj-Bt0u~u;74VA z7DEfbkob4^b?fCXa>yT3W%3X3-X>VzRL1(sUjY9g=(=3rvVjxYqAbFuRr_4zC9oVR zmMhxSdR|rc%XF?iDcUSk^6xY4vx)N`KZ-ZW^JMOMZQ8VnuO!H$i%gsSjjzG}y`TU|Q_S}9 zdn+S{vb=*#dWauHwaW-Vz!S{W&^&V9V6O2t_0wc*Nd^pdAK9l#80e&RJ8PGGbe0twLys$>g zi1WUvLcm*yCeKd0PM}02?4+iuB8Z{y)k@~D@U-;w{u>kSd-H&47l8neXJye3EpTz+ zh{qd3Lvi7O_e#z%!8{ZODZmPgoTi8usoO7nDDmjv{|*Ey->I~h*oyxa8WBoS%iE8i zJi)#F67yGR`~NXoEr$-2u!b#2O5-IH!!ZW?xc-VoW?Zp6h16Nt>WVQ4sGtpuPvaEO3A3o4Il{p;7oG~anK=Hgp^_tMq!KKTm%-bH{V>E1-$b2)gZ=)K!W(NJ8ee0XkT7|s& z+U%(vhieBrO*(c`y|07(EjP_%v7FowO9bDd7n=2WR_AQjNl6dVS~}ydY!na{fC@~?%@$vow4nXes8bh%3KOJ8DO|I&m&eI!9M#N!UQf8+`DG-j%h~?N zX(fum9DOumdQk4cB@qYXta1$uj;S@ctK~PoR@&I;uVvUF7KeY)JgwyObu9%QLe#+j z6;GOR;d!dFts+9QE5!bd4-bl#m)>aE(&2L~OhC59K?m;2w~F0!>l07$MP~Xlj>|=E z?>pOCN9#J>e2QJ$!IQ)DWs3r?$?Z~G68NLxcU*`<+!2nK<&iPJPxrg)5Pg+c7$^dG zVKv@GLrW|qBFN_BiMaF9HM8yPQ*K+{t&fTiirFXEHBPj@L`1o4@-t(vt-30q`n&;FJ*eV=j4N~lXneY?oe#( zXc*RKS8>>!*bTjQ8rO&=?~fl;?=ds>*^@@?n?5a{#c%tG>#jPF&L7J}#;P6(#J`h^MP6rey~$NcnWl+BLJx%-YIQIkWVFUyJ0>Ws=hr)8?s1 zr(bGXE*Ua2U9Lw$Z0ns7QuQw4E8d2!h-~!LUzb#R&cF4?y6F$wzx+*#_!1wtJ-S6h zW8uA5L30IpMrr?!%woWR1&rsF?h2T=G6*oEJx2idt&QOAom}{xVL~c`iVf zXCI0AL|5OCeK||}*iW6);deS${1_g-3K7(fTR^@aKYh9pVBz=NSiBU#AoSw2rl|f# zo*gQh?;19qx~CfR!?!_oa+)B>ySNylxXE#f>pAC`<1}~fQO6u)s*FlUj$8(kwOcYw zw%^wL3_DgV_K5`rgL+;zzWmkrCMjaMy5F{a6OPTC>Q&ZYhyi+4RUvdyT2q=aft$OG zIM9xnP=~pwRann}&qArEPn-}Cz&I5KHD->}WW!HJUa4|^YhEWh?s-%YUs|)+NM3ZB z0)hbr%_^uH;H zKoyAT6(v6i%X#I*4XR(-k(fDy z>!XJq()TKR-KX1drjenmo}n%^0dk%}$fHtH1SCd@sK-@RxiAl@uOauPnQZ$@b&2{J zW+81J3^*D;dL)Wg%C>IqWz%Y)N|&yD znE0xyG`;4kVv$%#FU#jEuJvA;=K?c#CSsX6a}Ww~SSs}*Z4bZ$Hjyb!Fhh#={{O*`NZPzBB(J||% z*i1Ur3lk=Iap0~Hnx_VJFdJkxMEQs{2;+yHcuTsvUgme#^T%KlBVwePI^4s{98r+)P5>0&P9tx zUr(IMS-!lyw27+}l4nqr`>kFLiYXU+v%LHRbqkHTFUTuo)6xhrPV_NTw$oV0^OF)? z3SJIos?0m;JXeR z1BHXyR#sGiqoAh(+Xdm3+i^=*3+Fl50GKJu#p*M{VLQxJ-vby)E2XHY=r52}d+F?d zQBwmj$H}&U6R49wJ2%kaQc+>R=VBkT>yp%io)`Sa%x>ofm5cu3F|&7Z#sC;>TH zo(qfV*pbZ<>lTdgTL0QX=J%poqhl8Cn&74dm+d;(7{>HHt3G@(KltH@{~nEr6WjWS zEI9RMsOEZ^N5=~dHEXROWgdD{W$W*sW4JxeG-B`3?S*}351%bPySw2?xOAM0Q|=Lq z9h34`uRPfyEoM<@5c{WST=R1Gd-jhN*L>Udm1F$Ar+)afeln#p21*SBCV|G?TC3`N zH6vM24gv%v4#w#W*nUlS6iv!PQDAJ)PBQ11XJi-SBvmTe~K zcp%1<=}vZ#FWqkKz=2T(b-uj#w!qHD#!P^W&dzHWJsZXH(}SV7hitSXayS6?C_)) zK(cjr&pL4ett6aD-b&waP`V+zi0*K%Jp`#qIIN_uPU-IX1qwOW3MRK%NzMKO-gMHR zRjuFe$p~wQ5wMJu*|5)j?IEE6S?wn;0>Akbfl6ooJjZd&(j*B&yL~KG{wKt59`Y z?YlxI(lI0`d-*=PLeWPw-+%ZJF)ebb7B)%^Gx~;O)1rMh?ubwB44p9#Ei-XmaiH0@ zSk~#*u3ERHwO5~U`ofEIi_9%0BK?hr%zx0&Do*WMRH&_tNZb*RJsG3T($#G>|CGe1 zYMPm}ow?>X=I5pCd)Y}ABl?OhZV2AGHDaWM8gu!;#;&fx6^m^5G>9tbp0?ZE5gOeh zTap0Te{IpYQLE}tUfQm%)G^@L;HO%;!{e&M9VVA4cigW?#OPy{z|w4j*$bnW1OCs2JEED-0d#I)2bz-Iam z&JA34lC#D=C!RVv!R$%g%2kx#`XOD1d7+)mQYbaG`rCfKC>(Npg>rYih0d)cdF$iV z%`aXo3jl$u-ok1Vp4W9M-ec<6uS6>C_t+{iKRgKx2sj;!!;>E**y8B0pdj_$Hv8QL$ zkyIG)USA+61c7gx?-poOa{4X{_0?B*yYrq&A$30`9rlgS49@!AGuT4M!fQi%vwKy@ em-eimfBNgr%B{UW&h(AyO|O6e literal 0 HcmV?d00001 diff --git a/docs/html/resources/resources-data.js b/docs/html/resources/resources-data.js index d96bfde7ad..779525a6d5 100644 --- a/docs/html/resources/resources-data.js +++ b/docs/html/resources/resources-data.js @@ -507,6 +507,16 @@ var ANDROID_RESOURCES = [ en: 'An application that demonstrates how to create a live wallpaper and bundle it in an application that users can install on their devices.' } }, + { + tags: ['sample', 'new'], + path: 'samples/training/device-management-policy/index.html', + title: { + en: 'Device Policy Management' + }, + description: { + en: 'This is a security-aware sample application that demonstrates the enforcement of device administration policies on Android 2.2 or above platforms.' + } + }, { tags: ['sample'], path: 'samples/Home/index.html', diff --git a/docs/html/shareables/training/DeviceManagement.zip b/docs/html/shareables/training/DeviceManagement.zip new file mode 100644 index 0000000000000000000000000000000000000000..9f7ec694af479b8852e66aafac40ad30383459c3 GIT binary patch literal 19978 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 +

+ +

This lesson teaches you to

+
    +
  1. Define and Declare Your Policy
  2. +
  3. Create a Device Administration Receiver
  4. +
  5. Activate the Device Administrator
  6. +
  7. Implement the Device Policy Controller
  8. +
+ + +

You should also read

+ + +

Try it out

+ +
+ Download the sample +

DeviceManagement.zip

+
+ +
+ + + +

Since Android 2.2 (API level 8), the Android platform offes system-level device management +capabilities through the Device Administration APIs.

+ +

In this lesson, you will learn how to create a security-aware application that manages access to +its content by enforcing device management policies. Specifically, the application can be configured +such that it ensures a screen-lock password of sufficient strength is set up before displaying +restricted content to the user.

+ + +

Define and Declare Your Policy

+ +

First, you need to define the kinds of policy to support at the functional level. Policies may +cover screen-lock password strength, expiration timeout, encryption, etc.

+ +

You must declare the selected policy set, which will be enforced by the application, in the +res/xml/device_admin.xml file. The Android manifest should also reference the +declared policy set.

+ +

Each declared policy corresponds to some number of related device policy methods in {@link +android.app.admin.DevicePolicyManager} (defining minimum password length and minimum number of +uppercase characters are two examples). If an application attempts to invoke methods whose +corresponding policy is not declared in the XML, this will result in a {@link +java.lang.SecurityException} at runtime. Other permissions, +such as force-lock, are available if the application intends to manage +other kinds of policy. As you'll see later, as part of the device administrator activation process, +the list of declared policies will be presented to the user on a system screen.

+ +

The following snippet declares the limit password policy in res/xml/device_admin.xml:

+ +
+<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
+    <uses-policies>
+        <limit-password />
+    </uses-policies>
+</device-admin>
+
+ +

Policy declaration XML referenced in Android manifest:

+ +
+<receiver android:name=".Policy$PolicyAdmin"
+    android:permission="android.permission.BIND_DEVICE_ADMIN">
+    <meta-data android:name="android.app.device_admin"
+        android:resource="@xml/device_admin" />
+    <intent-filter>
+        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
+    </intent-filter>
+</receiver>
+
+ + +

Create a Device Administration Receiver

+ +

Create a Device Administration broadcast receiver, which gets notified of events related to the policies you’ve declared to support. An application can selectively override callback methods.

+ +

In the sample application, Device Admin, when the device administrator is deactivated by the +user, the configured policy is erased from the shared preference. You should consider implementing +business logic that is relevant to your use case. For example, the application might take some +actions to mitigate security risk by implementing some combination of deleting sensitive data on the +device, disabling remote synchronization, alerting an administrator, etc.

+ +

For the broadcast receiver to work, be sure to register it in the Android manifest as illustrated in the above snippet.

+ +
+public static class PolicyAdmin extends DeviceAdminReceiver {
+
+    @Override
+    public void onDisabled(Context context, Intent intent) {
+        // Called when the app is about to be deactivated as a device administrator.
+        // Deletes previously stored password policy.
+        super.onDisabled(context, intent);
+        SharedPreferences prefs = context.getSharedPreferences(APP_PREF, Activity.MODE_PRIVATE);
+        prefs.edit().clear().commit();
+    }
+}
+
+ + +

Activate the Device Administrator

+ +

Before enforcing any policies, the user needs to manually activate the application as a device +administrator. The snippet below illustrates how to trigger the settings activity in which the +user can activate your application. It is good practice to include the explanatory text to highlight +to users why the application is requesting to be a device administrator, by specifying the +{@link android.app.admin.DevicePolicyManager#EXTRA_ADD_EXPLANATION} extra in the intent.

+ +
+ +

Figure 1. The user activation screen in which you can +provide a description of your device policies.

+
+ +
+if (!mPolicy.isAdminActive()) {
+
+    Intent activateDeviceAdminIntent =
+        new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
+
+    activateDeviceAdminIntent.putExtra(
+        DevicePolicyManager.EXTRA_DEVICE_ADMIN,
+        mPolicy.getPolicyAdmin());
+
+    // It is good practice to include the optional explanation text to
+    // explain to user why the application is requesting to be a device
+    // administrator. The system will display this message on the activation
+    // screen.
+    activateDeviceAdminIntent.putExtra(
+        DevicePolicyManager.EXTRA_ADD_EXPLANATION,
+        getResources().getString(R.string.device_admin_activation_message));
+
+    startActivityForResult(activateDeviceAdminIntent,
+        REQ_ACTIVATE_DEVICE_ADMIN);
+}
+
+ +

If the user chooses "Activate," the application becomes a device administrator and can begin +configuring and enforcing the policy.

+ +

The application also needs to be prepared to handle set back situations where the user abandons +the activation process by hitting the Cancel button, the Back key, or the Home key. Therefore, +{@link android.app.Activity#onResume onResume()} in the Policy Set Up Activity needs to have logic +to reevaluate the condition and present the Device Administrator Activation option to the user if +needed.

+ + +

Implement the Device Policy Controller

+ +

After the device administrator is activated successfully, the application then configures Device +Policy Manager with the requested policy. Keep in mind that new policies are being added to +Android with each release. It is appropriate to perform version checks in your application if using +new policies while supporting older versions of the platform. For example, the Password Minimum +Upper Case policy is only available with API level 11 (Honeycomb) and above. The following code +demonstrates how you can check the version at runtime.

+ +
+DevicePolicyManager mDPM = (DevicePolicyManager)
+        context.getSystemService(Context.DEVICE_POLICY_SERVICE);
+ComponentName mPolicyAdmin = new ComponentName(context, PolicyAdmin.class);
+...
+mDPM.setPasswordQuality(mPolicyAdmin, PASSWORD_QUALITY_VALUES[mPasswordQuality]);
+mDPM.setPasswordMinimumLength(mPolicyAdmin, mPasswordLength);
+if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
+    mDPM.setPasswordMinimumUpperCase(mPolicyAdmin, mPasswordMinUpperCase);
+}
+
+ +

At this point, the application is able to enforce the policy. While the application has no access +to the actual screen-lock password used, through the Device Policy Manager API it can determine +whether the existing password satisfies the required policy. If it turns out that the existing +screen-lock password is not sufficient, the device administration API does not automatically take +corrective action. It is the application’s responsibility to explicitly launch the system +password-change screen in the Settings app. For example:

+ +
+if (!mDPM.isActivePasswordSufficient()) {
+    ...
+    // Triggers password change screen in Settings.
+    Intent intent =
+        new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
+    startActivity(intent);
+}
+
+ +

Normally, the user can select from one of the available lock mechanisms, such as None, Pattern, +PIN (numeric), or Password (alphanumeric). When a password policy is configured, those password +types that are weaker than those defined in the policy are disabled. For example, if the +“Numeric” password quality is configured, the user can select either PIN (numeric) or Password +(alphanumeric) password only.

+ +

Once the device is properly secured by setting up a proper screen-lock password, the application +allows access to the secured content.

+ +
+if (!mDPM.isAdminActive(..)) {
+    // Activates device administrator.
+    ...
+} else if (!mDPM.isActivePasswordSufficient()) {
+    // Launches password set-up screen in Settings.
+    ...
+} else {
+    // Grants access to secure content.
+    ...
+    startActivity(new Intent(context, SecureActivity.class));
+}
+
diff --git a/docs/html/training/enterprise/index.jd b/docs/html/training/enterprise/index.jd new file mode 100644 index 0000000000..05bb29c5b5 --- /dev/null +++ b/docs/html/training/enterprise/index.jd @@ -0,0 +1,51 @@ +page.title=Developing Android Applications for the Enterprise + +trainingnavtop=true +startpage=true +next.title=Enhancing Security with Device Management Policies +next.link=device-management-policy.html + +@jd:body + +
+
+ + +

Dependencies and prerequisites

+ + + +

You should also read

+ + +

Try it out

+ +
+ Download the sample +

DeviceManagement.zip

+
+ +
+
+ + +

In this class, you'll learn APIs and techniques you can use when developing applications +for the enterprise.

+ + +

Lessons

+ + +
+
Enhancing Security with Device Management +Policies
+
In this lesson, you will learn how to create a security-aware application that manages +access to its content by enforcing device management policies
+