Merge change 6485 into donut

* changes:
  Cleanup Toast.java.
diff --git a/api/current.xml b/api/current.xml
index 78562f0..d97a0f4 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -2275,6 +2275,17 @@
  visibility="public"
 >
 </field>
+<field name="autoUrlDetect"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843404"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="background"
  type="int"
  transient="false"
@@ -3386,17 +3397,6 @@
  visibility="public"
 >
 </field>
-<field name="donut_resource_pad20"
- type="int"
- transient="false"
- volatile="false"
- value="16843404"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
 <field name="donut_resource_pad3"
  type="int"
  transient="false"
diff --git a/awt/Android.mk b/awt/Android.mk
index c7480f53a..213c6ce 100644
--- a/awt/Android.mk
+++ b/awt/Android.mk
@@ -28,4 +28,4 @@
 
 LOCAL_DX_FLAGS := --core-library
 
-include $(BUILD_JAVA_LIBRARY)
+#include $(BUILD_JAVA_LIBRARY)
diff --git a/core/java/android/app/SearchDialog.java b/core/java/android/app/SearchDialog.java
index fdb619a..2bcc9c3 100644
--- a/core/java/android/app/SearchDialog.java
+++ b/core/java/android/app/SearchDialog.java
@@ -777,7 +777,7 @@
         }
 
         public void afterTextChanged(Editable s) {
-            if (!mSearchAutoComplete.isPerformingCompletion()) {
+            if (mSearchable.autoUrlDetect() && !mSearchAutoComplete.isPerformingCompletion()) {
                 // The user changed the query, check if it is a URL and if so change the search
                 // button in the soft keyboard to the 'Go' button.
                 int options = (mSearchAutoComplete.getImeOptions() & (~EditorInfo.IME_MASK_ACTION));
@@ -987,17 +987,19 @@
                         && event.getAction() == KeyEvent.ACTION_UP) {
                     v.cancelLongPress();
 
-                    // If this is a url entered by the user and we displayed the 'Go' button which
-                    // the user clicked, launch the url instead of using it as a search query.
-                    if ((mSearchAutoCompleteImeOptions & EditorInfo.IME_MASK_ACTION)
-                            == EditorInfo.IME_ACTION_GO) {
-                        Uri uri = Uri.parse(fixUrl(mSearchAutoComplete.getText().toString()));
-                        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
-                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-                        launchIntent(intent);
-                    } else {
-                        // Launch as a regular search.
-                        launchQuerySearch();
+                    if (mSearchable.autoUrlDetect()) {
+                        // If this is a url entered by the user & we displayed the 'Go' button which
+                        // the user clicked, launch the url instead of using it as a search query.
+                        if ((mSearchAutoCompleteImeOptions & EditorInfo.IME_MASK_ACTION)
+                                == EditorInfo.IME_ACTION_GO) {
+                            Uri uri = Uri.parse(fixUrl(mSearchAutoComplete.getText().toString()));
+                            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
+                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                            launchIntent(intent);
+                        } else {
+                            // Launch as a regular search.
+                            launchQuerySearch();
+                        }
                     }
                     return true;
                 }
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 0d27e1e..aa583ac 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -1359,8 +1359,21 @@
             SCREEN_BRIGHTNESS,
             VIBRATE_ON,
             NOTIFICATIONS_USE_RING_VOLUME,
-            RINGTONE,
-            NOTIFICATION_SOUND,
+            MODE_RINGER,
+            MODE_RINGER_STREAMS_AFFECTED,
+            MUTE_STREAMS_AFFECTED,
+            VOLUME_VOICE,
+            VOLUME_SYSTEM,
+            VOLUME_RING,
+            VOLUME_MUSIC,
+            VOLUME_ALARM,
+            VOLUME_NOTIFICATION,
+            VOLUME_VOICE + APPEND_FOR_LAST_AUDIBLE,
+            VOLUME_SYSTEM + APPEND_FOR_LAST_AUDIBLE,
+            VOLUME_RING + APPEND_FOR_LAST_AUDIBLE,
+            VOLUME_MUSIC + APPEND_FOR_LAST_AUDIBLE,
+            VOLUME_ALARM + APPEND_FOR_LAST_AUDIBLE,
+            VOLUME_NOTIFICATION + APPEND_FOR_LAST_AUDIBLE,
             TEXT_AUTO_REPLACE,
             TEXT_AUTO_CAPS,
             TEXT_AUTO_PUNCTUATE,
@@ -2299,6 +2312,8 @@
          * @hide
          */
         public static final String[] SETTINGS_TO_BACKUP = {
+            ADB_ENABLED,
+            ALLOW_MOCK_LOCATION,
             INSTALL_NON_MARKET_APPS,
             PARENTAL_CONTROL_ENABLED,
             PARENTAL_CONTROL_REDIRECT_URL,
diff --git a/core/java/android/server/search/SearchableInfo.java b/core/java/android/server/search/SearchableInfo.java
index 8ef1f15..283555a 100644
--- a/core/java/android/server/search/SearchableInfo.java
+++ b/core/java/android/server/search/SearchableInfo.java
@@ -67,6 +67,7 @@
     private final int mSearchImeOptions;
     private final boolean mIncludeInGlobalSearch;
     private final boolean mQueryAfterZeroResults;
+    private final boolean mAutoUrlDetect;
     private final String mSettingsDescription;
     private final String mSuggestAuthority;
     private final String mSuggestPath;
@@ -288,6 +289,8 @@
                 com.android.internal.R.styleable.Searchable_includeInGlobalSearch, false);
         mQueryAfterZeroResults = a.getBoolean(
                 com.android.internal.R.styleable.Searchable_queryAfterZeroResults, false);
+        mAutoUrlDetect = a.getBoolean(
+                com.android.internal.R.styleable.Searchable_autoUrlDetect, false);
 
         mSettingsDescription = a.getString(
                 com.android.internal.R.styleable.Searchable_searchSettingsDescription);
@@ -667,6 +670,16 @@
     }
 
     /**
+     * Checks whether this searchable activity has auto URL detect turned on.
+     *
+     * @return The value of the <code>autoUrlDetect</code> attribute,
+     *         or <code>false</code> if the attribute is not set.
+     */
+    public boolean autoUrlDetect() {
+        return mAutoUrlDetect;
+    }
+
+    /**
      * Support for parcelable and aidl operations.
      */
     public static final Parcelable.Creator<SearchableInfo> CREATOR
@@ -698,6 +711,7 @@
         mSearchImeOptions = in.readInt();
         mIncludeInGlobalSearch = in.readInt() != 0;
         mQueryAfterZeroResults = in.readInt() != 0;
+        mAutoUrlDetect = in.readInt() != 0;
         
         mSettingsDescription = in.readString();
         mSuggestAuthority = in.readString();
@@ -735,6 +749,7 @@
         dest.writeInt(mSearchImeOptions);
         dest.writeInt(mIncludeInGlobalSearch ? 1 : 0);
         dest.writeInt(mQueryAfterZeroResults ? 1 : 0);
+        dest.writeInt(mAutoUrlDetect ? 1 : 0);
         
         dest.writeString(mSettingsDescription);
         dest.writeString(mSuggestAuthority);
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 6f2a5d3..fd78f83 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2888,6 +2888,14 @@
              attribute.</i> -->
         <attr name="searchSettingsDescription" format="string" />
 
+        <!-- If provided and <code>true</code>, URLs entered in the search dialog while searching
+             within this activity would be detected and treated as URLs (show a 'go' button in the
+             keyboard and invoke the browser directly when user launches the URL instead of passing
+             the URL to the activity). If set to <code>false</code> any URLs entered are treated as
+             normal query text.
+             The default value is <code>false</code>. <i>Optional attribute.</i>. -->
+        <attr name="autoUrlDetect" format="boolean" />
+
     </declare-styleable>
 
     <!-- In order to process special action keys during search, you must define them using
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 32c6937..871c651 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1125,6 +1125,7 @@
   <public type="attr" name="progressBarStyleLargeInverse" /> 
   <public type="attr" name="searchSettingsDescription" />
   <public type="attr" name="textColorPrimaryInverseDisableOnly" />
+  <public type="attr" name="autoUrlDetect" />
 
   <public-padding type="attr" name="donut_resource_pad" end="0x0101029f" />
 
diff --git a/graphics/java/android/graphics/drawable/ShapeDrawable.java b/graphics/java/android/graphics/drawable/ShapeDrawable.java
index d24194f..6677a35 100644
--- a/graphics/java/android/graphics/drawable/ShapeDrawable.java
+++ b/graphics/java/android/graphics/drawable/ShapeDrawable.java
@@ -278,10 +278,15 @@
         if (name.equals("padding")) {
             TypedArray a = r.obtainAttributes(attrs,
                     com.android.internal.R.styleable.ShapeDrawablePadding);
-            setPadding(a.getInt(com.android.internal.R.styleable.ShapeDrawablePadding_left, 0),
-                       a.getInt(com.android.internal.R.styleable.ShapeDrawablePadding_top, 0),
-                       a.getInt(com.android.internal.R.styleable.ShapeDrawablePadding_right, 0),
-                       a.getInt(com.android.internal.R.styleable.ShapeDrawablePadding_bottom, 0));
+            setPadding(
+                    a.getDimensionPixelOffset(
+                            com.android.internal.R.styleable.ShapeDrawablePadding_left, 0),
+                    a.getDimensionPixelOffset(
+                            com.android.internal.R.styleable.ShapeDrawablePadding_top, 0),
+                    a.getDimensionPixelOffset(
+                            com.android.internal.R.styleable.ShapeDrawablePadding_right, 0),
+                    a.getDimensionPixelOffset(
+                            com.android.internal.R.styleable.ShapeDrawablePadding_bottom, 0));
             a.recycle();
             return true;
         }
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index cfdf5e3..a65a417 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -1063,6 +1063,21 @@
         }
     }
 
