/*
 * Copyright 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.androidx.webkit;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

/**
 * An {@link Activity} to exercise Js Java interaction related functionality.
 */
public class JsJavaInteractionActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_js_java_interaction);
        setTitle(R.string.js_java_interaction_activity_title);
        WebkitHelpers.appendWebViewVersionToTitle(this);

        final Context activityContext = this;
        MenuListView listView = findViewById(R.id.js_java_interaction_list);
        MenuListView.MenuItem[] menuItems = new MenuListView.MenuItem[] {
                new MenuListView.MenuItem(
                        getResources().getString(R.string.web_message_listener_activity_title),
                        new Intent(activityContext, WebMessageListenerActivity.class)),
                new MenuListView.MenuItem(
                        getResources().getString(
                                R.string.web_message_listener_malicious_website_activity_title),
                        new Intent(
                                activityContext, WebMessageListenerMaliciousWebsiteActivity.class)),
                new MenuListView.MenuItem(
                        getResources().getString(R.string.document_start_javascript_activity_title),
                        new Intent(activityContext, DocumentStartJavaScriptActivity.class)),
        };
        listView.setItems(menuItems);
    }
}
