MTP: Add MTP host exception handling
Bug: 144962542
Test: atest MtpServiceTests
Test: Manual test: MTP host file browsing / copy
Change-Id: I1e0c1cd694e2a3e774a248bb5458b02a2e795371
diff --git a/src/com/android/mtp/MtpDatabase.java b/src/com/android/mtp/MtpDatabase.java
index 59c205a..bfb5cb8 100644
--- a/src/com/android/mtp/MtpDatabase.java
+++ b/src/com/android/mtp/MtpDatabase.java
@@ -27,6 +27,7 @@
import android.database.MatrixCursor;
import android.database.MatrixCursor.RowBuilder;
import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.media.MediaFile;
@@ -37,6 +38,7 @@
import android.provider.MetadataReader;
import android.provider.DocumentsContract.Document;
import android.provider.DocumentsContract.Root;
+import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.Preconditions;
@@ -83,6 +85,8 @@
* TODO: Improve performance by SQL optimization.
*/
class MtpDatabase {
+ private static final String TAG = "MtpDatabaseHost";
+
private final SQLiteDatabase mDatabase;
private final Mapper mMapper;
@@ -530,6 +534,9 @@
mDatabase.setTransactionSuccessful();
// TODO Remove mappingState.
return deleted != 0;
+ } catch (SQLiteException exSql) {
+ Log.w(TAG, "SQLiteException:" + selection, exSql);
+ return false;
} finally {
mDatabase.endTransaction();
}
diff --git a/src/com/android/mtp/MtpDocumentsProvider.java b/src/com/android/mtp/MtpDocumentsProvider.java
index 8c8116b..490b831 100644
--- a/src/com/android/mtp/MtpDocumentsProvider.java
+++ b/src/com/android/mtp/MtpDocumentsProvider.java
@@ -136,6 +136,10 @@
// It can happen due to disk shortage.
Log.e(TAG, "Failed to clean database.", error);
return false;
+ } catch (SecurityException exSec) {
+ // For UriPermission.
+ Log.w(TAG, "SecurityException:", exSec);
+ return false;
}
resume();