+    /**
+     *  @hide
+     *  Reload audio settings. This method is called by Settings backup
+     *  agent when audio settings are restored and causes the AudioService
+     *  to read and apply restored settings.
+     */
+    public void reloadAudioSettings() {
+        IAudioService service = getService();
+        try {
+            service.reloadAudioSettings();
+        } catch (RemoteException e) {
+            Log.e(TAG, "Dead object in reloadAudioSettings"+e);
+        }
+    }
+
      /**
       * {@hide}
       */
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index 937baad..ee41021 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -508,14 +508,14 @@
     /** @see AudioManager#setRingerMode(int) */
     public void setRingerMode(int ringerMode) {
         if (ringerMode != mRingerMode) {
-            setRingerModeInt(ringerMode);
+            setRingerModeInt(ringerMode, true);
 
             // Send sticky broadcast
             broadcastRingerMode();
         }
     }
 
-    private void setRingerModeInt(int ringerMode) {
+    private void setRingerModeInt(int ringerMode, boolean persist) {
         mRingerMode = ringerMode;
 
         // Adjust volumes via posting message
@@ -543,8 +543,10 @@
         }
         
         // Post a persist ringer mode msg
-        sendMsg(mAudioHandler, MSG_PERSIST_RINGER_MODE, SHARED_MSG,
-                SENDMSG_REPLACE, 0, 0, null, PERSIST_DELAY);
+        if (persist) {
+            sendMsg(mAudioHandler, MSG_PERSIST_RINGER_MODE, SHARED_MSG,
+                    SENDMSG_REPLACE, 0, 0, null, PERSIST_DELAY);
+        }
     }
 
     /** @see AudioManager#shouldVibrate(int) */
