/* * Copyright (C) 2007 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.os.Bundle; import android.os.SystemProperties; import android.text.TextUtils; import android.util.Config; import android.util.Log; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; 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 com.android.internal.app.AlertActivity; import com.android.internal.app.AlertController; /** * The "dialog" that shows from "License" in the Settings app. */ public class SettingsLicenseActivity extends AlertActivity { private static final String TAG = "SettingsLicenseActivity"; private static final boolean LOGV = false || Config.LOGV; private static final String DEFAULT_LICENSE_PATH = "/system/etc/NOTICE.html.gz"; private static final String PROPERTY_LICENSE_PATH = "ro.config.license_path"; private WebView mWebView; @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."); showErrorAndFinish(); return; } InputStreamReader inputReader = null; StringBuilder data = null; try { data = new StringBuilder(2048); char tmp[] = new char[2048]; int numRead; if (fileName.endsWith(".gz")) { inputReader = new InputStreamReader( new GZIPInputStream(new FileInputStream(fileName))); } else { inputReader = new FileReader(fileName); } while ((numRead = inputReader.read(tmp)) >= 0) { data.append(tmp, 0, numRead); } } catch (FileNotFoundException e) { Log.e(TAG, "License HTML file not found at " + fileName, e); showErrorAndFinish(); return; } catch (IOException e) { Log.e(TAG, "Error reading license HTML file at " + fileName, e); showErrorAndFinish(); return; } finally { try { if (inputReader != null) { inputReader.close(); } } catch (IOException e) { } } if (TextUtils.isEmpty(data)) { Log.e(TAG, "License HTML is empty (from " + fileName + ")"); showErrorAndFinish(); return; } mWebView = new WebView(getApplicationContext()); // Begin the loading. This will be done in a separate thread in WebView. mWebView.loadDataWithBaseURL(null, data.toString(), "text/html", "utf-8", null); 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_license_activity_title)); } }); final AlertController.AlertParams p = mAlertParams; p.mTitle = getString(R.string.settings_license_activity_loading); p.mView = mWebView; p.mForceInverseBackground = true; setupAlert(); } private void showErrorAndFinish() { Toast.makeText(this, R.string.settings_license_activity_unavailable, Toast.LENGTH_LONG) .show(); finish(); } @Override protected void onDestroy() { if (mWebView != null) { mWebView.destroy(); mWebView = null; } super.onDestroy(); } }