Changes to Bluetooth Service structure.
Changes to make Bluetooth Service part of the system_service. These changes may be temporary. Changes to update to the new disable API. Change-Id: If89dba17e6e6c6daa53c37684221763a2da076e9 Conflicts: services/java/com/android/server/pm/PackageManagerService.java
This commit is contained in:
committed by
Matthew Xie
parent
3419618736
commit
1abb1cb3a8
@@ -33,6 +33,7 @@ static struct {
|
||||
{ AID_MEDIA, "media.audio_policy" },
|
||||
{ AID_DRM, "drm.drmManager" },
|
||||
{ AID_NFC, "nfc" },
|
||||
{ AID_BLUETOOTH, "bluetooth" },
|
||||
{ AID_RADIO, "radio.phone" },
|
||||
{ AID_RADIO, "radio.sms" },
|
||||
{ AID_RADIO, "radio.phonesubinfo" },
|
||||
|
||||
@@ -18,6 +18,7 @@ package android.app;
|
||||
|
||||
import com.android.internal.policy.PolicyManager;
|
||||
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ComponentName;
|
||||
import android.content.ContentResolver;
|
||||
@@ -294,6 +295,11 @@ class ContextImpl extends Context {
|
||||
return new MediaRouter(ctx);
|
||||
}});
|
||||
|
||||
registerService(BLUETOOTH_SERVICE, new ServiceFetcher() {
|
||||
public Object createService(ContextImpl ctx) {
|
||||
return BluetoothAdapter.getDefaultAdapter();
|
||||
}});
|
||||
|
||||
registerService(CLIPBOARD_SERVICE, new ServiceFetcher() {
|
||||
public Object createService(ContextImpl ctx) {
|
||||
return new ClipboardManager(ctx.getOuterContext(),
|
||||
|
||||
@@ -1905,6 +1905,15 @@ public abstract class Context {
|
||||
*/
|
||||
public static final String NFC_SERVICE = "nfc";
|
||||
|
||||
/**
|
||||
* Use with {@link #getSystemService} to retrieve a
|
||||
* {@link android.bluetooth.BluetoothAdapter} for using Bluetooth.
|
||||
*
|
||||
* @see #getSystemService
|
||||
* @hide
|
||||
*/
|
||||
public static final String BLUETOOTH_SERVICE = "bluetooth";
|
||||
|
||||
/**
|
||||
* Use with {@link #getSystemService} to retrieve a
|
||||
* {@link android.net.sip.SipManager} for accessing the SIP related service.
|
||||
|
||||
@@ -115,6 +115,12 @@ public class Process {
|
||||
*/
|
||||
public static final int NFC_UID = 1027;
|
||||
|
||||
/**
|
||||
* Defines the UID/GID for the Bluetooth service process.
|
||||
* @hide
|
||||
*/
|
||||
public static final int BLUETOOTH_UID = 1002;
|
||||
|
||||
/**
|
||||
* Defines the GID for the group that allows write access to the internal media storage.
|
||||
* @hide
|
||||
|
||||
@@ -173,6 +173,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
private static final int RADIO_UID = Process.PHONE_UID;
|
||||
private static final int LOG_UID = Process.LOG_UID;
|
||||
private static final int NFC_UID = Process.NFC_UID;
|
||||
private static final int BLUETOOTH_UID = Process.BLUETOOTH_UID;
|
||||
|
||||
private static final boolean GET_CERTIFICATES = true;
|
||||
|
||||
@@ -903,6 +904,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
mSettings.addSharedUserLPw("android.uid.phone", RADIO_UID, ApplicationInfo.FLAG_SYSTEM);
|
||||
mSettings.addSharedUserLPw("android.uid.log", LOG_UID, ApplicationInfo.FLAG_SYSTEM);
|
||||
mSettings.addSharedUserLPw("android.uid.nfc", NFC_UID, ApplicationInfo.FLAG_SYSTEM);
|
||||
mSettings.addSharedUserLPw("android.uid.bluetooth", BLUETOOTH_UID, ApplicationInfo.FLAG_SYSTEM);
|
||||
|
||||
String separateProcesses = SystemProperties.get("debug.separate_processes");
|
||||
if (separateProcesses != null && separateProcesses.length() > 0) {
|
||||
|
||||
@@ -324,9 +324,68 @@ public final class ShutdownThread extends Thread {
|
||||
} catch (RemoteException e) {
|
||||
}
|
||||
}
|
||||
|
||||
final ITelephony phone =
|
||||
ITelephony.Stub.asInterface(ServiceManager.checkService("phone"));
|
||||
final IBluetooth bluetooth =
|
||||
IBluetooth.Stub.asInterface(ServiceManager.checkService(
|
||||
BluetoothAdapter.BLUETOOTH_SERVICE));
|
||||
|
||||
// Shutdown radios.
|
||||
shutdownRadios(MAX_RADIO_WAIT_TIME);
|
||||
final IMountService mount =
|
||||
IMountService.Stub.asInterface(
|
||||
ServiceManager.checkService("mount"));
|
||||
|
||||
try {
|
||||
bluetoothOff = bluetooth == null ||
|
||||
bluetooth.getState() == BluetoothAdapter.STATE_OFF;
|
||||
if (!bluetoothOff) {
|
||||
Log.w(TAG, "Disabling Bluetooth...");
|
||||
//TODO(BT)
|
||||
bluetooth.disable(); // disable but don't persist new state
|
||||
}
|
||||
} catch (RemoteException ex) {
|
||||
Log.e(TAG, "RemoteException during bluetooth shutdown", ex);
|
||||
bluetoothOff = true;
|
||||
}
|
||||
|
||||
try {
|
||||
radioOff = phone == null || !phone.isRadioOn();
|
||||
if (!radioOff) {
|
||||
Log.w(TAG, "Turning off radio...");
|
||||
phone.setRadio(false);
|
||||
}
|
||||
} catch (RemoteException ex) {
|
||||
Log.e(TAG, "RemoteException during radio shutdown", ex);
|
||||
radioOff = true;
|
||||
}
|
||||
|
||||
Log.i(TAG, "Waiting for Bluetooth and Radio...");
|
||||
|
||||
// Wait a max of 32 seconds for clean shutdown
|
||||
for (int i = 0; i < MAX_NUM_PHONE_STATE_READS; i++) {
|
||||
if (!bluetoothOff) {
|
||||
try {
|
||||
bluetoothOff =
|
||||
bluetooth.getState() == BluetoothAdapter.STATE_OFF;
|
||||
} catch (RemoteException ex) {
|
||||
Log.e(TAG, "RemoteException during bluetooth shutdown", ex);
|
||||
bluetoothOff = true;
|
||||
}
|
||||
}
|
||||
if (!radioOff) {
|
||||
try {
|
||||
radioOff = !phone.isRadioOn();
|
||||
} catch (RemoteException ex) {
|
||||
Log.e(TAG, "RemoteException during radio shutdown", ex);
|
||||
radioOff = true;
|
||||
}
|
||||
}
|
||||
if (radioOff && bluetoothOff) {
|
||||
Log.i(TAG, "Radio and Bluetooth shutdown complete.");
|
||||
break;
|
||||
}
|
||||
SystemClock.sleep(PHONE_STATE_POLL_SLEEP_MSEC);
|
||||
}
|
||||
|
||||
// Shutdown MountService to ensure media is in a safe state
|
||||
IMountShutdownObserver observer = new IMountShutdownObserver.Stub() {
|
||||
|
||||
Reference in New Issue
Block a user