diff options
author | 2018-07-09 16:37:41 -0600 | |
---|---|---|
committer | 2018-07-10 15:12:05 -0600 | |
commit | 94785ef3654c4b0d02c3ff401a5339ba16b1ca2e (patch) | |
tree | 787f99a3e16f81c3c91184fd39d24bb0e784e13f | |
parent | 00a12bf0e6cd8fc6a31ce4e35687b1425407f631 (diff) |
More movement towards public APIs.
Starts using new FileUtils and ContentProviderClient public APIs as
part of getting DocumentsUI building against public API.
Some mechanical refactoring using "sed".
Test: builds
Bug: 110959821
Change-Id: I79918ac938f71903685c5a778763d5e3cc20098c
31 files changed, 138 insertions, 123 deletions
diff --git a/src/com/android/documentsui/CreateDirectoryFragment.java b/src/com/android/documentsui/CreateDirectoryFragment.java index 173950542..771c6461d 100644 --- a/src/com/android/documentsui/CreateDirectoryFragment.java +++ b/src/com/android/documentsui/CreateDirectoryFragment.java @@ -147,7 +147,7 @@ public class CreateDirectoryFragment extends DialogFragment { Log.w(TAG, "Failed to create directory", e); return null; } finally { - ContentProviderClient.releaseQuietly(client); + ContentProviderClient.closeQuietly(client); } } diff --git a/src/com/android/documentsui/DirectoryLoader.java b/src/com/android/documentsui/DirectoryLoader.java index 55900e69b..eb3ab32c3 100644 --- a/src/com/android/documentsui/DirectoryLoader.java +++ b/src/com/android/documentsui/DirectoryLoader.java @@ -46,7 +46,7 @@ import com.android.documentsui.roots.RootCursorWrapper; import com.android.documentsui.selection.ContentLock; import com.android.documentsui.sorting.SortModel; -import libcore.io.IoUtils; +import android.os.FileUtils; public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { @@ -158,7 +158,7 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { mSignal = null; } // TODO: Remove this call. - ContentProviderClient.releaseQuietly(client); + ContentProviderClient.closeQuietly(client); } return result; @@ -178,7 +178,7 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { @Override public void deliverResult(DirectoryResult result) { if (isReset()) { - IoUtils.closeQuietly(result); + FileUtils.closeQuietly(result); return; } DirectoryResult oldResult = mResult; @@ -189,7 +189,7 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { } if (oldResult != null && oldResult != result) { - IoUtils.closeQuietly(oldResult); + FileUtils.closeQuietly(oldResult); } } @@ -210,7 +210,7 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { @Override public void onCanceled(DirectoryResult result) { - IoUtils.closeQuietly(result); + FileUtils.closeQuietly(result); } @Override @@ -220,7 +220,7 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { // Ensure the loader is stopped onStopLoading(); - IoUtils.closeQuietly(mResult); + FileUtils.closeQuietly(mResult); mResult = null; getContext().getContentResolver().unregisterContentObserver(mObserver); diff --git a/src/com/android/documentsui/DirectoryResult.java b/src/com/android/documentsui/DirectoryResult.java index 58746e5d3..a4068de3c 100644 --- a/src/com/android/documentsui/DirectoryResult.java +++ b/src/com/android/documentsui/DirectoryResult.java @@ -23,7 +23,7 @@ import android.database.Cursor; import com.android.documentsui.archives.ArchivesProvider; import com.android.documentsui.base.DocumentInfo; -import libcore.io.IoUtils; +import android.os.FileUtils; public class DirectoryResult implements AutoCloseable { @@ -34,7 +34,7 @@ public class DirectoryResult implements AutoCloseable { @Override public void close() { - IoUtils.closeQuietly(cursor); + FileUtils.closeQuietly(cursor); if (client != null && doc.isInArchive()) { ArchivesProvider.releaseArchive(client, doc.derivedUri); } diff --git a/src/com/android/documentsui/RecentsLoader.java b/src/com/android/documentsui/RecentsLoader.java index 28b5fa589..42be08294 100644 --- a/src/com/android/documentsui/RecentsLoader.java +++ b/src/com/android/documentsui/RecentsLoader.java @@ -45,7 +45,7 @@ import androidx.annotation.GuardedBy; import com.google.common.util.concurrent.AbstractFuture; -import libcore.io.IoUtils; +import android.os.FileUtils; import java.io.Closeable; import java.io.IOException; @@ -247,7 +247,7 @@ public class RecentsLoader extends AsyncTaskLoader<DirectoryResult> { @Override public void deliverResult(DirectoryResult result) { if (isReset()) { - IoUtils.closeQuietly(result); + FileUtils.closeQuietly(result); return; } DirectoryResult oldResult = mResult; @@ -258,7 +258,7 @@ public class RecentsLoader extends AsyncTaskLoader<DirectoryResult> { } if (oldResult != null && oldResult != result) { - IoUtils.closeQuietly(oldResult); + FileUtils.closeQuietly(oldResult); } } @@ -279,7 +279,7 @@ public class RecentsLoader extends AsyncTaskLoader<DirectoryResult> { @Override public void onCanceled(DirectoryResult result) { - IoUtils.closeQuietly(result); + FileUtils.closeQuietly(result); } @Override @@ -291,11 +291,11 @@ public class RecentsLoader extends AsyncTaskLoader<DirectoryResult> { synchronized (mTasks) { for (RecentsTask task : mTasks.values()) { - IoUtils.closeQuietly(task); + FileUtils.closeQuietly(task); } } - IoUtils.closeQuietly(mResult); + FileUtils.closeQuietly(mResult); mResult = null; } @@ -365,7 +365,7 @@ public class RecentsLoader extends AsyncTaskLoader<DirectoryResult> { } catch (Exception e) { Log.w(TAG, "Failed to acquire content resolver for authority: " + authority); } finally { - ContentProviderClient.releaseQuietly(client); + ContentProviderClient.closeQuietly(client); } set(mCursors); @@ -383,7 +383,7 @@ public class RecentsLoader extends AsyncTaskLoader<DirectoryResult> { } for (Cursor cursor : mCursors) { - IoUtils.closeQuietly(cursor); + FileUtils.closeQuietly(cursor); } mIsClosed = true; diff --git a/src/com/android/documentsui/RefreshTask.java b/src/com/android/documentsui/RefreshTask.java index b7483956f..85903eaeb 100644 --- a/src/com/android/documentsui/RefreshTask.java +++ b/src/com/android/documentsui/RefreshTask.java @@ -97,7 +97,7 @@ public class RefreshTask extends TimeoutTask<Void, Boolean> { } catch (Exception e) { Log.w(TAG, "Failed to refresh", e); } finally { - ContentProviderClient.releaseQuietly(client); + ContentProviderClient.closeQuietly(client); } return refreshSupported; } diff --git a/src/com/android/documentsui/ThumbnailLoader.java b/src/com/android/documentsui/ThumbnailLoader.java index f5a93aa63..4a50bf1e4 100644 --- a/src/com/android/documentsui/ThumbnailLoader.java +++ b/src/com/android/documentsui/ThumbnailLoader.java @@ -114,7 +114,7 @@ public final class ThumbnailLoader extends AsyncTask<Uri, Void, Bitmap> implemen Log.w(TAG, "Failed to load thumbnail for " + mUri + ": " + e); } } finally { - ContentProviderClient.releaseQuietly(client); + ContentProviderClient.closeQuietly(client); } return result; } diff --git a/src/com/android/documentsui/archives/ArchivesProvider.java b/src/com/android/documentsui/archives/ArchivesProvider.java index de76da484..138ad543a 100644 --- a/src/com/android/documentsui/archives/ArchivesProvider.java +++ b/src/com/android/documentsui/archives/ArchivesProvider.java @@ -37,7 +37,7 @@ import android.util.Log; import com.android.documentsui.R; import androidx.annotation.GuardedBy; -import libcore.io.IoUtils; +import android.os.FileUtils; import java.io.FileNotFoundException; import java.io.IOException; @@ -170,7 +170,7 @@ public class ArchivesProvider extends DocumentsProvider { Log.e(TAG, "An error occurred retrieving the metadata.", e); return null; } finally { - IoUtils.closeQuietly(stream); + FileUtils.closeQuietly(stream); } } diff --git a/src/com/android/documentsui/archives/Proxy.java b/src/com/android/documentsui/archives/Proxy.java index a2336b72b..d72d3098a 100644 --- a/src/com/android/documentsui/archives/Proxy.java +++ b/src/com/android/documentsui/archives/Proxy.java @@ -26,7 +26,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.zip.ZipEntry; -import libcore.io.IoUtils; +import android.os.FileUtils; /** * Provides a backend for a seekable file descriptors for files in archives. @@ -85,11 +85,11 @@ public class Proxy extends ProxyFileDescriptorCallback { } @Override public void onRelease() { - IoUtils.closeQuietly(mInputStream); + FileUtils.closeQuietly(mInputStream); } private void recreateInputStream() throws IOException { - IoUtils.closeQuietly(mInputStream); + FileUtils.closeQuietly(mInputStream); mInputStream = mFile.getInputStream(mEntry); mOffset = 0; } diff --git a/src/com/android/documentsui/archives/ReadableArchive.java b/src/com/android/documentsui/archives/ReadableArchive.java index 77fb07e31..e38aaa5a7 100644 --- a/src/com/android/documentsui/archives/ReadableArchive.java +++ b/src/com/android/documentsui/archives/ReadableArchive.java @@ -34,7 +34,7 @@ import android.util.jar.StrictJarFile; import androidx.annotation.GuardedBy; import androidx.core.util.Preconditions; -import libcore.io.IoUtils; +import android.os.FileUtils; import java.io.File; import java.io.FileDescriptor; @@ -214,8 +214,8 @@ public class ReadableArchive extends Archive { } catch (Exception e) { // Since the method takes ownership of the passed descriptor, close it // on exception. - IoUtils.closeQuietly(descriptor); - IoUtils.closeQuietly(fd); + FileUtils.closeQuietly(descriptor); + FileUtils.closeQuietly(fd); throw e; } } @@ -286,7 +286,7 @@ public class ReadableArchive extends Archive { // Ignore the exception, as reading the EXIF may legally fail. Log.e(TAG, "Failed to obtain thumbnail from EXIF.", e); } finally { - IoUtils.closeQuietly(inputStream); + FileUtils.closeQuietly(inputStream); } return new AssetFileDescriptor( diff --git a/src/com/android/documentsui/archives/WriteableArchive.java b/src/com/android/documentsui/archives/WriteableArchive.java index 72a8249aa..0c3e44e6f 100644 --- a/src/com/android/documentsui/archives/WriteableArchive.java +++ b/src/com/android/documentsui/archives/WriteableArchive.java @@ -29,7 +29,7 @@ import android.util.Log; import androidx.annotation.GuardedBy; import androidx.annotation.VisibleForTesting; -import libcore.io.IoUtils; +import android.os.FileUtils; import java.io.FileDescriptor; import java.io.FileNotFoundException; @@ -128,7 +128,7 @@ public class WriteableArchive extends Archive { } catch (Exception e) { // Since the method takes ownership of the passed descriptor, close it // on exception. - IoUtils.closeQuietly(descriptor); + FileUtils.closeQuietly(descriptor); throw e; } } @@ -270,8 +270,8 @@ public class WriteableArchive extends Archive { } }); } catch (RejectedExecutionException e) { - IoUtils.closeQuietly(pipe[0]); - IoUtils.closeQuietly(pipe[1]); + FileUtils.closeQuietly(pipe[0]); + FileUtils.closeQuietly(pipe[1]); throw new IllegalStateException("Failed to initialize pipe."); } @@ -311,6 +311,6 @@ public class WriteableArchive extends Archive { } } - IoUtils.closeQuietly(mOutputStream); + FileUtils.closeQuietly(mOutputStream); } }; diff --git a/src/com/android/documentsui/base/DebugFlags.java b/src/com/android/documentsui/base/DebugFlags.java index 4c4b9bcab..7e0a70ebc 100644 --- a/src/com/android/documentsui/base/DebugFlags.java +++ b/src/com/android/documentsui/base/DebugFlags.java @@ -29,17 +29,17 @@ public final class DebugFlags { private DebugFlags() {} - private static String mQvPackage; + private static String sQvPackage; private static boolean sDocumentDetailsEnabled; private static int sForcedPageOffset = -1; private static int sForcedPageLimit = -1; public static void setQuickViewer(@Nullable String qvPackage) { - mQvPackage = qvPackage; + sQvPackage = qvPackage; } public static @Nullable String getQuickViewer() { - return mQvPackage; + return sQvPackage; } public static void setDocumentDetailsEnabled(boolean enabled) { diff --git a/src/com/android/documentsui/base/DocumentInfo.java b/src/com/android/documentsui/base/DocumentInfo.java index 51bdd7514..5b1388dfb 100644 --- a/src/com/android/documentsui/base/DocumentInfo.java +++ b/src/com/android/documentsui/base/DocumentInfo.java @@ -31,7 +31,7 @@ import com.android.documentsui.DocumentsApplication; import com.android.documentsui.archives.ArchivesProvider; import com.android.documentsui.roots.RootCursorWrapper; -import libcore.io.IoUtils; +import android.os.FileUtils; import java.io.DataInputStream; import java.io.DataOutputStream; @@ -198,8 +198,8 @@ public class DocumentInfo implements Durable, Parcelable { } catch (Throwable t) { throw asFileNotFoundException(t); } finally { - IoUtils.closeQuietly(cursor); - ContentProviderClient.releaseQuietly(client); + FileUtils.closeQuietly(cursor); + ContentProviderClient.closeQuietly(client); } } diff --git a/src/com/android/documentsui/base/Features.java b/src/com/android/documentsui/base/Features.java index aacb34d00..7a43791ac 100644 --- a/src/com/android/documentsui/base/Features.java +++ b/src/com/android/documentsui/base/Features.java @@ -15,7 +15,6 @@ */ package com.android.documentsui.base; -import androidx.annotation.BoolRes; import android.content.Context; import android.content.res.Resources; import android.os.UserManager; @@ -23,6 +22,8 @@ import android.util.SparseBooleanArray; import com.android.documentsui.R; +import androidx.annotation.BoolRes; + /** * Provides access to feature flags configured in config.xml. */ @@ -61,7 +62,8 @@ public interface Features { void forceFeature(@BoolRes int feature, boolean enabled); public static Features create(Context context) { - return new RuntimeFeatures(context.getResources(), UserManager.get(context)); + return new RuntimeFeatures(context.getResources(), + context.getSystemService(UserManager.class)); } final class RuntimeFeatures implements Features { diff --git a/src/com/android/documentsui/base/Shared.java b/src/com/android/documentsui/base/Shared.java index cf5e8df6a..67bc4b7f8 100644 --- a/src/com/android/documentsui/base/Shared.java +++ b/src/com/android/documentsui/base/Shared.java @@ -18,7 +18,6 @@ package com.android.documentsui.base; import static com.android.documentsui.base.SharedMinimal.TAG; -import androidx.annotation.PluralsRes; import android.app.Activity; import android.app.AlertDialog; import android.content.ContentResolver; @@ -28,7 +27,6 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Configuration; import android.net.Uri; -import android.os.Build; import android.os.Looper; import android.provider.DocumentsContract; import android.provider.Settings; @@ -48,6 +46,8 @@ import java.util.List; import javax.annotation.Nullable; +import androidx.annotation.PluralsRes; + /** @hide */ public final class Shared { @@ -184,6 +184,14 @@ public final class Shared { return sCollator.compare(lhs, rhs); } + private static boolean isSystemApp(ApplicationInfo ai) { + return (ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0; + } + + private static boolean isUpdatedSystemApp(ApplicationInfo ai) { + return (ai.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0; + } + /** * Returns the calling package, possibly overridden by EXTRA_PACKAGE_NAME. * @param activity @@ -195,9 +203,9 @@ public final class Shared { try { ApplicationInfo info = activity.getPackageManager().getApplicationInfo(callingPackage, 0); - if (info.isSystemApp() || info.isUpdatedSystemApp()) { + if (isSystemApp(info) || isUpdatedSystemApp(info)) { final String extra = activity.getIntent().getStringExtra( - DocumentsContract.EXTRA_PACKAGE_NAME); + Intent.EXTRA_PACKAGE_NAME); if (extra != null && !TextUtils.isEmpty(extra)) { callingPackage = extra; } diff --git a/src/com/android/documentsui/base/SharedMinimal.java b/src/com/android/documentsui/base/SharedMinimal.java index 69bc333cd..00b7d03d6 100644 --- a/src/com/android/documentsui/base/SharedMinimal.java +++ b/src/com/android/documentsui/base/SharedMinimal.java @@ -22,7 +22,6 @@ import static com.android.documentsui.ScopedAccessMetrics.SCOPED_DIRECTORY_ACCES import static com.android.documentsui.ScopedAccessMetrics.SCOPED_DIRECTORY_ACCESS_INVALID_DIRECTORY; import static com.android.documentsui.ScopedAccessMetrics.logInvalidScopedAccessRequest; -import androidx.annotation.Nullable; import android.content.ContentProviderClient; import android.content.Context; import android.net.Uri; @@ -40,6 +39,8 @@ import java.io.File; import java.io.IOException; import java.util.List; +import androidx.annotation.Nullable; + /** * Contains the minimum number of utilities (contants, helpers, etc...) that can be used by both the * main package and the minimal APK that's used by Android TV (and other devices). @@ -51,7 +52,7 @@ public final class SharedMinimal { public static final String TAG = "Documents"; - public static final boolean DEBUG = Build.IS_DEBUGGABLE; + public static final boolean DEBUG = !"user".equals(Build.TYPE); public static final boolean VERBOSE = DEBUG && Log.isLoggable(TAG, Log.VERBOSE); /** diff --git a/src/com/android/documentsui/dirlist/DirectoryFragment.java b/src/com/android/documentsui/dirlist/DirectoryFragment.java index 54d8e43be..d9c7b624f 100644 --- a/src/com/android/documentsui/dirlist/DirectoryFragment.java +++ b/src/com/android/documentsui/dirlist/DirectoryFragment.java @@ -391,7 +391,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On // on RecyclerView items. mKeyListener = handlers.createKeyHandler(); - if (Build.IS_DEBUGGABLE) { + if (DEBUG) { new ScaleHelper(this.getContext(), mInjector.features, this::scaleLayout) .attach(mRecView); } @@ -565,7 +565,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On * @param mode The new view mode. */ private void scaleLayout(float scale) { - assert Build.IS_DEBUGGABLE; + assert DEBUG; if (VERBOSE) Log.v( TAG, "Handling scale event: " + scale + ", existing scale: " + mLiveScale); diff --git a/src/com/android/documentsui/dirlist/ScaleHelper.java b/src/com/android/documentsui/dirlist/ScaleHelper.java index 9e9e31efe..3f048f5a7 100644 --- a/src/com/android/documentsui/dirlist/ScaleHelper.java +++ b/src/com/android/documentsui/dirlist/ScaleHelper.java @@ -16,6 +16,7 @@ package com.android.documentsui.dirlist; import static androidx.core.util.Preconditions.checkState; +import static com.android.documentsui.base.SharedMinimal.DEBUG; import static com.android.documentsui.base.SharedMinimal.VERBOSE; import android.content.Context; @@ -61,7 +62,7 @@ final class ScaleHelper { } void attach(RecyclerView view) { - checkState(Build.IS_DEBUGGABLE); + checkState(DEBUG); checkState(mScaleDetector == null); mScaleDetector = new ScaleGestureDetector( diff --git a/src/com/android/documentsui/files/ActionHandler.java b/src/com/android/documentsui/files/ActionHandler.java index 775ec549e..21926561f 100644 --- a/src/com/android/documentsui/files/ActionHandler.java +++ b/src/com/android/documentsui/files/ActionHandler.java @@ -179,7 +179,7 @@ public class ActionHandler<T extends Activity & Addons> extends AbstractActionHa Log.w(TAG, "Failed to rename file", e); return null; } finally { - ContentProviderClient.releaseQuietly(client); + ContentProviderClient.closeQuietly(client); } } @@ -695,7 +695,7 @@ public class ActionHandler<T extends Activity & Addons> extends AbstractActionHa intent.putExtra( Shared.EXTRA_SHOW_DEBUG, mFeatures.isDebugSupportEnabled() && - (Build.IS_DEBUGGABLE || DebugFlags.getDocumentDetailsEnabled())); + (DEBUG || DebugFlags.getDocumentDetailsEnabled())); // The "root document" (top level folder in a root) don't usually have a // human friendly display name. That's because we've never shown the root diff --git a/src/com/android/documentsui/files/QuickViewIntentBuilder.java b/src/com/android/documentsui/files/QuickViewIntentBuilder.java index edd5afdca..7a7245d10 100644 --- a/src/com/android/documentsui/files/QuickViewIntentBuilder.java +++ b/src/com/android/documentsui/files/QuickViewIntentBuilder.java @@ -154,12 +154,11 @@ public final class QuickViewIntentBuilder { // Allow users of debug devices to override default quick viewer // for the purposes of testing. - if (Build.IS_DEBUGGABLE) { + if (DEBUG) { String quickViewer = DebugFlags.getQuickViewer(); if (quickViewer != null) { return quickViewer; } - return android.os.SystemProperties.get("debug.quick_viewer", resValue); } return resValue; } diff --git a/src/com/android/documentsui/picker/LastAccessedProvider.java b/src/com/android/documentsui/picker/LastAccessedProvider.java index 20a9d0aab..fbe1df630 100644 --- a/src/com/android/documentsui/picker/LastAccessedProvider.java +++ b/src/com/android/documentsui/picker/LastAccessedProvider.java @@ -31,17 +31,15 @@ import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.net.Uri; import android.os.Bundle; +import android.os.FileUtils; import android.provider.DocumentsContract; import android.util.Log; import com.android.documentsui.base.DocumentStack; import com.android.documentsui.base.DurableUtils; -import libcore.io.IoUtils; - -import com.google.android.collect.Sets; - import java.io.IOException; +import java.util.HashSet; import java.util.Set; import java.util.function.Predicate; @@ -190,7 +188,7 @@ public class LastAccessedProvider extends ContentProvider { if (METHOD_PURGE.equals(method)) { // Purge references to unknown authorities final Intent intent = new Intent(DocumentsContract.PROVIDER_INTERFACE); - final Set<String> knownAuth = Sets.newHashSet(); + final Set<String> knownAuth = new HashSet<>(); for (ResolveInfo info : getContext() .getPackageManager().queryIntentContentProviders(intent, 0)) { knownAuth.add(info.providerInfo.authority); @@ -210,7 +208,7 @@ public class LastAccessedProvider extends ContentProvider { // Purge references to authorities in given package final Intent intent = new Intent(DocumentsContract.PROVIDER_INTERFACE); intent.setPackage(arg); - final Set<String> packageAuth = Sets.newHashSet(); + final Set<String> packageAuth = new HashSet<>(); for (ResolveInfo info : getContext() .getPackageManager().queryIntentContentProviders(intent, 0)) { packageAuth.add(info.providerInfo.authority); @@ -259,7 +257,7 @@ public class LastAccessedProvider extends ContentProvider { } } } finally { - IoUtils.closeQuietly(cursor); + FileUtils.closeQuietly(cursor); } } } diff --git a/src/com/android/documentsui/picker/LastAccessedStorage.java b/src/com/android/documentsui/picker/LastAccessedStorage.java index ed38de094..b2b849b2e 100644 --- a/src/com/android/documentsui/picker/LastAccessedStorage.java +++ b/src/com/android/documentsui/picker/LastAccessedStorage.java @@ -28,7 +28,7 @@ import com.android.documentsui.base.Shared; import com.android.documentsui.base.State; import com.android.documentsui.roots.ProvidersAccess; -import libcore.io.IoUtils; +import android.os.FileUtils; import java.io.IOException; @@ -69,7 +69,7 @@ public interface LastAccessedStorage { } catch (IOException e) { Log.w(TAG, "Failed to resume: ", e); } finally { - IoUtils.closeQuietly(cursor); + FileUtils.closeQuietly(cursor); } return null; diff --git a/src/com/android/documentsui/roots/ProvidersCache.java b/src/com/android/documentsui/roots/ProvidersCache.java index 19c56e598..6fcc8d887 100644 --- a/src/com/android/documentsui/roots/ProvidersCache.java +++ b/src/com/android/documentsui/roots/ProvidersCache.java @@ -51,7 +51,7 @@ import androidx.annotation.GuardedBy; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; -import libcore.io.IoUtils; +import android.os.FileUtils; import java.util.ArrayList; import java.util.Collection; @@ -311,8 +311,8 @@ public class ProvidersCache implements ProvidersAccess { // if forceRefresh is false. return roots; } finally { - IoUtils.closeQuietly(cursor); - ContentProviderClient.releaseQuietly(client); + FileUtils.closeQuietly(cursor); + ContentProviderClient.closeQuietly(client); } // Cache these freshly parsed roots over in the long-lived system diff --git a/src/com/android/documentsui/selection/BandSelectionHelper.java b/src/com/android/documentsui/selection/BandSelectionHelper.java index 86726083f..f5aa4665d 100644 --- a/src/com/android/documentsui/selection/BandSelectionHelper.java +++ b/src/com/android/documentsui/selection/BandSelectionHelper.java @@ -18,6 +18,7 @@ package com.android.documentsui.selection; import static androidx.core.util.Preconditions.checkArgument; import static androidx.core.util.Preconditions.checkState; +import static com.android.documentsui.base.SharedMinimal.DEBUG; import android.graphics.Point; import android.graphics.Rect; @@ -52,7 +53,6 @@ import java.util.Set; */ public class BandSelectionHelper implements OnItemTouchListener { - static final boolean DEBUG = false; static final String TAG = "BandController"; private final BandHost mHost; @@ -170,7 +170,7 @@ public class BandSelectionHelper implements OnItemTouchListener { @VisibleForTesting boolean isActive() { boolean active = mModel != null; - if (Build.IS_DEBUGGABLE && active) { + if (DEBUG && active) { mLock.checkLocked(); } return active; diff --git a/src/com/android/documentsui/selection/GridModel.java b/src/com/android/documentsui/selection/GridModel.java index a0c80ddfe..feca271ab 100644 --- a/src/com/android/documentsui/selection/GridModel.java +++ b/src/com/android/documentsui/selection/GridModel.java @@ -17,6 +17,7 @@ package com.android.documentsui.selection; import static androidx.core.util.Preconditions.checkArgument; +import static com.android.documentsui.base.SharedMinimal.DEBUG; import android.graphics.Point; import android.graphics.Rect; @@ -324,7 +325,7 @@ final class GridModel { private void updateSelection( int columnStartIndex, int columnEndIndex, int rowStartIndex, int rowEndIndex) { - if (BandSelectionHelper.DEBUG) { + if (DEBUG) { Log.d(BandSelectionHelper.TAG, String.format( "updateSelection: %d, %d, %d, %d", columnStartIndex, columnEndIndex, rowStartIndex, rowEndIndex)); diff --git a/src/com/android/documentsui/services/CopyJob.java b/src/com/android/documentsui/services/CopyJob.java index 2953ea4c6..b05f53b6b 100644 --- a/src/com/android/documentsui/services/CopyJob.java +++ b/src/com/android/documentsui/services/CopyJob.java @@ -32,7 +32,6 @@ import static com.android.documentsui.services.FileOperationService.MESSAGE_FINI import static com.android.documentsui.services.FileOperationService.MESSAGE_PROGRESS; import static com.android.documentsui.services.FileOperationService.OPERATION_COPY; -import androidx.annotation.StringRes; import android.app.Notification; import android.app.Notification.Builder; import android.app.PendingIntent; @@ -73,9 +72,6 @@ import com.android.documentsui.base.RootInfo; import com.android.documentsui.clipping.UrisSupplier; import com.android.documentsui.roots.ProvidersCache; import com.android.documentsui.services.FileOperationService.OpType; -import androidx.annotation.VisibleForTesting; - -import libcore.io.IoUtils; import java.io.FileDescriptor; import java.io.FileNotFoundException; @@ -88,6 +84,9 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.function.Function; import java.util.function.LongSupplier; +import androidx.annotation.StringRes; +import androidx.annotation.VisibleForTesting; + class CopyJob extends ResolvedResourcesJob { private static final String TAG = "CopyJob"; @@ -474,7 +473,7 @@ class CopyJob extends ResolvedResourcesJob { srcDir.derivedUri.toString(), destDir.derivedUri.toString()), e); success = false; } finally { - IoUtils.closeQuietly(cursor); + FileUtils.closeQuietly(cursor); } if (!success) { @@ -565,11 +564,11 @@ class CopyJob extends ResolvedResourcesJob { try { final Int64Ref last = new Int64Ref(0); - FileUtils.copy(in, out, (long progress) -> { + FileUtils.copy(in, out, mSignal, Runnable::run, (long progress) -> { final long delta = progress - last.value; last.value = progress; makeCopyProgress(delta); - }, mSignal); + }); } catch (OperationCanceledException e) { if (DEBUG) Log.d(TAG, "Canceled copy mid-copy of: " + src.derivedUri); return; @@ -587,7 +586,11 @@ class CopyJob extends ResolvedResourcesJob { } // Need to invoke IoUtils.close explicitly to avoid from ignoring errors at flush. - IoUtils.close(dstFile.getFileDescriptor()); + try { + Os.close(dstFile.getFileDescriptor()); + } catch (ErrnoException e) { + throw new IOException(e); + } srcFile.checkError(); } catch (IOException e) { Metrics.logFileOperationFailure( @@ -624,8 +627,8 @@ class CopyJob extends ResolvedResourcesJob { } // This also ensures the file descriptors are closed. - IoUtils.closeQuietly(in); - IoUtils.closeQuietly(out); + FileUtils.closeQuietly(in); + FileUtils.closeQuietly(out); } } @@ -704,7 +707,7 @@ class CopyJob extends ResolvedResourcesJob { throw new ResourceException( "Failed to calculate size for %s due to an exception.", uri, e); } finally { - IoUtils.closeQuietly(cursor); + FileUtils.closeQuietly(cursor); } return result; diff --git a/src/com/android/documentsui/services/Job.java b/src/com/android/documentsui/services/Job.java index c05bbbd87..e50d50b0a 100644 --- a/src/com/android/documentsui/services/Job.java +++ b/src/com/android/documentsui/services/Job.java @@ -209,7 +209,7 @@ abstract public class Job implements Runnable { final void cleanup() { for (ContentProviderClient client : mClients.values()) { - ContentProviderClient.releaseQuietly(client); + ContentProviderClient.closeQuietly(client); } } diff --git a/src/com/android/documentsui/sidebar/EjectRootTask.java b/src/com/android/documentsui/sidebar/EjectRootTask.java index 2baeb4c9e..f7aecf5b5 100644 --- a/src/com/android/documentsui/sidebar/EjectRootTask.java +++ b/src/com/android/documentsui/sidebar/EjectRootTask.java @@ -64,7 +64,7 @@ public final class EjectRootTask extends AsyncTask<Void, Void, Boolean> { } catch (Exception e) { Log.w(TAG, "Binder call failed.", e); } finally { - ContentProviderClient.releaseQuietly(client); + ContentProviderClient.closeQuietly(client); } return false; diff --git a/tests/common/com/android/documentsui/DocumentsProviderHelper.java b/tests/common/com/android/documentsui/DocumentsProviderHelper.java index b4ad5eb78..123f4fb15 100644 --- a/tests/common/com/android/documentsui/DocumentsProviderHelper.java +++ b/tests/common/com/android/documentsui/DocumentsProviderHelper.java @@ -44,13 +44,14 @@ import com.android.documentsui.base.DocumentInfo; import com.android.documentsui.base.RootInfo; import com.android.documentsui.roots.RootCursorWrapper; -import com.google.android.collect.Lists; - -import libcore.io.IoUtils; +import android.os.FileUtils; import libcore.io.Streams; +import com.google.common.collect.Lists; + import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -81,7 +82,7 @@ public class DocumentsProviderHelper { } catch (Exception e) { throw new RuntimeException("Can't load root for id=" + documentId , e); } finally { - IoUtils.closeQuietly(cursor); + FileUtils.closeQuietly(cursor); } } @@ -352,7 +353,7 @@ public class DocumentsProviderHelper { } catch (Exception e) { throw new RuntimeException("Can't load rootInfo list", e); } finally { - IoUtils.closeQuietly(cursor); + FileUtils.closeQuietly(cursor); } return list; } diff --git a/tests/common/com/android/documentsui/StubProvider.java b/tests/common/com/android/documentsui/StubProvider.java index 25a595f4a..4366d318a 100644 --- a/tests/common/com/android/documentsui/StubProvider.java +++ b/tests/common/com/android/documentsui/StubProvider.java @@ -35,7 +35,7 @@ import androidx.annotation.VisibleForTesting; import android.text.TextUtils; import android.util.Log; -import libcore.io.IoUtils; +import android.os.FileUtils; import java.io.File; import java.io.FileNotFoundException; @@ -472,8 +472,8 @@ public class StubProvider extends DocumentsProvider { Log.e(TAG, "Error on close", e); closePipeWithErrorSilently(readPipe, e.getMessage()); } finally { - IoUtils.closeQuietly(inputStream); - IoUtils.closeQuietly(outputStream); + FileUtils.closeQuietly(inputStream); + FileUtils.closeQuietly(outputStream); Log.d(TAG, "Closing write stream on file " + document.documentId); notifyParentChanged(document.parentId); getContext().getContentResolver().notifyChange( diff --git a/tests/unit/com/android/documentsui/archives/ResourcesProvider.java b/tests/unit/com/android/documentsui/archives/ResourcesProvider.java index b9ddb92b1..165532ff7 100644 --- a/tests/unit/com/android/documentsui/archives/ResourcesProvider.java +++ b/tests/unit/com/android/documentsui/archives/ResourcesProvider.java @@ -32,7 +32,7 @@ import android.provider.DocumentsContract.Root; import android.provider.DocumentsProvider; import android.webkit.MimeTypeMap; -import libcore.io.IoUtils; +import android.os.FileUtils; import java.io.File; import java.io.FileNotFoundException; @@ -152,7 +152,7 @@ public class ResourcesProvider extends DocumentsProvider { row.add(Document.COLUMN_SIZE, fd.getLength()); } finally { - IoUtils.closeQuietly(fd); + FileUtils.closeQuietly(fd); } } } diff --git a/tests/unit/com/android/documentsui/services/FileOperationServiceTest.java b/tests/unit/com/android/documentsui/services/FileOperationServiceTest.java index fbaafe803..ae51dd174 100644 --- a/tests/unit/com/android/documentsui/services/FileOperationServiceTest.java +++ b/tests/unit/com/android/documentsui/services/FileOperationServiceTest.java @@ -20,7 +20,6 @@ import static com.android.documentsui.services.FileOperationService.OPERATION_CO import static com.android.documentsui.services.FileOperationService.OPERATION_DELETE; import static com.android.documentsui.services.FileOperations.createBaseIntent; import static com.android.documentsui.services.FileOperations.createJobId; -import static com.google.android.collect.Lists.newArrayList; import static org.junit.Assert.fail; import android.content.Context; @@ -44,6 +43,7 @@ import com.android.documentsui.testing.TestHandler; import com.android.documentsui.testing.TestScheduledExecutorService; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; @MediumTest @@ -121,8 +121,8 @@ public class FileOperationServiceTest extends ServiceTestCase<FileOperationServi } public void testRunsCopyJobs() throws Exception { - startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC)); - startService(createCopyIntent(newArrayList(GAMMA_DOC), DELTA_DOC)); + startService(createCopyIntent(Arrays.asList(ALPHA_DOC), BETA_DOC)); + startService(createCopyIntent(Arrays.asList(GAMMA_DOC), DELTA_DOC)); mExecutor.runAll(); assertAllCopyJobsStarted(); @@ -135,7 +135,7 @@ public class FileOperationServiceTest extends ServiceTestCase<FileOperationServi } catch(IllegalArgumentException expected) { // We're sending a naughty empty list that should result in an IllegalArgumentException. } - startService(createCopyIntent(newArrayList(GAMMA_DOC), DELTA_DOC)); + startService(createCopyIntent(Arrays.asList(GAMMA_DOC), DELTA_DOC)); assertJobsCreated(1); @@ -144,8 +144,8 @@ public class FileOperationServiceTest extends ServiceTestCase<FileOperationServi } public void testRunsCopyJobs_AfterFailure() throws Exception { - startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC)); - startService(createCopyIntent(newArrayList(GAMMA_DOC), DELTA_DOC)); + startService(createCopyIntent(Arrays.asList(ALPHA_DOC), BETA_DOC)); + startService(createCopyIntent(Arrays.asList(GAMMA_DOC), DELTA_DOC)); mCopyJobs.get(0).fail(ALPHA_DOC); @@ -154,30 +154,30 @@ public class FileOperationServiceTest extends ServiceTestCase<FileOperationServi } public void testRunsCopyJobs_notRunsDeleteJobs() throws Exception { - startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC)); - startService(createDeleteIntent(newArrayList(GAMMA_DOC))); + startService(createCopyIntent(Arrays.asList(ALPHA_DOC), BETA_DOC)); + startService(createDeleteIntent(Arrays.asList(GAMMA_DOC))); mExecutor.runAll(); assertNoDeleteJobsStarted(); } public void testRunsDeleteJobs() throws Exception { - startService(createDeleteIntent(newArrayList(ALPHA_DOC))); + startService(createDeleteIntent(Arrays.asList(ALPHA_DOC))); mDeletionExecutor.runAll(); assertAllDeleteJobsStarted(); } public void testRunsDeleteJobs_NotRunsCopyJobs() throws Exception { - startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC)); - startService(createDeleteIntent(newArrayList(GAMMA_DOC))); + startService(createCopyIntent(Arrays.asList(ALPHA_DOC), BETA_DOC)); + startService(createDeleteIntent(Arrays.asList(GAMMA_DOC))); mDeletionExecutor.runAll(); assertNoCopyJobsStarted(); } public void testUpdatesNotification() throws Exception { - startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC)); + startService(createCopyIntent(Arrays.asList(ALPHA_DOC), BETA_DOC)); mExecutor.runAll(); // Assert monitoring continues until job is done @@ -187,7 +187,7 @@ public class FileOperationServiceTest extends ServiceTestCase<FileOperationServi } public void testStopsUpdatingNotificationAfterFinished() throws Exception { - startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC)); + startService(createCopyIntent(Arrays.asList(ALPHA_DOC), BETA_DOC)); mExecutor.runAll(); mHandler.dispatchNextMessage(); @@ -200,13 +200,13 @@ public class FileOperationServiceTest extends ServiceTestCase<FileOperationServi } public void testHoldsWakeLockWhileWorking() throws Exception { - startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC)); + startService(createCopyIntent(Arrays.asList(ALPHA_DOC), BETA_DOC)); assertTrue(mService.holdsWakeLock()); } public void testReleasesWakeLock_AfterSuccess() throws Exception { - startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC)); + startService(createCopyIntent(Arrays.asList(ALPHA_DOC), BETA_DOC)); assertTrue(mService.holdsWakeLock()); mExecutor.runAll(); @@ -214,7 +214,7 @@ public class FileOperationServiceTest extends ServiceTestCase<FileOperationServi } public void testReleasesWakeLock_AfterFailure() throws Exception { - startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC)); + startService(createCopyIntent(Arrays.asList(ALPHA_DOC), BETA_DOC)); assertTrue(mService.holdsWakeLock()); mExecutor.runAll(); @@ -222,7 +222,7 @@ public class FileOperationServiceTest extends ServiceTestCase<FileOperationServi } public void testShutdownStopsExecutor_AfterSuccess() throws Exception { - startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC)); + startService(createCopyIntent(Arrays.asList(ALPHA_DOC), BETA_DOC)); mExecutor.assertAlive(); mDeletionExecutor.assertAlive(); @@ -234,8 +234,8 @@ public class FileOperationServiceTest extends ServiceTestCase<FileOperationServi } public void testShutdownStopsExecutor_AfterMixedFailures() throws Exception { - startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC)); - startService(createCopyIntent(newArrayList(GAMMA_DOC), DELTA_DOC)); + startService(createCopyIntent(Arrays.asList(ALPHA_DOC), BETA_DOC)); + startService(createCopyIntent(Arrays.asList(GAMMA_DOC), DELTA_DOC)); mCopyJobs.get(0).fail(ALPHA_DOC); @@ -246,8 +246,8 @@ public class FileOperationServiceTest extends ServiceTestCase<FileOperationServi } public void testShutdownStopsExecutor_AfterTotalFailure() throws Exception { - startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC)); - startService(createCopyIntent(newArrayList(GAMMA_DOC), DELTA_DOC)); + startService(createCopyIntent(Arrays.asList(ALPHA_DOC), BETA_DOC)); + startService(createCopyIntent(Arrays.asList(GAMMA_DOC), DELTA_DOC)); mCopyJobs.get(0).fail(ALPHA_DOC); mCopyJobs.get(1).fail(GAMMA_DOC); @@ -259,8 +259,8 @@ public class FileOperationServiceTest extends ServiceTestCase<FileOperationServi } public void testRunsInForeground_MultipleJobs() throws Exception { - startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC)); - startService(createCopyIntent(newArrayList(GAMMA_DOC), DELTA_DOC)); + startService(createCopyIntent(Arrays.asList(ALPHA_DOC), BETA_DOC)); + startService(createCopyIntent(Arrays.asList(GAMMA_DOC), DELTA_DOC)); mExecutor.run(0); mForegroundManager.assertInForeground(); @@ -270,8 +270,8 @@ public class FileOperationServiceTest extends ServiceTestCase<FileOperationServi } public void testFinishesInBackground_MultipleJobs() throws Exception { - startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC)); - startService(createCopyIntent(newArrayList(GAMMA_DOC), DELTA_DOC)); + startService(createCopyIntent(Arrays.asList(ALPHA_DOC), BETA_DOC)); + startService(createCopyIntent(Arrays.asList(GAMMA_DOC), DELTA_DOC)); mExecutor.run(0); mForegroundManager.assertInForeground(); @@ -285,8 +285,8 @@ public class FileOperationServiceTest extends ServiceTestCase<FileOperationServi } public void testAllNotificationsDismissedAfterShutdown() throws Exception { - startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC)); - startService(createCopyIntent(newArrayList(GAMMA_DOC), DELTA_DOC)); + startService(createCopyIntent(Arrays.asList(ALPHA_DOC), BETA_DOC)); + startService(createCopyIntent(Arrays.asList(GAMMA_DOC), DELTA_DOC)); mExecutor.runAll(); @@ -295,8 +295,8 @@ public class FileOperationServiceTest extends ServiceTestCase<FileOperationServi } public void testNotificationUpdateAfterForegroundJobSwitch() throws Exception { - startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC)); - startService(createCopyIntent(newArrayList(GAMMA_DOC), DELTA_DOC)); + startService(createCopyIntent(Arrays.asList(ALPHA_DOC), BETA_DOC)); + startService(createCopyIntent(Arrays.asList(GAMMA_DOC), DELTA_DOC)); Job job1 = mCopyJobs.get(0); Job job2 = mCopyJobs.get(1); @@ -320,7 +320,7 @@ public class FileOperationServiceTest extends ServiceTestCase<FileOperationServi mTestNotificationManager.assertNumberOfNotifications(0); } - private Intent createCopyIntent(ArrayList<DocumentInfo> files, DocumentInfo dest) + private Intent createCopyIntent(List<DocumentInfo> files, DocumentInfo dest) throws Exception { DocumentStack stack = new DocumentStack(); stack.push(dest); @@ -336,7 +336,7 @@ public class FileOperationServiceTest extends ServiceTestCase<FileOperationServi return createBaseIntent(getContext(), createJobId(), operation); } - private Intent createDeleteIntent(ArrayList<DocumentInfo> files) { + private Intent createDeleteIntent(List<DocumentInfo> files) { DocumentStack stack = new DocumentStack(); List<Uri> uris = new ArrayList<>(files.size()); @@ -388,6 +388,7 @@ public class FileOperationServiceTest extends ServiceTestCase<FileOperationServi void assertJobsCreated(int expected) { assertEquals(expected, mCopyJobs.size() + mDeleteJobs.size()); } + private static DocumentInfo createDoc(Uri destination) { DocumentInfo destDoc = new DocumentInfo(); destDoc.derivedUri = destination; |