Merge change I4d31288f into eclair

* changes:
  Fix for 1974140. Delete entry if not valid on hitting home.
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 6ddd679..fd53b95 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -105,7 +105,7 @@
 
         <activity android:name="ApnSettings" android:label="@string/apn_settings"
                   android:configChanges="orientation|keyboardHidden"
-                  android:launchMode="singleInstance" 
+                  android:launchMode="singleTask"
                 >
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b01608a..9ec2792 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2144,4 +2144,7 @@
     <string name="backup_erase_dialog_title">Settings backup</string>
     <!-- Dialog title for confirmation to erase backup data from server -->
     <string name="backup_erase_dialog_message">Are you sure you want to stop backing up your settings and erase all copies on Google servers?</string>
+
+    <!-- Name to assign to a Network Access Point that was saved without a name -->
+    <string name="untitled_apn">Untitled</string>
 </resources>
diff --git a/src/com/android/settings/ApnEditor.java b/src/com/android/settings/ApnEditor.java
index 0e7ab5e..62856d1 100644
--- a/src/com/android/settings/ApnEditor.java
+++ b/src/com/android/settings/ApnEditor.java
@@ -150,7 +150,7 @@
         if (action.equals(Intent.ACTION_EDIT)) {
             mUri = intent.getData();
         } else if (action.equals(Intent.ACTION_INSERT)) {
-            if (mFirstTime) {
+            if (mFirstTime || icicle.getInt(SAVED_POS) == 0) {
                 mUri = getContentResolver().insert(intent.getData(), new ContentValues());
             } else {
                 mUri = ContentUris.withAppendedId(Telephony.Carriers.CONTENT_URI,
@@ -185,12 +185,14 @@
     @Override
     public void onResume() {
         super.onResume();
-        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
+        getPreferenceScreen().getSharedPreferences()
+                .registerOnSharedPreferenceChangeListener(this);
     }
 
     @Override
     public void onPause() {
-        getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
+        getPreferenceScreen().getSharedPreferences()
+                .unregisterOnSharedPreferenceChangeListener(this);
         super.onPause();
     }
 
@@ -328,8 +330,9 @@
     @Override
     protected void onSaveInstanceState(Bundle icicle) {
         super.onSaveInstanceState(icicle);
-        validateAndSave(true);
-        icicle.putInt(SAVED_POS, mCursor.getInt(ID_INDEX));
+        if (validateAndSave(true)) {
+            icicle.putInt(SAVED_POS, mCursor.getInt(ID_INDEX));
+        }
     }
 
     /**
@@ -366,9 +369,18 @@
             return false;
         }
 
+        // If it's a new APN and a name or apn haven't been entered, then erase the entry
+        if (force && mNewApn && name.length() < 1 && apn.length() < 1) {
+            getContentResolver().delete(mUri, null, null);
+            return false;
+        }
+
         ContentValues values = new ContentValues();
 
-        values.put(Telephony.Carriers.NAME, name);
+        // Add a dummy name "Untitled", if the user exits the screen without adding a name but 
+        // entered other information worth keeping.
+        values.put(Telephony.Carriers.NAME,
+                name.length() < 1 ? getResources().getString(R.string.untitled_apn) : name);
         values.put(Telephony.Carriers.APN, apn);
         values.put(Telephony.Carriers.PROXY, checkNotSet(mProxy.getText()));
         values.put(Telephony.Carriers.PORT, checkNotSet(mPort.getText()));