Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b4ffe773 authored by Jack He's avatar Jack He Committed by Andre Eisenbach
Browse files

Remove disk IO read/write blocks in AdapterService for main thread

* Call getSharedPreferences() asynchronously during onCreate() to cache
  preferences in memory as early as possible to prevent ANR
* Change editor.commit() to editor.apply() in AdapterService for:
	setPhonebookAccessPermission
	setMessageAccessPermission
	setSimAccessPermission
  so that these methods will return true when editor.apply() is called.
  After that call, the preference will be updated in memory so that
  following calls that use such preferences will see the change.
  However, there is a possibility that write to persistent storage will
  fail in the background which reset the preference after reboot or service
  restart. In this case, we need to call these method again.
* Same changes in Avrcp for:
	blackListCurrentDevice
	resetBlackList
  In these methods, the return values for editor.commit() are already
  ignored and therefore no user-visible effect.

Bug: 33382877
Test: mannual test, connect to carkit and browse phone book
Change-Id: I605dc00db4647f06c9fa797f272188a44f0e5724
parent c081dfe1
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1383,7 +1383,7 @@ public final class Avrcp {
                Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = pref.edit();
        editor.putBoolean(mAddress, true);
        editor.commit();
        editor.apply();
    }

    private int modifyRcFeatureFromBlacklist(int feature, String address) {
@@ -1403,7 +1403,7 @@ public final class Avrcp {
                Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = pref.edit();
        editor.remove(address);
        editor.commit();
        editor.apply();
    }

    /**
+22 −3
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.BatteryStats;
import android.os.Binder;
import android.os.Bundle;
@@ -549,6 +550,21 @@ public class AdapterService extends Service {
        mProfileObserver.start();

        setAdapterService(this);

        // First call to getSharedPreferences will result in a file read into
        // memory cache. Call it here asynchronously to avoid potential ANR
        // in the future
        new AsyncTask<Void, Void, Void>() {
            @Override
            protected Void doInBackground(Void... params) {
                getSharedPreferences(
                        PHONEBOOK_ACCESS_PERMISSION_PREFERENCE_FILE, Context.MODE_PRIVATE);
                getSharedPreferences(
                        MESSAGE_ACCESS_PERMISSION_PREFERENCE_FILE, Context.MODE_PRIVATE);
                getSharedPreferences(SIM_ACCESS_PERMISSION_PREFERENCE_FILE, Context.MODE_PRIVATE);
                return null;
            }
        }.execute();
    }

    @Override
@@ -2155,7 +2171,8 @@ public class AdapterService extends Service {
        } else {
            editor.putBoolean(device.getAddress(), value == BluetoothDevice.ACCESS_ALLOWED);
        }
        return editor.commit();
        editor.apply();
        return true;
    }

    int getMessageAccessPermission(BluetoothDevice device) {
@@ -2180,7 +2197,8 @@ public class AdapterService extends Service {
        } else {
            editor.putBoolean(device.getAddress(), value == BluetoothDevice.ACCESS_ALLOWED);
        }
        return editor.commit();
        editor.apply();
        return true;
    }

    int getSimAccessPermission(BluetoothDevice device) {
@@ -2205,7 +2223,8 @@ public class AdapterService extends Service {
        } else {
            editor.putBoolean(device.getAddress(), value == BluetoothDevice.ACCESS_ALLOWED);
        }
        return editor.commit();
        editor.apply();
        return true;
    }

     void sendConnectionStateChange(BluetoothDevice