@@ -914,6 +916,46 @@
         }
     }
 
+    /** @see AudioManager#reloadAudioSettings() */
+    public void reloadAudioSettings() {
+        // restore ringer mode, ringer mode affected streams, mute affected streams and vibrate settings
+        readPersistedSettings();
+
+        // restore volume settings
+        int numStreamTypes = AudioSystem.getNumStreamTypes();
+        for (int streamType = 0; streamType < numStreamTypes; streamType++) {
+            VolumeStreamState streamState = mStreamStates[streamType];
+
+            // there is no volume setting for STREAM_BLUETOOTH_SCO
+            if (streamType != AudioSystem.STREAM_BLUETOOTH_SCO) {
+                String settingName = System.VOLUME_SETTINGS[streamType];
+                String lastAudibleSettingName = settingName + System.APPEND_FOR_LAST_AUDIBLE;
+
+                streamState.mIndex = streamState.getValidIndex(Settings.System.getInt(mContentResolver,
+                        settingName,
+                        AudioManager.DEFAULT_STREAM_VOLUME[streamType]));
+                streamState.mLastAudibleIndex = streamState.getValidIndex(Settings.System.getInt(mContentResolver,
+                        lastAudibleSettingName,
+                        streamState.mIndex > 0 ? streamState.mIndex : AudioManager.DEFAULT_STREAM_VOLUME[streamType]));
+            }
+            // unmute stream that whas muted but is not affect by mute anymore
+            if (streamState.muteCount() != 0 && !isStreamAffectedByMute(streamType)) {
+                int size = streamState.mDeathHandlers.size();
+                for (int i = 0; i < size; i++) {
+                    streamState.mDeathHandlers.get(i).mMuteCount = 1;
+                    streamState.mDeathHandlers.get(i).mute(false);
+                }
+            }
+            // apply stream volume
+            if (streamState.muteCount() == 0) {
+                AudioSystem.setVolume(streamType, streamState.mVolumes[streamState.mIndex]);
+            }
+        }
+
+        // apply new ringer mode
+        setRingerModeInt(getRingerMode(), false);
+    }
+
     ///////////////////////////////////////////////////////////////////////////
     // Internal methods
     ///////////////////////////////////////////////////////////////////////////
