summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/ApnEditor.java
diff options
context:
space:
mode:
authorJiehua.Dai <Jiehua.Dai@sonyericsson.com>2010-05-12 08:37:52 +0200
committerJohan Redestig <johan.redestig@sonyericsson.com>2010-07-14 11:10:00 +0200
commit20108e2ed6d7fdc889d85702f7cbda906db141cf (patch)
tree1fc25ca672df1a43ab510c36ea00b2a1c2451e6e /src/com/android/settings/ApnEditor.java
parent05c2b96f42605c6cd9c05b0f5e1b2635c9e4adfe (diff)
downloadpackages_apps_Settings-20108e2ed6d7fdc889d85702f7cbda906db141cf.zip
packages_apps_Settings-20108e2ed6d7fdc889d85702f7cbda906db141cf.tar.gz
packages_apps_Settings-20108e2ed6d7fdc889d85702f7cbda906db141cf.tar.bz2
Fix window leak problems in settings.
There were window leak in the settings application. These leak happens when an AlertDialog displays, rotate the phone, then it would cause window leak. Change-Id: I914897bf657933efea72eeea66076dc288098420
Diffstat (limited to 'src/com/android/settings/ApnEditor.java')
-rw-r--r--src/com/android/settings/ApnEditor.java71
1 files changed, 52 insertions, 19 deletions
diff --git a/src/com/android/settings/ApnEditor.java b/src/com/android/settings/ApnEditor.java
index e097854..72dba1a 100644
--- a/src/com/android/settings/ApnEditor.java
+++ b/src/com/android/settings/ApnEditor.java
@@ -17,6 +17,7 @@
package com.android.settings;
import android.app.AlertDialog;
+import android.app.Dialog;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Intent;
@@ -51,6 +52,7 @@ public class ApnEditor extends PreferenceActivity
private static final int MENU_DELETE = Menu.FIRST;
private static final int MENU_SAVE = Menu.FIRST + 1;
private static final int MENU_CANCEL = Menu.FIRST + 2;
+ private static final int ERROR_DIALOG_ID = 0;
private static String sNotSet;
private EditTextPreference mName;
@@ -347,19 +349,8 @@ public class ApnEditor extends PreferenceActivity
String mcc = checkNotSet(mMcc.getText());
String mnc = checkNotSet(mMnc.getText());
- String errorMsg = null;
- if (name.length() < 1) {
- errorMsg = mRes.getString(R.string.error_name_empty);
- } else if (apn.length() < 1) {
- errorMsg = mRes.getString(R.string.error_apn_empty);
- } else if (mcc.length() != 3) {
- errorMsg = mRes.getString(R.string.error_mcc_not3);
- } else if ((mnc.length() & 0xFFFE) != 2) {
- errorMsg = mRes.getString(R.string.error_mnc_not23);
- }
-
- if (errorMsg != null && !force) {
- showErrorMessage(errorMsg);
+ if (getErrorMsg() != null && !force) {
+ showDialog(ERROR_DIALOG_ID);
return false;
}
@@ -414,12 +405,54 @@ public class ApnEditor extends PreferenceActivity
return true;
}
- private void showErrorMessage(String message) {
- new AlertDialog.Builder(this)
- .setTitle(R.string.error_title)
- .setMessage(message)
- .setPositiveButton(android.R.string.ok, null)
- .show();
+ private String getErrorMsg() {
+ String errorMsg = null;
+
+ String name = checkNotSet(mName.getText());
+ String apn = checkNotSet(mApn.getText());
+ String mcc = checkNotSet(mMcc.getText());
+ String mnc = checkNotSet(mMnc.getText());
+
+ if (name.length() < 1) {
+ errorMsg = mRes.getString(R.string.error_name_empty);
+ } else if (apn.length() < 1) {
+ errorMsg = mRes.getString(R.string.error_apn_empty);
+ } else if (mcc.length() != 3) {
+ errorMsg = mRes.getString(R.string.error_mcc_not3);
+ } else if ((mnc.length() & 0xFFFE) != 2) {
+ errorMsg = mRes.getString(R.string.error_mnc_not23);
+ }
+
+ return errorMsg;
+ }
+
+ @Override
+ protected Dialog onCreateDialog(int id) {
+
+ if (id == ERROR_DIALOG_ID) {
+ String msg = getErrorMsg();
+
+ return new AlertDialog.Builder(this)
+ .setTitle(R.string.error_title)
+ .setPositiveButton(android.R.string.ok, null)
+ .setMessage(msg)
+ .create();
+ }
+
+ return super.onCreateDialog(id);
+ }
+
+ @Override
+ protected void onPrepareDialog(int id, Dialog dialog) {
+ super.onPrepareDialog(id, dialog);
+
+ if (id == ERROR_DIALOG_ID) {
+ String msg = getErrorMsg();
+
+ if (msg != null) {
+ ((AlertDialog)dialog).setMessage(msg);
+ }
+ }
}
private void deleteApn() {