am 6ee5b450: Merge "Bluetooth MAP profile - sms and mms support initial check-in" into klp-dev

* commit '6ee5b4508083fd0dd340396d66927c0fc8870a9b':
  Bluetooth MAP profile - sms and mms support initial check-in
diff --git a/res/layout/bluetooth_pb_access.xml b/res/layout/bluetooth_access.xml
similarity index 92%
rename from res/layout/bluetooth_pb_access.xml
rename to res/layout/bluetooth_access.xml
index 01218d6..3bfb689 100644
--- a/res/layout/bluetooth_pb_access.xml
+++ b/res/layout/bluetooth_access.xml
@@ -36,12 +36,12 @@
             android:gravity="center_horizontal"
             android:textAppearance="?android:attr/textAppearanceMedium" />
 
-        <CheckBox android:id="@+id/bluetooth_pb_remember_choice"
+        <CheckBox android:id="@+id/bluetooth_remember_choice"
             style="?android:attr/textAppearanceMedium"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_marginTop="2dip"
-            android:text="@string/bluetooth_pb_remember_choice" />
+            android:text="@string/bluetooth_remember_choice" />
 
     </LinearLayout>
 
diff --git a/res/values/strings.xml b/res/values/strings.xml
index cdf0243..8147396 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -355,8 +355,19 @@
     <string name="bluetooth_pb_acceptance_dialog_text">%1$s wants to access your contacts and call history. Give access to %2$s?</string>
 
     <!-- Bluetooth phone book permission Alert Activity checkbox text [CHAR LIMIT=none] -->
+    <string name="bluetooth_remember_choice">Don\'t ask again</string>
+    <!--FIXME SHOULD BE REMOVED AND ALL LANG VERSIONS FIXED TO ABOVE NAME -->
     <string name="bluetooth_pb_remember_choice">Don\'t ask again</string>
 
+    <!-- Activity label of BluetoothMessagePermissionActivity, also used as Strings in the permission dialog [CHAR LIMIT=none] -->
+    <string name="bluetooth_map_request">"Message request"</string>
+
+    <!-- Bluetooth message permission Alert Activity text [CHAR LIMIT=none] -->
+    <string name="bluetooth_map_acceptance_dialog_text">%1$s wants to access your messages. Give access to %2$s?</string>
+
+
+
+
     <!-- Date & time settings screen title -->
     <string name="date_and_time">Date &amp; time settings</string>
     <!-- The title of the activity to pick a time zone. -->
diff --git a/src/com/android/settings/bluetooth/BluetoothPermissionActivity.java b/src/com/android/settings/bluetooth/BluetoothPermissionActivity.java
index 16476fa..aac1d4e 100755
--- a/src/com/android/settings/bluetooth/BluetoothPermissionActivity.java
+++ b/src/com/android/settings/bluetooth/BluetoothPermissionActivity.java
@@ -58,7 +58,7 @@
 
     private CheckBox mRememberChoice;
     private boolean mRememberChoiceValue = false;
-
+    private int mRequestType = 0;
     private BroadcastReceiver mReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
@@ -91,15 +91,18 @@
         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) {
-            showConnectionDialog();
-        } else if (requestType == BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS) {
-            showPhonebookDialog();
-        } else {
-            Log.e(TAG, "Error: bad request type: " + requestType);
+        if (mRequestType == BluetoothDevice.REQUEST_TYPE_PROFILE_CONNECTION) {
+            showDialog(getString(R.string.bluetooth_connection_permission_request), mRequestType);
+        } else if (mRequestType == BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS) {
+            showDialog(getString(R.string.bluetooth_phonebook_request), mRequestType);
+        } else if (mRequestType == BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS) {
+            showDialog(getString(R.string.bluetooth_map_request), mRequestType);
+        }
+        else {
+            Log.e(TAG, "Error: bad request type: " + mRequestType);
             finish();
             return;
         }
@@ -108,62 +111,57 @@
         mReceiverRegistered = true;
     }
 