@@ -1426,7 +1468,7 @@
              * Ensure all stream types that should be affected by ringer mode
              * are in the proper state.
              */
-            setRingerModeInt(getRingerMode());
+            setRingerModeInt(getRingerMode(), false);
         }
         
     }
diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl
index f5e242d..9a8264f 100644
--- a/media/java/android/media/IAudioService.aidl
+++ b/media/java/android/media/IAudioService.aidl
@@ -71,4 +71,5 @@
   
     oneway void unloadSoundEffects();
 
+    oneway void reloadAudioSettings();
 }
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
index f9e98ef..b6bc8a5 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
@@ -50,6 +50,7 @@
     private static final String KEY_SYSTEM = "system";
     private static final String KEY_SECURE = "secure";
     private static final String KEY_SYNC = "sync_providers";
+    private static final String KEY_LOCALE = "locale";
 
     private static String[] sortedSystemKeys = null;
     private static String[] sortedSecureKeys = null;
@@ -85,6 +86,7 @@
         byte[] systemSettingsData = getSystemSettings();
         byte[] secureSettingsData = getSecureSettings();
         byte[] syncProviders = mSettingsHelper.getSyncProviders();
+        byte[] locale = mSettingsHelper.getLocaleData();
         
         data.writeEntityHeader(KEY_SYSTEM, systemSettingsData.length);
         data.writeEntityData(systemSettingsData, systemSettingsData.length);
@@ -94,7 +96,10 @@
 
         data.writeEntityHeader(KEY_SYNC, syncProviders.length);
         data.writeEntityData(syncProviders, syncProviders.length);
-        
+
+        data.writeEntityHeader(KEY_LOCALE, locale.length);
+        data.writeEntityData(locale, locale.length);
+
         backupFile(FILE_WIFI_SUPPLICANT, data);
     }
 
@@ -107,14 +112,20 @@
 
         while (data.readNextHeader()) {
             final String key = data.getKey();
+            final int size = data.getDataSize();
             if (KEY_SYSTEM.equals(key)) {
                 restoreSettings(data, Settings.System.CONTENT_URI);
             } else if (KEY_SECURE.equals(key)) {
                 restoreSettings(data, Settings.Secure.CONTENT_URI);
-            } else if (FILE_WIFI_SUPPLICANT.equals(key)) {
-                restoreFile(FILE_WIFI_SUPPLICANT, data);
+// TODO: Re-enable WIFI restore when we figure out a solution for the permissions
+//            } else if (FILE_WIFI_SUPPLICANT.equals(key)) {
+//                restoreFile(FILE_WIFI_SUPPLICANT, data);
             } else if (KEY_SYNC.equals(key)) {
                 mSettingsHelper.setSyncProviders(data);
+            } else if (KEY_LOCALE.equals(key)) {
+                byte[] localeData = new byte[size];
+                data.readEntityData(localeData, 0, size);
+                mSettingsHelper.setLocaleData(localeData);
             } else {
                 data.skipEntityData();
             }
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
index 5f3fba8..2c5775a 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
@@ -16,16 +16,22 @@
 
 package com.android.providers.settings;
 
+import java.util.Locale;
+
+import android.app.ActivityManagerNative;
+import android.app.IActivityManager;
 import android.backup.BackupDataInput;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.IContentService;
+import android.content.res.Configuration;
 import android.location.LocationManager;
 import android.media.AudioManager;
 import android.os.IHardwareService;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.provider.Settings;
+import android.text.TextUtils;
 import android.util.Log;
 
 public class SettingsHelper {
@@ -110,7 +116,6 @@
         }
     }
 
-    /* TODO: Get a list of all sync providers and save/restore the settings */
     byte[] getSyncProviders() {
         byte[] sync = new byte[1 + PROVIDERS.length];
         try {
@@ -141,4 +146,53 @@
             Log.w(TAG, "Unable to read sync settings");
         }
     }
