diff --git a/AndroidManifest.xml b/AndroidManifest.xml index b4841dc254d..7b1962d8a3f 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -692,17 +692,6 @@ android:value="true" /> - - - - - - - - diff --git a/res/xml/device_info_settings.xml b/res/xml/device_info_settings.xml index 2c47c40705e..45eda60eb83 100644 --- a/res/xml/device_info_settings.xml +++ b/res/xml/device_info_settings.xml @@ -80,12 +80,6 @@ - - - - diff --git a/src/com/android/settings/SettingsLicenseActivity.java b/src/com/android/settings/SettingsLicenseActivity.java index 3d66b777302..52b48bb499d 100644 --- a/src/com/android/settings/SettingsLicenseActivity.java +++ b/src/com/android/settings/SettingsLicenseActivity.java @@ -16,205 +16,64 @@ package com.android.settings; +import android.app.Activity; +import android.content.ActivityNotFoundException; +import android.content.Intent; +import android.net.Uri; import android.os.Bundle; -import android.os.Handler; -import android.os.Message; import android.os.SystemProperties; import android.text.TextUtils; import android.util.Log; -import android.webkit.WebView; -import android.webkit.WebViewClient; import android.widget.Toast; -import android.app.Activity; -import android.app.AlertDialog; -import android.app.ProgressDialog; -import android.content.DialogInterface; -import android.content.DialogInterface.OnDismissListener; -import android.content.res.Configuration; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.zip.GZIPInputStream; +import java.io.File; /** * The "dialog" that shows from "License" in the Settings app. */ public class SettingsLicenseActivity extends Activity { - private static final String TAG = "SettingsLicenseActivity"; - private static final boolean LOGV = false || false; private static final String DEFAULT_LICENSE_PATH = "/system/etc/NOTICE.html.gz"; private static final String PROPERTY_LICENSE_PATH = "ro.config.license_path"; - private Handler mHandler; - private WebView mWebView; - private ProgressDialog mSpinnerDlg; - private AlertDialog mTextDlg; - - private class LicenseFileLoader implements Runnable { - - private static final String INNER_TAG = "SettingsLicenseActivity.LicenseFileLoader"; - public static final int STATUS_OK = 0; - public static final int STATUS_NOT_FOUND = 1; - public static final int STATUS_READ_ERROR = 2; - public static final int STATUS_EMPTY_FILE = 3; - - private String mFileName; - private Handler mHandler; - - public LicenseFileLoader(String fileName, Handler handler) { - mFileName = fileName; - mHandler = handler; - } - - public void run() { - - int status = STATUS_OK; - - InputStreamReader inputReader = null; - StringBuilder data = new StringBuilder(2048); - try { - char[] tmp = new char[2048]; - int numRead; - if (mFileName.endsWith(".gz")) { - inputReader = new InputStreamReader( - new GZIPInputStream(new FileInputStream(mFileName))); - } else { - inputReader = new FileReader(mFileName); - } - - while ((numRead = inputReader.read(tmp)) >= 0) { - data.append(tmp, 0, numRead); - } - } catch (FileNotFoundException e) { - Log.e(INNER_TAG, "License HTML file not found at " + mFileName, e); - status = STATUS_NOT_FOUND; - } catch (IOException e) { - Log.e(INNER_TAG, "Error reading license HTML file at " + mFileName, e); - status = STATUS_READ_ERROR; - } finally { - try { - if (inputReader != null) { - inputReader.close(); - } - } catch (IOException e) { - } - } - - if ((status == STATUS_OK) && TextUtils.isEmpty(data)) { - Log.e(INNER_TAG, "License HTML is empty (from " + mFileName + ")"); - status = STATUS_EMPTY_FILE; - } - - // Tell the UI thread that we are finished. - Message msg = mHandler.obtainMessage(status, null); - if (status == STATUS_OK) { - msg.obj = data.toString(); - } - mHandler.sendMessage(msg); - } - } - - public SettingsLicenseActivity() { - super(); - mHandler = null; - mWebView = null; - mSpinnerDlg = null; - mTextDlg = null; - } - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - String fileName = SystemProperties.get(PROPERTY_LICENSE_PATH, DEFAULT_LICENSE_PATH); - if (TextUtils.isEmpty(fileName)) { - Log.e(TAG, "The system property for the license file is empty."); + final String path = SystemProperties.get(PROPERTY_LICENSE_PATH, DEFAULT_LICENSE_PATH); + if (TextUtils.isEmpty(path)) { + Log.e(TAG, "The system property for the license file is empty"); showErrorAndFinish(); return; } - // The activity does not have any view itself, - // so set it invisible to avoid displaying the title text in the background. - setVisible(false); - - mWebView = new WebView(this); - - mHandler = new Handler() { - - @Override - public void handleMessage(Message msg) { - super.handleMessage(msg); - - if (msg.what == LicenseFileLoader.STATUS_OK) { - String text = (String) msg.obj; - showPageOfText(text); - } else { - showErrorAndFinish(); - } - } - }; - - CharSequence title = getText(R.string.settings_license_activity_title); - CharSequence msg = getText(R.string.settings_license_activity_loading); - - ProgressDialog pd = ProgressDialog.show(this, title, msg, true, false); - pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); - mSpinnerDlg = pd; - - // Start separate thread to do the actual loading. - Thread thread = new Thread(new LicenseFileLoader(fileName, mHandler)); - thread.start(); - } - - @Override - protected void onDestroy() { - if (mTextDlg != null && mTextDlg.isShowing()) { - mTextDlg.dismiss(); + final File file = new File(path); + if (!file.exists() || file.length() == 0) { + Log.e(TAG, "License file " + path + " does not exist"); + showErrorAndFinish(); + return; } - if (mSpinnerDlg != null && mSpinnerDlg.isShowing()) { - mSpinnerDlg.dismiss(); + + // Kick off external viewer due to WebView security restrictions; we + // carefully point it at HTMLViewer, since it offers to decompress + // before viewing. + final Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndType(Uri.fromFile(file), "text/html"); + intent.putExtra(Intent.EXTRA_TITLE, getString(R.string.settings_license_activity_title)); + intent.addCategory(Intent.CATEGORY_DEFAULT); + intent.setPackage("com.android.htmlviewer"); + + try { + startActivity(intent); + finish(); + } catch (ActivityNotFoundException e) { + Log.e(TAG, "Failed to find viewer", e); + showErrorAndFinish(); } - super.onDestroy(); - } - - private void showPageOfText(String text) { - // Create an AlertDialog to display the WebView in. - AlertDialog.Builder builder = new AlertDialog.Builder(SettingsLicenseActivity.this); - builder.setCancelable(true) - .setView(mWebView) - .setTitle(R.string.settings_license_activity_title); - - mTextDlg = builder.create(); - mTextDlg.setOnDismissListener(new OnDismissListener() { - - public void onDismiss(DialogInterface dlgi) { - SettingsLicenseActivity.this.finish(); - } - }); - - // Begin the loading. This will be done in a separate thread in WebView. - mWebView.loadDataWithBaseURL(null, text, "text/html", "utf-8", null); - mWebView.setWebViewClient(new WebViewClient() { - @Override - public void onPageFinished(WebView view, String url) { - mSpinnerDlg.dismiss(); - if (SettingsLicenseActivity.this.isResumed()) { - mTextDlg.show(); - } - } - }); - - mWebView = null; } private void showErrorAndFinish() { - mSpinnerDlg.dismiss(); - mSpinnerDlg = null; Toast.makeText(this, R.string.settings_license_activity_unavailable, Toast.LENGTH_LONG) .show(); finish(); diff --git a/src/com/android/settings/SettingsSafetyLegalActivity.java b/src/com/android/settings/SettingsSafetyLegalActivity.java deleted file mode 100644 index 368ee1dd68c..00000000000 --- a/src/com/android/settings/SettingsSafetyLegalActivity.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * 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.settings; - -import android.app.AlertDialog; -import android.content.Context; -import android.content.res.Configuration; -import android.os.Build; -import android.os.Bundle; -import android.os.SystemProperties; -import android.telephony.TelephonyManager; -import android.text.TextUtils; -import android.view.KeyEvent; -import android.webkit.WebView; -import android.webkit.WebViewClient; -import com.android.internal.app.AlertActivity; -import com.android.internal.app.AlertController; -import android.content.DialogInterface; - -/** - * The "dialog" that shows from "Safety information" in the Settings app. - */ -public class SettingsSafetyLegalActivity extends AlertActivity - implements DialogInterface.OnCancelListener, DialogInterface.OnClickListener { - private static final String PROPERTY_LSAFETYLEGAL_URL = "ro.url.safetylegal"; - - private WebView mWebView; - - private AlertDialog mErrorDialog = null; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - String userSafetylegalUrl = SystemProperties.get(PROPERTY_LSAFETYLEGAL_URL); - - final Configuration configuration = getResources().getConfiguration(); - final String language = configuration.locale.getLanguage(); - final String country = configuration.locale.getCountry(); - - String loc = String.format("locale=%s-%s", language, country); - - userSafetylegalUrl = String.format("%s&%s", userSafetylegalUrl, loc); - - mWebView = new WebView(this); - - // Begin accessing - mWebView.getSettings().setJavaScriptEnabled(true); - if (savedInstanceState == null) { - mWebView.loadUrl(userSafetylegalUrl); - } else { - mWebView.restoreState(savedInstanceState); - } - mWebView.setWebViewClient(new WebViewClient() { - @Override - public void onPageFinished(WebView view, String url) { - // Change from 'Loading...' to the real title - mAlert.setTitle(getString(R.string.settings_safetylegal_activity_title)); - } - - @Override - public void onReceivedError(WebView view, int errorCode, - String description, String failingUrl) { - showErrorAndFinish(failingUrl); - } - }); - - final AlertController.AlertParams p = mAlertParams; - p.mTitle = getString(R.string.settings_safetylegal_activity_loading); - p.mView = mWebView; - p.mForceInverseBackground = true; - setupAlert(); - } - - private void showErrorAndFinish(String url) { - if (mErrorDialog == null) { - mErrorDialog = new AlertDialog.Builder(this) - .setTitle(R.string.settings_safetylegal_activity_title) - .setPositiveButton(android.R.string.ok, this) - .setOnCancelListener(this) - .setCancelable(true) - .create(); - } else { - if (mErrorDialog.isShowing()) { - mErrorDialog.dismiss(); - } - } - mErrorDialog.setMessage(getResources() - .getString(R.string.settings_safetylegal_activity_unreachable, url)); - mErrorDialog.show(); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - - if (mErrorDialog != null) { - mErrorDialog.dismiss(); - mErrorDialog = null; - } - } - - @Override - public boolean dispatchKeyEvent(KeyEvent event) { - if (event.getKeyCode() == KeyEvent.KEYCODE_BACK - && event.getAction() == KeyEvent.ACTION_DOWN) { - if (mWebView.canGoBack()) { - mWebView.goBack(); - return true; - } - } - return super.dispatchKeyEvent(event); - } - - public void onClick(DialogInterface dialog, int whichButton) { - finish(); - } - - public void onCancel(DialogInterface dialog) { - finish(); - } - - @Override - public void onSaveInstanceState(Bundle icicle) { - mWebView.saveState(icicle); - super.onSaveInstanceState(icicle); - } -} diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java index c6117724880..230bbb2b164 100644 --- a/src/com/android/settings/TetherSettings.java +++ b/src/com/android/settings/TetherSettings.java @@ -16,11 +16,7 @@ package com.android.settings; -import com.android.settings.wifi.WifiApEnabler; -import com.android.settings.wifi.WifiApDialog; - import android.app.Activity; -import android.app.AlertDialog; import android.app.Dialog; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothPan; @@ -31,7 +27,6 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; -import android.content.res.AssetManager; import android.hardware.usb.UsbManager; import android.net.ConnectivityManager; import android.net.wifi.WifiConfiguration; @@ -44,16 +39,13 @@ import android.os.UserManager; import android.preference.Preference; import android.preference.PreferenceScreen; import android.preference.SwitchPreference; -import android.text.TextUtils; -import android.view.ViewGroup; -import android.view.ViewParent; -import android.webkit.WebView; import android.widget.TextView; -import java.io.InputStream; +import com.android.settings.wifi.WifiApDialog; +import com.android.settings.wifi.WifiApEnabler; + import java.util.ArrayList; import java.util.concurrent.atomic.AtomicReference; -import java.util.Locale; /* * Displays preferences for Tethering. @@ -69,7 +61,6 @@ public class TetherSettings extends SettingsPreferenceFragment private static final int DIALOG_AP_SETTINGS = 1; - private WebView mView; private SwitchPreference mUsbTether; private WifiApEnabler mWifiApEnabler; @@ -182,8 +173,6 @@ public class TetherSettings extends SettingsPreferenceFragment mProvisionApp = getResources().getStringArray( com.android.internal.R.array.config_mobile_hotspot_provision_app); - - mView = new WebView(activity); } @Override