diff options
author | 2015-08-07 16:32:28 -0700 | |
---|---|---|
committer | 2015-08-17 18:20:37 -0700 | |
commit | 5adcb3d353b066a056b86ae66946a06a251ff1fb (patch) | |
tree | aac921a5b1afa8ffc0c18507501fc029cfabf0c8 | |
parent | 62fdd5581e131731651e4afb96bedd8092ffd9cc (diff) |
Allow manual to be read from disk
b/22891924
Change-Id: I6014690735403b772f273addba01706441898e23
-rw-r--r-- | AndroidManifest.xml | 13 | ||||
-rw-r--r-- | res/values/bools.xml | 2 | ||||
-rw-r--r-- | res/values/strings.xml | 7 | ||||
-rw-r--r-- | res/xml/device_info_settings.xml | 7 | ||||
-rw-r--r-- | src/com/android/settings/DeviceInfoSettings.java | 4 | ||||
-rw-r--r-- | src/com/android/settings/ManualDisplayActivity.java | 85 |
6 files changed, 118 insertions, 0 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index f1996738a4c..cff847e53aa 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2419,6 +2419,19 @@ android:resource="@id/notification_settings" /> </activity> + <!-- Show Manual (from settings item) --> + <activity android:name="ManualDisplayActivity" + android:label="@string/manual" + android:taskAffinity="" + android:enabled="@bool/config_show_manual"> + <intent-filter> + <action android:name="android.settings.SHOW_MANUAL" /> + <category android:name="android.intent.category.DEFAULT" /> + </intent-filter> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> + </activity> + <!-- Show regulatory info (from settings item or dialing "*#07#") --> <activity android:name="RegulatoryInfoDisplayActivity" android:label="@string/regulatory_information" diff --git a/res/values/bools.xml b/res/values/bools.xml index 0fdc396a76e..85b4ffb1224 100644 --- a/res/values/bools.xml +++ b/res/values/bools.xml @@ -30,6 +30,8 @@ Can be overridden for specific product builds. --> <bool name="auto_confirm_bluetooth_activation_dialog">false</bool> + <!-- Whether to show a preference item for the manual in About phone --> + <bool name="config_show_manual">false</bool> <!-- Whether to show a preference item for regulatory information in About phone --> <bool name="config_show_regulatory_info">false</bool> diff --git a/res/values/strings.xml b/res/values/strings.xml index 75bddc85b95..1e3f44c7b47 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2867,6 +2867,8 @@ <string name="legal_information">Legal information</string> <!-- About phone settings screen, setting option name to see a list of contributors --> <string name="contributors_title">Contributors</string> + <!-- About phone settings screen, setting option name to show Manual [CHAR LIMIT=25] --> + <string name="manual">Manual</string> <!-- About phone settings screen, setting option name to show regulatory information [CHAR LIMIT=25] --> <string name="regulatory_information">Regulatory information</string> <!-- Note: this may be replaced by a more-specific title of the activity that will get launched --> <skip /> @@ -2886,6 +2888,11 @@ <!-- About phone settings screen, setting option name to see wallpapers attributions values --> <string name="wallpaper_attributions_values">Satellite imagery providers:\n©2014 CNES / Astrium, DigitalGlobe, Bluesky</string> + <!-- Phone Manual --> + <string name="settings_manual_activity_title">Manual</string> + <!-- About phone settings screen, Manual dialog message when manual cannot be loaded --> + <string name="settings_manual_activity_unavailable">There is a problem loading the manual.</string> + <!-- Title for actual Settings license activity. --> <skip /> <!-- About phone settings, Legal information setting option name and title of dialog box holding license info --> <string name="settings_license_activity_title">Open source licenses</string> diff --git a/res/xml/device_info_settings.xml b/res/xml/device_info_settings.xml index 358f3e1cebe..1372ce709ba 100644 --- a/res/xml/device_info_settings.xml +++ b/res/xml/device_info_settings.xml @@ -41,6 +41,13 @@ android:targetClass="com.android.settings.deviceinfo.Status" /> </PreferenceScreen> + <!-- Manual --> + <PreferenceScreen + android:key="manual" + android:title="@string/manual"> + <intent android:action="android.settings.SHOW_MANUAL" /> + </PreferenceScreen> + <!-- Legal Information --> <PreferenceScreen android:key="container" diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java index 9ead7c64fe6..9ad911da84f 100644 --- a/src/com/android/settings/DeviceInfoSettings.java +++ b/src/com/android/settings/DeviceInfoSettings.java @@ -59,6 +59,7 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In private static final String FILENAME_PROC_VERSION = "/proc/version"; private static final String FILENAME_MSV = "/sys/board_properties/soc/msv"; + private static final String KEY_MANUAL = "manual"; private static final String KEY_REGULATORY_INFO = "regulatory_info"; private static final String KEY_SYSTEM_UPDATE_SETTINGS = "system_update_settings"; private static final String PROPERTY_URL_SAFETYLEGAL = "ro.url.safetylegal"; @@ -166,6 +167,9 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In removePreferenceIfBoolFalse(KEY_UPDATE_SETTING, R.bool.config_additional_system_update_setting_enable); + // Remove manual entry if none present. + removePreferenceIfBoolFalse(KEY_MANUAL, R.bool.config_show_manual); + // Remove regulatory information if none present. final Intent intent = new Intent(Settings.ACTION_SHOW_REGULATORY_INFO); if (getPackageManager().queryIntentActivities(intent, 0).isEmpty()) { diff --git a/src/com/android/settings/ManualDisplayActivity.java b/src/com/android/settings/ManualDisplayActivity.java new file mode 100644 index 00000000000..8be4fee9488 --- /dev/null +++ b/src/com/android/settings/ManualDisplayActivity.java @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2015 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.Activity; +import android.content.ActivityNotFoundException; +import android.content.Intent; +import android.content.res.Resources; +import android.net.Uri; +import android.os.Bundle; +import android.os.SystemProperties; +import android.text.TextUtils; +import android.util.Log; +import android.widget.Toast; + +import java.io.File; + +/** + * The "dialog" that shows from "Manual" in the Settings app. + */ +public class ManualDisplayActivity extends Activity { + private static final String TAG = "SettingsManualActivity"; + + private static final String DEFAULT_MANUAL_PATH = "/system/etc/MANUAL.html.gz"; + private static final String PROPERTY_MANUAL_PATH = "ro.config.manual_path"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Resources resources = getResources(); + + if (!resources.getBoolean(R.bool.config_show_manual)) { + finish(); // No manual to display for this device + } + + final String path = SystemProperties.get(PROPERTY_MANUAL_PATH, DEFAULT_MANUAL_PATH); + if (TextUtils.isEmpty(path)) { + Log.e(TAG, "The system property for the manual is empty"); + showErrorAndFinish(); + return; + } + + final File file = new File(path); + if (!file.exists() || file.length() == 0) { + Log.e(TAG, "Manual file " + path + " does not exist"); + showErrorAndFinish(); + return; + } + + final Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndType(Uri.fromFile(file), "text/html"); + + intent.putExtra(Intent.EXTRA_TITLE, getString(R.string.settings_manual_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(); + } + } + + private void showErrorAndFinish() { + Toast.makeText(this, R.string.settings_manual_activity_unavailable, Toast.LENGTH_LONG) + .show(); + finish(); + } +} |