// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.webview_shell;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.webkit.WebView;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
/**
 * Activity to exercise transform animations on WebView.
 */
public class WebViewAnimationTestActivity extends Activity {
    private static final String HTML = ""
            + "  
"
            + "    "
            + "  "
            + "  "
            + "   "
            + "     
00
"
            + "     
01
"
            + "     
02
"
            + "     
03
"
            + "     
04
"
            + "     
05
"
            + "     
06
"
            + "     
07
"
            + "     
08
"
            + "     
09
"
            + "     
10
"
            + "     
11
"
            + "     
12
"
            + "     
13
"
            + "     
14
"
            + "     
15
"
            + "     
16
"
            + "     
17
"
            + "     
18
"
            + "     
19
"
            + "     
20
"
            + "     
21
"
            + "     
22
"
            + "     
23
"
            + "     
24
"
            + "   
 "
            + "  "
            + "";
    private WebView mWebView;
    private boolean mIsWindowHardwareAccelerated;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_webview_animation_test);
        mWebView = (WebView) findViewById(R.id.webview);
        mIsWindowHardwareAccelerated =
                (getWindow().getAttributes().flags
                        | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED)
                != 0;
        mWebView.setBackgroundColor(0);
        mWebView.loadDataWithBaseURL("http://foo.bar", HTML, "text/html", null, "http://foo.bar");
        OnClickListener onClickListner = (View v) -> {
            switch (v.getId()) {
                case R.id.translate:
                    runTranslate();
                    break;
                case R.id.scale:
                    runScale();
                    break;
                case R.id.rotate:
                    runRotate();
                    break;
            }
        };
        findViewById(R.id.scale).setOnClickListener(onClickListner);
        findViewById(R.id.translate).setOnClickListener(onClickListner);
        findViewById(R.id.rotate).setOnClickListener(onClickListner);
        ((SeekBar) findViewById(R.id.view_alpha))
                .setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
                    @Override
                    public void onProgressChanged(SeekBar view, int progress, boolean fromUser) {
                        switch (view.getId()) {
                            case R.id.view_alpha:
                                mWebView.setAlpha(progress / 100f);
                                break;
                        }
                    }
                    @Override
                    public void onStartTrackingTouch(SeekBar seekBar) {}
                    @Override
                    public void onStopTrackingTouch(SeekBar seekBar) {}
                });
        CheckBox checkBox = ((CheckBox) findViewById(R.id.use_layer));
        checkBox.setOnCheckedChangeListener(
                (CompoundButton arg0, boolean checked) -> { setWebViewLayer(checked); });
        setWebViewLayer(checkBox.isChecked());
    }
    private void runTranslate() {
        if (mWebView.getTranslationX() == 0f) {
            mWebView.animate().translationX(100f).translationY(100f);
        } else {
            mWebView.animate().translationX(0f).translationY(0f);
        }
    }
    private void runScale() {
        if (mWebView.getScaleX() == 1f) {
            mWebView.animate().scaleX(.5f).scaleY(.5f);
        } else {
            mWebView.animate().scaleX(1f).scaleY(1f);
        }
    }
    private void runRotate() {
        if (mWebView.getRotationX() == 0f) {
            mWebView.animate().rotationX(45f).rotationY(45f).rotation(90f);
        } else {
            mWebView.animate().rotationX(0f).rotationY(0f).rotation(0f);
        }
    }
    private void setWebViewLayer(boolean isOnLayer) {
        if (isOnLayer) {
            mWebView.setLayerType(mIsWindowHardwareAccelerated ? View.LAYER_TYPE_HARDWARE
                                                               : View.LAYER_TYPE_SOFTWARE,
                    null);
        } else {
            mWebView.setLayerType(View.LAYER_TYPE_NONE, null);
        }
    }
}