-    private void showConnectionDialog() {
+
+    private void showDialog(String title, int requestType)
+    {
         final AlertController.AlertParams p = mAlertParams;
         p.mIconId = android.R.drawable.ic_dialog_info;
-        p.mTitle = getString(R.string.bluetooth_connection_permission_request);
-        p.mView = createConnectionDialogView();
+        p.mTitle = title;
+        switch(requestType)
+        {
+        case BluetoothDevice.REQUEST_TYPE_PROFILE_CONNECTION:
+            p.mView = createConnectionDialogView();
+            break;
+        case BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS:
+            p.mView = createPhonebookDialogView();
+            break;
+        case BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS:
+            p.mView = createMapDialogView();
+            break;
+        }
         p.mPositiveButtonText = getString(R.string.yes);
         p.mPositiveButtonListener = this;
         p.mNegativeButtonText = getString(R.string.no);
         p.mNegativeButtonListener = this;
         mOkButton = mAlert.getButton(DialogInterface.BUTTON_POSITIVE);
         setupAlert();
+
     }
 
-    private void showPhonebookDialog() {
-        final AlertController.AlertParams p = mAlertParams;
-        p.mIconId = android.R.drawable.ic_dialog_info;
-        p.mTitle = getString(R.string.bluetooth_phonebook_request);
-        p.mView = createPhonebookDialogView();
-        p.mPositiveButtonText = getString(android.R.string.yes);
-        p.mPositiveButtonListener = this;
-        p.mNegativeButtonText = getString(android.R.string.no);
-        p.mNegativeButtonListener = this;
-        mOkButton = mAlert.getButton(DialogInterface.BUTTON_POSITIVE);
-        setupAlert();
-    }
-
-    private String createConnectionDisplayText() {
-        String mRemoteName = mDevice != null ? mDevice.getAliasName() : null;
-
-        if (mRemoteName == null) mRemoteName = getString(R.string.unknown);
-        String mMessage1 = getString(R.string.bluetooth_connection_dialog_text,
-                mRemoteName);
+    private String createDisplayText(String message) {
+        String mMessage1 = message;
         return mMessage1;
     }
 
-    private String createPhonebookDisplayText() {
+    private String createRemoteName()
+    {
         String mRemoteName = mDevice != null ? mDevice.getAliasName() : null;
-
         if (mRemoteName == null) mRemoteName = getString(R.string.unknown);
-        String mMessage1 = getString(R.string.bluetooth_pb_acceptance_dialog_text,
-                                     mRemoteName, mRemoteName);
-        return mMessage1;
+        return mRemoteName;
     }
 
     private View createConnectionDialogView() {
+        String mRemoteName = createRemoteName();
         mView = getLayoutInflater().inflate(R.layout.bluetooth_connection_access, null);
         messageView = (TextView)mView.findViewById(R.id.message);
-        messageView.setText(createConnectionDisplayText());
+        messageView.setText(createDisplayText(getString(R.string.bluetooth_connection_dialog_text,
+                mRemoteName)));
         return mView;
     }
 
-    private View createPhonebookDialogView() {
-        mView = getLayoutInflater().inflate(R.layout.bluetooth_pb_access, null);
-        messageView = (TextView)mView.findViewById(R.id.message);
-        messageView.setText(createPhonebookDisplayText());
-        mRememberChoice = (CheckBox)mView.findViewById(R.id.bluetooth_pb_remember_choice);
+    private void createCheckbox(int viewId)
+    {
+        mRememberChoice = (CheckBox)mView.findViewById(viewId);
         mRememberChoice.setChecked(false);
         mRememberChoice.setOnCheckedChangeListener(new OnCheckedChangeListener() {
             public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
@@ -174,26 +172,42 @@
                 }
             }
             });
+    }
+    private View createPhonebookDialogView() {
+        String mRemoteName = createRemoteName();
+        mView = getLayoutInflater().inflate(R.layout.bluetooth_access, null);
+        messageView = (TextView)mView.findViewById(R.id.message);
+        messageView.setText(createDisplayText(getString(R.string.bluetooth_pb_acceptance_dialog_text,
+                mRemoteName, mRemoteName)));
+        createCheckbox(R.id.bluetooth_remember_choice);
+        return mView;
+    }
+    private View createMapDialogView() {
+        String mRemoteName = createRemoteName();
+        mView = getLayoutInflater().inflate(R.layout.bluetooth_access, null);
+        messageView = (TextView)mView.findViewById(R.id.message);
+        messageView.setText(createDisplayText(getString(R.string.bluetooth_map_acceptance_dialog_text,
+                mRemoteName, mRemoteName)));
+        createCheckbox(R.id.bluetooth_remember_choice);
         return mView;
     }
 
     private void onPositive() {
         if (DEBUG) Log.d(TAG, "onPositive mRememberChoiceValue: " + mRememberChoiceValue);
+        if (mRememberChoiceValue)
+            savePermissionChoice(mRequestType, CachedBluetoothDevice.ACCESS_ALLOWED);
 
-        if (mRememberChoiceValue) {
-            savePhonebookPermissionChoice(CachedBluetoothDevice.PHONEBOOK_ACCESS_ALLOWED);
-        }
         sendIntentToReceiver(BluetoothDevice.ACTION_CONNECTION_ACCESS_REPLY, true,
-                             BluetoothDevice.EXTRA_ALWAYS_ALLOWED, mRememberChoiceValue);
+                            BluetoothDevice.EXTRA_ALWAYS_ALLOWED, mRememberChoiceValue);
         finish();
     }
 
     private void onNegative() {
         if (DEBUG) Log.d(TAG, "onNegative mRememberChoiceValue: " + mRememberChoiceValue);
 
-        if (mRememberChoiceValue) {
-            savePhonebookPermissionChoice(CachedBluetoothDevice.PHONEBOOK_ACCESS_REJECTED);
-        }
+        if (mRememberChoiceValue)
+            savePermissionChoice(mRequestType, CachedBluetoothDevice.ACCESS_REJECTED);
+
         sendIntentToReceiver(BluetoothDevice.ACTION_CONNECTION_ACCESS_REPLY, false,
                              null, false // dummy value, no effect since last param is null
                              );
@@ -246,18 +260,23 @@
         return true;
     }
 
-    private void savePhonebookPermissionChoice(int permissionChoice) {
+    private void savePermissionChoice(int permissionType, int permissionChoice) {
         LocalBluetoothManager bluetoothManager = LocalBluetoothManager.getInstance(this);
         CachedBluetoothDeviceManager cachedDeviceManager =
             bluetoothManager.getCachedDeviceManager();
         CachedBluetoothDevice cachedDevice = cachedDeviceManager.findDevice(mDevice);
-        if (cachedDevice != null ) {
-            cachedDevice.setPhonebookPermissionChoice(permissionChoice);
-        } else {
+        if (DEBUG) Log.d(TAG, "savePermissionChoice permissionType: " + permissionType);
+        if (cachedDevice == null ) {
             cachedDevice = cachedDeviceManager.addDevice(bluetoothManager.getBluetoothAdapter(),
                                                          bluetoothManager.getProfileManager(),
                                                          mDevice);
-            cachedDevice.setPhonebookPermissionChoice(permissionChoice);
         }
+        if (permissionType == BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS){
+            cachedDevice.setPhonebookPermissionChoice(permissionChoice);
+        }else if (permissionType == BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS){
+            cachedDevice.setMessagePermissionChoice(permissionChoice);
+        }
+
     }
+
 }
diff --git a/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java b/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java
index e2231bb..343018e 100644
--- a/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java
+++ b/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java
@@ -128,8 +128,10 @@
     private boolean checkUserChoice() {
         boolean processed = false;
 
-        // we only remember PHONEBOOK permission
-        if (mRequestType != BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS) {
+        // ignore if it is something else than phonebook/message settings it wants us to remember
+        if (mRequestType != BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS
+                && mRequestType != BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS) {
+            if (DEBUG) Log.d(TAG, "Unknown RequestType: " + mRequestType);
             return processed;
         }
 
@@ -143,23 +145,45 @@
                 bluetoothManager.getProfileManager(), mDevice);
         }
 
-        int phonebookPermission = cachedDevice.getPhonebookPermissionChoice();
+        if(mRequestType == BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS) {
 
-        if (phonebookPermission == CachedBluetoothDevice.PHONEBOOK_ACCESS_UNKNOWN) {
-            return processed;
-        }
+            int phonebookPermission = cachedDevice.getPhonebookPermissionChoice();
 
-        String intentName = BluetoothDevice.ACTION_CONNECTION_ACCESS_REPLY;
-        if (phonebookPermission == CachedBluetoothDevice.PHONEBOOK_ACCESS_ALLOWED) {
-            sendIntentToReceiver(intentName, true, BluetoothDevice.EXTRA_ALWAYS_ALLOWED, true);
-            processed = true;
-        } else if (phonebookPermission == CachedBluetoothDevice.PHONEBOOK_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);
+            if (phonebookPermission == CachedBluetoothDevice.ACCESS_UNKNOWN) {
+                return processed;
+            }
+
+            String intentName = BluetoothDevice.ACTION_CONNECTION_ACCESS_REPLY;
+            if (phonebookPermission == CachedBluetoothDevice.ACCESS_ALLOWED) {
+                sendIntentToReceiver(intentName, true, BluetoothDevice.EXTRA_ALWAYS_ALLOWED, true);
+                processed = true;
+            } else if (phonebookPermission == CachedBluetoothDevice.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);
+            }
+
+        } else if(mRequestType == BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS) {
+
+            int messagePermission = cachedDevice.getMessagePermissionChoice();
+
+            if (messagePermission == CachedBluetoothDevice.ACCESS_UNKNOWN) {
+                return processed;
+            }
+
+            String intentName = BluetoothDevice.ACTION_CONNECTION_ACCESS_REPLY;
+            if (messagePermission == CachedBluetoothDevice.ACCESS_ALLOWED) {
+                sendIntentToReceiver(intentName, true, BluetoothDevice.EXTRA_ALWAYS_ALLOWED, true);
+                processed = true;
+            } else if (messagePermission == CachedBluetoothDevice.ACCESS_REJECTED) {
+                sendIntentToReceiver(intentName, false,
+                                     null, false); // dummy value, no effect since previous param is null
+                processed = true;
+            } else {
+                Log.e(TAG, "Bad messagePermission: " + messagePermission);
+            }
         }
         return processed;
     }
