1a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville/*
2a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville * Copyright (C) 2009 The Android Open Source Project
3a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville *
4a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
5a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville * you may not use this file except in compliance with the License.
6a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville * You may obtain a copy of the License at
7a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville *
8a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
9a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville *
10a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville * Unless required by applicable law or agreed to in writing, software
11a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
12a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville * See the License for the specific language governing permissions and
14a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville * limitations under the License.
15a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville */
16a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville
17a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Savillepackage com.android.settings;
18a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville
19a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Savilleimport android.app.AlertDialog;
20a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Savilleimport android.content.Context;
21a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Savilleimport android.content.res.Configuration;
22a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Savilleimport android.os.Build;
23a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Savilleimport android.os.Bundle;
24a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Savilleimport android.os.SystemProperties;
25a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Savilleimport android.telephony.TelephonyManager;
26a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Savilleimport android.text.TextUtils;
27be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasaniimport android.view.KeyEvent;
28a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Savilleimport android.webkit.WebView;
29a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Savilleimport android.webkit.WebViewClient;
30a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Savilleimport com.android.internal.app.AlertActivity;
31a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Savilleimport com.android.internal.app.AlertController;
32a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Savilleimport android.content.DialogInterface;
33a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville
34a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville/**
35a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville * The "dialog" that shows from "Safety information" in the Settings app.
36a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville */
37be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasanipublic class SettingsSafetyLegalActivity extends AlertActivity
38be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani        implements DialogInterface.OnCancelListener, DialogInterface.OnClickListener {
39a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville    private static final String PROPERTY_LSAFETYLEGAL_URL = "ro.url.safetylegal";
40a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville
41be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani    private WebView mWebView;
42be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani
4320108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai    private AlertDialog mErrorDialog = null;
4420108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
45a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville    @Override
46a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville    protected void onCreate(Bundle savedInstanceState) {
47a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville        super.onCreate(savedInstanceState);
48a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville
49a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville        String userSafetylegalUrl = SystemProperties.get(PROPERTY_LSAFETYLEGAL_URL);
50a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville
51a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville        final Configuration configuration = getResources().getConfiguration();
52a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville        final String language = configuration.locale.getLanguage();
53a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville        final String country = configuration.locale.getCountry();
54a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville
55a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville        String loc = String.format("locale=%s-%s", language, country);
56a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville
57a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville        userSafetylegalUrl = String.format("%s&%s", userSafetylegalUrl, loc);
58a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville
59be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani        mWebView = new WebView(this);
60a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville
61a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville        // Begin accessing
62be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani        mWebView.getSettings().setJavaScriptEnabled(true);
633c9f79ba35c29ee6988f5b0b8a7bb7e59614088aAmith Yamasani        if (savedInstanceState == null) {
643c9f79ba35c29ee6988f5b0b8a7bb7e59614088aAmith Yamasani            mWebView.loadUrl(userSafetylegalUrl);
653c9f79ba35c29ee6988f5b0b8a7bb7e59614088aAmith Yamasani        } else {
663c9f79ba35c29ee6988f5b0b8a7bb7e59614088aAmith Yamasani            mWebView.restoreState(savedInstanceState);
673c9f79ba35c29ee6988f5b0b8a7bb7e59614088aAmith Yamasani        }
68be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani        mWebView.setWebViewClient(new WebViewClient() {
69a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville            @Override
70a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville            public void onPageFinished(WebView view, String url) {
71a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville                // Change from 'Loading...' to the real title
72a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville                mAlert.setTitle(getString(R.string.settings_safetylegal_activity_title));
73a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville            }
74be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani
75be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani            @Override
76be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani            public void onReceivedError(WebView view, int errorCode,
77be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani                    String description, String failingUrl) {
78be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani                showErrorAndFinish(failingUrl);
79be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani            }
80a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville        });
81a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville
82a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville        final AlertController.AlertParams p = mAlertParams;
83a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville        p.mTitle = getString(R.string.settings_safetylegal_activity_loading);
84be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani        p.mView = mWebView;
85a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville        p.mForceInverseBackground = true;
86a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville        setupAlert();
87a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville    }
88a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville
89a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville    private void showErrorAndFinish(String url) {
9020108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        if (mErrorDialog == null) {
9120108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            mErrorDialog = new AlertDialog.Builder(this)
9220108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai                    .setTitle(R.string.settings_safetylegal_activity_title)
9320108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai                    .setPositiveButton(android.R.string.ok, this)
9420108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai                    .setOnCancelListener(this)
9520108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai                    .setCancelable(true)
9620108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai                    .create();
9720108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        } else {
9820108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            if (mErrorDialog.isShowing()) {
9920108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai                mErrorDialog.dismiss();
10020108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            }
10120108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        }
10220108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        mErrorDialog.setMessage(getResources()
10320108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai                .getString(R.string.settings_safetylegal_activity_unreachable, url));
10420108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        mErrorDialog.show();
10520108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai    }
10620108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
10720108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai    @Override
10820108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai    protected void onDestroy() {
10920108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        super.onDestroy();
11020108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
11120108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        if (mErrorDialog != null) {
11220108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            mErrorDialog.dismiss();
11320108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            mErrorDialog = null;
11420108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        }
115a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville    }
116a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville
117be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani    @Override
118be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani    public boolean dispatchKeyEvent(KeyEvent event) {
119be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK
120be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani                && event.getAction() == KeyEvent.ACTION_DOWN) {
121be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani            if (mWebView.canGoBack()) {
122be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani                mWebView.goBack();
123be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani                return true;
124be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani            }
125a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville        }
126be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani        return super.dispatchKeyEvent(event);
127a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville    }
128a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville
129be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani    public void onClick(DialogInterface dialog, int whichButton) {
130be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani        finish();
131be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani    }
132be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani
133be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani    public void onCancel(DialogInterface dialog) {
134be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani        finish();
135be023c8a75567f66b41fb3b11a08b37c68a2e0acAmith Yamasani    }
1363c9f79ba35c29ee6988f5b0b8a7bb7e59614088aAmith Yamasani
1373c9f79ba35c29ee6988f5b0b8a7bb7e59614088aAmith Yamasani    @Override
1383c9f79ba35c29ee6988f5b0b8a7bb7e59614088aAmith Yamasani    public void onSaveInstanceState(Bundle icicle) {
1393c9f79ba35c29ee6988f5b0b8a7bb7e59614088aAmith Yamasani        mWebView.saveState(icicle);
1403c9f79ba35c29ee6988f5b0b8a7bb7e59614088aAmith Yamasani        super.onSaveInstanceState(icicle);
1413c9f79ba35c29ee6988f5b0b8a7bb7e59614088aAmith Yamasani    }
142a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville}
143