19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.server.am;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.app.IServiceConnection;
20dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackbornimport android.app.PendingIntent;
210c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackbornimport android.content.Context;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.PrintWriter;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Description of a single binding to a service.
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
28be4e6aaa0252dd7da28b7aa85beba982538efa46Dianne Hackbornfinal class ConnectionRecord {
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    final AppBindRecord binding;    // The application/service binding.
30daa0d5c9296515fe05cae65926a66dee609f382aDianne Hackborn    final ActivityRecord activity;  // If non-null, the owning activity.
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    final IServiceConnection conn;  // The client connection.
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    final int flags;                // Binding options.
33dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn    final int clientLabel;          // String resource labeling this client.
34dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn    final PendingIntent clientIntent; // How to launch the client.
35f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn    String stringName;              // Caching of toString.
36130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn    boolean serviceDead;            // Well is it?
37f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void dump(PrintWriter pw, String prefix) {
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        pw.println(prefix + "binding=" + binding);
401d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn        if (activity != null) {
411d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn            pw.println(prefix + "activity=" + activity);
421d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn        }
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        pw.println(prefix + "conn=" + conn.asBinder()
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + " flags=0x" + Integer.toHexString(flags));
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4701e4cfc47d0a2c7e7ab383d2fb23224ec52c0301Dianne Hackborn    ConnectionRecord(AppBindRecord _binding, ActivityRecord _activity,
48dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn               IServiceConnection _conn, int _flags,
49dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn               int _clientLabel, PendingIntent _clientIntent) {
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        binding = _binding;
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        activity = _activity;
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        conn = _conn;
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        flags = _flags;
54dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        clientLabel = _clientLabel;
55dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        clientIntent = _clientIntent;
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
59f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn        if (stringName != null) {
60f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn            return stringName;
61f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn        }
62f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn        StringBuilder sb = new StringBuilder(128);
63f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn        sb.append("ConnectionRecord{");
64f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn        sb.append(Integer.toHexString(System.identityHashCode(this)));
65b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn        sb.append(" u");
66b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn        sb.append(binding.client.userId);
67f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn        sb.append(' ');
680c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        if ((flags&Context.BIND_AUTO_CREATE) != 0) {
690c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn            sb.append("CR ");
700c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        }
710c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        if ((flags&Context.BIND_DEBUG_UNBIND) != 0) {
720c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn            sb.append("DBG ");
730c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        }
740c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        if ((flags&Context.BIND_NOT_FOREGROUND) != 0) {
75b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn            sb.append("!FG ");
760c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        }
7783b40f69bef4ba17bb63ac30d52f661a12d5b4f4Dianne Hackborn        if ((flags&Context.BIND_IMPORTANT_BACKGROUND) != 0) {
7883b40f69bef4ba17bb63ac30d52f661a12d5b4f4Dianne Hackborn            sb.append("IMPB ");
7983b40f69bef4ba17bb63ac30d52f661a12d5b4f4Dianne Hackborn        }
800c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        if ((flags&Context.BIND_ABOVE_CLIENT) != 0) {
810c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn            sb.append("ABCLT ");
820c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        }
830c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        if ((flags&Context.BIND_ALLOW_OOM_MANAGEMENT) != 0) {
840c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn            sb.append("OOM ");
850c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        }
860c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        if ((flags&Context.BIND_WAIVE_PRIORITY) != 0) {
870c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn            sb.append("WPRI ");
880c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        }
890c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        if ((flags&Context.BIND_IMPORTANT) != 0) {
900c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn            sb.append("IMP ");
910c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        }
920c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        if ((flags&Context.BIND_ADJUST_WITH_ACTIVITY) != 0) {
93d69e4c1460017062e7c36be55801cb434ad19d97Dianne Hackborn            sb.append("WACT ");
94d69e4c1460017062e7c36be55801cb434ad19d97Dianne Hackborn        }
95d69e4c1460017062e7c36be55801cb434ad19d97Dianne Hackborn        if ((flags&Context.BIND_FOREGROUND_SERVICE_WHILE_AWAKE) != 0) {
96d69e4c1460017062e7c36be55801cb434ad19d97Dianne Hackborn            sb.append("FGSA ");
97d69e4c1460017062e7c36be55801cb434ad19d97Dianne Hackborn        }
98d69e4c1460017062e7c36be55801cb434ad19d97Dianne Hackborn        if ((flags&Context.BIND_FOREGROUND_SERVICE) != 0) {
99d69e4c1460017062e7c36be55801cb434ad19d97Dianne Hackborn            sb.append("FGS ");
100d69e4c1460017062e7c36be55801cb434ad19d97Dianne Hackborn        }
101d69e4c1460017062e7c36be55801cb434ad19d97Dianne Hackborn        if ((flags&Context.BIND_TREAT_LIKE_ACTIVITY) != 0) {
102d69e4c1460017062e7c36be55801cb434ad19d97Dianne Hackborn            sb.append("LACT ");
1030c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        }
104b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn        if ((flags&Context.BIND_VISIBLE) != 0) {
105b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn            sb.append("VIS ");
1060c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        }
1078585d688f85fa6350fa3509bf4709c60caa33f92Dianne Hackborn        if ((flags&Context.BIND_SHOWING_UI) != 0) {
1088585d688f85fa6350fa3509bf4709c60caa33f92Dianne Hackborn            sb.append("UI ");
1098585d688f85fa6350fa3509bf4709c60caa33f92Dianne Hackborn        }
1108585d688f85fa6350fa3509bf4709c60caa33f92Dianne Hackborn        if ((flags&Context.BIND_NOT_VISIBLE) != 0) {
1118585d688f85fa6350fa3509bf4709c60caa33f92Dianne Hackborn            sb.append("!VIS ");
1128585d688f85fa6350fa3509bf4709c60caa33f92Dianne Hackborn        }
113130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn        if (serviceDead) {
114130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn            sb.append("DEAD ");
115130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn        }
116f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn        sb.append(binding.service.shortName);
117f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn        sb.append(":@");
118f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn        sb.append(Integer.toHexString(System.identityHashCode(conn.asBinder())));
119f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn        sb.append('}');
120f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn        return stringName = sb.toString();
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
123