diff options
author | Sridhar Gujje <sgujje@codeaurora.org> | 2015-12-11 11:02:48 +0530 |
---|---|---|
committer | Sridhar Gujje <sgujje@codeaurora.org> | 2015-12-11 18:18:00 +0530 |
commit | f7699509e9872be06414128eba660f743b4e7da9 (patch) | |
tree | 11da59f4923ee0abfe770aa16d329cd8e313ee86 | |
parent | 42d1bd9840daa58962e172fafffc4f0c5b512656 (diff) | |
parent | b211df6fcbd7dcd055354b75afc2e68ea49a36d9 (diff) | |
download | android_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-x | Android.mk | 2 | ||||
-rw-r--r-- | AndroidManifest.xml | 9 | ||||
-rw-r--r-- | res/values-fa/test_strings.xml | 2 | ||||
-rw-r--r-- | res/values-nl/strings.xml | 12 | ||||
-rw-r--r-- | res/values-ro/strings.xml | 14 | ||||
-rw-r--r-- | res/xml/file_paths.xml | 3 | ||||
-rw-r--r-- | src/com/android/bluetooth/Utils.java | 23 | ||||
-rw-r--r-- | src/com/android/bluetooth/gatt/GattService.java | 15 | ||||
-rw-r--r-- | src/com/android/bluetooth/gatt/ScanClient.java | 2 | ||||
-rw-r--r-- | src/com/android/bluetooth/hfp/HeadsetStateMachine.java | 15 | ||||
-rw-r--r-- | src/com/android/bluetooth/map/BluetoothMapContent.java | 2 | ||||
-rw-r--r-- | src/com/android/bluetooth/map/BluetoothMapContentObserver.java | 3 | ||||
-rw-r--r-- | src/com/android/bluetooth/opp/BluetoothOppUtility.java | 19 | ||||
-rw-r--r-- | src/com/android/bluetooth/pbap/BluetoothPbapVcardManager.java | 4 | ||||
-rw-r--r-- | src/com/android/bluetooth/sap/SapMessage.java | 6 |
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 + } } } |