blob: 87e3412d2a4bc58b34aae4760fc5f92787105e43 [file] [log] [blame]
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -07001/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.settings;
18
The Android Open Source Project8a156092009-03-02 22:54:43 -080019import android.app.Dialog;
20import android.app.ProgressDialog;
21import android.content.ContentResolver;
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -070022import android.content.ContentUris;
23import android.content.Context;
24import android.content.Intent;
25import android.database.Cursor;
26import android.net.Uri;
27import android.os.Bundle;
The Android Open Source Project8a156092009-03-02 22:54:43 -080028import android.os.Handler;
29import android.os.HandlerThread;
30import android.os.Looper;
31import android.os.Message;
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -070032import android.preference.Preference;
33import android.preference.PreferenceActivity;
The Android Open Source Project1feaa852009-02-10 15:44:05 -080034import android.preference.PreferenceGroup;
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -070035import android.preference.PreferenceScreen;
36import android.provider.Telephony;
The Android Open Source Projectabc48f82008-12-17 18:06:01 -080037import android.text.TextUtils;
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -070038import android.view.Menu;
39import android.view.MenuItem;
The Android Open Source Project8a156092009-03-02 22:54:43 -080040import android.widget.Toast;
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -070041
42public class ApnSettings extends PreferenceActivity {
43
44 public static final String EXTRA_POSITION = "position";
The Android Open Source Project8a156092009-03-02 22:54:43 -080045 public static final String RESTORE_CARRIERS_URI =
46 "content://telephony/carriers/restore";
47
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -070048 private static final int ID_INDEX = 0;
49 private static final int NAME_INDEX = 1;
50 private static final int APN_INDEX = 2;
51
52 private static final int MENU_NEW = Menu.FIRST;
The Android Open Source Project8a156092009-03-02 22:54:43 -080053 private static final int MENU_RESTORE = Menu.FIRST + 1;
54
55 private static final int EVENT_RESTORE_DEFAULTAPN_START = 1;
56 private static final int EVENT_RESTORE_DEFAULTAPN_COMPLETE = 2;
57
58 private static final int DIALOG_RESTORE_DEFAULTAPN = 1001;
59
60 private static final Uri DEFAULTAPN_URI = Uri.parse(RESTORE_CARRIERS_URI);
61
62 private static boolean mRestoreDefaultApnMode;
63
64 private RestoreApnUiHandler mRestoreApnUiHandler;
65 private RestoreApnProcessHandler mRestoreApnProcessHandler;
66
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -070067 private Cursor mCursor;
68
69 @Override
70 protected void onCreate(Bundle icicle) {
71 super.onCreate(icicle);
The Android Open Source Project8a156092009-03-02 22:54:43 -080072
73 addPreferencesFromResource(R.xml.apn_settings);
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -070074 }
75
76 @Override
77 protected void onResume() {
78 super.onResume();
The Android Open Source Project8a156092009-03-02 22:54:43 -080079
80 if (!mRestoreDefaultApnMode) {
81 fillList();
82 } else {
83 showDialog(DIALOG_RESTORE_DEFAULTAPN);
84 }
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -070085 }
The Android Open Source Project8a156092009-03-02 22:54:43 -080086
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -070087 private void fillList() {
88 mCursor = managedQuery(Telephony.Carriers.CONTENT_URI, new String[] {
89 "_id", "name", "apn"}, null, Telephony.Carriers.DEFAULT_SORT_ORDER);
90
The Android Open Source Project1feaa852009-02-10 15:44:05 -080091 PreferenceGroup apnList = (PreferenceGroup) findPreference("apn_list");
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -070092 apnList.removeAll();
The Android Open Source Project8a156092009-03-02 22:54:43 -080093
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -070094 mCursor.moveToFirst();
95 while (!mCursor.isAfterLast()) {
96 String name = mCursor.getString(NAME_INDEX);
97 String apn = mCursor.getString(APN_INDEX);
The Android Open Source Project8a156092009-03-02 22:54:43 -080098
The Android Open Source Projectabc48f82008-12-17 18:06:01 -080099 if (name != null && apn != null && TextUtils.getTrimmedLength(name) > 0
100 && TextUtils.getTrimmedLength(apn) > 0) {
101 Preference pref = new Preference((Context) this);
102 pref.setKey(mCursor.getString(ID_INDEX));
103 pref.setTitle(name);
104 pref.setSummary(apn);
105 pref.setPersistent(false);
106 apnList.addPreference(pref);
107 }
The Android Open Source Project8a156092009-03-02 22:54:43 -0800108
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -0700109 mCursor.moveToNext();
110 }
111 }
The Android Open Source Project8a156092009-03-02 22:54:43 -0800112
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -0700113 @Override
114 public boolean onCreateOptionsMenu(Menu menu) {
115 super.onCreateOptionsMenu(menu);
The Android Open Source Project8a156092009-03-02 22:54:43 -0800116 menu.add(0, MENU_NEW, 0,
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -0700117 getResources().getString(R.string.menu_new))
118 .setIcon(android.R.drawable.ic_menu_add);
The Android Open Source Project8a156092009-03-02 22:54:43 -0800119 menu.add(0, MENU_RESTORE, 0,
120 getResources().getString(R.string.menu_restore))
121 .setIcon(android.R.drawable.ic_menu_upload);
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -0700122 return true;
123 }
124
125 @Override
126 public boolean onOptionsItemSelected(MenuItem item) {
127 switch (item.getItemId()) {
128 case MENU_NEW:
129 addNewApn();
130 return true;
The Android Open Source Project8a156092009-03-02 22:54:43 -0800131
132 case MENU_RESTORE:
133 restoreDefaultApn();
134 return true;
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -0700135 }
136 return super.onOptionsItemSelected(item);
137 }
The Android Open Source Project8a156092009-03-02 22:54:43 -0800138
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -0700139 private void addNewApn() {
140 startActivity(new Intent(Intent.ACTION_INSERT, Telephony.Carriers.CONTENT_URI));
141 }
The Android Open Source Project8a156092009-03-02 22:54:43 -0800142
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -0700143 @Override
144 public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
145 int pos = Integer.parseInt(preference.getKey());
146 Uri url = ContentUris.withAppendedId(Telephony.Carriers.CONTENT_URI, pos);
147 startActivity(new Intent(Intent.ACTION_EDIT, url));
148 return true;
149 }
The Android Open Source Project8a156092009-03-02 22:54:43 -0800150
151 private boolean restoreDefaultApn() {
152 showDialog(DIALOG_RESTORE_DEFAULTAPN);
153 mRestoreDefaultApnMode = true;
154
155 if (mRestoreApnUiHandler == null) {
156 mRestoreApnUiHandler = new RestoreApnUiHandler();
157 }
158
159 if (mRestoreApnProcessHandler == null) {
160 HandlerThread restoreDefaultApnThread = new HandlerThread(
161 "Restore default APN Handler: Process Thread");
162 restoreDefaultApnThread.start();
163 mRestoreApnProcessHandler = new RestoreApnProcessHandler(
164 restoreDefaultApnThread.getLooper(), mRestoreApnUiHandler);
165 }
166
167 mRestoreApnProcessHandler
168 .sendEmptyMessage(EVENT_RESTORE_DEFAULTAPN_START);
169 return true;
170 }
171
172 private class RestoreApnUiHandler extends Handler {
173 @Override
174 public void handleMessage(Message msg) {
175 switch (msg.what) {
176 case EVENT_RESTORE_DEFAULTAPN_COMPLETE:
177 fillList();
178 getPreferenceScreen().setEnabled(true);
179 mRestoreDefaultApnMode = false;
180 dismissDialog(DIALOG_RESTORE_DEFAULTAPN);
181 Toast.makeText(
182 ApnSettings.this,
183 getResources().getString(
184 R.string.restore_default_apn_completed),
185 Toast.LENGTH_LONG).show();
186 break;
187 }
188 }
189 }
190
191 private class RestoreApnProcessHandler extends Handler {
192 private Handler mRestoreApnUiHandler;
193
194 public RestoreApnProcessHandler(Looper looper, Handler restoreApnUiHandler) {
195 super(looper);
196 this.mRestoreApnUiHandler = restoreApnUiHandler;
197 }
198
199 @Override
200 public void handleMessage(Message msg) {
201 switch (msg.what) {
202 case EVENT_RESTORE_DEFAULTAPN_START:
203 ContentResolver resolver = getContentResolver();
204 resolver.delete(DEFAULTAPN_URI, null, null);
205 mRestoreApnUiHandler
206 .sendEmptyMessage(EVENT_RESTORE_DEFAULTAPN_COMPLETE);
207 break;
208 }
209 }
210 }
211
212 @Override
213 protected Dialog onCreateDialog(int id) {
214 if (id == DIALOG_RESTORE_DEFAULTAPN) {
215 ProgressDialog dialog = new ProgressDialog(this);
216 dialog.setMessage(getResources().getString(R.string.restore_default_apn));
217 dialog.setCancelable(false);
218 return dialog;
219 }
220 return null;
221 }
222
223 @Override
224 protected void onPrepareDialog(int id, Dialog dialog) {
225 if (id == DIALOG_RESTORE_DEFAULTAPN) {
226 getPreferenceScreen().setEnabled(false);
227 }
228 }
The Android Open Source Projectde2d9f52008-10-21 07:00:00 -0700229}