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}