From 1c9131c91f27c8258dfad0a92cee105275f5422a Mon Sep 17 00:00:00 2001 From: Dan Egnor Date: Sat, 13 Feb 2010 10:38:55 -0800 Subject: [PATCH] Remove all traces of the old checkin service (and its associated parental control interfaces) from the framework. --- Android.mk | 2 - core/java/android/os/ICheckinService.aidl | 35 --- .../android/os/IParentalControlCallback.aidl | 27 -- core/java/android/provider/Checkin.java | 269 ------------------ core/java/android/provider/Settings.java | 3 + .../com/android/internal/os/RuntimeInit.java | 1 - .../google/android/net/ParentalControl.java | 73 ----- .../android/net/ParentalControlState.aidl | 18 -- .../android/net/ParentalControlState.java | 56 ---- .../android/net/ParentalControlTest.java | 57 ---- .../server/FallbackCheckinService.java | 48 ---- .../java/com/android/server/SystemServer.java | 13 - 12 files changed, 3 insertions(+), 599 deletions(-) delete mode 100644 core/java/android/os/ICheckinService.aidl delete mode 100644 core/java/android/os/IParentalControlCallback.aidl delete mode 100644 core/java/android/provider/Checkin.java delete mode 100644 core/java/com/google/android/net/ParentalControl.java delete mode 100644 core/java/com/google/android/net/ParentalControlState.aidl delete mode 100644 core/java/com/google/android/net/ParentalControlState.java delete mode 100644 core/tests/coretests/src/com/google/android/net/ParentalControlTest.java delete mode 100644 services/java/com/android/server/FallbackCheckinService.java diff --git a/Android.mk b/Android.mk index 0911712f871b3..a48ef45ac3128 100644 --- a/Android.mk +++ b/Android.mk @@ -116,13 +116,11 @@ LOCAL_SRC_FILES += \ core/java/android/hardware/ISensorService.aidl \ core/java/android/net/IConnectivityManager.aidl \ core/java/android/net/INetworkManagementEventObserver.aidl \ - core/java/android/os/ICheckinService.aidl \ core/java/android/os/IMessenger.aidl \ core/java/android/os/storage/IMountService.aidl \ core/java/android/os/storage/IMountServiceListener.aidl \ core/java/android/os/INetworkManagementService.aidl \ core/java/android/os/INetStatService.aidl \ - core/java/android/os/IParentalControlCallback.aidl \ core/java/android/os/IPermissionController.aidl \ core/java/android/os/IPowerManager.aidl \ core/java/android/os/IRemoteCallback.aidl \ diff --git a/core/java/android/os/ICheckinService.aidl b/core/java/android/os/ICheckinService.aidl deleted file mode 100644 index 37af496a76207..0000000000000 --- a/core/java/android/os/ICheckinService.aidl +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2007 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 android.os; - -import android.os.IParentalControlCallback; - -/** - * System private API for direct access to the checkin service. - * Users should use the content provider instead. - * - * @see android.provider.Checkin - * {@hide} - */ -interface ICheckinService { - /** - * Determine if the device is under parental control. Return null if - * we are unable to check the parental control status. - */ - void getParentalControlState(IParentalControlCallback p, - String requestingApp); -} diff --git a/core/java/android/os/IParentalControlCallback.aidl b/core/java/android/os/IParentalControlCallback.aidl deleted file mode 100644 index 2f1a563c20666..0000000000000 --- a/core/java/android/os/IParentalControlCallback.aidl +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2008 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 android.os; - -import com.google.android.net.ParentalControlState; - -/** - * This callback interface is used to deliver the parental control state to the calling application. - * {@hide} - */ -oneway interface IParentalControlCallback { - void onResult(in ParentalControlState state); -} diff --git a/core/java/android/provider/Checkin.java b/core/java/android/provider/Checkin.java deleted file mode 100644 index 75936a1fb9e2f..0000000000000 --- a/core/java/android/provider/Checkin.java +++ /dev/null @@ -1,269 +0,0 @@ -/* - * Copyright (C) 2006 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 android.provider; - -import org.apache.commons.codec.binary.Base64; - -import android.content.ContentResolver; -import android.content.ContentValues; -import android.database.SQLException; -import android.net.Uri; -import android.os.SystemClock; -import android.util.Log; - -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; - -/** - * Contract class for the checkin provider, used to store events and - * statistics that will be uploaded to a checkin server eventually. - * Describes the exposed database schema, and offers methods to add - * events and statistics to be uploaded. - * - * TODO: Move this to vendor/google when we have a home for it. - * - * @hide - */ -public final class Checkin { - public static final String AUTHORITY = "android.server.checkin"; - - /** - * The events table is a log of important timestamped occurrences. - * Each event has a type tag and an optional string value. - * If too many events are added before they can be reported, the - * content provider will erase older events to limit the table size. - */ - public interface Events extends BaseColumns { - public static final String TABLE_NAME = "events"; - public static final Uri CONTENT_URI = - Uri.parse("content://" + AUTHORITY + "/" + TABLE_NAME); - - public static final String TAG = "tag"; // TEXT - public static final String VALUE = "value"; // TEXT - public static final String DATE = "date"; // INTEGER - - /** Valid tag values. Extend as necessary for your needs. */ - public enum Tag { - APANIC_CONSOLE, - APANIC_THREADS, - AUTOTEST_FAILURE, - AUTOTEST_SEQUENCE_BEGIN, - AUTOTEST_SUITE_BEGIN, - AUTOTEST_TCPDUMP_BEGIN, - AUTOTEST_TCPDUMP_DATA, - AUTOTEST_TCPDUMP_END, - AUTOTEST_TEST_BEGIN, - AUTOTEST_TEST_FAILURE, - AUTOTEST_TEST_SUCCESS, - BROWSER_BUG_REPORT, - CARRIER_BUG_REPORT, - CHECKIN_FAILURE, - CHECKIN_SUCCESS, - FOTA_BEGIN, - FOTA_FAILURE, - FOTA_INSTALL, - FOTA_PROMPT, - FOTA_PROMPT_ACCEPT, - FOTA_PROMPT_REJECT, - FOTA_PROMPT_SKIPPED, - GSERVICES_ERROR, - GSERVICES_UPDATE, - LOGIN_SERVICE_ACCOUNT_TRIED, - LOGIN_SERVICE_ACCOUNT_SAVED, - LOGIN_SERVICE_AUTHENTICATE, - LOGIN_SERVICE_CAPTCHA_ANSWERED, - LOGIN_SERVICE_CAPTCHA_SHOWN, - LOGIN_SERVICE_PASSWORD_ENTERED, - LOGIN_SERVICE_SWITCH_GOOGLE_MAIL, - NETWORK_DOWN, - NETWORK_UP, - PHONE_UI, - RADIO_BUG_REPORT, - SETUP_COMPLETED, - SETUP_INITIATED, - SETUP_IO_ERROR, - SETUP_NETWORK_ERROR, - SETUP_REQUIRED_CAPTCHA, - SETUP_RETRIES_EXHAUSTED, - SETUP_SERVER_ERROR, - SETUP_SERVER_TIMEOUT, - SETUP_NO_DATA_NETWORK, - SYSTEM_BOOT, - SYSTEM_LAST_KMSG, - SYSTEM_RECOVERY_LOG, - SYSTEM_RESTART, - SYSTEM_SERVICE_LOOPING, - SYSTEM_TOMBSTONE, - TEST, - BATTERY_DISCHARGE_INFO, - MARKET_DOWNLOAD, - MARKET_INSTALL, - MARKET_REMOVE, - MARKET_REFUND, - MARKET_UNINSTALL, - } - } - - /** - * The stats table is a list of counter values indexed by a tag name. - * Each statistic has a count and sum fields, so it can track averages. - * When multiple statistics are inserted with the same tag, the count - * and sum fields are added together into a single entry in the database. - */ - public interface Stats extends BaseColumns { - public static final String TABLE_NAME = "stats"; - public static final Uri CONTENT_URI = - Uri.parse("content://" + AUTHORITY + "/" + TABLE_NAME); - - public static final String TAG = "tag"; // TEXT UNIQUE - public static final String COUNT = "count"; // INTEGER - public static final String SUM = "sum"; // REAL - - /** Valid tag values. Extend as necessary for your needs. */ - public enum Tag { - BROWSER_SNAP_CENTER, - BROWSER_TEXT_SIZE_CHANGE, - BROWSER_ZOOM_OVERVIEW, - - CRASHES_REPORTED, - CRASHES_TRUNCATED, - ELAPSED_REALTIME_SEC, - ELAPSED_UPTIME_SEC, - HTTP_REQUEST, - HTTP_REUSED, - HTTP_STATUS, - PHONE_GSM_REGISTERED, - PHONE_GPRS_ATTEMPTED, - PHONE_GPRS_CONNECTED, - PHONE_RADIO_RESETS, - TEST, - NETWORK_RX_MOBILE, - NETWORK_TX_MOBILE, - PHONE_CDMA_REGISTERED, - PHONE_CDMA_DATA_ATTEMPTED, - PHONE_CDMA_DATA_CONNECTED, - } - } - - /** - * The properties table is a set of tagged values sent with every checkin. - * Unlike statistics or events, they are not cleared after being uploaded. - * Multiple properties inserted with the same tag overwrite each other. - */ - public interface Properties extends BaseColumns { - public static final String TABLE_NAME = "properties"; - public static final Uri CONTENT_URI = - Uri.parse("content://" + AUTHORITY + "/" + TABLE_NAME); - - public static final String TAG = "tag"; // TEXT UNIQUE - public static final String VALUE = "value"; // TEXT - - /** Valid tag values, to be extended as necessary. */ - public enum Tag { - DESIRED_BUILD, - MARKET_CHECKIN, - } - } - - /** - * The crashes table is a log of crash reports, kept separate from the - * general event log because crashes are large, important, and bursty. - * Like the events table, the crashes table is pruned on insert. - */ - public interface Crashes extends BaseColumns { - public static final String TABLE_NAME = "crashes"; - public static final Uri CONTENT_URI = - Uri.parse("content://" + AUTHORITY + "/" + TABLE_NAME); - - // TODO: one or both of these should be a file attachment, not a column - public static final String DATA = "data"; // TEXT - public static final String LOGS = "logs"; // TEXT - } - - /** - * Intents with this action cause a checkin attempt. Normally triggered by - * a periodic alarm, these may be sent directly to force immediate checkin. - */ - public interface TriggerIntent { - public static final String ACTION = "android.server.checkin.CHECKIN"; - - // The category is used for GTalk service messages - public static final String CATEGORY = "android.server.checkin.CHECKIN"; - - // If true indicates that the checkin should only transfer market related data - public static final String EXTRA_MARKET_ONLY = "market_only"; - } - - private static final String TAG = "Checkin"; - - /** - * Helper function to log an event to the database. - * - * @param resolver from {@link android.content.Context#getContentResolver} - * @param tag identifying the type of event being recorded - * @param value associated with event, if any - * @return URI of the event that was added - */ - static public Uri logEvent(ContentResolver resolver, - Events.Tag tag, String value) { - try { - // Don't specify the date column; the content provider will add that. - ContentValues values = new ContentValues(); - values.put(Events.TAG, tag.toString()); - if (value != null) values.put(Events.VALUE, value); - return resolver.insert(Events.CONTENT_URI, values); - } catch (IllegalArgumentException e) { // thrown when provider is unavailable. - Log.w(TAG, "Can't log event " + tag + ": " + e); - return null; - } catch (SQLException e) { - Log.e(TAG, "Can't log event " + tag, e); // Database errors are not fatal. - return null; - } - } - - /** - * Helper function to update statistics in the database. - * Note that multiple updates to the same tag will be combined. - * - * @param tag identifying what is being observed - * @param count of occurrences - * @param sum of some value over these occurrences - * @return URI of the statistic that was returned - */ - static public Uri updateStats(ContentResolver resolver, - Stats.Tag tag, int count, double sum) { - try { - ContentValues values = new ContentValues(); - values.put(Stats.TAG, tag.toString()); - if (count != 0) values.put(Stats.COUNT, count); - if (sum != 0.0) values.put(Stats.SUM, sum); - return resolver.insert(Stats.CONTENT_URI, values); - } catch (IllegalArgumentException e) { // thrown when provider is unavailable. - Log.w(TAG, "Can't update stat " + tag + ": " + e); - return null; - } catch (SQLException e) { - Log.e(TAG, "Can't update stat " + tag, e); // Database errors are not fatal. - return null; - } - } - - /** Minimum time to wait after a crash failure before trying again. */ - static private final long MIN_CRASH_FAILURE_RETRY = 10000; // 10 seconds - - /** {@link SystemClock#elapsedRealtime} of the last time a crash report failed. */ - static private volatile long sLastCrashFailureRealtime = -MIN_CRASH_FAILURE_RETRY; -} diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index e8897c71b7d3c..7b52f7f70d99e 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -2210,14 +2210,17 @@ public final class Settings { public static final String NETWORK_PREFERENCE = "network_preference"; /** + * No longer supported. */ public static final String PARENTAL_CONTROL_ENABLED = "parental_control_enabled"; /** + * No longer supported. */ public static final String PARENTAL_CONTROL_LAST_UPDATE = "parental_control_last_update"; /** + * No longer supported. */ public static final String PARENTAL_CONTROL_REDIRECT_URL = "parental_control_redirect_url"; diff --git a/core/java/com/android/internal/os/RuntimeInit.java b/core/java/com/android/internal/os/RuntimeInit.java index 57a28e6d47597..c134d884e21a2 100644 --- a/core/java/com/android/internal/os/RuntimeInit.java +++ b/core/java/com/android/internal/os/RuntimeInit.java @@ -22,7 +22,6 @@ import android.app.IActivityManager; import android.os.Build; import android.os.Debug; import android.os.IBinder; -import android.os.ICheckinService; import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; diff --git a/core/java/com/google/android/net/ParentalControl.java b/core/java/com/google/android/net/ParentalControl.java deleted file mode 100644 index 71a3958ef52fe..0000000000000 --- a/core/java/com/google/android/net/ParentalControl.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2008 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.google.android.net; - -import android.os.ICheckinService; -import android.os.IParentalControlCallback; -import android.os.RemoteException; -import android.os.ServiceManager; -import android.util.Log; - -public class ParentalControl { - /** - * Strings to identify your app. To enable parental control checking for - * new apps, please add it here, and configure GServices accordingly. - */ - public static final String VENDING = "vending"; - public static final String YOUTUBE = "youtube"; - - /** - * This interface is supplied to getParentalControlState and is callback upon with - * the state of parental control. - */ - public interface Callback { - /** - * This method will be called when the state of parental control is known. If state is - * null, then the state of parental control is unknown. - * @param state The state of parental control. - */ - void onResult(ParentalControlState state); - } - - private static class RemoteCallback extends IParentalControlCallback.Stub { - private Callback mCallback; - - public RemoteCallback(Callback callback) { - mCallback = callback; - } - - public void onResult(ParentalControlState state) { - if (mCallback != null) { - mCallback.onResult(state); - } - } - }; - - public static void getParentalControlState(Callback callback, - String requestingApp) { - ICheckinService service = - ICheckinService.Stub.asInterface(ServiceManager.getService("checkin")); - - RemoteCallback remoteCallback = new RemoteCallback(callback); - try { - service.getParentalControlState(remoteCallback, requestingApp); - } catch (RemoteException e) { - // This should never happen. - Log.e("ParentalControl", "Failed to talk to the checkin service."); - } - } -} diff --git a/core/java/com/google/android/net/ParentalControlState.aidl b/core/java/com/google/android/net/ParentalControlState.aidl deleted file mode 100644 index ed1326ad9d287..0000000000000 --- a/core/java/com/google/android/net/ParentalControlState.aidl +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Copyright (c) 2008, 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.google.android.net; -parcelable ParentalControlState; diff --git a/core/java/com/google/android/net/ParentalControlState.java b/core/java/com/google/android/net/ParentalControlState.java deleted file mode 100644 index 162a1f632b97c..0000000000000 --- a/core/java/com/google/android/net/ParentalControlState.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2008 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.google.android.net; - -import android.os.Parcel; -import android.os.Parcelable; - -public class ParentalControlState implements Parcelable { - public boolean isEnabled; - public String redirectUrl; - - /** - * Used to read a ParentalControlStatus from a Parcel. - */ - public static final Parcelable.Creator CREATOR = - new Parcelable.Creator() { - public ParentalControlState createFromParcel(Parcel source) { - ParentalControlState status = new ParentalControlState(); - status.isEnabled = (source.readInt() == 1); - status.redirectUrl = source.readString(); - return status; - } - - public ParentalControlState[] newArray(int size) { - return new ParentalControlState[size]; - } - }; - - public int describeContents() { - return 0; - } - - public void writeToParcel(Parcel dest, int flags) { - dest.writeInt(isEnabled ? 1 : 0); - dest.writeString(redirectUrl); - } - - @Override - public String toString() { - return isEnabled + ", " + redirectUrl; - } -}; diff --git a/core/tests/coretests/src/com/google/android/net/ParentalControlTest.java b/core/tests/coretests/src/com/google/android/net/ParentalControlTest.java deleted file mode 100644 index d8ffeab2892e4..0000000000000 --- a/core/tests/coretests/src/com/google/android/net/ParentalControlTest.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2008 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.google.android.net; - -import com.google.android.net.ParentalControl; -import com.google.android.net.ParentalControlState; - -import android.os.SystemClock; -import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.SmallTest; -import android.util.Log; - -import junit.framework.Assert; - -public class ParentalControlTest extends AndroidTestCase { - - private boolean mOnResultCalled = false; - - public class Callback implements ParentalControl.Callback { - public void onResult(ParentalControlState state) { - synchronized (ParentalControlTest.class) { - mOnResultCalled = true; - ParentalControlTest.class.notifyAll(); - } - } - } - - @SmallTest - public void testParentalControlCallback() { - synchronized (ParentalControlTest.class) { - ParentalControl.getParentalControlState(new Callback(), null); - try { - long start = SystemClock.uptimeMillis(); - ParentalControlTest.class.wait(20 * 1000); - long end = SystemClock.uptimeMillis(); - Log.d("AndroidTests", "ParentalControlTest callback took " + (end-start) + " ms."); - } catch (InterruptedException ex) { - } - } - - Assert.assertTrue(mOnResultCalled); - } -} diff --git a/services/java/com/android/server/FallbackCheckinService.java b/services/java/com/android/server/FallbackCheckinService.java deleted file mode 100644 index 195eb63aea427..0000000000000 --- a/services/java/com/android/server/FallbackCheckinService.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2008 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.server; - -import android.content.Context; -import android.content.pm.PackageManager; -import android.os.Binder; -import android.os.ICheckinService; -import android.os.IParentalControlCallback; -import android.os.RecoverySystem; -import android.util.Log; - -import java.io.IOException; - -import com.google.android.net.ParentalControlState; - -/** - * @hide - */ -public final class FallbackCheckinService extends ICheckinService.Stub { - static final String TAG = "FallbackCheckinService"; - final Context mContext; - - public FallbackCheckinService(Context context) { - mContext = context; - } - - public void getParentalControlState(IParentalControlCallback p, String requestingApp) - throws android.os.RemoteException { - ParentalControlState state = new ParentalControlState(); - state.isEnabled = false; - p.onResult(state); - } -} diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 6e9c21bde0b06..28b4b28b3a4f7 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -328,19 +328,6 @@ class ServerThread extends Thread { Log.e(TAG, "Failure starting DropBoxManagerService", e); } - try { - Log.i(TAG, "Checkin Service"); - Intent intent = new Intent().setComponent(new ComponentName( - "com.google.android.server.checkin", - "com.google.android.server.checkin.CheckinService")); - if (context.startService(intent) == null) { - Log.w(TAG, "Using fallback Checkin Service."); - ServiceManager.addService("checkin", new FallbackCheckinService(context)); - } - } catch (Throwable e) { - Log.e(TAG, "Failure starting Checkin Service", e); - } - try { Log.i(TAG, "Wallpaper Service"); wallpaper = new WallpaperManagerService(context);