package com.prolificinteractive.chandelier.sample; import android.os.Bundle; import android.support.annotation.DrawableRes; import android.support.annotation.NonNull; import android.support.design.widget.FloatingActionButton; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.View; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ProgressBar; import com.prolificinteractive.chandelier.widget.Ornament; import com.prolificinteractive.chandelier.widget.ChandelierLayout; import java.util.Arrays; public class WebViewActivity extends AppCompatActivity { public static final String GITHUB_URL = "https://www.github.com/"; public static final String GITHUB_NOTIFICATIONS_URL = GITHUB_URL + "notifications"; public static final String GITHUB_PULLS_URL = GITHUB_URL + "pulls"; public static final String GITHUB_SEARCH_URL = GITHUB_URL + "search"; private ChandelierLayout chandelierLayout; private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_web_view); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progress_bar); webView = (WebView) findViewById(R.id.web_view); webView.setWebViewClient(new WebViewClient()); webView.getSettings().setJavaScriptEnabled(true); webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { if (newProgress == 100) { progressBar.setVisibility(View.INVISIBLE); } else { progressBar.setVisibility(View.VISIBLE); } progressBar.setProgress(newProgress); } }); webView.loadUrl(GITHUB_URL); chandelierLayout = (ChandelierLayout) findViewById(R.id.chandelier_layout); chandelierLayout.setOnActionSelectedListener(new ChandelierLayout.OnActionListener() { @Override public void onActionSelected(int index, Ornament action) { action.execute(); } }); chandelierLayout.populateActionItems(Arrays.asList( new GitHubAction.Builder() .setDrawableResId(R.drawable.ic_notifications) .setUrl(GITHUB_NOTIFICATIONS_URL) .setWebView(webView) .build(), new GitHubAction.Builder() .setDrawableResId(R.drawable.ic_github) .setUrl(GITHUB_URL) .setWebView(webView) .build(), new GitHubAction.Builder() .setDrawableResId(R.drawable.ic_pull_request) .setUrl(GITHUB_PULLS_URL) .setWebView(webView) .build() )); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { webView.loadUrl(GITHUB_SEARCH_URL); } }); } static class GitHubAction extends Ornament { private String url; private WebView webView; public GitHubAction(@DrawableRes int drawableResId) { super(drawableResId); } @Override public void execute() { if (!TextUtils.isEmpty(url)) { webView.loadUrl(url); } } public void setUrl(String url) { this.url = url; } public void setWebView(WebView webView) { this.webView = webView; } static class Builder { String url = ""; int drawableResId; WebView webView; public Builder setDrawableResId(@DrawableRes int resId) { drawableResId = resId; return this; } public Builder setUrl(@NonNull String url) { this.url = url; return this; } public Builder setWebView(@NonNull WebView webView) { this.webView = webView; return this; } public GitHubAction build() { if (url == null || webView == null) { throw new IllegalArgumentException("URL and WebView must be set"); } GitHubAction action = new GitHubAction(drawableResId); action.setUrl(url); action.setWebView(webView); return action; } } } }