Trim the Bluetooth database off the main thread.
This looks to be most if not all of the remaining StrictMode
violations in this process. Not a huge deal, but cleaning up noise
will make bigger problems stand out easier in the future.
Change-Id: I262194c12114114fbe059d73475afb1bbb5654ab
diff --git a/src/com/android/bluetooth/opp/BluetoothOppService.java b/src/com/android/bluetooth/opp/BluetoothOppService.java
index 35a9dfb..d5edc89 100644
--- a/src/com/android/bluetooth/opp/BluetoothOppService.java
+++ b/src/com/android/bluetooth/opp/BluetoothOppService.java
@@ -40,6 +40,7 @@
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.ContentUris;
+import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
@@ -159,7 +160,12 @@
mNotifier.mNotificationMgr.cancelAll();
mNotifier.updateNotification();
- trimDatabase();
+ final ContentResolver contentResolver = getContentResolver();
+ new Thread("trimDatabase") {
+ public void run() {
+ trimDatabase(contentResolver);
+ }
+ }.start();
IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(mBluetoothReceiver, filter);
@@ -864,7 +870,8 @@
&& info.mDirection == BluetoothShare.DIRECTION_INBOUND && !info.mMediaScanned;
}
- private void trimDatabase() {
+ // Run in a background thread at boot.
+ private static void trimDatabase(ContentResolver contentResolver) {
final String INVISIBLE = BluetoothShare.VISIBILITY + "=" +
BluetoothShare.VISIBILITY_HIDDEN;
@@ -872,7 +879,7 @@
final String WHERE_INVISIBLE_COMPLETE_OUTBOUND = BluetoothShare.DIRECTION + "="
+ BluetoothShare.DIRECTION_OUTBOUND + " AND " + BluetoothShare.STATUS + ">="
+ BluetoothShare.STATUS_SUCCESS + " AND " + INVISIBLE;
- int delNum = getContentResolver().delete(BluetoothShare.CONTENT_URI,
+ int delNum = contentResolver.delete(BluetoothShare.CONTENT_URI,
WHERE_INVISIBLE_COMPLETE_OUTBOUND, null);
if (V) Log.v(TAG, "Deleted complete outbound shares, number = " + delNum);
@@ -880,7 +887,7 @@
final String WHERE_INVISIBLE_COMPLETE_INBOUND_FAILED = BluetoothShare.DIRECTION + "="
+ BluetoothShare.DIRECTION_INBOUND + " AND " + BluetoothShare.STATUS + ">"
+ BluetoothShare.STATUS_SUCCESS + " AND " + INVISIBLE;
- delNum = getContentResolver().delete(BluetoothShare.CONTENT_URI,
+ delNum = contentResolver.delete(BluetoothShare.CONTENT_URI,
WHERE_INVISIBLE_COMPLETE_INBOUND_FAILED, null);
if (V) Log.v(TAG, "Deleted complete inbound failed shares, number = " + delNum);
@@ -889,7 +896,7 @@
final String WHERE_INBOUND_SUCCESS = BluetoothShare.DIRECTION + "="
+ BluetoothShare.DIRECTION_INBOUND + " AND " + BluetoothShare.STATUS + "="
+ BluetoothShare.STATUS_SUCCESS + " AND " + INVISIBLE;
- Cursor cursor = getContentResolver().query(BluetoothShare.CONTENT_URI, new String[] {
+ Cursor cursor = contentResolver.query(BluetoothShare.CONTENT_URI, new String[] {
BluetoothShare._ID
}, WHERE_INBOUND_SUCCESS, null, BluetoothShare._ID); // sort by id
@@ -904,7 +911,7 @@
if (cursor.moveToPosition(numToDelete)) {
int columnId = cursor.getColumnIndexOrThrow(BluetoothShare._ID);
long id = cursor.getLong(columnId);
- delNum = getContentResolver().delete(BluetoothShare.CONTENT_URI,
+ delNum = contentResolver.delete(BluetoothShare.CONTENT_URI,
BluetoothShare._ID + " < " + id, null);
if (V) Log.v(TAG, "Deleted old inbound success share: " + delNum);
}