Loading AndroidManifest.xml +2 −1 Original line number Diff line number Diff line Loading @@ -479,7 +479,8 @@ <activity android:name="SettingsLicenseActivity" android:label="@string/settings_license_activity_title" android:theme="@*android:style/Theme.Holo.Dialog.Alert"> android:theme="@*android:style/Theme.Holo.Dialog.Alert" android:configChanges="orientation"> <intent-filter> <action android:name="android.settings.LICENSE" /> <category android:name="android.intent.category.DEFAULT" /> Loading src/com/android/settings/SettingsLicenseActivity.java +145 −48 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.settings; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.SystemProperties; import android.text.TextUtils; import android.util.Config; Loading @@ -24,6 +26,12 @@ import android.util.Log; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnDismissListener; import android.content.res.Configuration; import java.io.FileInputStream; import java.io.FileNotFoundException; Loading @@ -32,13 +40,10 @@ 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 { public class SettingsLicenseActivity extends Activity { private static final String TAG = "SettingsLicenseActivity"; private static final boolean LOGV = false || Config.LOGV; Loading @@ -46,40 +51,52 @@ public class SettingsLicenseActivity extends AlertActivity { private static final String DEFAULT_LICENSE_PATH = "/system/etc/NOTICE.html.gz"; private static final String PROPERTY_LICENSE_PATH = "ro.config.license_path"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); private Handler mHandler; private WebView mWebView; private ProgressDialog mSpinnerDlg; private AlertDialog mTextDlg; 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; private class LicenseFileLoader implements Runnable { private static final String INNER_TAG = "SettingsLicenseActivity.LicenseFileLoader"; public static final int STATUS_OK = 0; public static final int STATUS_NOT_FOUND = 1; public static final int STATUS_READ_ERROR = 2; public static final int STATUS_EMPTY_FILE = 3; private String mFileName; private Handler mHandler; public LicenseFileLoader(String fileName, Handler handler) { mFileName = fileName; mHandler = handler; } public void run() { int status = STATUS_OK; InputStreamReader inputReader = null; StringBuilder data = null; StringBuilder data = new StringBuilder(2048); try { data = new StringBuilder(2048); char tmp[] = new char[2048]; char[] tmp = new char[2048]; int numRead; if (fileName.endsWith(".gz")) { if (mFileName.endsWith(".gz")) { inputReader = new InputStreamReader( new GZIPInputStream(new FileInputStream(fileName))); new GZIPInputStream(new FileInputStream(mFileName))); } else { inputReader = new FileReader(fileName); inputReader = new FileReader(mFileName); } 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; Log.e(INNER_TAG, "License HTML file not found at " + mFileName, e); status = STATUS_NOT_FOUND; } catch (IOException e) { Log.e(TAG, "Error reading license HTML file at " + fileName, e); showErrorAndFinish(); return; Log.e(INNER_TAG, "Error reading license HTML file at " + mFileName, e); status = STATUS_READ_ERROR; } finally { try { if (inputReader != null) { Loading @@ -89,35 +106,115 @@ public class SettingsLicenseActivity extends AlertActivity { } } if (TextUtils.isEmpty(data)) { Log.e(TAG, "License HTML is empty (from " + fileName + ")"); if ((status == STATUS_OK) && TextUtils.isEmpty(data)) { Log.e(INNER_TAG, "License HTML is empty (from " + mFileName + ")"); status = STATUS_EMPTY_FILE; } // Tell the UI thread that we are finished. Message msg = mHandler.obtainMessage(status, null); if (status == STATUS_OK) { msg.obj = data.toString(); } mHandler.sendMessage(msg); } } public SettingsLicenseActivity() { super(); mHandler = null; mWebView = null; mSpinnerDlg = null; mTextDlg = null; } @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; } WebView webView = new WebView(this); // The activity does not have any view itself, // so set it invisible to avoid displaying the title text in the background. setVisible(false); mWebView = new WebView(this); mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == LicenseFileLoader.STATUS_OK) { String text = (String) msg.obj; showPageOfText(text); } else { showErrorAndFinish(); } } }; CharSequence title = getText(R.string.settings_license_activity_title); CharSequence msg = getText(R.string.settings_license_activity_loading); ProgressDialog pd = ProgressDialog.show(this, title, msg, true, false); pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); mSpinnerDlg = pd; // Start separate thread to do the actual loading. Thread thread = new Thread(new LicenseFileLoader(fileName, mHandler)); thread.start(); } @Override protected void onDestroy() { super.onDestroy(); if (mTextDlg != null) { mTextDlg.dismiss(); } } private void showPageOfText(String text) { // Create an AlertDialog to display the WebView in. AlertDialog.Builder builder = new AlertDialog.Builder(SettingsLicenseActivity.this); builder.setCancelable(true) .setView(mWebView) .setTitle(R.string.settings_license_activity_title); mTextDlg = builder.create(); mTextDlg.setOnDismissListener(new OnDismissListener() { public void onDismiss(DialogInterface dlgi) { SettingsLicenseActivity.this.finish(); } }); // Begin the loading. This will be done in a separate thread in WebView. webView.loadDataWithBaseURL(null, data.toString(), "text/html", "utf-8", null); webView.setWebViewClient(new WebViewClient() { mWebView.loadDataWithBaseURL(null, text, "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)); mSpinnerDlg.dismiss(); mSpinnerDlg = null; mTextDlg.show(); mTextDlg = null; } }); final AlertController.AlertParams p = mAlertParams; p.mTitle = getString(R.string.settings_license_activity_loading); p.mView = webView; p.mForceInverseBackground = true; setupAlert(); mWebView = null; } private void showErrorAndFinish() { mSpinnerDlg.dismiss(); mSpinnerDlg = null; Toast.makeText(this, R.string.settings_license_activity_unavailable, Toast.LENGTH_LONG) .show(); finish(); } } Loading
AndroidManifest.xml +2 −1 Original line number Diff line number Diff line Loading @@ -479,7 +479,8 @@ <activity android:name="SettingsLicenseActivity" android:label="@string/settings_license_activity_title" android:theme="@*android:style/Theme.Holo.Dialog.Alert"> android:theme="@*android:style/Theme.Holo.Dialog.Alert" android:configChanges="orientation"> <intent-filter> <action android:name="android.settings.LICENSE" /> <category android:name="android.intent.category.DEFAULT" /> Loading
src/com/android/settings/SettingsLicenseActivity.java +145 −48 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.settings; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.SystemProperties; import android.text.TextUtils; import android.util.Config; Loading @@ -24,6 +26,12 @@ import android.util.Log; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnDismissListener; import android.content.res.Configuration; import java.io.FileInputStream; import java.io.FileNotFoundException; Loading @@ -32,13 +40,10 @@ 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 { public class SettingsLicenseActivity extends Activity { private static final String TAG = "SettingsLicenseActivity"; private static final boolean LOGV = false || Config.LOGV; Loading @@ -46,40 +51,52 @@ public class SettingsLicenseActivity extends AlertActivity { private static final String DEFAULT_LICENSE_PATH = "/system/etc/NOTICE.html.gz"; private static final String PROPERTY_LICENSE_PATH = "ro.config.license_path"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); private Handler mHandler; private WebView mWebView; private ProgressDialog mSpinnerDlg; private AlertDialog mTextDlg; 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; private class LicenseFileLoader implements Runnable { private static final String INNER_TAG = "SettingsLicenseActivity.LicenseFileLoader"; public static final int STATUS_OK = 0; public static final int STATUS_NOT_FOUND = 1; public static final int STATUS_READ_ERROR = 2; public static final int STATUS_EMPTY_FILE = 3; private String mFileName; private Handler mHandler; public LicenseFileLoader(String fileName, Handler handler) { mFileName = fileName; mHandler = handler; } public void run() { int status = STATUS_OK; InputStreamReader inputReader = null; StringBuilder data = null; StringBuilder data = new StringBuilder(2048); try { data = new StringBuilder(2048); char tmp[] = new char[2048]; char[] tmp = new char[2048]; int numRead; if (fileName.endsWith(".gz")) { if (mFileName.endsWith(".gz")) { inputReader = new InputStreamReader( new GZIPInputStream(new FileInputStream(fileName))); new GZIPInputStream(new FileInputStream(mFileName))); } else { inputReader = new FileReader(fileName); inputReader = new FileReader(mFileName); } 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; Log.e(INNER_TAG, "License HTML file not found at " + mFileName, e); status = STATUS_NOT_FOUND; } catch (IOException e) { Log.e(TAG, "Error reading license HTML file at " + fileName, e); showErrorAndFinish(); return; Log.e(INNER_TAG, "Error reading license HTML file at " + mFileName, e); status = STATUS_READ_ERROR; } finally { try { if (inputReader != null) { Loading @@ -89,35 +106,115 @@ public class SettingsLicenseActivity extends AlertActivity { } } if (TextUtils.isEmpty(data)) { Log.e(TAG, "License HTML is empty (from " + fileName + ")"); if ((status == STATUS_OK) && TextUtils.isEmpty(data)) { Log.e(INNER_TAG, "License HTML is empty (from " + mFileName + ")"); status = STATUS_EMPTY_FILE; } // Tell the UI thread that we are finished. Message msg = mHandler.obtainMessage(status, null); if (status == STATUS_OK) { msg.obj = data.toString(); } mHandler.sendMessage(msg); } } public SettingsLicenseActivity() { super(); mHandler = null; mWebView = null; mSpinnerDlg = null; mTextDlg = null; } @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; } WebView webView = new WebView(this); // The activity does not have any view itself, // so set it invisible to avoid displaying the title text in the background. setVisible(false); mWebView = new WebView(this); mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == LicenseFileLoader.STATUS_OK) { String text = (String) msg.obj; showPageOfText(text); } else { showErrorAndFinish(); } } }; CharSequence title = getText(R.string.settings_license_activity_title); CharSequence msg = getText(R.string.settings_license_activity_loading); ProgressDialog pd = ProgressDialog.show(this, title, msg, true, false); pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); mSpinnerDlg = pd; // Start separate thread to do the actual loading. Thread thread = new Thread(new LicenseFileLoader(fileName, mHandler)); thread.start(); } @Override protected void onDestroy() { super.onDestroy(); if (mTextDlg != null) { mTextDlg.dismiss(); } } private void showPageOfText(String text) { // Create an AlertDialog to display the WebView in. AlertDialog.Builder builder = new AlertDialog.Builder(SettingsLicenseActivity.this); builder.setCancelable(true) .setView(mWebView) .setTitle(R.string.settings_license_activity_title); mTextDlg = builder.create(); mTextDlg.setOnDismissListener(new OnDismissListener() { public void onDismiss(DialogInterface dlgi) { SettingsLicenseActivity.this.finish(); } }); // Begin the loading. This will be done in a separate thread in WebView. webView.loadDataWithBaseURL(null, data.toString(), "text/html", "utf-8", null); webView.setWebViewClient(new WebViewClient() { mWebView.loadDataWithBaseURL(null, text, "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)); mSpinnerDlg.dismiss(); mSpinnerDlg = null; mTextDlg.show(); mTextDlg = null; } }); final AlertController.AlertParams p = mAlertParams; p.mTitle = getString(R.string.settings_license_activity_loading); p.mView = webView; p.mForceInverseBackground = true; setupAlert(); mWebView = null; } private void showErrorAndFinish() { mSpinnerDlg.dismiss(); mSpinnerDlg = null; Toast.makeText(this, R.string.settings_license_activity_unavailable, Toast.LENGTH_LONG) .show(); finish(); } }