1f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato/*
2f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato * Copyright (C) 2010 The Android Open Source Project
3f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato *
4f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato * Licensed under the Apache License, Version 2.0 (the "License");
5f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato * you may not use this file except in compliance with the License.
6f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato * You may obtain a copy of the License at
7f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato *
8f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato *      http://www.apache.org/licenses/LICENSE-2.0
9f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato *
10f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato * Unless required by applicable law or agreed to in writing, software
11f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato * distributed under the License is distributed on an "AS IS" BASIS,
12f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato * See the License for the specific language governing permissions and
14f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato * limitations under the License.
15f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato */
16f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato
17f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onoratopackage com.android.systemui;
18f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato
19f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onoratoimport android.app.Service;
20f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onoratoimport android.content.Intent;
210ad460b087abbd4b523a2e61ff27b0bf6fb5be92Daniel Sandlerimport android.content.res.Configuration;
22f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onoratoimport android.os.IBinder;
23cd686b5b6d4166b510df8e32138479a9559bc117John Spurlockimport android.util.Log;
24b0e49fc93c146d7ddc8e1f27ec67306a71168510John Spurlock
25b0e49fc93c146d7ddc8e1f27ec67306a71168510John Spurlockimport java.io.FileDescriptor;
26b0e49fc93c146d7ddc8e1f27ec67306a71168510John Spurlockimport java.io.PrintWriter;
27d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport java.util.HashMap;
28f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato
29f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onoratopublic class SystemUIService extends Service {
305c4541246c6a70f53552423dc35940386788bd5fJohn Spurlock    private static final String TAG = "SystemUIService";
31f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato
32f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato    /**
335c4541246c6a70f53552423dc35940386788bd5fJohn Spurlock     * The classes of the stuff to start.
34f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato     */
355c4541246c6a70f53552423dc35940386788bd5fJohn Spurlock    private final Class<?>[] SERVICES = new Class[] {
36d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock            com.android.systemui.recent.Recents.class,
375c4541246c6a70f53552423dc35940386788bd5fJohn Spurlock            com.android.systemui.statusbar.SystemBars.class,
383e309b2edc99cced870916a7a0fa0d27578cad6dJohn Spurlock            com.android.systemui.usb.StorageNotification.class,
3910523b4d0c99cec86647130426d470a1e02a44f6Joe Onorato            com.android.systemui.power.PowerUI.class,
40098d580cc2bb6c0891c756a4e5230c6c6b0d2376Jeff Sharkey            com.android.systemui.media.RingtonePlayer.class,
410087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright            com.android.systemui.settings.SettingsUI.class,
42f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato        };
43f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato
44f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato    /**
45f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato     * Hold a reference on the stuff we start.
46f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato     */
475c4541246c6a70f53552423dc35940386788bd5fJohn Spurlock    private final SystemUI[] mServices = new SystemUI[SERVICES.length];
48f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato
49f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato    @Override
50f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato    public void onCreate() {
51d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock        HashMap<Class<?>, Object> components = new HashMap<Class<?>, Object>();
52f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato        final int N = SERVICES.length;
53f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato        for (int i=0; i<N; i++) {
545c4541246c6a70f53552423dc35940386788bd5fJohn Spurlock            Class<?> cl = SERVICES[i];
55cd686b5b6d4166b510df8e32138479a9559bc117John Spurlock            Log.d(TAG, "loading: " + cl);
56f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato            try {
57f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato                mServices[i] = (SystemUI)cl.newInstance();
58f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato            } catch (IllegalAccessException ex) {
59f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato                throw new RuntimeException(ex);
60f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato            } catch (InstantiationException ex) {
61f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato                throw new RuntimeException(ex);
62f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato            }
63f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato            mServices[i].mContext = this;
64d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock            mServices[i].mComponents = components;
65cd686b5b6d4166b510df8e32138479a9559bc117John Spurlock            Log.d(TAG, "running: " + mServices[i]);
66f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato            mServices[i].start();
67f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato        }
68f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato    }
69f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato
700ad460b087abbd4b523a2e61ff27b0bf6fb5be92Daniel Sandler    @Override
710ad460b087abbd4b523a2e61ff27b0bf6fb5be92Daniel Sandler    public void onConfigurationChanged(Configuration newConfig) {
720ad460b087abbd4b523a2e61ff27b0bf6fb5be92Daniel Sandler        for (SystemUI ui: mServices) {
730ad460b087abbd4b523a2e61ff27b0bf6fb5be92Daniel Sandler            ui.onConfigurationChanged(newConfig);
740ad460b087abbd4b523a2e61ff27b0bf6fb5be92Daniel Sandler        }
750ad460b087abbd4b523a2e61ff27b0bf6fb5be92Daniel Sandler    }
760ad460b087abbd4b523a2e61ff27b0bf6fb5be92Daniel Sandler
77f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato    /**
78f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato     * Nobody binds to us.
79f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato     */
80f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato    @Override
81f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato    public IBinder onBind(Intent intent) {
82f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato        return null;
83f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato    }
84f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato
85f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato    @Override
86f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato    protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
8710523b4d0c99cec86647130426d470a1e02a44f6Joe Onorato        if (args == null || args.length == 0) {
8810523b4d0c99cec86647130426d470a1e02a44f6Joe Onorato            for (SystemUI ui: mServices) {
8910523b4d0c99cec86647130426d470a1e02a44f6Joe Onorato                pw.println("dumping service: " + ui.getClass().getName());
9010523b4d0c99cec86647130426d470a1e02a44f6Joe Onorato                ui.dump(fd, pw, args);
9110523b4d0c99cec86647130426d470a1e02a44f6Joe Onorato            }
9210523b4d0c99cec86647130426d470a1e02a44f6Joe Onorato        } else {
9310523b4d0c99cec86647130426d470a1e02a44f6Joe Onorato            String svc = args[0];
9410523b4d0c99cec86647130426d470a1e02a44f6Joe Onorato            for (SystemUI ui: mServices) {
9510523b4d0c99cec86647130426d470a1e02a44f6Joe Onorato                String name = ui.getClass().getName();
9610523b4d0c99cec86647130426d470a1e02a44f6Joe Onorato                if (name.endsWith(svc)) {
9710523b4d0c99cec86647130426d470a1e02a44f6Joe Onorato                    ui.dump(fd, pw, args);
9810523b4d0c99cec86647130426d470a1e02a44f6Joe Onorato                }
9910523b4d0c99cec86647130426d470a1e02a44f6Joe Onorato            }
100f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato        }
101f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato    }
102f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato}
103f3c3c4fd14cb4185ec6df5a4355aab8b9f4039dcJoe Onorato
104