Loading src/com/android/settings/bluetooth/BluetoothPermissionActivity.java +23 −16 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ public class BluetoothPermissionActivity extends AlertActivity implements private BluetoothDevice mDevice; private String mReturnPackage = null; private String mReturnClass = null; private int mRequestType; private CheckBox mRememberChoice; private boolean mRememberChoiceValue = false; Loading Loading @@ -91,17 +92,17 @@ public class BluetoothPermissionActivity extends AlertActivity implements mDevice = i.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); mReturnPackage = i.getStringExtra(BluetoothDevice.EXTRA_PACKAGE_NAME); mReturnClass = i.getStringExtra(BluetoothDevice.EXTRA_CLASS_NAME); int requestType = i.getIntExtra(BluetoothDevice.EXTRA_ACCESS_REQUEST_TYPE, mRequestType = i.getIntExtra(BluetoothDevice.EXTRA_ACCESS_REQUEST_TYPE, BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS); if (requestType == BluetoothDevice.REQUEST_TYPE_PROFILE_CONNECTION) { if (mRequestType == BluetoothDevice.REQUEST_TYPE_PROFILE_CONNECTION) { showConnectionDialog(); } else if (requestType == BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS) { } else if (mRequestType == BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS) { showPhonebookDialog(); } else if (requestType == BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS) { } else if (mRequestType == BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS) { showMasDialog(); } else { Log.e(TAG, "Error: bad request type: " + requestType); Log.e(TAG, "Error: bad request type: " + mRequestType); finish(); return; } Loading Loading @@ -222,9 +223,7 @@ public class BluetoothPermissionActivity extends AlertActivity implements private void onPositive() { if (DEBUG) Log.d(TAG, "onPositive mRememberChoiceValue: " + mRememberChoiceValue); if (mRememberChoiceValue) { savePhonebookPermissionChoice(CachedBluetoothDevice.PHONEBOOK_ACCESS_ALLOWED); } saveChoiceIfNeeded(CachedBluetoothDevice.PERMISSION_ACCESS_ALLOWED); sendIntentToReceiver(BluetoothDevice.ACTION_CONNECTION_ACCESS_REPLY, true, BluetoothDevice.EXTRA_ALWAYS_ALLOWED, mRememberChoiceValue); finish(); Loading @@ -233,15 +232,25 @@ public class BluetoothPermissionActivity extends AlertActivity implements private void onNegative() { if (DEBUG) Log.d(TAG, "onNegative mRememberChoiceValue: " + mRememberChoiceValue); if (mRememberChoiceValue) { savePhonebookPermissionChoice(CachedBluetoothDevice.PHONEBOOK_ACCESS_REJECTED); } saveChoiceIfNeeded(CachedBluetoothDevice.PERMISSION_ACCESS_REJECTED); sendIntentToReceiver(BluetoothDevice.ACTION_CONNECTION_ACCESS_REPLY, false, null, false // dummy value, no effect since last param is null ); finish(); } private void saveChoiceIfNeeded(int permission) { if (!mRememberChoiceValue) { return; } if (mRequestType == BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS) { getCachedBluetoothDevice().setPhonebookPermissionChoice(permission); } else if (mRequestType == BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS) { getCachedBluetoothDevice().setMessagePermissionChoice(permission); } } private void sendIntentToReceiver(final String intentName, final boolean allowed, final String extraName, final boolean extraValue) { Intent intent = new Intent(intentName); Loading Loading @@ -288,18 +297,16 @@ public class BluetoothPermissionActivity extends AlertActivity implements return true; } private void savePhonebookPermissionChoice(int permissionChoice) { private CachedBluetoothDevice getCachedBluetoothDevice() { LocalBluetoothManager bluetoothManager = LocalBluetoothManager.getInstance(this); CachedBluetoothDeviceManager cachedDeviceManager = bluetoothManager.getCachedDeviceManager(); CachedBluetoothDevice cachedDevice = cachedDeviceManager.findDevice(mDevice); if (cachedDevice != null ) { cachedDevice.setPhonebookPermissionChoice(permissionChoice); } else { if (cachedDevice == null) { cachedDevice = cachedDeviceManager.addDevice(bluetoothManager.getBluetoothAdapter(), bluetoothManager.getProfileManager(), mDevice); cachedDevice.setPhonebookPermissionChoice(permissionChoice); } return cachedDevice; } } src/com/android/settings/bluetooth/BluetoothPermissionRequest.java +10 −7 Original line number Diff line number Diff line Loading @@ -128,8 +128,9 @@ public final class BluetoothPermissionRequest extends BroadcastReceiver { private boolean checkUserChoice() { boolean processed = false; // we only remember PHONEBOOK permission if (mRequestType != BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS) { // we only remember PHONEBOOK and MESSAGE permissions if (mRequestType != BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS && mRequestType != BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS) { return processed; } Loading @@ -143,23 +144,25 @@ public final class BluetoothPermissionRequest extends BroadcastReceiver { bluetoothManager.getProfileManager(), mDevice); } int phonebookPermission = cachedDevice.getPhonebookPermissionChoice(); int permission = mRequestType == BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS ? cachedDevice.getMessagePermissionChoice() : cachedDevice.getPhonebookPermissionChoice(); if (phonebookPermission == CachedBluetoothDevice.PHONEBOOK_ACCESS_UNKNOWN) { if (permission == CachedBluetoothDevice.PERMISSION_ACCESS_UNKNOWN) { return processed; } String intentName = BluetoothDevice.ACTION_CONNECTION_ACCESS_REPLY; if (phonebookPermission == CachedBluetoothDevice.PHONEBOOK_ACCESS_ALLOWED) { if (permission == CachedBluetoothDevice.PERMISSION_ACCESS_ALLOWED) { sendIntentToReceiver(intentName, true, BluetoothDevice.EXTRA_ALWAYS_ALLOWED, true); processed = true; } else if (phonebookPermission == CachedBluetoothDevice.PHONEBOOK_ACCESS_REJECTED) { } else if (permission == CachedBluetoothDevice.PERMISSION_ACCESS_REJECTED) { sendIntentToReceiver(intentName, false, null, false // dummy value, no effect since previous param is null ); processed = true; } else { Log.e(TAG, "Bad phonebookPermission: " + phonebookPermission); Log.e(TAG, "Bad permission: " + permission); } return processed; } Loading src/com/android/settings/bluetooth/CachedBluetoothDevice.java +29 −14 Original line number Diff line number Diff line Loading @@ -65,18 +65,20 @@ final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> { private boolean mVisible; private int mPhonebookPermissionChoice; private int mMessagePermissionChoice; private final Collection<Callback> mCallbacks = new ArrayList<Callback>(); // Following constants indicate the user's choices of Phone book access settings // Following constants indicate the user's choices of Phone book or MAS access settings // User hasn't made any choice or settings app has wiped out the memory final static int PHONEBOOK_ACCESS_UNKNOWN = 0; final static int PERMISSION_ACCESS_UNKNOWN = 0; // User has accepted the connection and let Settings app remember the decision final static int PHONEBOOK_ACCESS_ALLOWED = 1; final static int PERMISSION_ACCESS_ALLOWED = 1; // User has rejected the connection and let Settings app remember the decision final static int PHONEBOOK_ACCESS_REJECTED = 2; final static int PERMISSION_ACCESS_REJECTED = 2; private final static String PHONEBOOK_PREFS_NAME = "bluetooth_phonebook_permission"; private final static String MESSAGE_PREFS_NAME = "bluetooth_message_permissions"; /** * When we connect to multiple profiles, we only want to display a single Loading Loading @@ -348,8 +350,8 @@ final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> { fetchName(); fetchBtClass(); updateProfiles(); fetchPhonebookPermissionChoice(); mPhonebookPermissionChoice = fetchPermissionChoice(PHONEBOOK_PREFS_NAME); mMessagePermissionChoice = fetchPermissionChoice(MESSAGE_PREFS_NAME); mVisible = false; dispatchAttributesChanged(); } Loading Loading @@ -513,7 +515,8 @@ final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> { if (bondState == BluetoothDevice.BOND_NONE) { mProfiles.clear(); mConnectAfterPairing = false; // cancel auto-connect setPhonebookPermissionChoice(PHONEBOOK_ACCESS_UNKNOWN); setPhonebookPermissionChoice(PERMISSION_ACCESS_UNKNOWN); setMessagePermissionChoice(PERMISSION_ACCESS_UNKNOWN); } refresh(); Loading Loading @@ -629,23 +632,35 @@ final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> { return mPhonebookPermissionChoice; } int getMessagePermissionChoice() { return mMessagePermissionChoice; } void setPhonebookPermissionChoice(int permissionChoice) { savePermissionChoice(PHONEBOOK_PREFS_NAME, permissionChoice); mPhonebookPermissionChoice = permissionChoice; } void setMessagePermissionChoice(int permissionChoice) { savePermissionChoice(MESSAGE_PREFS_NAME, permissionChoice); mMessagePermissionChoice = permissionChoice; } private void savePermissionChoice(String prefsName, int permissionChoice) { SharedPreferences.Editor editor = mContext.getSharedPreferences(PHONEBOOK_PREFS_NAME, Context.MODE_PRIVATE).edit(); if (permissionChoice == PHONEBOOK_ACCESS_UNKNOWN) { mContext.getSharedPreferences(prefsName, Context.MODE_PRIVATE).edit(); if (permissionChoice == PERMISSION_ACCESS_UNKNOWN) { editor.remove(mDevice.getAddress()); } else { editor.putInt(mDevice.getAddress(), permissionChoice); } editor.commit(); mPhonebookPermissionChoice = permissionChoice; } private void fetchPhonebookPermissionChoice() { SharedPreferences preference = mContext.getSharedPreferences(PHONEBOOK_PREFS_NAME, private int fetchPermissionChoice(String prefsName) { SharedPreferences preference = mContext.getSharedPreferences(prefsName, Context.MODE_PRIVATE); mPhonebookPermissionChoice = preference.getInt(mDevice.getAddress(), PHONEBOOK_ACCESS_UNKNOWN); return preference.getInt(mDevice.getAddress(), PERMISSION_ACCESS_UNKNOWN); } } Loading
src/com/android/settings/bluetooth/BluetoothPermissionActivity.java +23 −16 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ public class BluetoothPermissionActivity extends AlertActivity implements private BluetoothDevice mDevice; private String mReturnPackage = null; private String mReturnClass = null; private int mRequestType; private CheckBox mRememberChoice; private boolean mRememberChoiceValue = false; Loading Loading @@ -91,17 +92,17 @@ public class BluetoothPermissionActivity extends AlertActivity implements mDevice = i.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); mReturnPackage = i.getStringExtra(BluetoothDevice.EXTRA_PACKAGE_NAME); mReturnClass = i.getStringExtra(BluetoothDevice.EXTRA_CLASS_NAME); int requestType = i.getIntExtra(BluetoothDevice.EXTRA_ACCESS_REQUEST_TYPE, mRequestType = i.getIntExtra(BluetoothDevice.EXTRA_ACCESS_REQUEST_TYPE, BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS); if (requestType == BluetoothDevice.REQUEST_TYPE_PROFILE_CONNECTION) { if (mRequestType == BluetoothDevice.REQUEST_TYPE_PROFILE_CONNECTION) { showConnectionDialog(); } else if (requestType == BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS) { } else if (mRequestType == BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS) { showPhonebookDialog(); } else if (requestType == BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS) { } else if (mRequestType == BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS) { showMasDialog(); } else { Log.e(TAG, "Error: bad request type: " + requestType); Log.e(TAG, "Error: bad request type: " + mRequestType); finish(); return; } Loading Loading @@ -222,9 +223,7 @@ public class BluetoothPermissionActivity extends AlertActivity implements private void onPositive() { if (DEBUG) Log.d(TAG, "onPositive mRememberChoiceValue: " + mRememberChoiceValue); if (mRememberChoiceValue) { savePhonebookPermissionChoice(CachedBluetoothDevice.PHONEBOOK_ACCESS_ALLOWED); } saveChoiceIfNeeded(CachedBluetoothDevice.PERMISSION_ACCESS_ALLOWED); sendIntentToReceiver(BluetoothDevice.ACTION_CONNECTION_ACCESS_REPLY, true, BluetoothDevice.EXTRA_ALWAYS_ALLOWED, mRememberChoiceValue); finish(); Loading @@ -233,15 +232,25 @@ public class BluetoothPermissionActivity extends AlertActivity implements private void onNegative() { if (DEBUG) Log.d(TAG, "onNegative mRememberChoiceValue: " + mRememberChoiceValue); if (mRememberChoiceValue) { savePhonebookPermissionChoice(CachedBluetoothDevice.PHONEBOOK_ACCESS_REJECTED); } saveChoiceIfNeeded(CachedBluetoothDevice.PERMISSION_ACCESS_REJECTED); sendIntentToReceiver(BluetoothDevice.ACTION_CONNECTION_ACCESS_REPLY, false, null, false // dummy value, no effect since last param is null ); finish(); } private void saveChoiceIfNeeded(int permission) { if (!mRememberChoiceValue) { return; } if (mRequestType == BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS) { getCachedBluetoothDevice().setPhonebookPermissionChoice(permission); } else if (mRequestType == BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS) { getCachedBluetoothDevice().setMessagePermissionChoice(permission); } } private void sendIntentToReceiver(final String intentName, final boolean allowed, final String extraName, final boolean extraValue) { Intent intent = new Intent(intentName); Loading Loading @@ -288,18 +297,16 @@ public class BluetoothPermissionActivity extends AlertActivity implements return true; } private void savePhonebookPermissionChoice(int permissionChoice) { private CachedBluetoothDevice getCachedBluetoothDevice() { LocalBluetoothManager bluetoothManager = LocalBluetoothManager.getInstance(this); CachedBluetoothDeviceManager cachedDeviceManager = bluetoothManager.getCachedDeviceManager(); CachedBluetoothDevice cachedDevice = cachedDeviceManager.findDevice(mDevice); if (cachedDevice != null ) { cachedDevice.setPhonebookPermissionChoice(permissionChoice); } else { if (cachedDevice == null) { cachedDevice = cachedDeviceManager.addDevice(bluetoothManager.getBluetoothAdapter(), bluetoothManager.getProfileManager(), mDevice); cachedDevice.setPhonebookPermissionChoice(permissionChoice); } return cachedDevice; } }
src/com/android/settings/bluetooth/BluetoothPermissionRequest.java +10 −7 Original line number Diff line number Diff line Loading @@ -128,8 +128,9 @@ public final class BluetoothPermissionRequest extends BroadcastReceiver { private boolean checkUserChoice() { boolean processed = false; // we only remember PHONEBOOK permission if (mRequestType != BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS) { // we only remember PHONEBOOK and MESSAGE permissions if (mRequestType != BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS && mRequestType != BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS) { return processed; } Loading @@ -143,23 +144,25 @@ public final class BluetoothPermissionRequest extends BroadcastReceiver { bluetoothManager.getProfileManager(), mDevice); } int phonebookPermission = cachedDevice.getPhonebookPermissionChoice(); int permission = mRequestType == BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS ? cachedDevice.getMessagePermissionChoice() : cachedDevice.getPhonebookPermissionChoice(); if (phonebookPermission == CachedBluetoothDevice.PHONEBOOK_ACCESS_UNKNOWN) { if (permission == CachedBluetoothDevice.PERMISSION_ACCESS_UNKNOWN) { return processed; } String intentName = BluetoothDevice.ACTION_CONNECTION_ACCESS_REPLY; if (phonebookPermission == CachedBluetoothDevice.PHONEBOOK_ACCESS_ALLOWED) { if (permission == CachedBluetoothDevice.PERMISSION_ACCESS_ALLOWED) { sendIntentToReceiver(intentName, true, BluetoothDevice.EXTRA_ALWAYS_ALLOWED, true); processed = true; } else if (phonebookPermission == CachedBluetoothDevice.PHONEBOOK_ACCESS_REJECTED) { } else if (permission == CachedBluetoothDevice.PERMISSION_ACCESS_REJECTED) { sendIntentToReceiver(intentName, false, null, false // dummy value, no effect since previous param is null ); processed = true; } else { Log.e(TAG, "Bad phonebookPermission: " + phonebookPermission); Log.e(TAG, "Bad permission: " + permission); } return processed; } Loading
src/com/android/settings/bluetooth/CachedBluetoothDevice.java +29 −14 Original line number Diff line number Diff line Loading @@ -65,18 +65,20 @@ final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> { private boolean mVisible; private int mPhonebookPermissionChoice; private int mMessagePermissionChoice; private final Collection<Callback> mCallbacks = new ArrayList<Callback>(); // Following constants indicate the user's choices of Phone book access settings // Following constants indicate the user's choices of Phone book or MAS access settings // User hasn't made any choice or settings app has wiped out the memory final static int PHONEBOOK_ACCESS_UNKNOWN = 0; final static int PERMISSION_ACCESS_UNKNOWN = 0; // User has accepted the connection and let Settings app remember the decision final static int PHONEBOOK_ACCESS_ALLOWED = 1; final static int PERMISSION_ACCESS_ALLOWED = 1; // User has rejected the connection and let Settings app remember the decision final static int PHONEBOOK_ACCESS_REJECTED = 2; final static int PERMISSION_ACCESS_REJECTED = 2; private final static String PHONEBOOK_PREFS_NAME = "bluetooth_phonebook_permission"; private final static String MESSAGE_PREFS_NAME = "bluetooth_message_permissions"; /** * When we connect to multiple profiles, we only want to display a single Loading Loading @@ -348,8 +350,8 @@ final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> { fetchName(); fetchBtClass(); updateProfiles(); fetchPhonebookPermissionChoice(); mPhonebookPermissionChoice = fetchPermissionChoice(PHONEBOOK_PREFS_NAME); mMessagePermissionChoice = fetchPermissionChoice(MESSAGE_PREFS_NAME); mVisible = false; dispatchAttributesChanged(); } Loading Loading @@ -513,7 +515,8 @@ final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> { if (bondState == BluetoothDevice.BOND_NONE) { mProfiles.clear(); mConnectAfterPairing = false; // cancel auto-connect setPhonebookPermissionChoice(PHONEBOOK_ACCESS_UNKNOWN); setPhonebookPermissionChoice(PERMISSION_ACCESS_UNKNOWN); setMessagePermissionChoice(PERMISSION_ACCESS_UNKNOWN); } refresh(); Loading Loading @@ -629,23 +632,35 @@ final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> { return mPhonebookPermissionChoice; } int getMessagePermissionChoice() { return mMessagePermissionChoice; } void setPhonebookPermissionChoice(int permissionChoice) { savePermissionChoice(PHONEBOOK_PREFS_NAME, permissionChoice); mPhonebookPermissionChoice = permissionChoice; } void setMessagePermissionChoice(int permissionChoice) { savePermissionChoice(MESSAGE_PREFS_NAME, permissionChoice); mMessagePermissionChoice = permissionChoice; } private void savePermissionChoice(String prefsName, int permissionChoice) { SharedPreferences.Editor editor = mContext.getSharedPreferences(PHONEBOOK_PREFS_NAME, Context.MODE_PRIVATE).edit(); if (permissionChoice == PHONEBOOK_ACCESS_UNKNOWN) { mContext.getSharedPreferences(prefsName, Context.MODE_PRIVATE).edit(); if (permissionChoice == PERMISSION_ACCESS_UNKNOWN) { editor.remove(mDevice.getAddress()); } else { editor.putInt(mDevice.getAddress(), permissionChoice); } editor.commit(); mPhonebookPermissionChoice = permissionChoice; } private void fetchPhonebookPermissionChoice() { SharedPreferences preference = mContext.getSharedPreferences(PHONEBOOK_PREFS_NAME, private int fetchPermissionChoice(String prefsName) { SharedPreferences preference = mContext.getSharedPreferences(prefsName, Context.MODE_PRIVATE); mPhonebookPermissionChoice = preference.getInt(mDevice.getAddress(), PHONEBOOK_ACCESS_UNKNOWN); return preference.getInt(mDevice.getAddress(), PERMISSION_ACCESS_UNKNOWN); } }