MTP: Add MTP host exception handling am: 15486968c2 am: d54889408a

Change-Id: Ib9eb905c7dbf341659c50ce3181db6465936fcbf
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();