/* * 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); } }