151 lines · 5.4 KB · Java
RawDownload
////  WebViewActivity.java//  interface/java////  Created by Cristian Duarte and Gabriel Calero on 8/17/17.//  Copyright 2017 High Fidelity, Inc.////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html//package io.highfidelity.hifiinterface; import android.app.ActionBar;import android.app.Activity;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.util.Log;import android.view.KeyEvent;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.widget.Toast; import java.net.MalformedURLException;import java.net.URL; import io.highfidelity.hifiinterface.fragment.WebViewFragment;import io.highfidelity.hifiinterface.fragment.WebViewFragment.OnWebViewInteractionListener; public class WebViewActivity extends Activity implements OnWebViewInteractionListener {     public static final String WEB_VIEW_ACTIVITY_EXTRA_URL = "url";    public static final String WEB_VIEW_ACTIVITY_EXTRA_CLEAR_COOKIES = "clear_cookies";    public static final String RESULT_OAUTH_CODE = "code";    public static final String RESULT_OAUTH_STATE = "state";     private static final String FRAGMENT_TAG = "WebViewActivity_WebFragment";    private static final String OAUTH_CODE = "code";    private static final String OAUTH_STATE = "state";     private native void nativeProcessURL(String url);     private ActionBar mActionBar;     @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_web_view);         setActionBar(findViewById(R.id.toolbar_actionbar));        mActionBar = getActionBar();        mActionBar.setDisplayHomeAsUpEnabled(true);         loadWebViewFragment(getIntent().getStringExtra(WEB_VIEW_ACTIVITY_EXTRA_URL), getIntent().getBooleanExtra(WEB_VIEW_ACTIVITY_EXTRA_CLEAR_COOKIES, false));    }     private void loadWebViewFragment(String url, boolean clearCookies) {        WebViewFragment fragment = WebViewFragment.newInstance();        Bundle bundle = new Bundle();        bundle.putString(WebViewFragment.URL, url);        bundle.putBoolean(WebViewFragment.TOOLBAR_VISIBLE, false);        bundle.putBoolean(WebViewFragment.CLEAR_COOKIES, clearCookies);        fragment.setArguments(bundle);        FragmentManager fragmentManager = getFragmentManager();        FragmentTransaction ft = fragmentManager.beginTransaction();        ft.replace(R.id.content_frame, fragment, FRAGMENT_TAG);        ft.commit();    }     @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        WebViewFragment fragment = (WebViewFragment) getFragmentManager().findFragmentByTag(FRAGMENT_TAG);        if (fragment != null && fragment.onKeyDown(keyCode)) {            return true;        }        // If it wasn't the Back key or there's no web page history, bubble up to the default        // system behavior (probably exit the activity)        return super.onKeyDown(keyCode, event);    }     @Override    public boolean onCreateOptionsMenu(Menu menu) {        MenuInflater inflater = getMenuInflater();        inflater.inflate(R.menu.web_view_menu, menu);        return true;    }     private String intentUrlOrWebUrl() {        return ((WebViewFragment) getFragmentManager().findFragmentById(R.id.content_frame)).intentUrlOrWebUrl();    }     @Override    public boolean onOptionsItemSelected(MenuItem item){        switch (item.getItemId()) {            // Respond to the action bar's Up/Home/back button            case android.R.id.home:                finish();                break;            case R.id.action_browser:                Intent i = new Intent(Intent.ACTION_VIEW);                i.setData(Uri.parse(intentUrlOrWebUrl()));                startActivity(i);                return true;            case R.id.action_share:                Intent is = new Intent(Intent.ACTION_SEND);                is.setType("text/plain");                is.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.web_view_action_share_subject));                is.putExtra(Intent.EXTRA_TEXT, intentUrlOrWebUrl());                startActivity(Intent.createChooser(is, getString(R.string.web_view_action_share_chooser)));                return true;        }        return super.onOptionsItemSelected(item);    }      @Override    public void processURL(String url) {        nativeProcessURL(url);    }     @Override    public void onWebLoaded(String url, WebViewFragment.SafenessLevel safenessLevel) {        try {            mActionBar.setSubtitle(safenessLevel.icon + new URL(url.toString()).getHost());        } catch (MalformedURLException e) {            Toast.makeText(WebViewActivity.this, "Error loading page: " + "bad url", Toast.LENGTH_LONG).show();            Log.e("openUrl", "bad url");        }    }     @Override    public void onTitleReceived(String title) {        mActionBar.setTitle(title);    }     @Override    public void onExpand() { }     @Override    public void onOAuthAuthorizeCallback(Uri uri) {        Intent result = new Intent();        result.putExtra(RESULT_OAUTH_CODE, uri.getQueryParameter(OAUTH_CODE));        result.putExtra(RESULT_OAUTH_STATE, uri.getQueryParameter(OAUTH_STATE));        setResult(Activity.RESULT_OK, result);        finish();    } }