+
+    byte[] getLocaleData() {
+        Configuration conf = mContext.getResources().getConfiguration();
+        final Locale loc = conf.locale;
+        String localeString = loc.getLanguage();
+        String country = loc.getCountry();
+        if (!TextUtils.isEmpty(country)) {
+            localeString += "_" + country;
+        }
+        return localeString.getBytes();
+    }
+
+    /**
+     * Sets the locale specified. Input data is the equivalent of "ll_cc".getBytes(), where
+     * "ll" is the language code and "cc" is the country code.
+     * @param data the locale string in bytes.
+     */
+    void setLocaleData(byte[] data) {
+        // Check if locale was set by the user:
+        Configuration conf = mContext.getResources().getConfiguration();
+        Locale loc = conf.locale;
+        if (conf.userSetLocale) return; // Don't change if user set it in the SetupWizard
+
+        final String[] availableLocales = mContext.getAssets().getLocales();
+        String localeCode = new String(data);
+        String language = new String(data, 0, 2);
+        String country = data.length > 4 ? new String(data, 3, 2) : "";
+        loc = null;
+        for (int i = 0; i < availableLocales.length; i++) {
+            if (availableLocales[i].equals(localeCode)) {
+                loc = new Locale(language, country);
+                break;
+            }
+        }
+        if (loc == null) return; // Couldn't find the saved locale in this version of the software
+
+        try {
+            IActivityManager am = ActivityManagerNative.getDefault();
+            Configuration config = am.getConfiguration();
+            config.locale = loc;
+            // indicate this isn't some passing default - the user wants this remembered
+            config.userSetLocale = true;
+
+            am.updateConfiguration(config);
+        } catch (RemoteException e) {
+            // Intentionally left blank
+        }
+
+    }
 }
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index a21bf32..2abf8b3 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -18,7 +18,7 @@
 
 import java.io.FileNotFoundException;
 
-import android.backup.IBackupManager;
+import android.backup.BackupManager;
 import android.content.ContentProvider;
 import android.content.ContentUris;
 import android.content.ContentValues;
@@ -46,6 +46,8 @@
     private static final String TABLE_OLD_FAVORITES = "old_favorites";
 
     private DatabaseHelper mOpenHelper;
+    
+    private BackupManager mBackupManager;
 
     /**
      * Decode a content URL into the table, projection, and arguments
@@ -140,16 +142,7 @@
         }
 
         // Inform the backup manager about a data change
-        IBackupManager ibm = IBackupManager.Stub.asInterface(
-                ServiceManager.getService(Context.BACKUP_SERVICE));
-        if (ibm != null) {
-            try {
-                ibm.dataChanged(getContext().getPackageName());
-            } catch (Exception e) {
-                // Try again later
-            }
-        }
-
+        mBackupManager.dataChanged();
         // Now send the notification through the content framework.
 
         String notify = uri.getQueryParameter("notify");
@@ -189,6 +182,7 @@
     @Override
     public boolean onCreate() {
         mOpenHelper = new DatabaseHelper(getContext());
+        mBackupManager = new BackupManager(getContext());
         return true;
     }
 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/NeighboringCellInfoTest.java b/tests/AndroidTests/src/com/android/unit_tests/NeighboringCellInfoTest.java
new file mode 100644
index 0000000..2bdf1dd
--- /dev/null
+++ b/tests/AndroidTests/src/com/android/unit_tests/NeighboringCellInfoTest.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2009 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.unit_tests;
+
+import android.test.AndroidTestCase;
+import android.telephony.NeighboringCellInfo;
+import android.test. suitebuilder.annotation.SmallTest;
+
+public class NeighboringCellInfoTest extends AndroidTestCase {
+    @SmallTest
+    public void testConstructor() {
+        NeighboringCellInfo empty = new NeighboringCellInfo();
+        assertEquals(NeighboringCellInfo.UNKNOWN_RSSI, empty.getRssi());
+        assertEquals(NeighboringCellInfo.UNKNOWN_CID, empty.getCid());
+
+        int rssi = 31;
+        int cid = 0xffffffff;
+        NeighboringCellInfo max = new NeighboringCellInfo(rssi, cid);
+        assertEquals(rssi, max.getRssi());
+        assertEquals(cid, max.getCid());
+    }
+
+    @SmallTest
+    public void testGetAndSet() {
+        int rssi = 16;
+        int cid = 0x12345678;
+        NeighboringCellInfo nc = new NeighboringCellInfo();
+        nc.setRssi(rssi);
+        nc.setCid(cid);
+        assertEquals(rssi, nc.getRssi());
+        assertEquals(cid, nc.getCid());
+    }
+
+    @SmallTest
+    public void testToString() {
+        NeighboringCellInfo empty = new NeighboringCellInfo();
+        assertEquals("[/ at /]", empty.toString());
+
+        NeighboringCellInfo nc = new NeighboringCellInfo(16, 0x12345678);
+        assertEquals("[12345678 at 16]", nc.toString());
+    }
+}