From f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dc Mon Sep 17 00:00:00 2001 From: Joe Onorato Date: Thu, 21 Oct 2010 11:09:02 -0400 Subject: [PATCH] Refactor SystemUI so the status bar isn't a Service of its own. There is now one SystemUIService, which starts the status bar service. Pretty soon there will be other things running in here too. This way we don't need to have each of them started by something individually. This also moves the choice between tablet and phone status bar into SystemUI.apk, which seems like a much better place for it. Change-Id: Ib69ef2f43d648764f8dbb52008f5d036a1ee07d9 --- core/res/res/values-xlarge/config.xml | 3 - core/res/res/values/config.xml | 3 - packages/SystemUI/AndroidManifest.xml | 14 +- .../SystemUI/res/layout-xlarge/status_bar.xml | 2 - .../res/layout-xlarge/status_bar_center.xml | 1 - .../SystemUI/res/values-xlarge/config.xml | 5 + packages/SystemUI/res/values/config.xml | 4 + .../src/com/android/systemui/SystemUI.java | 31 ++++ .../com/android/systemui/SystemUIService.java | 105 +++++++++++++ .../statusbar/PhoneStatusBarService.java | 59 +++---- .../systemui/statusbar/StatusBarService.java | 16 +- .../tablet/TabletStatusBarService.java | 147 +++++++++++------- .../server/StatusBarManagerService.java | 16 -- .../java/com/android/server/SystemServer.java | 17 +- 14 files changed, 280 insertions(+), 143 deletions(-) create mode 100644 packages/SystemUI/src/com/android/systemui/SystemUI.java create mode 100644 packages/SystemUI/src/com/android/systemui/SystemUIService.java diff --git a/core/res/res/values-xlarge/config.xml b/core/res/res/values-xlarge/config.xml index 813651e9e7018..9504d0437853b 100644 --- a/core/res/res/values-xlarge/config.xml +++ b/core/res/res/values-xlarge/config.xml @@ -20,9 +20,6 @@ - - com.android.systemui/com.android.systemui.statusbar.tablet.TabletStatusBarService false diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index de2b9300cbe8c..a5c9a4063c0d1 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -20,9 +20,6 @@ - - com.android.systemui/com.android.systemui.statusbar.PhoneStatusBarService true + 1 + + + com.android.systemui.statusbar.tablet.TabletStatusBarService + diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index ac00c69ca4253..4570d8e3827d4 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -31,5 +31,9 @@ --> 0 + + com.android.systemui.statusbar.PhoneStatusBarService + diff --git a/packages/SystemUI/src/com/android/systemui/SystemUI.java b/packages/SystemUI/src/com/android/systemui/SystemUI.java new file mode 100644 index 0000000000000..53fe2ff911906 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/SystemUI.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui; + +import java.io.FileDescriptor; +import java.io.PrintWriter; + +import android.content.Context; + +public abstract class SystemUI { + public Context mContext; + + public abstract void start(); + + public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { + } +} diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIService.java b/packages/SystemUI/src/com/android/systemui/SystemUIService.java new file mode 100644 index 0000000000000..dda86d21f823f --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/SystemUIService.java @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui; + +import java.io.FileDescriptor; +import java.io.PrintWriter; + +import android.app.Service; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.os.Binder; +import android.os.IBinder; +import android.util.Slog; + +public class SystemUIService extends Service { + static final String TAG = "SystemUIService"; + + /** + * The class names of the stuff to start. + */ + final Object[] SERVICES = new Object[] { + R.string.config_statusBarComponent, + }; + + /** + * Hold a reference on the stuff we start. + */ + SystemUI[] mServices; + + private Class chooseClass(Object o) { + if (o instanceof Integer) { + final String cl = getString((Integer)o); + try { + return getClassLoader().loadClass(cl); + } catch (ClassNotFoundException ex) { + throw new RuntimeException(ex); + } + } else if (o instanceof Class) { + return (Class)o; + } else { + throw new RuntimeException("Unknown system ui service: " + o); + } + } + + @Override + public void onCreate() { + final int N = SERVICES.length; + mServices = new SystemUI[N]; + for (int i=0; i