/***
 * Wyciąg z książki "Hello, Android!",
 * opublikowanej przez wydawnictwo Helion S.A.
 * Niniejszy kod jest chroniony prawami autorskimi. Nie może zostać wykorzystany do utworzenia 
 * materiałów treningowych, kursów, książek, artykułów, itp. Prosimy o kontakt w razie
 * pojawienia się wątpliwości.
 * Nie gwarantujemy, że niniejszy kod będzie się nadawał do jakiegokolwiek celu. 
 * Więcej informacji można znaleźć na stronie http://www.pragmaticprogrammer.com/titles/eband.
***/
package org.przyklad.przegladarkalokalna;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class PrzegladarkaLokalna extends Activity {
    private static final String ZNACZNIK = "PrzeglądarkaLokalna" ;
    private final Handler proceduraobslugi = new Handler();
    private WebView widokWeb;
    private TextView widokTekst;
    private Button przycisk;
               
    /** Obiekt wystawiany dla środowiska JavaScript */
    private class AndroidPomost {
        public void wywolajAndroida(final String arg) { // zmienna musi być finalna
            proceduraobslugi.post(new Runnable() {
                public void run() {
                    Log.d(ZNACZNIK, "wywolajAndroida(" + arg + ")" );
                    widokTekst.setText(arg);
                }
            });
        }
    }
                              
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Wykrywa kontrolki Androida na ekranie
        widokWeb = (WebView) findViewById(R.id.widok_web);
        widokTekst = (TextView) findViewById(R.id.widok_tekstowy);
        przycisk = (Button) findViewById(R.id.przycisk);
        // Tutaj zostaje zdefiniowana reszta metody onCreate...
               
               
        // Uruchamia środowisko JavaScript wewnątrz osadzonej przeglądarki
        widokWeb.getSettings().setJavaScriptEnabled(true);

        // Odsłania obiekt Java dla kodu JavaScript w przeglądarce
        widokWeb.addJavascriptInterface(new AndroidPomost(),
            "android" );

               
        // Konfiguruje funkcję wywoływaną w momencie, gdy kod JavaScript
        // próbuje otworzyć okno alertu
        widokWeb.setWebChromeClient(new WebChromeClient() {
            @Override
            public boolean onJsAlert(final WebView widok,
                final String url, final String komunikat,
                    JsResult wynik) {
                Log.d(ZNACZNIK, "onJsAlert(" + widok + ", " + url + ", "
                        + komunikat + ", " + wynik + ")" );
                Toast.makeText(PrzegladarkaLokalna.this, komunikat, 3000).show();
                wynik.confirm();
                return true; // zadanie wykonane
            }
        });

        // Wczytuje stronę sieci Web z lokalnego katalogu assets
        widokWeb.loadUrl("file:///android_asset/indeks.html" );

                   
                
        // Funkcja ta zostanie wywołana w momencie naciśnięcia przycisku
        // przez użytkownika, po stronie Androida
        przycisk.setOnClickListener(new OnClickListener() {
            public void onClick(View widok) {
                Log.d(ZNACZNIK, "onClick(" + widok + ")" );
                widokWeb.loadUrl("javascript:wywolajJS('Pozdrowienia z Androida')" );
            }
        });               
    }                                                            
}
