




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、31/31Andoi 平臺(tái)授權(quán)管理分析文檔efi 概述Android是一個(gè)權(quán)限分離的系統(tǒng)。這是利用Linux已有的權(quán)限管理機(jī)制,通過為每一個(gè)Alcaon分配不同的ui和gid,從而使得不同的Aplicion之間的私有數(shù)據(jù)和訪問(nte以及jaa層通過這種sadbox機(jī)制,都可以)達(dá)到隔離的目的。與此同時(shí),Androi還在此基礎(chǔ)上進(jìn)行擴(kuò)展,提供了ermsn機(jī)制,它主要是用來對(duì)Applcai可以執(zhí)行的某些具體操作進(jìn)行權(quán)限細(xì)分和訪問控制,同時(shí)提供了perUR eission機(jī)制,用來提供對(duì)某些特定的數(shù)據(jù)塊進(jìn)行ahoc方式的訪問。Permssio實(shí)現(xiàn)機(jī)制分析uid 、id、giAndd的權(quán)限分離的基礎(chǔ)
2、是建立在Linx已有的ui、gid、gis基礎(chǔ)上的.Uid: d ndroi在安裝一個(gè)應(yīng)用程序,就會(huì)為它分配一個(gè)u(參考PackeMnagerService中的ewUsrLP實(shí)現(xiàn))。其中普通Andri應(yīng)用程序的uid是從000開始分配(參見Poess.FIRT_APLITINI),000以下是系統(tǒng)進(jìn)程的uid 。id:對(duì)于普通應(yīng)用程序來說,gd等于uid。由于每個(gè)應(yīng)用程序的id 和gid 都不相同,因此不管是ativ層還是va層都能夠達(dá)到保護(hù)私有數(shù)據(jù)的作用。GIDS:gds是由框架在Alicat安裝過程中生成,與Appliction申請(qǐng)的具體權(quán)限相關(guān).如果 Applition申請(qǐng)的相應(yīng)的per
3、mission被grantd,而且中有對(duì)應(yīng)的 ids,那么這個(gè) pplitin的ids中將包含這個(gè)gids 。Ud、gid、gds的設(shè)置過程在ctiviyManagerSevic中的strtProcessocked。在通過 zygote 來啟動(dòng)一個(gè)ocess時(shí),直接將u傳給給了gid。再通過ygote來k出新的進(jìn)程(ygote.jaa 中的fkAndSecializ),最終在nate層進(jìn)行g(shù)id和uid和gis的設(shè)置。22. ermissio一個(gè)權(quán)限主要包含三個(gè)方面的信息:權(quán)限的名稱;屬于的權(quán)限組;保護(hù)級(jí)別。一個(gè)權(quán)限組是指把權(quán)限按照功能分成的不同的集合。每一個(gè)權(quán)限組包含若干具體權(quán)限,例如在 C
4、OSMONEY 組中包含 adrid。pemisionSED_SMS , LL_PHN 等和費(fèi)用相關(guān)的權(quán)限。每個(gè)權(quán)限通過protionLevel來標(biāo)識(shí)保護(hù)級(jí)別: normal ,dangers ,signau,intorsytem。不同的保護(hù)級(jí)別代表了程序要使用此權(quán)限時(shí)的認(rèn)證方式.nml的權(quán)限只要申請(qǐng)了就可以使用; dangerous 的權(quán)限在安裝時(shí)需要用戶確認(rèn)才可以使用;ignae和ignatreoste 的權(quán)限需要使用者的ap和系統(tǒng)使用同一個(gè)數(shù)字證書。Packae的權(quán)限信息主要通過在dodanifet。xl中通過一些標(biāo)簽來指定。如 prmssion 標(biāo)簽, ermssiong 標(biāo)簽pems
5、ionree 等標(biāo)簽。如果akae需要申請(qǐng)使用某個(gè)權(quán)限,那么需要使用 NE:I thepackage haa shared ui th th evkd prmissons for tha ? ? ? uid wll ertred。 aram pcageName Name of te pckage whch revoked rmissions are neded hd */ pubc bstract Strig ReokePerissi(tring pakaeNam); /* St the evoked pemission for givn package。 * OTE: thepackeas
6、ahaed ihe this ethod will reoketh ? ? ? pemissis for thtshareid *a packaeNae Nameofthe package ich revokd eisions e needed* hide * puli bsract voidsetRevoedPerissons(StrinpckageNa,Strinprms);3.3ore/jva/androd/app/CotexImpl。aa中添加兩個(gè)函數(shù):(最終調(diào)的是PkageaagrSrvic里的這兩個(gè)方法)Overide ublc Sing etRevkedPermssions(St
7、ring packgeNam) y return P.getRkPermission(pcagame); catch (ReoteEptio e) / hould never hpn! retun nw tring0; Oerride publicvoi setReoPrmions(ringpackageName, Sringprm) r mM。stvkederissios(ackagName, pms); ch(RemtEeone) /Shuld eer hapen! 3。4sevices/jaacom/andridsvckgeManageervie.aadff -ia/rvies/jacm
8、ndroi/rvr/PackeManageSeic.java /ervces/jva/com/android/rer/kaMnagrSerejvinex 98aa82.。b13dbb 10044 - a/sevieacm/roid/ere/PckageMagerService。jva + bervice/java/comanrod/serveraageManaerSerice。jaa -1406,1406,21 10614 107107 publc int geakageGid(Stg packageName) 10808 synhonized (Pakages) 109140 PakaPar
9、.Pckage p=mPackgesget(akageam); 41140 if (oig。LGV)L。( 1411141 T,”getackaeGis” + packageName 1121412 ”:” p); 41343 if (p !=l) 141414 finl Packageeting ps =(PacagSetting)p。xtras; 14151415 fial haedsrStting i= ps.shredUsr; 146- rturn sd! ll ? sugids :p。gis; 146 eturn uid!nul ? rmeIs(ud。i, suid。vokdGids
10、) : rmoveIn(p。gids, psreoed); 171417 141818 14191419 / stupid thing to indiat aneror 140120 return ne int0; 142112 221422 2143 staic finarissionIfogeeratePeisiInfo( 1424142 BsePermssin bp, intflag) 1425425 (bpper != nul) 2616 reurnPackgearsreneratPermissiInf(p.erm,lags); -17,3+1678,4 16781678 syncro
11、nied(mPackags) 61679 tumAailabeFeatues.coisKey(name); 168160 1681161 168168 131683 puic in heckPrmissi(ring rmNe, trng pkgNm) 16418 shroniz (mPckaes) 18565 PaageParser.Packae p = mckag.et(pkgNm); 1661 f (p != null & p。xtrs! ull) 17167 PaceSetti ps= (Pkagetting)。mxrs; 1688 f (p。shedsr !null) 18- if (
12、sshareUser。antedPemissioscotais(perNa)) 1688+ it id= Binder.geCalligUid(); 1689+ boola lie=uid=pseId; 1690 if(s.reUser !=ul) 16 lie= ud= erId; 1692+ if (ps.sharedUser。grntedmisns。ontain(erNm)& 1693+ (!ps。hdUserevokedPermissions。contins(permName) le)) 169164 reun PackaMange.PERMSIONRANTED; 161695 169
13、2- else if (ps.gantedrson.contains(pemNme)) 169+ else if (p。gratePermisionscontains(pemNam) & 1697+ (!。revkdPrmssions。cotins(perName) lie) 1693168 rturn PcagMange。PESSI_GANTED; 19419 1695170 191701 169710 retuPackaeMnagrPERSSION_DENIE; 1698173 1691704 171705 ulii chekUidPrmissin(Sting mNme,itud) 711
14、70 synronized (mPckags) 102107 Objet o = mSetings.etUsrdP(uid); 171708 if (obj != null) 1009 Gratedrmssinsgp =(GrntedPermssins)bj; 15 if (tins(permNme)) 170+ i(ggantePtains(pemme) 71+ !gpreoedPermisios.conns(ermName) 17612 reu Paaenager。PEISSIONRTE; 1707171 8174 els 7715 HhetString
15、 er = mysPermissio.ge(uid); 707 f(pems != null& ermscotais(permNme) 17111 retrn PaeManaerPERMISSIN_RATED; 172171 17131719 174172 1751721 rernPackageMange。PRMISSIODIED; 915,26+3921,40 3392 3163922 9173923 398324 393925 /Noupate the permissions ora ackage,n parilr 320396 / reple tegratd pemssons f he
16、sye paags。 3913927 f (ratPrms) 9223928 for (Pakaearser。Pakag pg : mPcke.vals()) 39233929 if (pkg ! kgnfo) 3924330 grantermisinsL(pkg, epaceAl); 3925 96- 32 3928- 3931+ updteevokdGs(kg); 932 33 393 335+ 392936 if(pkgIn != nll) 0393 gatPrmisons(pkgInf, rpac); 3 utRevokeGis(pkgIno); 393+ 3940 941 3942+
17、 prvat oi updateokedGis(PackagePrser.agepkg) 343+ fial PakgeSettngps = (PackgeSetting)pkg。Exs; 3944 f (ps =null) 945+ rurn; 946+ 347+ finalGrtePerissions g= pssaeder!= null ? ps。sharedUser : s; 348+ for (tingpem: g.revokedPermssions) 349+ BsePermison b = metings.mPermissiosgt(perm); 950+ gp.reokdis
18、= aendts(gp。revokeGids, p.gds); 333951 9323952 9333953 333954 prvaeoid anPermisonsL(PakagarserPackage pk,lan eplce) 3339 fial PackaeSetting s =(ackageSetng)pkgmExtr; 33956 if (s =nl) 3937957 retrn; 983958 393395 inal GrantdPermissions gp =shaedUs!=nul ? p.reser :ps; 9403960 bolan chagedPrission = fs
19、; 460,0 +4626, 46466 Mesagmg = mHandler.btinMsage(INITCP); 46074627 sgbj=w IntallPram(packagUI, oberr,flag, 40868 istleackageame); 4609469 mHnder.sendMessage(ms); 10463 4114631 42632 uic vid fiihPckgIntll(int toke) 4613633 f (DBUGISTLL)Log。(T, BM insing pacaginsal for + tok); 4644634 Messagesg =mHnl
20、er。btaisage(ST_IN, tokn, 0); 65635 HandlrsendMessa(msg); 463+ 463+ 4638 publctring getRevoedermission(Sig pkgame) 69+ mConx。efrceCllingOrermissio( 4640 anroi。nfestperssion。EVKE_PERMISOS, nul); 64 4642 Strng resut=nll; 63+ ychronize (mPckaes) 4644 Pacagearse。Pake p= mPakagget(pgNm); 4645+ f(p !=null
21、&p.mxrs != null) 4+ PacageSettng ps = (PackageSetin)pxtras; 467+ if (p。saredser != nl) 468+ esult =new Stringp.shaedUserrevdPermiin。iz(); 4649+ ps。sharedUserrevokedemisons。oArry(resul); 4650 else 46 reul new tringps。vokeerssins。sze(); 45 p。evkedPermissonstAry(rult); 653+ 4654 4655+ 4656+ rtrn eult;
22、4657+ 468 659+ puli oid etRevokePermissios(Srig pgae, Stringperms) 4660+ CntextenforeCllingrSelfermss( 461 ndroi.Manfest.emisson.REOKE_PEMISSINS, null); 42+ snchnize(mckges) 466+ ckagePaser。Package = mPkes.get(pkgName); 4664+ f( != nll & p.Extras ! null) 465+ Packaeeting ps = (PakgeSettin)p.mxtras;
23、666+ tedPrison gp psshaeder =nul ? p : ps.shredUser; 466 gp.rvokdPrission.lar(); 46+ prkedPerssons.addAl(Array.sLit(perms); 69+ for (Strg perm: gp.eokedemissos) 40+ BaePrmis b = meting.mPmnsgt(prm); 47+ gp。evkGds= appndIt(gprevokedGs,bp.gid); 42+ 467+ mSetings。witeP(); 4674+ 4675+ 616476 46174677 46
24、1878 priae cessPeigIntall(finlInstallAsargs, fial i urentSatus) 4619679 / uee u asyncoeraon since he package installatn my tae lttle hie。 624680 Hndler。pos(nw unnble() 4214681 pblicvoi un() 262 mandl.emveCalcks(this); 624683 /Rsul bjct to rturn 4446 PackgstalldInfo es = new ackagenstledIn(); 4254685
25、 re.returCde crrentStatus; 782,20 +78,23 72881 rturn umMatc = N; 22788 7823783 78247884 7827885 tati clss GrantedPemissins 826886 npgFlags; 78277887 8788 HashSetStrg grantdPermssios n HashSeSting(); 78297889 t gids; 830890 891+ shSetSring vokePermiion = new HaSt(); 7892+ int revedGids; 8+ 781789 Grn
26、tedPermisos(intkgFlag) 83895 setF(pkgFlas); 78389 78347897 78357898 rntedPrissions(Grandermissionsse) 7367899 pags base.pkgFlags; 73779 grntedPermisions = (HashetStri) bas。rantedPermos。clone(); 738901 7837902 if (bas。gds!= nul) 787903 gids= ae。gids.clone(); 795,2022,22 7959802 public videTieStamp(on
27、g newStamp) 608 tieStp =ewtam; 968024 9205 98 / 7964802 * Mke salw copyof thipakagettn. 958028 */ 79668029 lic vod cpyrom(PackagSetngas as) 79678030 granteermisions = bae.grantedPermission; 6881 gidbse.gids; 8032 revmisios =bas。vkedPermisio; 803+ evokedGd ase.revokeGids; 698034 970035 tmSap = base。t
28、imeStamp; 79713 fistInstllTime bse。firtIallTi; 9803 lastUpteTim= bas。lstUdateTm; 793803 signatures = basignatures; 9748 prmissionsied =base.permssinsFixed; 7750 haeds =base.aveGds; 9768041 disabldComonns=basedsaleomponen; 7778042 enabedmonnts = be。enaledComnents; 797884 enable =base。enab; 81,20 +826
29、,28 87626 rali.atrbue(nul, usId, 8762882 neer。toStrinerI); 8763888 usr。ignatue.writeXl(seilizer, sig”, mPatSignatues); 876889 serializesartg(null, pems”); 87883 for (Strgame : usr.grantedPermssons) 8766881 srazr.stag(nul, ”itm); 8778 srializer。trbute(ll, ”m, nme); 876833 seiaize。enag(null, tem”); 87
30、6884 87708835 serlzer。endTag(ul,pers”); 88+ serilier。strtTg(ull,rvkeprs”); 8837+ for (ting name: usr.rokePrmissions) 883+ srializrstTag(nll, ”item); 889+ seialie。attibt(ull,”na”, nae); 88 seriaizer。endTag(ull,tem”); 41+ 84+ seralizerenTa(nul, ”revokd-perms); 883+ 878844 seiaize.enag(null,shred-user)
31、; 8772845 77388 774847 i (ackageToBeCleadsize() 0) 8758848 r(inti=; ouerDept) 9341942 f(typ =PullPrse。N_TAG 934929 | type = mularr。) 9434 ctinue; 9344 94942 946933 String tgae = paser.getName(); 93943 if (agNae。equals(perms”)) 934945 dGranedPermissinsP(prser, 9349946 ps。gateermissns); 3 se if (tgNam
32、e。equas(evoeprm) 9438+ readGanedPermissonP(pas, 943+ psreoedPermissi); 93440 ele 93594 reortSettingsroblem(LoWAR, 935294 Unknwn element und updaepace: ” 353443 parertNam()); 9354444 mlUtils。skipuretTa(parser); 5945 936446 9359447 mDialedSysPackgs。pu(nm, ); 959448 93599449 -99, 93,2 549963 if (aNamee
33、qals(”dabd-cpnents)) 950940 eaDisaedCompontLP(akagSetng, parser); 9519641 else f (tagNam.equals(abecompones) 9596 readEabledComponeLP(pacaetting,aser); 5539643 el if (tagNam。euls(sis)) 955964 pakaeingstures.redXl(parr, PastSinaure); 9595 lse i(Nameequals(perms) 564 readGrantedPermsionsLP(pasr, 5567
34、pkageetting.grantePssions); 9589648 packageSettingprmisonsxed ue; 964+ elseif (aNamequals(”rvokepems”) 0+ eadrntedPermisionLP(parer, 961+ pakageStting.evokePermisions); 55952 else 9560653 rportStigProle(Log.RN, 516 ”Unkoweender cage: 56255 + pare.etNae(); 56965 lUtis。skipCurentag(paer); 9564 9559658
35、 69659 else 956660 XmlUtil。skipCurretTa(parr); 5689661 -9677,0 +970,22 96797 if (type = mlPullPser.ND_TA 9678977 | tpe = XmPulaer.TT) 679977 ninue; 9897 968177 98275 Strin agName= parser.getName(); 63976 i(aaeequls(”sigs) 84977 u。gaures.readl(pars,Patignaue); 968977 else if(agName。uls(”erms)) 966977
36、9 reaGratePerssosL(parer, su。rntePemsson); 780+ else (agameequals(revokedperms) 98 readGrntedPemsionLP(parser,su。reokdPemission); 9879782 lse 9873 reportSetigsrblm(Log.WARN, 968997 ”Unknown elmntde sharser: ” 99085 +parergtName(); 9691986 XmlUilsskiCurrenTa(prser); 962787 9699788 6997 96959790 els 9
37、9679 XmlUtil.siurrentTag(prer); 3。 core/ava/ndoid/widget/AppSecryEdtblPissin.ava用于在applctionmanae里 替換原來的AppecutyPermisions.java/* Cpyright 2007, he AndrdOpen Source Project* Licns uder the Aph cense, Vron2。0 (the Licese);*yomy notse this in clianewih th ies.* You oan a cpf the Lene t* * Unls reqired
38、 y appible aw o areed t nwing, stwre* istrbuted unde Lenses istibutedon an”SIS BASS,*IO RNTES ORCONTIOS OF AN IND, eithr expres or imied. SeteLicese for the seiic langge oernin periions nd lmitaions udr heLicense*/ackage ari.widget;imprt com。andrid。ntenal.R;impr tntonext;ipor tet.m。Pagfo;imp
39、ort droid。cotentpm。PackgeManager;ipoNotFuExcetio;mpr anroid.conetpm.acaeParser;importandroidontentpmPermisnGroupno;o android.contet.m。PermssionInfo;mportndridgraphicsdrwabl.rawbl;impt androd。text.SpannabeStrin;imor noidte.stle。StriethroughSpa;iprt adrid.utilLg;imortanod。ie.LaoInlter;impo ndrod。ew。Vi
40、e;import andridiVi。OnClickLisner;imort ava。texollor;import avati。ArLit;iport ava.util.rrays;ipotjva。til.llections;imporpaator;imprtjava.util。Hshap;iort jav。uil。ashSt;port aa。util.erator;mprt vtil.ist;mpor javutil。Map;import javautiSet;/* * hi class ontin te SeurityPermssonview mplmentaion* nitiall t
41、hepakes advanced r dngrus securty rmissions ae isplyed nercatid groups icking on he adion permiinsprnts xende infration onsisig al groups nd permissios。 * To ue tis viewdefin aLinaLaout r any ViewGo ndd ths * ibynstiating ApSecuitPermisn and invongtrissionView. *hide */ulclass pecuityEditablePmisons
42、 mplnView.nCickisteer private eum Ste OPERM, DANGEROUSONLY, NOMAL_NLY, BH priat class ditableListen pln OnClickListener Overdpbli oid onClic(Viwv) missinnfoi (PermissiIf) v.etTag();TxtVietext = (TxtVi) v。findVieByI(R。d。dtpermissin);Spnabletring s = (SpannableSti) text.getTex();if (mRvoedPem.otain))m
43、Revoedems.ov);tkethoghpan spas = s。eSpan(0, text。lh(), rkethroughpclas);f (kthouSan span:sans) .veSpan(span);else mRevoedPms。ad);s。etSpa(new SikethroughSpan(),0, ex。ength(), );ri rp = wtigmRevokedPerms。i();mRevokdermstorray(p);mPm.setRevkePermisons(mPacagem, rp); privae fial stati Strig TG = ppScrty
44、EdtblePemiss;pivae EiaListenr mEdibleisteer =nw ditabeListener(); private bolen locaLV= fale; prvat Context mContext; privat ayounfater mInfater; rivae PackageMna mP; pivae LinrLyut mersew; private Ma mNmaMap; privteLis mGopLbelach; pivasSeStrig mRevokederms; praeViw mNoPermsVe; priat String Pakagea
45、m; public ApSeuityEdiablPemsins(Contxt contex, tingpackaeame) mContxt context; mCtex.getPckageMangr(); mPackageName =ackgeNae; mRevkederm newahSrn(); trng reoed= mPm.eRevkdPermisson(pcageNme); mReokedPerms.addl(rray.asist(evoed); mPermLit= ne ArrayLitPermisonfo(); StPersinnfo prmSet = new HastPermis
46、sonInfo(); PackaeInfo pkgInf; ty pgno = mPm。ePackgeInfo(packageame, PackMaager。_EMISSIO); catch(ameotFudExceptio ) Lg.(TG, Coulnretie ermissis forpakae:+packgeme); reur; / Extract al user ermissions i((pkgInfo。apicaonInfo != nu) & (pkgIfo.applcatnInfo。uid != -1) etAlUsedPemssions(pkgInfo。pplcationnf
47、.i,permet); for(PermisinInfo tmpInf :pemet) memsit.ad(tpInfo); priate voi gtAlledPemisio(taredUid, SetPemissionnopemSe) trin sharedPgLis = mP.tPacgesForUid(shardUid); f(sharPkgLst = nl | (srPkgList.lngt =0)) etur; fo(Str arePk: haedPkgList) etPemissonsFrPage(hardPk, Set); pivate oid etPermissonsFora
48、ca(trgackaeName, Set pmSe) PackageInfkgInfo; try pkgInfo =mm。getPackageInfo(pkam, PckeMangrGT_PRMSIN); cac (ameNotunxcpton) Log.w(TG, oudnt eie perisons or packae:”+akagea); reurn; f(pkgInfo != null) & (pkInfo。equstedPrmisios != ul) xractPerms(pkgn。equetdPermision, prmSet); pivate vidextratPems(Stin
49、trist, e peet) f((strLis = null) (strList.legth = 0) retu; or(Stin pmNae:srList) try PrissioIfotPermnfo P。etPermssonInfo(permName,0); f(tmpPeInfo != null) perSedd(tmperIo); ctch (NameNFondExcetin ) Lo.i(A, Ignorig unnown permissio:+perma); publi itgetPermissioCoun() retunmPrsLi。iz(); public View etP
50、erissionsie() Inflater= (outInflr) Cotxt.getSstemervic(Cntext.AYOT_INFE_RICE); PersView = (LnrLy)mnflaerinflte(R.layouappprms_summr, nul); mShowMre = PersVw。fidVewBId(Rid。hw_mre); mShowMreon (IaeView)mhowMore.fdVieyI(Rid.shwmoric); mSMoreText (Tetiew) mSoore.ndViwByd(.id。owmretxt); angeusst = (LineL
51、ayout) PermsViewfidViewById(R。i.angerous_r_ist); monDangerousList = (Lnearayout) mermsView.finVieBd(R.。nondangruprmslis); mNPersView=mPrmsVew。finViewByI(R。dno_ermissions); /Set p the inaLayttatacts ike a listite mShowore。stCikble(true); ShoMretClckitene(this); mSoMreseFocuse(ue); ShwMo.tagroundResur
52、ce(ndroidR.draablelstslector_background); / Piu from fmework rsorcs isted。 DfaultGrpabel = mCott.gSig(.sringdefaultemissionro); mPmFomt moxt.etn(.trngpiss_mat); mNormalIn = Cote.getResoures()。getDable(R.drawali_text_); mDangerouIcon =mContex.eRsourcs()eDrwble(R。drawabl.ic_bullet_key_ermisin); SowxIc
53、on = Conext.tesores().gtDrawable(Rdrawabe.epander_c_maie); mhwMin = mContext.gResourcs()。getDraable(R。drwaleexpander_iinmized); / Se rmisions view setPrmssion(mPermsLis); rer mPermsView; / *Canicalies th rouecripion for t is isplayed o the ue. * TDO chek fo inrnaionalition sses reoe aing 。 i str1 */
54、 priate String canoniclzGroD(Strin groupDesc) f((groe=nl) (roupDsclngth() = 0) eturn null; / Bot r1 andtr2 re on-nulland a n-zero i. int en= goupcngt(); if(goupDesc。chrAt(en1) =) gruec = grupesc.bstig(0, en); return gruec; prvate CharSequence geGropLe(Sting gpName) (grpNam = nll) /returdeaullabel rt
55、urn mDeultGrpLabel; CarSqenechedLael mGroLblCaeg(grpNme); (cachedabel != null) etn cachedabel; PermsioroupInfo p; try pi mP。gPemissnGroupo(grpNae, 0); cch (NmotFunEepio e) Log。(TA, Ind roup nme:” rpNme); rtur null; ChrSeqence el= pgilodLabel(mPm)。orin(); GoupLabeach.put(grpName, label); rtrn labe; /
56、* Uiiy method th displays permison from apoaining up nam nd * it of pemissionscripins。 */ privat void dsplayPerision(bolndageous) Map lst, ooln dangrous,rawale icn) View permView = Inflatr.nfte(。layuappeialepermion_item, ull); TeVe permGriew = (TeVie) peView.finViwById(Rd。itae_pemongoup); LineaLayou
57、 rmeciew = (ineaLyut) prVe.ndiwByI(R。d.eiablepermisis_list); ImgView imgVew =(ImaeViw)permViewfindViwByI(Rid.ditblpeicon); igiew.smagerawabe(icon); f(grpme !=ull) prmGpiew。seTxt(rpNam roup); for (PermisnIfo pi:ist) iew eermVewmnflater.inflte(R。layout.app_editablepemisson,nll); TextViw edablPermVw =
58、(Textiew) PeView。fiieI(R.i。editaleprission); ImaeView edtalemgiew = (Imageiew) PermVie.findVewId(id。editble_persson_icon); dableViw。seImageDrawale(co); CarSeuence pemDesc = pioaabel(mPm); pannbeStringte = neSannabeStin(permsc + ( pi。ne ”)); if(mRevoePems。con) tet.stSpan(nw Strikhouhpn(), 0, tet。leng
59、th(), ); eitblePrmViwseText(text, extVew.BuffrTyp。SPANNABLE); Perme.etVsbilt(iew.VISBLE); edtbePmViestVisbily(Vie。VISILE); ditbleImVew.etVisbili(iw.OE); eermView.seClickae(true); PermView.stTag(pi); PerViesetOnClckListeer(mEditabeisener); ermDeView.addView(ermViw); rDesciew.seViiiity(iew。VIIBLE); ls
60、e peGrViw。stText(lis ” ts); pemDsView.sVisibliy(Viw。OE); return permVw; pvate vd swPermisins() switc(mCurrentSta) case _PERMS: dipaNomision(); brea; cse DAGEROUSNLY: displaPermissin(true); reak; cse NOMAL_O: displayermisions(ase); bea; cseBOT: dsplayPemsion(ue); if (Exnded) dsplarmissons(fase); mSho
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 跨領(lǐng)域合作下的設(shè)計(jì)軟件發(fā)展趨勢(shì)分析
- 超市火源管理與防火監(jiān)督的實(shí)踐探索
- 內(nèi)蒙古2025年01月內(nèi)蒙古東烏珠穆沁旗事業(yè)單位引進(jìn)9名急需緊缺人才筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 跨學(xué)科合作在提高血液透析安全管理中的應(yīng)用
- 小學(xué)英語(yǔ)課堂游戲單詞字母句子類游戲陷阱
- 高中語(yǔ)文情感美文守護(hù)你一輩子
- 初中語(yǔ)文文言文庭中有奇樹原文譯文與詩(shī)詞鑒賞
- 非營(yíng)利組織的財(cái)務(wù)管理技巧與實(shí)務(wù)
- 學(xué)校畢業(yè)聯(lián)歡會(huì)主持人開場(chǎng)白模板(30篇)
- 高效財(cái)務(wù)管理軟件應(yīng)用實(shí)戰(zhàn)指南
- 九年級(jí)中考物理-安培定則(右手螺旋定則)復(fù)習(xí)題匯總及解析
- 錨固溝施工方案
- 廣西太陽(yáng)能資源分析
- Internet網(wǎng)絡(luò)技術(shù)與應(yīng)用課件
- 華東師大版九年級(jí)數(shù)學(xué)下冊(cè)全冊(cè)課時(shí)練習(xí)(一課一練)
- “課程思政”融入專業(yè)課教學(xué)的探索課程思政與專業(yè)課結(jié)合
- 工程結(jié)算審核服務(wù)方案技術(shù)標(biāo)
- 動(dòng)物水、電解質(zhì)代謝及酸堿平衡紊亂-脫水(動(dòng)物病理學(xué)課件)
- 太喜歡體態(tài)訓(xùn)練了
- 裝修客戶需求表
- 小學(xué)二年級(jí)英語(yǔ)開學(xué)第一課課件
評(píng)論
0/150
提交評(píng)論