Add Safety information to Settings > About Phone

The Safety information link is stored in a system property, ro.url.safetylegal

If the phone has data connection, select "Safety information" menu will open the
Safety information link.  If there is no data connection for the phone, a message will
pop up which ask user to open Safety information link from PC.

Change-Id: Ia46e2e868ebcda93138cb9f00c978d8ac827022a
This commit is contained in:
Wink Saville
2009-09-26 16:47:18 -07:00
parent 9281c929d6
commit a40fb23734
5 changed files with 148 additions and 1 deletions

View File

@@ -249,6 +249,15 @@
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name="SettingsSafetyLegalActivity"
android:label="@string/settings_safetylegal_activity_title"
android:theme="@*android:style/Theme.Dialog.Alert">
<intent-filter>
<action android:name="android.settings.SAFETY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:name="ApplicationSettings" android:label="@string/applications_settings_header" <activity android:name="ApplicationSettings" android:label="@string/applications_settings_header"
> >
<intent-filter> <intent-filter>

View File

@@ -1234,6 +1234,15 @@
<!-- About phone settings screen, Open source license dialog title until license is fully loaded --> <!-- About phone settings screen, Open source license dialog title until license is fully loaded -->
<string name="settings_license_activity_loading">Loading\u2026</string> <string name="settings_license_activity_loading">Loading\u2026</string>
<!-- About phone settings, Safety Legal information setting option name and title of dialog box holding safety legal info -->
<string name="settings_safetylegal_title">Safety information</string>
<!-- About phone settings, Safety Legal information setting option name and title of dialog box holding safety legal info -->
<string name="settings_safetylegal_activity_title">Safety information</string>
<!-- About phone settings screen, Safety legal dialog message when data network is not connected -->
<string name="settings_safetylegal_activity_unreachable">Your phone is not connected to a data service. To view this information now, go to %s from any computer connected to the Internet.</string>
<!-- About phone settings screen, Safety Legal dialog title until the link is fully loaded -->
<string name="settings_safetylegal_activity_loading">Loading\u2026</string>
<!-- Lock Pattern settings --> <!-- Lock Pattern settings -->
<!-- Security & location settings screen, header --> <!-- Security & location settings screen, header -->
<string name="lock_settings_title">Screen unlock pattern</string> <string name="lock_settings_title">Screen unlock pattern</string>

View File

@@ -75,6 +75,12 @@
</PreferenceScreen> </PreferenceScreen>
<PreferenceScreen
android:key="safetylegal"
android:title="@string/settings_safetylegal_title">
<intent android:action="android.settings.SAFETY" />
</PreferenceScreen>
<!-- Contributors --> <!-- Contributors -->
<!-- <!--
<PreferenceScreen <PreferenceScreen

View File

@@ -48,6 +48,7 @@ public class DeviceInfoSettings extends PreferenceActivity {
private static final String KEY_LICENSE = "license"; private static final String KEY_LICENSE = "license";
private static final String KEY_COPYRIGHT = "copyright"; private static final String KEY_COPYRIGHT = "copyright";
private static final String KEY_SYSTEM_UPDATE_SETTINGS = "system_update_settings"; private static final String KEY_SYSTEM_UPDATE_SETTINGS = "system_update_settings";
private static final String PROPERTY_URL_SAFETYLEGAL = "ro.url.safetylegal";
@Override @Override
protected void onCreate(Bundle icicle) { protected void onCreate(Bundle icicle) {
@@ -61,6 +62,10 @@ public class DeviceInfoSettings extends PreferenceActivity {
setStringSummary("build_number", Build.DISPLAY); setStringSummary("build_number", Build.DISPLAY);
findPreference("kernel_version").setSummary(getFormattedKernelVersion()); findPreference("kernel_version").setSummary(getFormattedKernelVersion());
// Remove Safety information preference if PROPERTY_URL_SAFETYLEGAL is not set
removePreferenceIfPropertyMissing(getPreferenceScreen(), "safetylegal",
PROPERTY_URL_SAFETYLEGAL);
/* /*
* Settings is a generic app and should not contain any device-specific * Settings is a generic app and should not contain any device-specific
* info. * info.
@@ -86,6 +91,20 @@ public class DeviceInfoSettings extends PreferenceActivity {
Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY); Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY);
} }
private void removePreferenceIfPropertyMissing(PreferenceGroup preferenceGroup,
String preference, String property ) {
if (SystemProperties.get(property).equals(""))
{
// Property is missing so remove preference from group
try {
preferenceGroup.removePreference(findPreference(preference));
} catch (RuntimeException e) {
Log.d(TAG, "Property '" + property + "' missing and no '"
+ preference + "' preference");
}
}
}
private void setStringSummary(String preference, String value) { private void setStringSummary(String preference, String value) {
try { try {
findPreference(preference).setSummary(value); findPreference(preference).setSummary(value);

View File

@@ -0,0 +1,104 @@
/*
* 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.webkit.WebView;
import android.webkit.WebViewClient;
import com.android.internal.app.AlertActivity;
import com.android.internal.app.AlertController;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
/**
* The "dialog" that shows from "Safety information" in the Settings app.
*/
public class SettingsSafetyLegalActivity extends AlertActivity {
private static final String PROPERTY_LSAFETYLEGAL_URL = "ro.url.safetylegal";
@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);
if (!isDataNetworkConnected()) {
showErrorAndFinish(userSafetylegalUrl);
return;
}
WebView webView = new WebView(this);
// Begin accessing
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(userSafetylegalUrl);
webView.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));
}
});
final AlertController.AlertParams p = mAlertParams;
p.mTitle = getString(R.string.settings_safetylegal_activity_loading);
p.mView = webView;
p.mForceInverseBackground = true;
setupAlert();
}
private void showErrorAndFinish(String url) {
new AlertDialog.Builder(this)
.setMessage(getResources()
.getString(R.string.settings_safetylegal_activity_unreachable, url))
.setTitle(R.string.settings_safetylegal_activity_title)
.setPositiveButton(android.R.string.ok, mOkListener)
.setCancelable(true)
.show();
}
private boolean isDataNetworkConnected() {
TelephonyManager mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
if (mTelephonyManager.getDataState() == TelephonyManager.DATA_CONNECTED) {
return true;
} else {
return false;
}
}
private final OnClickListener mOkListener = new OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
finish();
}
};
}