summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSridhar Gujje <sgujje@codeaurora.org>2015-12-11 11:02:48 +0530
committerSridhar Gujje <sgujje@codeaurora.org>2015-12-11 18:18:00 +0530
commitf7699509e9872be06414128eba660f743b4e7da9 (patch)
tree11da59f4923ee0abfe770aa16d329cd8e313ee86
parent42d1bd9840daa58962e172fafffc4f0c5b512656 (diff)
parentb211df6fcbd7dcd055354b75afc2e68ea49a36d9 (diff)
downloadandroid_packages_apps_Bluetooth-f7699509e9872be06414128eba660f743b4e7da9.tar.gz
android_packages_apps_Bluetooth-f7699509e9872be06414128eba660f743b4e7da9.tar.bz2
android_packages_apps_Bluetooth-f7699509e9872be06414128eba660f743b4e7da9.zip
git merge android-6.0.1_r3 on to remote branch
Change-Id: Ie3ca36b7ab6705879c273d576a56650715da0c54
-rwxr-xr-xAndroid.mk2
-rw-r--r--AndroidManifest.xml9
-rw-r--r--res/values-fa/test_strings.xml2
-rw-r--r--res/values-nl/strings.xml12
-rw-r--r--res/values-ro/strings.xml14
-rw-r--r--res/xml/file_paths.xml3
-rw-r--r--src/com/android/bluetooth/Utils.java23
-rw-r--r--src/com/android/bluetooth/gatt/GattService.java15
-rw-r--r--src/com/android/bluetooth/gatt/ScanClient.java2
-rw-r--r--src/com/android/bluetooth/hfp/HeadsetStateMachine.java15
-rw-r--r--src/com/android/bluetooth/map/BluetoothMapContent.java2
-rw-r--r--src/com/android/bluetooth/map/BluetoothMapContentObserver.java3
-rw-r--r--src/com/android/bluetooth/opp/BluetoothOppUtility.java19
-rw-r--r--src/com/android/bluetooth/pbap/BluetoothPbapVcardManager.java4
-rw-r--r--src/com/android/bluetooth/sap/SapMessage.java6
15 files changed, 93 insertions, 38 deletions
diff --git a/Android.mk b/Android.mk
index 59fbf6ebb..0e636260e 100755
--- a/Android.mk
+++ b/Android.mk
@@ -22,7 +22,7 @@ LOCAL_CERTIFICATE := platform
LOCAL_JNI_SHARED_LIBRARIES := libbluetooth_jni
LOCAL_JAVA_LIBRARIES := javax.obex telephony-common libprotobuf-java-micro
-LOCAL_STATIC_JAVA_LIBRARIES := com.android.vcard bluetooth.mapsapi sap-api-java-static
+LOCAL_STATIC_JAVA_LIBRARIES := com.android.vcard bluetooth.mapsapi sap-api-java-static android-support-v4
LOCAL_STATIC_JAVA_LIBRARIES += com.android.emailcommon
LOCAL_REQUIRED_MODULES := bluetooth.default
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 0fa1b7674..1d35cb2f5 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -33,6 +33,7 @@
<uses-permission android:name="android.permission.BLUETOOTH_MAP" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<!-- WRITE_CONTACTS is used for test cases only -->
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
@@ -97,6 +98,14 @@
android:pathPrefix="/btavrcp_ct"
android:permission="android.permission.ACCESS_BLUETOOTH_AVRCP_CT_DATA" />
</provider>
+ <provider android:name="android.support.v4.content.FileProvider"
+ android:authorities="com.google.android.bluetooth.fileprovider"
+ android:grantUriPermissions="true"
+ android:exported="false">
+ <meta-data
+ android:name="android.support.FILE_PROVIDER_PATHS"
+ android:resource="@xml/file_paths" />
+ </provider>
<service
android:process="@string/process"
android:name = ".btservice.AdapterService">
diff --git a/res/values-fa/test_strings.xml b/res/values-fa/test_strings.xml
index 000f3f7bb..0db14baeb 100644
--- a/res/values-fa/test_strings.xml
+++ b/res/values-fa/test_strings.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="hello" msgid="1740533743008967039">"سلام بر دنیا، تست فعالیت"</string>
+ <string name="hello" msgid="1740533743008967039">"سلام به همه، تست فعالیت"</string>
<string name="app_name" msgid="1203877025577761792">"اشتراک بلوتوث"</string>
<string name="insert_record" msgid="1450997173838378132">"درج سابقه"</string>
<string name="update_record" msgid="2480425402384910635">"تأیید سابقه"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index ed657c0c1..45d784b72 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -24,9 +24,9 @@
<string name="unknown_device" msgid="9221903979877041009">"Onbekend apparaat"</string>
<string name="unknownNumber" msgid="4994750948072751566">"Onbekend"</string>
<string name="airplane_error_title" msgid="2683839635115739939">"Vliegtuigmodus"</string>
- <string name="airplane_error_msg" msgid="8698965595254137230">"U kunt Bluetooth niet gebruiken in Vliegtuigmodus."</string>
+ <string name="airplane_error_msg" msgid="8698965595254137230">"Je kunt Bluetooth niet gebruiken in Vliegtuigmodus."</string>
<string name="bt_enable_title" msgid="8657832550503456572"></string>
- <string name="bt_enable_line1" msgid="7203551583048149">"Als u Bluetooth-services wilt gebruiken, moet u eerst Bluetooth inschakelen."</string>
+ <string name="bt_enable_line1" msgid="7203551583048149">"Als je Bluetooth-services wilt gebruiken, moet je eerst Bluetooth inschakelen."</string>
<string name="bt_enable_line2" msgid="4341936569415937994">"Bluetooth nu inschakelen?"</string>
<string name="bt_enable_cancel" msgid="1988832367505151727">"Annuleren"</string>
<string name="bt_enable_ok" msgid="3432462749994538265">"Inschakelen"</string>
@@ -37,8 +37,8 @@
<string name="incoming_file_confirm_timeout_ok" msgid="1414676773249857278">"OK"</string>
<string name="incoming_file_confirm_timeout_content" msgid="172779756093975981">"Er is een time-out opgetreden bij het accepteren van een inkomend bestand van \'<xliff:g id="SENDER">%1$s</xliff:g>\'"</string>
<string name="incoming_file_confirm_Notification_title" msgid="2958227698135117210">"Delen via Bluetooth: inkomend bestand"</string>
- <string name="incoming_file_confirm_Notification_caption" msgid="6671081128475981157">"Wilt u dit bestand ontvangen?"</string>
- <string name="incoming_file_toast_msg" msgid="1733710749992901811">"Er is een inkomend bestand van een ander apparaat beschikbaar. Bevestig dat u dit bestand wilt ontvangen."</string>
+ <string name="incoming_file_confirm_Notification_caption" msgid="6671081128475981157">"Wilt je dit bestand ontvangen?"</string>
+ <string name="incoming_file_toast_msg" msgid="1733710749992901811">"Er is een inkomend bestand van een ander apparaat beschikbaar. Bevestig dat je dit bestand wilt ontvangen."</string>
<string name="notification_receiving" msgid="4674648179652543984">"Delen via Bluetooth: <xliff:g id="FILE">%1$s</xliff:g> ontvangen"</string>
<string name="notification_received" msgid="3324588019186687985">"Delen via Bluetooth: <xliff:g id="FILE">%1$s</xliff:g> ontvangen"</string>
<string name="notification_received_fail" msgid="3619350997285714746">"Delen via Bluetooth: bestand <xliff:g id="FILE">%1$s</xliff:g> niet ontvangen"</string>
@@ -79,7 +79,7 @@
<string name="not_exist_file_desc" msgid="4059531573790529229">"Het bestand bestaat niet. \n"</string>
<string name="enabling_progress_title" msgid="436157952334723406">"Een ogenblik geduld..."</string>
<string name="enabling_progress_content" msgid="4601542238119927904">"Bluetooth inschakelen…"</string>
- <string name="bt_toast_1" msgid="972182708034353383">"Het bestand wordt ontvangen. U kunt de voortgang controleren in het venster \'Meldingen\'."</string>
+ <string name="bt_toast_1" msgid="972182708034353383">"Het bestand wordt ontvangen. Je kunt de voortgang controleren in het venster \'Meldingen\'."</string>
<string name="bt_toast_2" msgid="8602553334099066582">"Het bestand kan niet worden opgehaald."</string>
<string name="bt_toast_3" msgid="6707884165086862518">"Ontvangen van bestand van \'<xliff:g id="SENDER">%1$s</xliff:g>\' is beëindigd"</string>
<string name="bt_toast_4" msgid="4678812947604395649">"Bestand verzenden naar \'<xliff:g id="RECIPIENT">%1$s</xliff:g>\'"</string>
@@ -124,7 +124,7 @@
<string name="transfer_clear_dlg_title" msgid="2953444575556460386">"Wissen"</string>
<string name="bluetooth_map_settings_save" msgid="7635491847388074606">"Opslaan"</string>
<string name="bluetooth_map_settings_cancel" msgid="9205350798049865699">"Annuleren"</string>
- <string name="bluetooth_map_settings_intro" msgid="6793938602201480648">"Selecteer de accounts die u wilt delen via Bluetooth. U moet nog steeds elke toegang tot de accounts accepteren wanneer er verbinding wordt gemaakt."</string>
+ <string name="bluetooth_map_settings_intro" msgid="6793938602201480648">"Selecteer de accounts die je wilt delen via Bluetooth. Je moet nog steeds elke toegang tot de accounts accepteren wanneer er verbinding wordt gemaakt."</string>
<string name="bluetooth_map_settings_count" msgid="4557473074937024833">"Plaatsen over:"</string>
<string name="bluetooth_map_settings_app_icon" msgid="7105805610929114707">"App-pictogram"</string>
<string name="bluetooth_map_settings_title" msgid="7420332483392851321">"Instellingen voor delen van berichten via Bluetooth"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 8fa4161ac..3b3238b2b 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -19,17 +19,17 @@
<string name="permlab_bluetoothShareManager" msgid="311492132450338925">"Accesaţi managerul de descărcare."</string>
<string name="permdesc_bluetoothShareManager" msgid="8930572979123190223">"Permite aplicațiilor să acceseze managerul Distribuire prin Bluetooth și să-l utilizeze la transferul fișierelor."</string>
<string name="permlab_bluetoothWhitelist" msgid="7091552898592306386">"Acces la dispozitivele Bluetooth din lista albă."</string>
- <string name="permdesc_bluetoothWhitelist" msgid="5494513855192170109">"Permite aplicației să treacă temporar pe lista albă un dispozitiv Bluetooth, permiţându-i să trimită fişiere la acest dispozitiv fără confirmare din partea utilizatorului."</string>
+ <string name="permdesc_bluetoothWhitelist" msgid="5494513855192170109">"Permite aplicației să treacă temporar pe lista albă un dispozitiv Bluetooth, permițându-i să trimită fişiere la acest dispozitiv fără confirmare din partea utilizatorului."</string>
<string name="bt_share_picker_label" msgid="6268100924487046932">"Bluetooth"</string>
<string name="unknown_device" msgid="9221903979877041009">"Dispozitiv necunoscut"</string>
<string name="unknownNumber" msgid="4994750948072751566">"Necunoscut"</string>
<string name="airplane_error_title" msgid="2683839635115739939">"Mod Avion"</string>
<string name="airplane_error_msg" msgid="8698965595254137230">"Nu puteţi utiliza Bluetooth în modul Avion."</string>
<string name="bt_enable_title" msgid="8657832550503456572"></string>
- <string name="bt_enable_line1" msgid="7203551583048149">"Pentru a putea utiliza serviciile Bluetooth, trebuie mai întâi să le activaţi."</string>
- <string name="bt_enable_line2" msgid="4341936569415937994">"Activaţi acum Bluetooth?"</string>
+ <string name="bt_enable_line1" msgid="7203551583048149">"Pentru a putea utiliza serviciile Bluetooth, trebuie mai întâi să le activați."</string>
+ <string name="bt_enable_line2" msgid="4341936569415937994">"Activați acum Bluetooth?"</string>
<string name="bt_enable_cancel" msgid="1988832367505151727">"Anulați"</string>
- <string name="bt_enable_ok" msgid="3432462749994538265">"Activaţi"</string>
+ <string name="bt_enable_ok" msgid="3432462749994538265">"Activați"</string>
<string name="incoming_file_confirm_title" msgid="8139874248612182627">"Transfer de fişier"</string>
<string name="incoming_file_confirm_content" msgid="2752605552743148036">"Acceptați fișierul primit?"</string>
<string name="incoming_file_confirm_cancel" msgid="2973321832477704805">"Refuzaţi"</string>
@@ -52,7 +52,7 @@
<string name="download_line3" msgid="4384821622908676061">"Dimensiunea fişierului: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="download_line4" msgid="8535996869722666525"></string>
<string name="download_line5" msgid="3069560415845295386">"Se primeşte fişierul..."</string>
- <string name="download_cancel" msgid="9177305996747500768">"Opriţi"</string>
+ <string name="download_cancel" msgid="9177305996747500768">"Opriți"</string>
<string name="download_ok" msgid="5000360731674466039">"Ascundeţi"</string>
<string name="incoming_line1" msgid="2127419875681087545">"De la"</string>
<string name="incoming_line2" msgid="3348994249285315873">"Numele fișierului"</string>
@@ -70,7 +70,7 @@
<string name="upload_succ_ok" msgid="7705428476405478828">"OK"</string>
<string name="upload_fail_line1" msgid="7899394672421491701">"Fişierul nu a fost trimis la „<xliff:g id="RECIPIENT">%1$s</xliff:g>”."</string>
<string name="upload_fail_line1_2" msgid="2108129204050841798">"Fişier: <xliff:g id="FILE">%1$s</xliff:g>"</string>
- <string name="upload_fail_ok" msgid="5807702461606714296">"Încercaţi din nou"</string>
+ <string name="upload_fail_ok" msgid="5807702461606714296">"Încercați din nou"</string>
<string name="upload_fail_cancel" msgid="9118496285835687125">"Închideţi"</string>
<string name="bt_error_btn_ok" msgid="5965151173011534240">"OK"</string>
<string name="unknown_file" msgid="6092727753965095366">"Fişier necunoscut"</string>
@@ -88,7 +88,7 @@
<string name="bt_sm_2_1" product="nosdcard" msgid="352165168004521000">"Nu există spaţiu suficient pe stocarea USB pentru a salva fişierul de la „<xliff:g id="SENDER">%1$s</xliff:g>”"</string>
<string name="bt_sm_2_1" product="default" msgid="1989018443456803630">"Nu există suficient spaţiu pe cardul SD pentru a salva fişierul de la „<xliff:g id="SENDER">%1$s</xliff:g>”"</string>
<string name="bt_sm_2_2" msgid="2965243265852680543">"Spaţiu necesar: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="ErrorTooManyRequests" msgid="8578277541472944529">"Există prea multe solicitări în curs de procesare. Încercaţi din nou mai târziu."</string>
+ <string name="ErrorTooManyRequests" msgid="8578277541472944529">"Există prea multe solicitări în curs de procesare. Încercați din nou mai târziu."</string>
<string name="status_pending" msgid="2503691772030877944">"Transferul fişierului nu a început încă."</string>
<string name="status_running" msgid="6562808920311008696">"Transferul fişierului este în curs de desfăşurare."</string>
<string name="status_success" msgid="239573225847565868">"Transferul fişierului s-a încheiat."</string>
diff --git a/res/xml/file_paths.xml b/res/xml/file_paths.xml
new file mode 100644
index 000000000..72d848d15
--- /dev/null
+++ b/res/xml/file_paths.xml
@@ -0,0 +1,3 @@
+<paths xmlns:android="https://schemas.android.com/apk/res/android">
+ <external-path name="bluetooth" path="/" />
+</paths>
diff --git a/src/com/android/bluetooth/Utils.java b/src/com/android/bluetooth/Utils.java
index 73a5ad14a..e87a6d9e3 100644
--- a/src/com/android/bluetooth/Utils.java
+++ b/src/com/android/bluetooth/Utils.java
@@ -292,14 +292,7 @@ final public class Utils {
return true;
}
// Enforce location permission for apps targeting M and later versions
- boolean enforceLocationPermission = true;
- try {
- enforceLocationPermission = context.getPackageManager().getApplicationInfo(
- callingPackage, 0).targetSdkVersion >= Build.VERSION_CODES.M;
- } catch (PackageManager.NameNotFoundException e) {
- // In case of exception, enforce permission anyway
- }
- if (enforceLocationPermission) {
+ if (isMApp(context, callingPackage)) {
throw new SecurityException("Need ACCESS_COARSE_LOCATION or "
+ "ACCESS_FINE_LOCATION permission to get scan results");
} else {
@@ -321,6 +314,20 @@ final public class Utils {
android.Manifest.permission.PEERS_MAC_ADDRESS) == PackageManager.PERMISSION_GRANTED;
}
+ public static boolean isLegacyForegroundApp(Context context, String pkgName) {
+ return !isMApp(context, pkgName) && isForegroundApp(context, pkgName);
+ }
+
+ private static boolean isMApp(Context context, String pkgName) {
+ try {
+ return context.getPackageManager().getApplicationInfo(pkgName, 0)
+ .targetSdkVersion >= Build.VERSION_CODES.M;
+ } catch (PackageManager.NameNotFoundException e) {
+ // In case of exception, assume M app
+ }
+ return true;
+ }
+
/**
* Return true if the specified package name is a foreground app.
*
diff --git a/src/com/android/bluetooth/gatt/GattService.java b/src/com/android/bluetooth/gatt/GattService.java
index 076822216..1ee6ace06 100644
--- a/src/com/android/bluetooth/gatt/GattService.java
+++ b/src/com/android/bluetooth/gatt/GattService.java
@@ -674,12 +674,13 @@ public class GattService extends ProfileService {
private boolean hasScanResultPermission(final ScanClient client) {
final boolean requiresLocationEnabled =
getResources().getBoolean(R.bool.strict_location_check);
- final boolean locationEnabled = Settings.Secure.getInt(getContentResolver(),
+ final boolean locationEnabledSetting = Settings.Secure.getInt(getContentResolver(),
Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF)
!= Settings.Secure.LOCATION_MODE_OFF;
-
- return (client.hasPeersMacAddressPermission ||
- (client.hasLocationPermission && (!requiresLocationEnabled || locationEnabled)));
+ final boolean locationEnabled = !requiresLocationEnabled || locationEnabledSetting
+ || client.legacyForegroundApp;
+ return (client.hasPeersMacAddressPermission
+ || (client.hasLocationPermission && locationEnabled));
}
// Check if a scan record matches a specific filters.
@@ -1411,12 +1412,12 @@ public class GattService extends ProfileService {
if (needsPrivilegedPermissionForScan(settings)) {
enforcePrivilegedPermission();
}
- boolean hasLocationPermission = Utils.checkCallerHasLocationPermission(this,
- mAppOps, callingPackage);
final ScanClient scanClient = new ScanClient(appIf, isServer, settings, filters, storages);
- scanClient.hasLocationPermission = hasLocationPermission;
+ scanClient.hasLocationPermission = Utils.checkCallerHasLocationPermission(this, mAppOps,
+ callingPackage);
scanClient.hasPeersMacAddressPermission = Utils.checkCallerHasPeersMacAddressPermission(
this);
+ scanClient.legacyForegroundApp = Utils.isLegacyForegroundApp(this, callingPackage);
mScanManager.startScan(scanClient);
}
diff --git a/src/com/android/bluetooth/gatt/ScanClient.java b/src/com/android/bluetooth/gatt/ScanClient.java
index d42df39d2..64d3e1ffc 100644
--- a/src/com/android/bluetooth/gatt/ScanClient.java
+++ b/src/com/android/bluetooth/gatt/ScanClient.java
@@ -40,6 +40,8 @@ import java.util.UUID;
boolean appDied;
boolean hasLocationPermission;
boolean hasPeersMacAddressPermission;
+ // Pre-M apps are allowed to get scan results even if location is disabled
+ boolean legacyForegroundApp;
private static final ScanSettings DEFAULT_SCAN_SETTINGS = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build();
diff --git a/src/com/android/bluetooth/hfp/HeadsetStateMachine.java b/src/com/android/bluetooth/hfp/HeadsetStateMachine.java
index 9b533c5fc..33c39d710 100644
--- a/src/com/android/bluetooth/hfp/HeadsetStateMachine.java
+++ b/src/com/android/bluetooth/hfp/HeadsetStateMachine.java
@@ -824,6 +824,11 @@ final class HeadsetStateMachine extends StateMachine {
private class Connected extends State {
@Override
public void enter() {
+ // Remove pending connection attempts that were deferred during the pending
+ // state. This is to prevent auto connect attempts from disconnecting
+ // devices that previously successfully connected.
+ // TODO: This needs to check for multiple HFP connections, once supported...
+ removeDeferredMessages(CONNECT);
Log.d(TAG, "Enter Connected: " + getCurrentMessage().what +
", size: " + mConnectedDevicesList.size());
// start phone state listener here so that the CIND response as part of SLC can be
@@ -3108,6 +3113,11 @@ final class HeadsetStateMachine extends StateMachine {
}
atResponseCodeNative(HeadsetHalConstants.AT_RESPONSE_OK,
0, getByteAddress(device));
+ removeMessages(DIALING_OUT_TIMEOUT);
+ } else if (callState.mCallState ==
+ HeadsetHalConstants.CALL_STATE_ACTIVE || callState.mCallState
+ == HeadsetHalConstants.CALL_STATE_IDLE) {
+ mDialingOut = false;
}
/* Set ActiveScoDevice to null when call ends */
@@ -3194,6 +3204,11 @@ final class HeadsetStateMachine extends StateMachine {
} else {
Log.e(TAG,"processNoiceReductionEvent: AudioParamNrec is null ");
}
+
+ if (mActiveScoDevice != null && mActiveScoDevice.equals(device)
+ && mAudioState == BluetoothHeadset.STATE_AUDIO_CONNECTED) {
+ setAudioParameters(device);
+ }
}
// 2 - WBS on
diff --git a/src/com/android/bluetooth/map/BluetoothMapContent.java b/src/com/android/bluetooth/map/BluetoothMapContent.java
index 1f622b4c2..cc35fc135 100644
--- a/src/com/android/bluetooth/map/BluetoothMapContent.java
+++ b/src/com/android/bluetooth/map/BluetoothMapContent.java
@@ -117,7 +117,7 @@ public class BluetoothMapContent {
// MAP specification states that the default value for parameter mask are
// the #REQUIRED attributes in the DTD, and not all enabled
public static final long PARAMETER_MASK_ALL_ENABLED = 0xFFFFFFFFL;
- public static final long PARAMETER_MASK_DEFAULT = 0x5E3L;
+ public static final long PARAMETER_MASK_DEFAULT = 0x5EBL;
public static final long CONVO_PARAMETER_MASK_ALL_ENABLED = 0xFFFFFFFFL;
public static final long CONVO_PARAMETER_MASK_DEFAULT =
CONVO_PARAM_MASK_CONVO_NAME |
diff --git a/src/com/android/bluetooth/map/BluetoothMapContentObserver.java b/src/com/android/bluetooth/map/BluetoothMapContentObserver.java
index 83a6fbbbb..ef8d14dbc 100644
--- a/src/com/android/bluetooth/map/BluetoothMapContentObserver.java
+++ b/src/com/android/bluetooth/map/BluetoothMapContentObserver.java
@@ -3081,6 +3081,9 @@ public class BluetoothMapContentObserver {
if(status != 0/*0 is success*/) {
msgInfo.statusDelivered = status;
if(D) Log.d(TAG, "msgInfo.statusDelivered = " + status);
+ Sms.moveMessageToFolder(mContext, msgInfo.uri, Sms.MESSAGE_TYPE_FAILED, 0);
+ } else {
+ Sms.moveMessageToFolder(mContext, msgInfo.uri, Sms.MESSAGE_TYPE_SENT, 0);
}
}
if (msgInfo.partsDelivered == msgInfo.parts) {
diff --git a/src/com/android/bluetooth/opp/BluetoothOppUtility.java b/src/com/android/bluetooth/opp/BluetoothOppUtility.java
index a9e167cdc..f3774a034 100644
--- a/src/com/android/bluetooth/opp/BluetoothOppUtility.java
+++ b/src/com/android/bluetooth/opp/BluetoothOppUtility.java
@@ -55,6 +55,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
+import android.support.v4.content.FileProvider;
/**
* This class has some utilities for Opp application;
*/
@@ -202,7 +203,8 @@ public class BluetoothOppUtility {
return;
}
- Uri path = Uri.parse(fileName);
+ Uri path = FileProvider.getUriForFile(context,
+ "com.google.android.bluetooth.fileprovider", f);
// If there is no scheme, then it must be a file
if (path.getScheme() == null) {
path = Uri.fromFile(new File(fileName));
@@ -212,7 +214,22 @@ public class BluetoothOppUtility {
CustomIntent activityIntent = new CustomIntent(Intent.ACTION_VIEW);
activityIntent.setDataAndTypeAndNormalize(path, mimetype);
+ List<ResolveInfo> resInfoList = context.getPackageManager()
+ .queryIntentActivities(activityIntent,
+ PackageManager.MATCH_DEFAULT_ONLY);
+
+ // Grant permissions for any app that can handle a file to access it
+ for (ResolveInfo resolveInfo : resInfoList) {
+ String packageName = resolveInfo.activityInfo.packageName;
+ context.grantUriPermission(packageName, path,
+ Intent.FLAG_GRANT_WRITE_URI_PERMISSION |
+ Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ }
+
activityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ activityIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ activityIntent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+
try {
if (V) Log.d(TAG, "ACTION_VIEW intent sent out: " + path + " / " + mimetype);
context.startActivity(activityIntent);
diff --git a/src/com/android/bluetooth/pbap/BluetoothPbapVcardManager.java b/src/com/android/bluetooth/pbap/BluetoothPbapVcardManager.java
index 1c624627a..f195ce54d 100644
--- a/src/com/android/bluetooth/pbap/BluetoothPbapVcardManager.java
+++ b/src/com/android/bluetooth/pbap/BluetoothPbapVcardManager.java
@@ -860,7 +860,6 @@ public class BluetoothPbapVcardManager {
HandlerForStringBuffer buffer = null;
try {
- VCardFilter vcardfilter = new VCardFilter(ignorefilter ? null : filter);
composer = new BluetoothPbapCallLogComposer(mContext);
buffer = new HandlerForStringBuffer(op, ownerVCard);
if (!composer.init(CallLog.Calls.CONTENT_URI, selection, null, CALLLOG_SORT_ORDER)
@@ -875,9 +874,6 @@ public class BluetoothPbapVcardManager {
break;
}
String vcard = composer.createOneEntry(vcardType21);
- if (vcard != null) {
- vcard = vcardfilter.apply(vcard, vcardType21);
- }
if (vcard == null) {
Log.e(TAG,
"Failed to read a contact. Error reason: " + composer.getErrorReason());
diff --git a/src/com/android/bluetooth/sap/SapMessage.java b/src/com/android/bluetooth/sap/SapMessage.java
index f64370481..11b41bc15 100644
--- a/src/com/android/bluetooth/sap/SapMessage.java
+++ b/src/com/android/bluetooth/sap/SapMessage.java
@@ -631,8 +631,10 @@ public class SapMessage {
/* Payload */
os.write(value);
- for(int i = 0, n = 4 - (value.length % 4) ; i < n; i++) {
- os.write(0); // Padding
+ if (value.length % 4 != 0) {
+ for (int i = 0; i < (4 - (value.length % 4)); ++i) {
+ os.write(0); // Padding
+ }
}
}