From 2a030b05a978281147df4d1cc4f12bc8d61c0729 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Thu, 26 Sep 2013 10:54:16 -0700 Subject: [PATCH] Directories are always enabled; update assets. Fix bug where item enabled state depended on FLAG_SUPPORTS_WRITE; directories are now always enabled. Also unifies enabled testing. Bug: 10903210, 10946731 Change-Id: I241533d273dfe4a2146bb322a8bd93066bf4ef55 --- .../res/drawable-hdpi/ic_drawer_glyph.png | Bin 390 -> 389 bytes .../res/drawable-hdpi/ic_menu_sortby_am.png | Bin 659 -> 574 bytes .../res/drawable-mdpi/ic_drawer_glyph.png | Bin 458 -> 385 bytes .../res/drawable-mdpi/ic_menu_sortby_am.png | Bin 594 -> 508 bytes .../res/drawable-xhdpi/ic_drawer_glyph.png | Bin 506 -> 409 bytes .../res/drawable-xhdpi/ic_menu_sortby_am.png | Bin 731 -> 583 bytes .../res/drawable-xxhdpi/ic_drawer_glyph.png | Bin 203 -> 268 bytes .../res/drawable-xxhdpi/ic_menu_sortby_am.png | Bin 453 -> 373 bytes .../documentsui/DirectoryFragment.java | 45 ++++++++++-------- .../ExternalStorageProvider.java | 10 ++-- 10 files changed, 30 insertions(+), 25 deletions(-) diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_drawer_glyph.png b/packages/DocumentsUI/res/drawable-hdpi/ic_drawer_glyph.png index 053c0b85c87cbe3dc5e01a6399a8d42fdd3aca6a..251ecfb0ab5f7faa8465250119403d9e2e07e98c 100644 GIT binary patch delta 239 zcmZo;Ze>>N4DfU3<&xrJU|`_&^l%9R(h5Lqz`+J23)WQRPgE?f5A}3$42d}W_UcC7 z0}4DY7v+ysoZOOg*hIvDG2G&4y^yZm$w~YwD{nCGc_{yRkGAZOLk!BC7Y;o%WG?x} zCw%?)be6J%{CW!+-!QG56B|&+$(tbVaf#`+x#3ta-MI&$+F({F9Li`2 E05%Lu*8l(j delta 240 zcmZo=Zev#L4DfU3<&xrJU|`_&^l%9R(gHxNz`+J2r8|F|nW$J?ALi-e7~*j}IYEN; zFoS{8#+?!p5;_Y^>^}51Ha=vTl9u2&=|M_DLP26ef`D4WfoL|iwr&IF85&=iHgWGW zHZXXjc!~S|N`abY)*iRV8yFT}wBTyvWMFV{lZ|12u`L~FlWK`;L`h0wNvc(HQ7VvP zFfuSS)-|xyH8Kb>ax%6uGO;o>&^0i(GB9vAp52S0BR4-KGp!Ou2Z{!>JY~blA&iCq DY|KUo diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_sortby_am.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_sortby_am.png index 78638f736418d1aecc43dd985983be19456295fd..0d4cdc197f6d097a44ec1225bf6e281468d5e11d 100644 GIT binary patch delta 341 zcmbQtx{qbTlzKi-7srr{dvCAV`W-e9VR*2f^;CW9kwXV$BPy=^`c7y25$$ITc$3oFZ;1NXkFh^yd1>;+y|&_#OMb z<51>(W4}9kTnRV6pPA(qu5esr@jmrwC&cc06eqAhPu=f#@3fdxy$6rhvBh1lb5DQl zt-Q>>^!5wIb%j?78RqXeo_(9~%_FDpQ-3h?=dx@loce=3e@5w_dn=XLrMxGXc5HkX zo)*V;@oPI*;^R=&j~jn^&e7}&-uH^(Qf^6)^qea-=ak=lxLVE-Z4ta*X#b0Ue?l@J zYZbPsyUJZLym;tjk!0xcm$qLe>)U5O%GmHpg%9M3ALr{Bm%Ub>-}11+ViJ?Ah;fLa ip_Q?*m64IIfw`4|!I^W(X_F1HNbH?_`_|+nCPM%*@SVc| delta 444 zcmV;t0Ym=21d|1jlz(GML_t(&-tCyNPQx$|hQAglG(d&K!oWMQG6Ng$z)K<)q;7o# z2Go&(2_z&C6`>^zHmJI|G;U(qr1wcyWGAx!U(VfG21QX6Wu57Weg>S{XG)B1E3qm1 zec%E(jICI3y~sc}wz9g&9Vmb|pch-1AYb%C#=sVEY@aFdY=4`gD1wfo-*b#NO@YZQ zMcs*H8r=mhfxW;6-ho>h$Sl&pHgH1tO8f$hnlRA1N<0IefN9`$Uz=J(25T1>5PoOA ztch9RbrhxbxPo{e{~*pW#i@2>^+l%90dNHzc+PVN+yEc34Qv2M_*ddb!k?diU>QC4FWL^s>QGX diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_drawer_glyph.png b/packages/DocumentsUI/res/drawable-mdpi/ic_drawer_glyph.png index f616d3b0880d382edd23068fb06e6aa2d785cba0..ae0da3462a24bf4c1d3f2f7bb371ca83f6d98c46 100644 GIT binary patch delta 186 zcmX@b+{moh8Q|y6%O%Cdz`(%k>ERLtq(y;PfrAZ5{#{_)F;THND$vu#F~sBe+e-&I z8w?nnFD@@pE-!L9s3>!gagHO4dj@N@z~}RdDjzuiryjU7!*;`iHLTprj$M+?_I`Qe zaoxdh5B^ERLtq`84ul!FaOPACvLJ5jN?ewL?;V~EE2tCtM9 z4mk+8J=9lRp^>EcDD;hO$Ag7HV(;AN0-mBwZYohTrV5BDhW#=RK9l_I?7L6(p0j2p z_30eCGjTEBSedIQ z(*%F?1WT_g_+hZ~)zjO*%~YC>Nl32`f1`F>F0~=p$FTdr_JXAK`!80Xls_TtFjL{$ uy?Oek6W_^-7=#!ZTN#;HnHuOCm|GbbxEs&zoh;9YDPfkUY&bc9(GUQ@nPYhX diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_sortby_am.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_sortby_am.png index 2155d02b03bc4e5aec8feae49897ec232d5928fc..2768b1c8de74ca8c35235152e8a3b9582df20b06 100644 GIT binary patch delta 276 zcmcb_@`riC5b9_pYAM9J;AZd;r^$3{RfeK_KM~YWg@~OxKs{IW3%*bTrg$B zLoS|KH43cf98xqV1idL)YI`Etf+?--*NjJoCu2E7yM+G07I~IEtgE8MB^fjQ_}X<^6RRFoRcT-XOtB&4ly*eGB&m{GSW3Lw=ys|b1pe; R@&_yudnez%HCd6#5CEBraNGa@ delta 363 zcmeyve2HbkB<{k0 zzUf8ZzF09VlMw$h|H_lyeg0{|7Y@c9JRm3+;_WEz{vtj7fv&FM)uWNW6l*8_-LLs~ zhCFxLKFx-h&&wE|%`#{Fptrm-r@^T>E!=VLtz(?uK2G}l@B63QQ3eT-TUCFb+Vdm% zWBvp0Mfr`JbrsZIxN;_EGRle=h8P%F8CX~uSn3*>TNxN=UEk0?c@`Fl=q?WH$)_0& E0hT12lK=n! diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_drawer_glyph.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_drawer_glyph.png index 002ccd9c87bab4653aa65b23c9c2f482a577c844..7402c6d3bada22ddb289317059bdf62fa7f1476e 100644 GIT binary patch delta 223 zcmeyxJd;_mGr-TCmrII^fq{Y7)59eQNNWSJ0|y(BY|iV8oTyk_pXur17?N@C?X``( zEet#?2bnJl+6Hpz*8TAn5O!j;u*h7-kga^1li@(J=O+HM|5SJGli8ta*_L!(<-b1r zI_HJTN4j#m*G9!MoLObX_3x%;($Q^4!`A9Cq=m||{(mE~G3j>F>M(JJ1Gjng(*$QM z5Z<2$v|P2sHKHUXu_V=MatWh=h;fLap_Pe=m7#^Mfw`4|f$lX^!^txkWicdTx_f&k IpJX%y0EQSzg8%>k delta 333 zcmbQq{EJz!Gr-TCmrII^fq{Y7)59eQNQ(loHU}G!oSuHzd!k}-{V7iu#}JR>Z?D>R zIT?zyJv{zU$tbGxOx~NAuD#xc%z8)9-D~CXTdpJ?*!|i-sD6g>kz;!%D6zy9`R!8? z;mY@VeQeL?mh|?=@0WOq{g!xatZ*l(ZGQD7uJ{+MOI~03{ITS*+=O>uI)2&w^M1Q% zevEubtK)_y=CB*jSM0hlK`x}8-+2pjpA@%mT%qhrJ-0^>zN(x^&^0i(VlyysH=f-) V*_=^U1Xaesz${PMaB>EtApp-8h8+L^ diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_sortby_am.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_sortby_am.png index 85c87342bcabe2c2133fa12ae39be3b83a5eb1cb..f24ca1a855fad2b5064d325ab6934f13bae47ede 100644 GIT binary patch delta 351 zcmcc3dYom#lzMSb7srr_TW@df^*Z7p()Q4N(bl+zj-1rw#oNl_w(X6`QRIl~?3jCX zQPck2VmH6dX!Wt#{H*p=;*1*06eD9!k4Y+?lT569FVwO5Y&tAjz<1~GwM65L`3%Qz zzT}=!R(j)v-;CTZtR2e^NPn0myRKpVI=+kE1^hS8`Nbb#HaN{!ujsidbPG>j;BmD~ z$KBJ;x9@V;B51`}w)wqW1-o9u^8I=T6ia2=<~7b%L1OQ?FoK*k- delta 549 zcmX@ka+`I+l={`4E{-7;x8B~|@6Bu|a^PcruIt>A5CP4(E&>a8?dsTEKe>L!YG-!# ziw8Xe=eV|ZZTTnl&M4y7o^1W+-bL>>%d~u{I9XjjeMv%(;W3G1ALXqr-;x(Bmz~3& ze&B7qtd&zW|BdT?_nNyG@p0c0%*y`5;?aM=+TaS`x#s>we3!iI3%Db$0_E8sxLR{0 z_ZTjmWY^r?veDxg+p(Wp#V$F$V7PHb&h}>08<~nTR%_ME+-T@d=5r6u6mDk*!$ zOUfTuYqHp<9}l?AE%0Q$gLuScplb04d=;1Zjz}c;cuv^DXQ5&(vGx_)jwMH4t`W;r z-NF0C_D(%Z%yA1w-9K;Yg`=+K2kPJE;e4CC>2Sv?C#}C_b$_>>oUE4MaPa;qRa-VA z&fJ9dHw{nYtR;F6es2t3Hm7LmKfZ#Q_Keq-m%cbtvU|st#=SKkq=S}+XfH7M?AIk4 zp!L}=OEkdhv!9o!LGZJ=AzBH~&RA=P9Eh1&p0vJUr}6tEF^p4<-XDo#oLUd$L@>qy zIbn?Vz+~(LjtI7S&wu>Q*rfPFc{Qi^0k75_?U&UKN+e6YW}ooR!C8<`)MX5lF!N|bSSl7T(*T^u$z`)AD!V1VXFt;)=(7L{%9YsTKeoAIqB}ju5 Ob{)}O9M+S?m<$1_r|;PS diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_drawer_glyph.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_drawer_glyph.png index adee4a35494f0ec55812431ba4755dffd83d3cc3..416069959c481f8cf3b33d701484839589cca3c0 100644 GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6|M7haSW-r_2$k+&ISV>*Nbjc0v41)Id-fKGiC|GcnJDL7PkSz*&v~fd$@c0K*FA`elF{r5}E)Bvqp*l delta 173 zcmeBSI?brq8Q|y6%O%Cdz`(%k>ERLtq!obJfrAZ5R`->zo2aN!pX=%37*cWT&9#l3 z2Ml;v95hp|pLvogs{7#F5yLy%^-2_uSg+P9d)9T95vYlQ;RfH1bpDx^VSKM{)vsZA zFuh?;t=Dg^q>rKzj0^`7b8kp?r)N4dwM6-j SoMp#AVxF#kF6)?`5}E+iDLF6z diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_sortby_am.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_sortby_am.png index 867c8e8a8467ed0b381da2fb9725ba79ea66acb7..8f19afa9882546ca25b4b465ee155029a8034849 100644 GIT binary patch delta 309 zcmX@g{FP~fXT7+mi(^Q|tv7cU3LY|$Xb7z1JIJu+uv&#$B8LR?agGz`8V)E=Xo=wI z)lh8te)p>4r9H~N(eFB@T=Kb}oyWz%Ai%)D#Nfcdz`?-4$e_T$z{1b~5xkJvy^-JL z$UT#(Q-f~(VvA@3%Un>oec{eQliGC>zbmWu@f*~8KmE=)P2oC{<_ovI=CQ7|wtlWC zzdfGmMhRO%F6RLuuHzRz~I!0v6d&55&Su z-8^|^&)c=^*}c@|m&85kOXkpl{fgu36N2@H)M=DVY> REMEe0qNl5$%Q~loCIHMzr858k diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java index 79ab28d08ec14..138f523ce56d7 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java @@ -77,7 +77,6 @@ import com.android.documentsui.DocumentsActivity.State; import com.android.documentsui.RecentsProvider.StateColumns; import com.android.documentsui.model.DocumentInfo; import com.android.documentsui.model.RootInfo; -import com.android.internal.util.Predicate; import com.google.android.collect.Lists; import java.util.ArrayList; @@ -95,8 +94,6 @@ public class DirectoryFragment extends Fragment { private AbsListView mCurrentView; - private Predicate mFilter; - public static final int TYPE_NORMAL = 1; public static final int TYPE_SEARCH = 2; public static final int TYPE_RECENT_OPEN = 3; @@ -354,8 +351,6 @@ public class DirectoryFragment extends Fragment { private void updateDisplayState() { final State state = getDisplayState(this); - mFilter = new MimePredicate(state.acceptMimes); - if (mLastMode == state.derivedMode && mLastShowSize == state.showSize) return; mLastMode = state.derivedMode; mLastShowSize = state.showSize; @@ -399,8 +394,10 @@ public class DirectoryFragment extends Fragment { public void onItemClick(AdapterView parent, View view, int position, long id) { final Cursor cursor = mAdapter.getItem(position); if (cursor != null) { - final DocumentInfo doc = DocumentInfo.fromDirectoryCursor(cursor); - if (mFilter.apply(doc)) { + final String docMimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE); + final int docFlags = getCursorInt(cursor, Document.COLUMN_FLAGS); + if (isDocumentEnabled(docMimeType, docFlags)) { + final DocumentInfo doc = DocumentInfo.fromDirectoryCursor(cursor); ((DocumentsActivity) getActivity()).onDocumentPicked(doc); } } @@ -479,11 +476,10 @@ public class DirectoryFragment extends Fragment { final Cursor cursor = mAdapter.getItem(position); if (cursor != null) { final String docMimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE); - - // Only valid if non-directory matches filter - final State state = getDisplayState(DirectoryFragment.this); - valid = !Document.MIME_TYPE_DIR.equals(docMimeType) - && MimePredicate.mimeMatches(state.acceptMimes, docMimeType); + final int docFlags = getCursorInt(cursor, Document.COLUMN_FLAGS); + if (!Document.MIME_TYPE_DIR.equals(docMimeType)) { + valid = isDocumentEnabled(docMimeType, docFlags); + } } if (!valid) { @@ -896,14 +892,7 @@ public class DirectoryFragment extends Fragment { line2.setVisibility(hasLine2 ? View.VISIBLE : View.GONE); } - boolean enabled = Document.MIME_TYPE_DIR.equals(docMimeType) - || MimePredicate.mimeMatches(state.acceptMimes, docMimeType); - - // Read-only files aren't actually enabled when creating - if (state.action == ACTION_CREATE && (docFlags & Document.FLAG_SUPPORTS_WRITE) == 0) { - enabled = false; - } - + final boolean enabled = isDocumentEnabled(docMimeType, docFlags); if (enabled) { setEnabledRecursive(convertView, true); icon.setAlpha(1f); @@ -1067,4 +1056,20 @@ public class DirectoryFragment extends Fragment { } } } + + private boolean isDocumentEnabled(String docMimeType, int docFlags) { + final State state = getDisplayState(DirectoryFragment.this); + + // Read-only files are disabled when creating + if (state.action == ACTION_CREATE && (docFlags & Document.FLAG_SUPPORTS_WRITE) == 0) { + return false; + } + + // Directories are always enabled + if (Document.MIME_TYPE_DIR.equals(docMimeType)) { + return true; + } + + return MimePredicate.mimeMatches(state.acceptMimes, docMimeType); + } } diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java index 0ef5f5674c50a..ed28da5225e9e 100644 --- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java +++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java @@ -16,7 +16,6 @@ package com.android.externalstorage; -import android.content.ContentResolver; import android.content.res.AssetFileDescriptor; import android.database.Cursor; import android.database.MatrixCursor; @@ -166,11 +165,12 @@ public class ExternalStorageProvider extends DocumentsProvider { int flags = 0; - if (file.isDirectory() && file.canWrite()) { - flags |= Document.FLAG_DIR_SUPPORTS_CREATE; - } if (file.canWrite()) { - flags |= Document.FLAG_SUPPORTS_WRITE; + if (file.isDirectory()) { + flags |= Document.FLAG_DIR_SUPPORTS_CREATE; + } else { + flags |= Document.FLAG_SUPPORTS_WRITE; + } flags |= Document.FLAG_SUPPORTS_DELETE; }