110fcd645f703799326da326630b663df69f91508James Lemieux/** 210fcd645f703799326da326630b663df69f91508James Lemieux * Copyright (c) 2014, Google Inc. 310fcd645f703799326da326630b663df69f91508James Lemieux * 410fcd645f703799326da326630b663df69f91508James Lemieux * Licensed under the Apache License, Version 2.0 (the "License"); 510fcd645f703799326da326630b663df69f91508James Lemieux * you may not use this file except in compliance with the License. 610fcd645f703799326da326630b663df69f91508James Lemieux * You may obtain a copy of the License at 710fcd645f703799326da326630b663df69f91508James Lemieux * 810fcd645f703799326da326630b663df69f91508James Lemieux * http://www.apache.org/licenses/LICENSE-2.0 910fcd645f703799326da326630b663df69f91508James Lemieux * 1010fcd645f703799326da326630b663df69f91508James Lemieux * Unless required by applicable law or agreed to in writing, software 1110fcd645f703799326da326630b663df69f91508James Lemieux * distributed under the License is distributed on an "AS IS" BASIS, 1210fcd645f703799326da326630b663df69f91508James Lemieux * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1310fcd645f703799326da326630b663df69f91508James Lemieux * See the License for the specific language governing permissions and 1410fcd645f703799326da326630b663df69f91508James Lemieux * limitations under the License. 1510fcd645f703799326da326630b663df69f91508James Lemieux */ 1610fcd645f703799326da326630b663df69f91508James Lemieuxpackage com.android.mail.ui; 1710fcd645f703799326da326630b663df69f91508James Lemieux 1810fcd645f703799326da326630b663df69f91508James Lemieuximport android.app.ActionBar; 1910fcd645f703799326da326630b663df69f91508James Lemieuximport android.app.Activity; 2010fcd645f703799326da326630b663df69f91508James Lemieuximport android.os.Bundle; 2110fcd645f703799326da326630b663df69f91508James Lemieuximport android.view.MenuItem; 2210fcd645f703799326da326630b663df69f91508James Lemieuximport android.webkit.WebView; 2310fcd645f703799326da326630b663df69f91508James Lemieux 2410fcd645f703799326da326630b663df69f91508James Lemieuximport com.android.mail.R; 2510fcd645f703799326da326630b663df69f91508James Lemieuximport com.android.mail.utils.LogTag; 2610fcd645f703799326da326630b663df69f91508James Lemieuximport com.android.mail.utils.LogUtils; 2710fcd645f703799326da326630b663df69f91508James Lemieux 2810fcd645f703799326da326630b663df69f91508James Lemieuximport org.apache.commons.io.IOUtils; 2910fcd645f703799326da326630b663df69f91508James Lemieux 3010fcd645f703799326da326630b663df69f91508James Lemieuximport java.io.IOException; 3110fcd645f703799326da326630b663df69f91508James Lemieuximport java.io.InputStream; 3210fcd645f703799326da326630b663df69f91508James Lemieuximport java.net.URLEncoder; 3310fcd645f703799326da326630b663df69f91508James Lemieux 3410fcd645f703799326da326630b663df69f91508James Lemieux/** 3510fcd645f703799326da326630b663df69f91508James Lemieux * This activity displays the Software Licenses of the libraries used by this software. 3610fcd645f703799326da326630b663df69f91508James Lemieux */ 3710fcd645f703799326da326630b663df69f91508James Lemieuxpublic class LicensesActivity extends Activity { 3810fcd645f703799326da326630b663df69f91508James Lemieux 3910fcd645f703799326da326630b663df69f91508James Lemieux @Override 4010fcd645f703799326da326630b663df69f91508James Lemieux protected void onCreate(Bundle savedInstanceState) { 4110fcd645f703799326da326630b663df69f91508James Lemieux super.onCreate(savedInstanceState); 4210fcd645f703799326da326630b663df69f91508James Lemieux 4310fcd645f703799326da326630b663df69f91508James Lemieux setContentView(R.layout.licenses_activity); 4410fcd645f703799326da326630b663df69f91508James Lemieux 4510fcd645f703799326da326630b663df69f91508James Lemieux // Enable back navigation 4610fcd645f703799326da326630b663df69f91508James Lemieux final ActionBar actionBar = getActionBar(); 4710fcd645f703799326da326630b663df69f91508James Lemieux if (actionBar != null) { 4810fcd645f703799326da326630b663df69f91508James Lemieux actionBar.setDisplayHomeAsUpEnabled(true); 4910fcd645f703799326da326630b663df69f91508James Lemieux } 5010fcd645f703799326da326630b663df69f91508James Lemieux 5110fcd645f703799326da326630b663df69f91508James Lemieux InputStream input = null; 5210fcd645f703799326da326630b663df69f91508James Lemieux String licenseHTML = null; 5310fcd645f703799326da326630b663df69f91508James Lemieux try { 5410fcd645f703799326da326630b663df69f91508James Lemieux // read the raw license String from the license HTML file 5510fcd645f703799326da326630b663df69f91508James Lemieux input = getResources().openRawResource(R.raw.licenses); 5610fcd645f703799326da326630b663df69f91508James Lemieux final String license = IOUtils.toString(input, "UTF-8"); 5710fcd645f703799326da326630b663df69f91508James Lemieux 5810fcd645f703799326da326630b663df69f91508James Lemieux // encode the license string for display as HTML in the webview 5910fcd645f703799326da326630b663df69f91508James Lemieux licenseHTML = URLEncoder.encode(license, "UTF-8").replace("+", "%20"); 6010fcd645f703799326da326630b663df69f91508James Lemieux } catch (IOException e) { 6110fcd645f703799326da326630b663df69f91508James Lemieux LogUtils.e(LogTag.getLogTag(), e, "Error reading licence file"); 6210fcd645f703799326da326630b663df69f91508James Lemieux } finally { 6310fcd645f703799326da326630b663df69f91508James Lemieux if (input != null) { 6410fcd645f703799326da326630b663df69f91508James Lemieux try { 6510fcd645f703799326da326630b663df69f91508James Lemieux input.close(); 6610fcd645f703799326da326630b663df69f91508James Lemieux } catch (IOException ioe) { 6710fcd645f703799326da326630b663df69f91508James Lemieux // best attempt only 6810fcd645f703799326da326630b663df69f91508James Lemieux } 6910fcd645f703799326da326630b663df69f91508James Lemieux } 7010fcd645f703799326da326630b663df69f91508James Lemieux } 7110fcd645f703799326da326630b663df69f91508James Lemieux 7210fcd645f703799326da326630b663df69f91508James Lemieux // set the license HTML into the webview 7310fcd645f703799326da326630b663df69f91508James Lemieux final WebView webview = (WebView) findViewById(R.id.webview); 7410fcd645f703799326da326630b663df69f91508James Lemieux webview.loadData(licenseHTML, "text/html", null); 7510fcd645f703799326da326630b663df69f91508James Lemieux } 7610fcd645f703799326da326630b663df69f91508James Lemieux 7710fcd645f703799326da326630b663df69f91508James Lemieux @Override 7810fcd645f703799326da326630b663df69f91508James Lemieux public boolean onOptionsItemSelected(MenuItem item) { 7910fcd645f703799326da326630b663df69f91508James Lemieux switch (item.getItemId()) { 8010fcd645f703799326da326630b663df69f91508James Lemieux case android.R.id.home: { 8110fcd645f703799326da326630b663df69f91508James Lemieux finish(); 8210fcd645f703799326da326630b663df69f91508James Lemieux return true; 8310fcd645f703799326da326630b663df69f91508James Lemieux } 8410fcd645f703799326da326630b663df69f91508James Lemieux default: return super.onOptionsItemSelected(item); 8510fcd645f703799326da326630b663df69f91508James Lemieux } 8610fcd645f703799326da326630b663df69f91508James Lemieux } 8710fcd645f703799326da326630b663df69f91508James Lemieux}