From 2acff556c25e788c47284c9fc837f27a1916b578 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Thu, 11 Jun 2015 15:47:29 -0400 Subject: [PATCH] Clean up settings shortcuts - Remove some bad entries - Fix icons to be top-level item specific - Add memory Bug: 20632230 Change-Id: I067b467b9ee354b52ef61b312dc5a89fd7eae2ac --- AndroidManifest.xml | 16 +++++- res/drawable-xxxhdpi/shortcut_base.png | Bin 0 -> 8711 bytes res/layout/shortcut_badge.xml | 34 +++++++++++ res/values/dimens.xml | 3 + src/com/android/settings/CreateShortcut.java | 53 +++++++++++++++++- src/com/android/settings/Settings.java | 1 + .../android/settings/SettingsActivity.java | 24 ++++---- 7 files changed, 117 insertions(+), 14 deletions(-) create mode 100644 res/drawable-xxxhdpi/shortcut_base.png create mode 100644 res/layout/shortcut_badge.xml diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 4dcaba7a527..5f1f14c38a1 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -767,7 +767,6 @@ - @@ -787,7 +786,6 @@ - @@ -807,7 +805,6 @@ - @@ -926,6 +923,19 @@ android:value="true" /> + + + + + + + + + diff --git a/res/drawable-xxxhdpi/shortcut_base.png b/res/drawable-xxxhdpi/shortcut_base.png new file mode 100644 index 0000000000000000000000000000000000000000..cd509dfb722d939773e6c56c06fa06e5195fbf7e GIT binary patch literal 8711 zcmZ`?C?MS+4brKS(%rCh!*Bfm zednB=hr`);;@^uO{(C{leHFkz0E|z{YVsIM=ue2~(OFbO`v8CrP?nR{ar=AV<)M@0 zd~;;I)M$6;s)}Z;W=3ygMZdQ~F0=AW z3^;(Jp}#bT52mjY@C!%;h`s3{dY?D|R9_n4GhlUs4z-72)8W8&oyH{e{?5$koAHv> z`se(+KYjXC(fjdsi3gn*9VT+BxxRo!Q}^Hq9HXJ3{c(Qzwh$jazVqqr_4RcPQ1Bzp zHx!1%gmgh7D~gJ)V3?Xz;%>+#;G-F1sKrWJq7n=#cSTgD!_Ja1Vr8C7*kLDRL`X=O z3`s?&LxtfC8H7Tm==HlajC|ODo@&b>=0Na5+YJZ~3}pSLmLY`N0R{d8-We>?Gw=~Y zf>r!u|NHaJ65}R7JyXPikO7A7D+drDeVT;e(w5_Xl-TZ8;FT-&9=uZwL2wYs@*WVf z70#5u%8Bcc;2-MG2L=YnrD4AM$v|HvK5P62gczLw5}bniv#&4aDGG{QWuxgp7wuOg zdQ~%g0=Uv%L1M z$dQ!Pr)kX1r86wJdmf2Hi~`Q5Md75hv^4iQ?BmCe#M*8_+wpNNVSuc$u!@CR-b0{HTCO=DwY!%A^v zqr+O_$LIKCsQsw;5cC6x1$GdfSDzTE2WP0AvU1}BaVsDU-LzkHpKYneD-3O@l z{qfNHwjKj}`}#1bA-yrQW0%l~R$mV`9c12bm4$UIW)*KNIp4NqUEHl+C#DiZrCFJ@ z8B4#*5UH@BLiiXV2@#P1^9*KeTwLc|uDfE9hj!*NQ+}r<`QSSF=pjc(6Q3f+G&*%V z-Z3^5MQH{_{%c`jq1V+)h(^KJuOxpDTsp04$lLBthEPj%%Wlv|J2h5&YTU;;l;%Up zu(uTA3rIM0=V^$D5(w>}WCB*IGyAhOf57egg!mX8M#z>wD?7+yB5dM-9pXeQGfZjU z;-L5+co`ZRW{+6a2nq^P8MJv`--6ktmnN=w&;6qO?pRq_Il;)tNaI}iAh)EX#B!<4 z>u4;M&m7__4wyrJR`n#CyOp&G%TS9HwnjlTk-t@V?ybGN?)jwgsbpfiRuGsWc(fml z8WAfl00(3kjW;^ZNND)QS}%Ph0q0ZLVeNl^UR@k6G?(Y+=NGqI|8P0@+jMqzwgYG_ z|E-i_HyuBgkA%kFj|eZ_?G-|8s`Q7gM>9ohtwz$VA*yJxXmnU!4fjt!@iFCTvV>z* zE^nlmdawTes?rx=aD2_7UaP68 zjX-K2q#&VxHfe?~PbmT2g*fO{)fA zlBd{JsAt%ozcUD7{JzRQH-B=n8$a!6O)6>KJ%nm%Ydh`ETIYCC!1x%v3X~uimIo2x z;Z{Buv(}G_U$tJ~Y>JlZmekeOo{0i~AO!-bg5QM>5NMGQO-(&LR|~T4T-7D7%Y|v4 z_Pdim^cAsgL=}kqrlp0)Crw#}DmvYKEZd3^_lokF6|G?fNZv)}0IUbMGzEl*8N^&ZSMJTC3;?>7VU z*SjSZk`=$+|3#CbEt<4B-<>R30xIdaxIT3D(fZuE*xK%)*)Ls!aV3tvj0ZgH68-g2 zE<~nfKkd_AS;OeBy>rQo3VT6{sJgnk7cR{U(!1VH_K1u9*_W**6_=9|b%tf45)$`b zfJSA3NK%lgd{;v`Jho zCqhu3U)XYp#we-dP0msHRai*KJ2olFnIkN_}mNlsL(RXjX7IZ3U0{FIZ}(JcWWq-ATTf_;*ak(Tlo)(!D0S zk^S`PlaidA+m zR0hu2GQ71g(e-A_{D3*o>~dh3k)3SMGEN=#BtBu`OIpLSdI}hqZwXL~&rrE~ULN=S2>!BwXxPlNlB{JM~$0k7*7M2y$ z#~ZzX4ARQa^yC+{7@9z+A-H+_U;;NWO8T?#`aIl4V$gab*iTVb?-#qdBR;cZZCZ}8 z0^}b)d=S$DYm@RPsK&}_Ps9RvT9jzg%a*@vx97NC7G!p4KaV9IZOz2W@jMw=YgqEW z^PZM3s#WKbFYW% zE&CwbQEi+dsSx53H-A722#<`69AKpJ=iznUoe&f$3}C6W?YDfbfe!=d^viS^!h)Bd zq^dHDJ@HzdC3!k+r=8;gU;ySI5KJ>t`14fyJU-YW>gM{YctbVNXmz-G=lQpz99SG2 z9M;scUe<{U2qg4o;kN`IwcV;aZDqN7f8bA>045MFp;M^up$O_xub-&i!o0?K9e7m& z{|Tn=Ic*LbxZj-pcLIf0EJyIPz0VQ0UnBslnspooZN1QXK!?ORvpxX-V^jAnic&b6 zO88@DUS(ya5_7_@wAw(kZksx6`?l-NAQtdg3TEx5I$yAL;aH17FVXLopg#C8IG*MG ze$7~VMtb^0jnxRdE_;#=1rrW=R#sNB`^fElaKNPJf0sZ{B=RT`3#x%2=MKoyXcTS=j>w z5!rMvi?mrT}AFjuIOq#$AVsHNOqgHjr zz27{r=CKfUG=}e=-)tB+q`MYGl5dNPCVj(c0yVNSG8T*`T_bQ_ zvi&hIz0)R3^rl6qa2+aQ(t=wwZCnc%Eyk?m9utiOUFiNaQ04FIa>BExeX_U=k zi+d9vADKZ zuOSm`Ky`dVLWIlyOqC~CP@C-G2_0r?dHp)!a}t{*b0d znv0#m;@>@lkez*QJq*B;EYeU_jr_5ZY}Bj#RqGXw0^hz%GxB22-qaZ6R9N}HiUMrg zD}vnpK7K<^FMIAdQ7|m%-1sU}{MQHTfeQU=2;S4) z6Gi3U58Xgf3oFjHNyJ9<#yy%Ci}A! zWAniZf;WNU-p27#wkPwH$P~)W@NjHrkeCm0HO%uTPgt&-E&Om!G4(p1JX+bET{&)R z9PCcYnZ9&yIZ9%Pzf1BwkqTttZ>iy-7ZsgV{m#!%KuyhM`D_VSPeqpJiGy29#XF1f znw%;RmFs(DAoPJ%n)ue4nT19BN{6;|#(pc5}8arf9(=LbICzk*K3RYHDIJMuIJ1BEPeaK#Z^WgW{gVPa!MJsj0N@AzK zU(Vj1r{YjaZjk4^kQ7r84{ps>6-akg6{Wy%0kmMK(xHU1qrS|FmdTA%1C*s05s_9X zN-LR1MNs@NlQtjztye-q0+-n~jrE8~SpJ6UVIHr;w(~h$o1q?z$rg~p@};RN)C4Hd zfy|gN|IdzHUkt5Y_lv1mygL5dZleCXqB~C?gfS?tHscr+P5w!N3gv4>Zer}9^~2^P z^^vi$n7_@gM{hDlzL_zO-$VcpTHa_iH);REwiSddQfOC^%!dzU-y0jRd{FeEbd;mr z+!ja&1D#Fto~`E^jK1sb_XqZuZ4Wnld#kIf@1Lx*%4%t8{mhS%e5qFW=Rb{1kzeT3 z;&g{-fpJ#nmIxa21eDzE4nI`N4?-DPb}QS#p!~51gO1cU2yk2$KT+}{m?-Skh>wBB zn&{{V?txILsB{M9`(9F_VQpn4iIR&CqaVU+RY$Q8foa8^ut?sY{c-gKmD&-g*hsbT zVff~t04-KY;m-29KH1pY8p}EIv(52c9*I@jlrI@uyJrR1GKB3-E<&X4R?3QsilBtT zU!>$f?agV@;-+q4QGh@$ce)T@*>xt8BHc`}=+ugJ)XPds?{x5?7^0uMV9N-RK(E^i zFLFY{YRnGCWYR!%S(6Tx%-29KmwqMO%*pALoRH0oRRp91UqMIWo}z;o7$^;0{e`Qg z5e#ej`kWBlfSNAs&1^fT}`SU7-=JWeTy}$@k0J3`~(FnVvMk+y80u? zUW`RW?fr!jXWPHbK`#7t-%A>&g!ff&NlUhp8v|H!``+m3*$?#hrz*HaEOSjvO_`*E z%7qpOy&Fx0awoF;7@Z#v9|ocOR$98BR;*q4;4deKWClM-w6?akaeHx45@H*<8Y?{I zmRHJ%hM%01V=A-y{0hZ&-k}c%Sc4Rxga)0K9mhsCu~-GX0+b50*s@OLktAI}WRMdr zB!|7PwIdgIsRuV_YwJSX^4UBE5sdwG&jU!~5T7>~3|ld@Qf(3c<_nhA z-)<{iXk5l(*bFly;m_@gj(>7kE*?^4q@?H}R)2<7_xJaU5R!EM(Ja>4%*@O@$o5I*f6OThh@W8Y4;~#t0+3zc6yT{o&kGLnDT!+^P5KwaQ&b ztMn1ug^o7CCCV>=8C=mnCM@YEr+_2|bz@1ExciA7LM@iJ!##D8#Ogj{Mci>9P&(4! z*rIFDo;_}8L*jI6tX+jZE_NNWTaQz^!#qa9C9kTgDuPXl1;+BkpTBVpD{cReb!sU=x$^c%2ME{O^2r%X*<*}r&nise^-~OoG1+}P6<6!n@ ztMiJgpL(TtvcU~~s``*m_VbO$b0DLZWi;%9A$JOMOu&TKsY3Qj9B=$7P(yYMoGc#B zw;UrtOe|Mz9y{}RxKtnE&E4G6LkT@lLIx~Ax0KLM0Q6;KSD72viVL$} zI$!J?B(a|Hg%U2=?mGn(mbO=j1MPS`5$gZS(Kk>Yy(1L$TSKmNQ!_C!g{*eC$=B5>D zv4^RkurQ^HiV6p4mUw&u>E(vc-5Tv!wwP;q-`u4a=r!z4*f{fe>tF0!3`&)L9D^zQ z->QVJfi!~o1t{?olarHI1}L}BKi{@_-IkY`wzpM*98Y%L5DlmhGKYRJsFH%;`CwcZ>hnwU;H8B@p|*1N}1PG4WH?(LDKxUIjThH$iK0p9fESkgccS zhU6-i?9^fUqMZwiWvA(09j_O`YH5)W5vEG9np=SLv2W|xgcIirj_ zZ48o3MpKJX2;0pdlq;r<{`~$;Pe?>0E8+0SlI^x?@%AmXu%_7hZs#74AT&_i+#D!R5Tu7{S@W#lC;dPz?bXL$gLxOF7WxOI)6^qBs>vLU$6EhmE*2H2mb0RwqOVcCaPxm{r@nOF)pK@sX1};~&+(!39oqlFO`p50#&pI4DHyJ{NKQ$q zcnd-WkGIXr;Ly+3$^&-#Wy5{CfTjQ{5L%1rFy~?e-k}Gcu0VRys*C1`W z+LC&_js{QvTTEi{Gu7iaw$tSjrmtUrAvExGEgAFps8fp4jRlB|ZH4=uT3U%Wug>(P z%11o2EYq)|x9{{vGY4bWdxE3oa?#_QL$6$XATr)9<_N?Zqm}d%x=0-q*OOK7RW3`wbqSG;qHB%=%&AF@xmKc9Nr_#qps(j)A>FQ?bSB^EX5m{f1u6ktzOssaq(pHa2HH@#R^Si}hVURoDA_1v#TPbLZScL=yv03n^t)K1u zNf%yp%a3N7UlnefmY;g0NJ#6Mo08JR>`=zGEE#81h?(jZ= zT!a}ZTLUhP-UwzO^*FWn?W$F^QK7*mRzFro>T=WTmCI}LSR$ou(5}T4LaD8-4V9HI zVHMmr3oo}yQCR1S%FBFp6<6oT!%sGIq$xlzR}+!&JUot3wZO@xQRs)U;*#2-q{mxY zR#2>kreTG8FiYM_q!V-uwms{+l*o(EYW%)(h1KIq$|?646QU~wV1qIqXA9&y0idAX zlc!0zoI;Z2v|CPwbGFH!ol4c4tRBrROhr&KNA+_c__3kEsK6#8;S2{5&YD^p-6`@q=Vtn5CZHl4lu>`u$P>s^0L05m$vYsTcSE zP7O9Yz+j)Dv}gf6QLoB3zPr1-pXk2|3Rv#LX<$wXBBo@U=?*+LM|~WhYSu*q$ptWs zGfZ&EHa&CVWB_T4Yx_(wy3gt%{eyUYfAM-LQ$gKA=^q7@#;H-E9RIFV*CBCqb35=J z<{(R>awp_^xbzD&Vfcalsm7Yf^e`-SIRGsI5*k0WLG%>8yP=c+SC<99XyU7lkJ9*p z!zcBqMb>(h41ObugUk-Mtmg@wxAJsH{f-r*GxAlt@U=;^4JM(Ck-SNpH=Xb9!QN4n zKi$j%yV2_R)MXY?Z0|(Nae|Ho8BA|ORtz9Qx1{wMClr25O-0{RlXt`?6Ai={no4^( z`WV7-foI^EQE=idOiUDz8u(;{0zy*kJ}`ewUS2$StM~n9l}d4hxp}@i@w=H{4aXyY z!gvVa#P}Uk6B84}oOqrfa^}O zph!7f_(J^$qx_zCd|=;s7o-B0OFl~x4@;0!8K=xQA}fFZxv^;J{Q(Oia|BozE9TLqh{$pJAZ9O9vZCq^+&3 zh9bfQ$Ioj>SH#V}qLyd5tYeW`)ItMPg2lwd%53UxK7r=_6%vV@0UhCX+^Na;g30-c zF)o~@ZFg=?PENwcM)KFWvwMhnIulY{J?aQa3nW4sYaWGwWJ7q$NsL=xLvIfS=_T>T^MR{nme@nlM|=W zPEUG0!#hA>K)JHGXQVITITnD-_r>}q=3w#~PR9}F{2$LgbQSeHVg$zn+s;my65t~n NfU>;0T)7O~|9?S0m6HGf literal 0 HcmV?d00001 diff --git a/res/layout/shortcut_badge.xml b/res/layout/shortcut_badge.xml new file mode 100644 index 00000000000..117b3868391 --- /dev/null +++ b/res/layout/shortcut_badge.xml @@ -0,0 +1,34 @@ + + + + + + + + + + diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 5891438c58e..5f162b8ceaa 100755 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -244,4 +244,7 @@ 72dp 8dp 16dp + + 40dp + 10dp diff --git a/src/com/android/settings/CreateShortcut.java b/src/com/android/settings/CreateShortcut.java index fa2ce7c5604..637bc6fa89d 100644 --- a/src/com/android/settings/CreateShortcut.java +++ b/src/com/android/settings/CreateShortcut.java @@ -17,18 +17,33 @@ package com.android.settings; import android.app.LauncherActivity; +import android.content.Context; import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; +import android.graphics.Canvas; +import android.view.ContextThemeWrapper; +import android.view.LayoutInflater; import android.view.View; +import android.view.View.MeasureSpec; +import android.widget.ImageView; import android.widget.ListView; import com.android.settings.Settings.TetherSettingsActivity; +import com.android.settings.dashboard.DashboardCategory; +import com.android.settings.dashboard.DashboardTile; import com.android.settingslib.TetherUtil; +import java.util.ArrayList; import java.util.List; public class CreateShortcut extends LauncherActivity { + private static final String TOP_LEVEL_HEADER = "com.android.settings.TOP_LEVEL_HEADER_ID"; + @Override protected Intent getTargetIntent() { Intent targetIntent = new Intent(Intent.ACTION_MAIN, null); @@ -46,10 +61,45 @@ public class CreateShortcut extends LauncherActivity { Intent.ShortcutIconResource.fromContext(this, R.mipmap.ic_launcher_settings)); intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, itemForPosition(position).label); + ResolveInfo resolveInfo = itemForPosition(position).resolveInfo; + ActivityInfo activityInfo = resolveInfo.activityInfo; + if (activityInfo.metaData != null && activityInfo.metaData.containsKey(TOP_LEVEL_HEADER)) { + int topLevelId = activityInfo.metaData.getInt(TOP_LEVEL_HEADER); + int resourceId = getDrawableResource(topLevelId); + intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, createIcon(resourceId)); + } setResult(RESULT_OK, intent); finish(); } + private Bitmap createIcon(int resource) { + Context context = new ContextThemeWrapper(this, android.R.style.Theme_Material_Light); + View view = LayoutInflater.from(context).inflate(R.layout.shortcut_badge, null); + ((ImageView) view.findViewById(android.R.id.icon)).setImageResource(resource); + + int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); + view.measure(spec, spec); + Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), + Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); + view.draw(canvas); + return bitmap; + } + + private int getDrawableResource(int topLevelId) { + ArrayList categories = new ArrayList<>(); + SettingsActivity.loadCategoriesFromResource(R.xml.dashboard_categories, categories, this); + for (DashboardCategory category : categories) { + for (DashboardTile tile : category.tiles) { + if (tile.id == topLevelId) { + return tile.iconRes; + } + } + } + return 0; + } + @Override protected boolean onEvaluateShowIcons() { return false; @@ -60,7 +110,8 @@ public class CreateShortcut extends LauncherActivity { * implementation queries for activities. */ protected List onQueryPackageManager(Intent queryIntent) { - List activities = super.onQueryPackageManager(queryIntent); + List activities = getPackageManager().queryIntentActivities(queryIntent, + PackageManager.GET_META_DATA); if (activities == null) return null; for (int i = activities.size() - 1; i >= 0; i--) { ResolveInfo info = activities.get(i); diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 5fb94f0b246..ea4f77af9fd 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -113,5 +113,6 @@ public class Settings extends SettingsActivity { public static class TopLevelSettings extends SettingsActivity { /* empty */ } public static class ApnSettingsActivity extends SettingsActivity { /* empty */ } public static class WifiCallingSettingsActivity extends SettingsActivity { /* empty */ } + public static class MemorySettingsActivity extends SettingsActivity { /* empty */ } } diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index 89231df5e52..f376644a671 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -1039,7 +1039,7 @@ public class SettingsActivity extends Activity */ private void buildDashboardCategories(List categories) { categories.clear(); - loadCategoriesFromResource(R.xml.dashboard_categories, categories); + loadCategoriesFromResource(R.xml.dashboard_categories, categories, this); updateTilesList(categories); } @@ -1050,10 +1050,11 @@ public class SettingsActivity extends Activity * @param resid The XML resource to load and parse. * @param target The list in which the parsed categories and tiles should be placed. */ - private void loadCategoriesFromResource(int resid, List target) { + public static void loadCategoriesFromResource(int resid, List target, + Context context) { XmlResourceParser parser = null; try { - parser = getResources().getXml(resid); + parser = context.getResources().getXml(resid); AttributeSet attrs = Xml.asAttributeSet(parser); int type; @@ -1082,7 +1083,7 @@ public class SettingsActivity extends Activity if ("dashboard-category".equals(nodeName)) { DashboardCategory category = new DashboardCategory(); - TypedArray sa = obtainStyledAttributes( + TypedArray sa = context.obtainStyledAttributes( attrs, com.android.internal.R.styleable.PreferenceHeader); category.id = sa.getResourceId( com.android.internal.R.styleable.PreferenceHeader_id, @@ -1098,12 +1099,13 @@ public class SettingsActivity extends Activity } } sa.recycle(); - sa = obtainStyledAttributes(attrs, com.android.internal.R.styleable.Preference); + sa = context.obtainStyledAttributes(attrs, + com.android.internal.R.styleable.Preference); tv = sa.peekValue( com.android.internal.R.styleable.Preference_key); if (tv != null && tv.type == TypedValue.TYPE_STRING) { if (tv.resourceId != 0) { - category.key = getString(tv.resourceId); + category.key = context.getString(tv.resourceId); } else { category.key = tv.string.toString(); } @@ -1121,7 +1123,7 @@ public class SettingsActivity extends Activity if (innerNodeName.equals("dashboard-tile")) { DashboardTile tile = new DashboardTile(); - sa = obtainStyledAttributes( + sa = context.obtainStyledAttributes( attrs, com.android.internal.R.styleable.PreferenceHeader); tile.id = sa.getResourceId( com.android.internal.R.styleable.PreferenceHeader_id, @@ -1163,11 +1165,13 @@ public class SettingsActivity extends Activity String innerNodeName2 = parser.getName(); if (innerNodeName2.equals("extra")) { - getResources().parseBundleExtra("extra", attrs, curBundle); + context.getResources().parseBundleExtra("extra", attrs, + curBundle); XmlUtils.skipCurrentTag(parser); } else if (innerNodeName2.equals("intent")) { - tile.intent = Intent.parseIntent(getResources(), parser, attrs); + tile.intent = Intent.parseIntent(context.getResources(), parser, + attrs); } else { XmlUtils.skipCurrentTag(parser); @@ -1180,7 +1184,7 @@ public class SettingsActivity extends Activity } // Show the SIM Cards setting if there are more than 2 SIMs installed. - if(tile.id != R.id.sim_settings || Utils.showSimCardTile(this)){ + if(tile.id != R.id.sim_settings || Utils.showSimCardTile(context)){ category.addTile(tile); }