diff --git a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
index 4b19b9c..9742027 100755
--- a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
+++ b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
@@ -66,17 +66,22 @@
 
     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/message 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 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 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 ACCESS_REJECTED = 2;
+
 
     private final static String PHONEBOOK_PREFS_NAME = "bluetooth_phonebook_permission";
+    private final static String MESSAGE_PREFS_NAME = "bluetooth_message_permission";
 
     /**
      * When we connect to multiple profiles, we only want to display a single
@@ -349,6 +354,7 @@
         fetchBtClass();
         updateProfiles();
         fetchPhonebookPermissionChoice();
+        fetchMessagePermissionChoice();
 
         mVisible = false;
         dispatchAttributesChanged();
@@ -513,7 +519,8 @@
         if (bondState == BluetoothDevice.BOND_NONE) {
             mProfiles.clear();
             mConnectAfterPairing = false;  // cancel auto-connect
-            setPhonebookPermissionChoice(PHONEBOOK_ACCESS_UNKNOWN);
+            setPhonebookPermissionChoice(ACCESS_UNKNOWN);
+            setMessagePermissionChoice(ACCESS_UNKNOWN);
         }
 
         refresh();
@@ -632,7 +639,7 @@
     void setPhonebookPermissionChoice(int permissionChoice) {
         SharedPreferences.Editor editor =
             mContext.getSharedPreferences(PHONEBOOK_PREFS_NAME, Context.MODE_PRIVATE).edit();
-        if (permissionChoice == PHONEBOOK_ACCESS_UNKNOWN) {
+        if (permissionChoice == ACCESS_UNKNOWN) {
             editor.remove(mDevice.getAddress());
         } else {
             editor.putInt(mDevice.getAddress(), permissionChoice);
@@ -645,7 +652,31 @@
         SharedPreferences preference = mContext.getSharedPreferences(PHONEBOOK_PREFS_NAME,
                                                                      Context.MODE_PRIVATE);
         mPhonebookPermissionChoice = preference.getInt(mDevice.getAddress(),
-                                                       PHONEBOOK_ACCESS_UNKNOWN);
+                                                       ACCESS_UNKNOWN);
+    }
+
+
+    int getMessagePermissionChoice() {
+        return mMessagePermissionChoice;
+    }
+
+    void setMessagePermissionChoice(int permissionChoice) {
+        SharedPreferences.Editor editor =
+            mContext.getSharedPreferences(MESSAGE_PREFS_NAME, Context.MODE_PRIVATE).edit();
+        if (permissionChoice == ACCESS_UNKNOWN) {
+            editor.remove(mDevice.getAddress());
+        } else {
+            editor.putInt(mDevice.getAddress(), permissionChoice);
+        }
+        editor.commit();
+        mMessagePermissionChoice = permissionChoice;
+    }
+
+    private void fetchMessagePermissionChoice() {
+        SharedPreferences preference = mContext.getSharedPreferences(MESSAGE_PREFS_NAME,
+                                                                     Context.MODE_PRIVATE);
+        mMessagePermissionChoice = preference.getInt(mDevice.getAddress(),
+                                                       ACCESS_UNKNOWN);
     }
 
 }