/** @brief ページ読み込み進行ハンドラ 100% に達したらページ修正、オートログインなどを実施する */
  @Override
  public void onProgressChanged(WebView wv, int progress) {
    Log.d(TAG, "onProgressChanged = " + progress + " " + wv.getUrl());
    if (progress < 100) {
      if (dlg == null) {
        dlg = new Dialog(view.getContext());
        dlg.setTitle("Loading...");
        dlg.show();
      }
    } else {
      if (dlg != null) {
        dlg.dismiss();
        dlg = null;
      }

      if (autoLogin(wv)) {
        return;
      }

      String url = wv.getUrl();
      if (url != null && url.startsWith(INNER_URL_PREFIX)) {
        fixPage(wv);
      }
    }
  }
  @Ignore // RT-26710: javafx.scene.web.LeakTest hangs
  @Test
  public void testGarbageCollectability() throws InterruptedException {
    final BlockingQueue<WeakReference<WebPage>> webPageRefQueue =
        new LinkedBlockingQueue<WeakReference<WebPage>>();
    submit(
        () -> {
          WebView webView = new WebView();
          WeakReference<WebView> webViewRef = new WeakReference<WebView>(webView);
          WeakReference<WebEngine> webEngineRef = new WeakReference<WebEngine>(webView.getEngine());
          webPageRefQueue.add(new WeakReference<WebPage>(webView.getEngine().getPage()));

          webView = null;
          System.gc();
          assertNull("WebView has not been GCed", webViewRef.get());
          assertNull("WebEngine has not been GCed", webEngineRef.get());
        });

    WeakReference<WebPage> webPageRef = webPageRefQueue.take();
    long endTime = System.currentTimeMillis() + 5000;
    while (true) {
      System.gc();
      if (webPageRef.get() == null) {
        break;
      }
      if (System.currentTimeMillis() > endTime) {
        fail("WebPage has not been GCed");
      }
      Thread.sleep(100);
    }
  }
 /**
  * Request a new window from the client.
  *
  * @return The BrowserFrame object stored in the new WebView.
  */
 private BrowserFrame createWindow(boolean dialog, boolean userGesture) {
   WebView w = mCallbackProxy.createWindow(dialog, userGesture);
   if (w != null) {
     return w.getWebViewCore().getBrowserFrame();
   }
   return null;
 }
  public WebView createWindow(boolean dialog, boolean userGesture) {
    // Do an unsynchronized quick check to avoid posting if no callback has
    // been set.
    if (mWebChromeClient == null) {
      return null;
    }

    WebView.WebViewTransport transport = mWebView.new WebViewTransport();
    final Message msg = obtainMessage(NOTIFY);
    msg.obj = transport;
    synchronized (this) {
      sendMessage(obtainMessage(CREATE_WINDOW, dialog ? 1 : 0, userGesture ? 1 : 0, msg));
      try {
        wait();
      } catch (InterruptedException e) {
        Log.e(LOGTAG, "Caught exception while waiting for createWindow");
        Log.e(LOGTAG, Log.getStackTraceString(e));
      }
    }

    WebView w = transport.getWebView();
    if (w != null) {
      w.getWebViewCore().initializeSubwindow();
    }
    return w;
  }
Example #5
0
 @Override
 public void onBackPressed() {
   super.onBackPressed();
   if (webView.canGoBack()) {
     webView.goBack();
   } else {
     Toast.makeText(OAuthActivity.this, getString(R.string.you_cancel_login), Toast.LENGTH_SHORT)
         .show();
     finish();
   }
 }
Example #6
0
  public void refresh() {
    webView.clearView();
    webView.loadUrl("about:blank");
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    ImageView iv = (ImageView) inflater.inflate(R.layout.refresh_action_view, null);

    Animation rotation = AnimationUtils.loadAnimation(this, R.anim.refresh);
    iv.startAnimation(rotation);

    refreshItem.setActionView(iv);
    webView.loadUrl(getWeiboOAuthUrl());
  }
Example #7
0
  @Override
  public void onBackPressed() {
    if (webView.canGoBack()) {

      webView.goBack();
      webView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);

    } else {

      super.onBackPressed();
    }
  }
 public WebViewJavascriptBridge(Activity context, WebView webview, WVJBHandler handler) {
   this.mContext = context;
   this.mWebView = webview;
   this._messageHandler = handler;
   _messageHandlers = new HashMap<String, WVJBHandler>();
   _responseCallbacks = new HashMap<String, WVJBResponseCallback>();
   _uniqueId = 0;
   WebSettings webSettings = mWebView.getSettings();
   webSettings.setJavaScriptEnabled(true);
   mWebView.addJavascriptInterface(this, "_WebViewJavascriptBridge");
   mWebView.setWebViewClient(new MyWebViewClient());
   mWebView.setWebChromeClient(new MyWebChromeClient()); // optional, for show console and alert
 }
  private void initPane() {
    //		WebEngine engine = optionView.getEngine();
    try {
      Document document = Jsoup.connect(webView.getEngine().getLocation()).get();
      Element table =
          document.select("#normal_basket_" + document.select("[name=item_id]").val()).first();
      Element td = table.select("td").first();
      Elements spans = td.select("span");
      Elements selects = td.select("select");
      //			System.out.println(spans.size());
      cmb = new ArrayList<ComboBox>();
      for (int i = 0; i < spans.size(); i++) {

        ObservableList<ValuePair> obs = FXCollections.observableArrayList();
        Elements options = selects.get(i).select("option");
        for (int k = 0; k < options.size(); k++) {
          Element option = options.get(k);
          obs.add(new ValuePair("choice", option.text(), option.val()));
        }

        cmb.add(new ComboBox<ValuePair>(obs));
        optionArea.getChildren().addAll(new Text(spans.get(i).text()), cmb.get(i));
      }

    } catch (Exception e) {
      // TODO 自動生成された catch ブロック
      e.printStackTrace();
    }
  }
  /** @brief オートログイン */
  public boolean autoLogin(WebView wv) {
    String js, fmt;

    // ログインページに居るかどうか確認
    String url = wv.getUrl();
    if (url == null || !url.startsWith(LOGIN_URL)) {
      return false;
    }

    // User ID / Pass を取得
    SharedPreferences prefs =
        context.getSharedPreferences(PrefActivity.PREF_NAME, Context.MODE_PRIVATE);
    String uid = prefs.getString(PrefActivity.PREF_KEY_USERID, "");
    String pass = prefs.getString(PrefActivity.PREF_KEY_PASSWORD, "");

    // auto login
    for (int i = 1; i <= 2; i++) {
      fmt = "javascript:document.getElementById(\"user_id%d\").value=\"%s\"";
      js = String.format(fmt, i, uid);
      runJs(wv, js);

      fmt = "javascript:document.getElementById(\"password%d\").value=\"%s\"";
      js = String.format(fmt, i, pass);
      runJs(wv, js);
    }

    return true;
  }
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
      // TODO Auto-generated method stub

      view.loadUrl(url);
      return true;
    }
Example #12
0
  public void doNav() {

    String url = urlField.getText().toString();

    if (URLUtil.isValidUrl(url) == false) {
      url = "http://" + url;
    }

    urlField.setText(url);

    webView.requestFocus();

    webView.loadUrl(url);

    navbar.startAnimation(slideUp);
  }
  @Override
  public void initialize(URL location, ResourceBundle resources) {
    urlField.setOnAction(
        event -> {
          String text = urlField.getText();
          urlField.setText("tetetetetetetete");
          webView.getEngine().load(text);
        });

    webView
        .getEngine()
        .getLoadWorker()
        .stateProperty()
        .addListener(
            (ov, oldState, newState) -> {
              if (newState == State.SUCCEEDED) {
                String url = webView.getEngine().getLocation();
                urlField.setText(url);
                if (Pattern.compile("http://item.rakuten.co.jp/.*").matcher(url).find()) {
                  try {
                    Elements tmp;
                    Document document = Jsoup.connect(url).get();
                    tmp = document.select("input");
                    tmp = tmp.select("#etime");
                    if (tmp.size() != 0) {
                      if (!(Long.parseLong(tmp.first().val()) < new Date().getTime())) {
                        entryButton.setDisable(false);
                      }
                    } else {
                      entryButton.setDisable(false);
                    }
                  } catch (Exception e) {
                    // TODO 自動生成された catch ブロック
                    e.printStackTrace();
                  }
                }
              }
              ;
            });

    entryButton.setOnAction(
        event -> {
          urlField.setText("webView disable");
          sendEntryTaskController();
        });
  }
  @Override
  public void initialize(URL location, ResourceBundle resources) {
    // TODO 自動生成されたメソッド・スタブ
    addOption.setOnAction(
        event -> {
          for (int i = 0; i < cmb.size(); i++) {
            //				System.out.println(cmb.get(i).getValue());
            if (cmb.get(i).getValue() == null) {
              break;
            } else if (i == cmb.size() - 1) {
              addTask.setDisable(false);
            }
          }
        });

    addTask.setOnAction(
        event -> {
          try {
            String url = webView.getEngine().getLocation();
            System.out.println(url);
            Document document = Jsoup.connect(url).get();

            Elements input = document.select("input");

            Map params = new HashMap<String, String>();
            for (ComboBox cmbx : cmb) {
              ValuePair vp = (ValuePair) cmbx.getValue();
              params.put(vp.getName(), vp.getvalue());
            }
            //				System.out.println(input.select("[name=shop_bid]").first());
            //				System.out.println(input.select("[name=shop_bid]").first().val());
            params.put("shop_bid", input.select("[name=shop_bid]").first().val());
            params.put("item_id", input.select("[name=item_id]").first().val());
            params.put("__event", input.select("[name=__event]").first().val());
            params.put("units", "1");

            Map map = new HashMap<String, Long>();

            //				System.out.println(document.select("#stime").size());
            if (document.select("#stime").size() != 0) {
              System.out.println(document.select("#stime"));
              map.put("stime", Long.parseLong((input.select("#stime").first().val())));
              map.put("etime", Long.parseLong((input.select("#etime").first().val())));
            } else {
              map = null;
            }

            BuyTask task = new BuyTask(url, params, map);
            task.call();
            this.getScene().getWindow().hide();
          } catch (Exception e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
          }
        });
  }
 @Override
 public void onClick(View inButton) {
   boolean isErr = false;
   if (mTitle.getText().toString().length() == 0) {
     mTitle.setError("Required");
     mTitle.setEms(10);
     isErr = true;
   }
   if (mDesc.getText().toString().length() == 0) {
     mDesc.setActivated(true);
     mDesc.setError("Required");
     isErr = true;
   }
   if (inButton.getId() == openWeb.getId()) web.setVisibility(View.VISIBLE);
   else if (inButton.getId() == mAvail.getId())
     startActivity(new Intent(this, CheckActivity.class));
   else if (inButton.getId() == mBack.getId()) finish();
   else if (inButton.getId() == mSub.getId()) {
     AlertDialog.Builder al = new AlertDialog.Builder(this);
     if (isErr) return;
     else
       al.setTitle("Continue?")
           .setIcon(R.drawable.ornament)
           .setMessage("Your listing is going to be submitted to your chosen category.")
           .setPositiveButton(
               "OK",
               new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface d, int x) {
                   payment = new ArrayList<String>();
                   if (mCard.isChecked()) payment.add("Card");
                   if (mCheck.isChecked()) payment.add("Check");
                   if (mOnline.isChecked()) payment.add("Online");
                   if (mCash.isChecked()) payment.add("Cash");
                   //			Toast.makeText(getApplicationContext(), payment.toString(),
                   // Toast.LENGTH_LONG).show();
                   Intent intent = new Intent(getApplicationContext(), StartActivity.class);
                   intent.putExtra("Payment", payment);
                   intent.putExtra("Category", mChosenCategory);
                   intent.putExtra("Title", mTitle.getText().toString());
                   intent.putExtra("Price", mPrice.getText().toString());
                   intent.putExtra("Description", mDesc.getText().toString());
                   intent.putExtra("Location", mLocation.getText().toString());
                   intent.putExtra("Photo", jpegData);
                   startActivity(intent);
                 }
               })
           .setNegativeButton(
               "Cancel",
               new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface d, int x) {}
               })
           .show();
   } else
     startActivityForResult(
         new Intent(this, com.lightbox.android.camera.activities.Camera.class), REQ);
 }
 @DSComment("Private Method")
 @DSBan(DSCat.PRIVATE_METHOD)
 @DSGenerator(
     tool_name = "Doppelganger",
     tool_version = "2.0",
     generated_on = "2013-12-30 12:32:41.986 -0500",
     hash_original_method = "A59843A23C4CF1F3FD140F676EC35D8E",
     hash_generated_method = "20C50B3A68FF077FC0E66FC1B4666469")
 private synchronized String getSignedPublicKey(int index, String challenge, String url) {
   WebView current = sCurrentMainWebView.get();
   if (current != null) {
     // generateKeyPair expects organizations which we don't have. Ignore
     // url.
     return CertTool.getSignedPublicKey(current.getContext(), index, challenge);
   } else {
     Log.e(LOGTAG, "There is no active WebView for getSignedPublicKey");
     return "";
   }
 }
Example #17
0
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {

      if (url.startsWith(URLHelper.DIRECT_URL)) {

        handleRedirectUrl(view, url);
        view.stopLoading();
        return;
      }
      super.onPageStarted(view, url, favicon);
    }
Example #18
0
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.oauthactivity_layout);
    ActionBar actionBar = getActionBar();
    actionBar.setDisplayHomeAsUpEnabled(false);
    actionBar.setTitle(getString(R.string.login));
    webView = (WebView) findViewById(R.id.webView);
    webView.setWebViewClient(new WeiboWebViewClient());

    WebSettings settings = webView.getSettings();
    settings.setJavaScriptEnabled(true);
    settings.setSaveFormData(false);
    settings.setSavePassword(false);
    settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
    settings.setRenderPriority(WebSettings.RenderPriority.HIGH);

    CookieSyncManager.createInstance(this);
    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.removeAllCookie();
  }
  private void writeDeveloperError(WebView webView, Exception e, OutputStream entityStream) {
    try {
      // Note:
      // This could be seen as a "server error", but we don't set the Status header to 500 because
      // we want to be
      // able to distinguish between actual server errors (internal Mayocat Shop server error) and
      // theme
      // developers errors (which this is).
      // This is comes at play when setting up monitoring with alerts on a number of 5xx response
      // above a
      // certain threshold.

      // Re-serialize the context as json with indentation for better debugging
      ObjectMapper mapper = new ObjectMapper();
      mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
      Map<String, Object> context = webView.data();
      String jsonContext = mapper.writeValueAsString(context);
      Template error =
          new Template(
              "developerError",
              Resources.toString(
                  Resources.getResource("templates/developerError.html"), Charsets.UTF_8));
      Map<String, Object> errorContext = Maps.newHashMap();
      errorContext.put(
          "error", StringEscapeUtils.escapeXml(cleanErrorMessageForDisplay(e.getMessage())));
      errorContext.put("stackTrace", StringEscapeUtils.escapeXml(ExceptionUtils.getStackTrace(e)));
      errorContext.put("context", StringEscapeUtils.escapeXml(jsonContext).trim());
      errorContext.put("rawContext", jsonContext);
      errorContext.put("template", webView.template().toString());

      engine.get().register(error);
      String rendered = engine.get().render(error.getId(), mapper.writeValueAsString(errorContext));
      entityStream.write(rendered.getBytes());
    } catch (Exception e1) {
      throw new RuntimeException(e1);
    }
  }
Example #20
0
 @Override
 protected void onPause() {
   super.onPause();
   if (isFinishing()) webView.stopLoading();
 }
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.profile);
    findViews();
    /*Select Category work */
    final String[] categories = getIntent().getStringArrayExtra("Options");
    ArrayAdapter<String> catadapt;
    catadapt = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, categories);
    mCatSpin.setAdapter(catadapt);
    mCatSpin.setOnItemSelectedListener(
        new OnItemSelectedListener() {
          public void onItemSelected(AdapterView<?> parent, View v, int pos, long id) {
            mChosenCategory = categories[pos];
          }

          public void onNothingSelected(AdapterView<?> parent) {}
        });
    /*Availability selection work*/
    mAvail = (Button) findViewById(R.id.editavail);
    mAvail.setOnClickListener(this);
    /*Submit/Back button work*/
    mSub = (Button) findViewById(R.id.submitbutton);
    mSub.setOnClickListener(this);
    mBack.setOnClickListener(this);
    /*Web View & Camera uploader work*/
    openCam.setOnClickListener(this);
    openWeb.setOnClickListener(this);
    web.getSettings().setJavaScriptEnabled(true);
    web.loadUrl("http://www.monkbananas.com/uploader/index.php");
    // ------Everything below this line was found on StackOverflow--------------------
    web.setWebChromeClient(
        new WebChromeClient() {
          @Override
          public boolean shouldOverrideUrlLoading(WebView v, String url) {
            web.loadUrl(url);
            return true;
          }
          // The undocumented magic method override
          // Eclipse will swear at you if you try to put @Override here
          // For Android 3.0+
          public void openFileChooser(ValueCallback<Uri> uploadMsg) {

            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.setType("image/*");
            startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);
          }

          // For Android 3.0+
          public void openFileChooser(ValueCallback uploadMsg, String acceptType) {
            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.setType("*/*");
            startActivityForResult(Intent.createChooser(i, "File Browser"), FILECHOOSER_RESULTCODE);
          }

          // For Android 4.1
          public void openFileChooser(
              ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.setType("image/*");
            startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);
          }
        });
  }
 /**
  * Notify the host application that a key was not handled by the WebView. Except system keys,
  * WebView always consumes the keys in the normal flow or if shouldOverrideKeyEvent returns true.
  * This is called asynchronously from where the key is dispatched. It gives the host application a
  * chance to handle the unhandled key events.
  *
  * @param view The WebView that is initiating the callback.
  * @param event The key event.
  */
 public void onUnhandledKeyEvent(WebView view, KeyEvent event) {
   ViewRootImpl root = view.getViewRootImpl();
   if (root != null) {
     root.dispatchUnhandledKey(event);
   }
 }
Example #23
0
  @Override
  public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
    linearLayout.setBackgroundColor(Color.BLACK);

    // Navbar setup

    navbar = (LinearLayout) findViewById(R.id.navbar);
    goButton = (Button) findViewById(R.id.go_button);
    urlField = (EditText) findViewById(R.id.url);

    goButton.setOnClickListener(
        new View.OnClickListener() {
          public void onClick(View v) {
            doNav();
          }
        });

    urlField.setOnEditorActionListener(
        new OnEditorActionListener() {
          @Override
          public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            boolean handled = false;
            if (actionId == EditorInfo.IME_ACTION_GO) {

              doNav();

              handled = true;
            }
            return handled;
          }
        });

    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    String lastUrl = settings.getString("lastUrl", "");

    urlField.setText(lastUrl);

    // Navbar animation settings

    AnimationListener slideListener =
        new AnimationListener() {
          @Override
          public void onAnimationEnd(Animation animation) {
            if (animation.equals(slideUp)) {
              navbar.setVisibility(View.GONE);
            }
          }

          @Override
          public void onAnimationRepeat(Animation animation) {}

          @Override
          public void onAnimationStart(Animation animation) {
            if (animation.equals(slideDown)) {
              navbar.setVisibility(View.VISIBLE);
            }
          }
        };

    slideUp =
        new TranslateAnimation(
            Animation.RELATIVE_TO_SELF,
            0.0f,
            Animation.RELATIVE_TO_SELF,
            0.0f,
            Animation.RELATIVE_TO_SELF,
            0.0f,
            Animation.RELATIVE_TO_SELF,
            -1.0f);
    slideUp.setDuration(500);
    slideUp.setAnimationListener(slideListener);

    slideDown =
        new TranslateAnimation(
            Animation.RELATIVE_TO_SELF,
            0.0f,
            Animation.RELATIVE_TO_SELF,
            0.0f,
            Animation.RELATIVE_TO_SELF,
            -1.0f,
            Animation.RELATIVE_TO_SELF,
            0.0f);
    slideDown.setDuration(500);
    slideDown.setAnimationListener(slideListener);

    // WebView setup

    webView = (WebView) findViewById(R.id.webView);

    WebSettings webSettings = webView.getSettings();

    webView.setWebChromeClient(new WebChromeClient());

    webView.setWebViewClient(
        new WebViewClient() {

          @Override
          public void onPageFinished(WebView view, String url) {

            Log.d("scale", view.getScale() + "");

            Log.d("pageFinished", url);

            view.setInitialScale(70);

            if (url.equalsIgnoreCase(HOME_PAGE)) {
              // navbar.setVisibility(View.VISIBLE);
              navbar.startAnimation(slideDown);
            }
          }

          @Override
          public void onScaleChanged(WebView view, float oldScale, float newScale) {

            Log.d("scale changed", oldScale + " - " + newScale);

            if (newScale > 0.7) {

              Log.d("scale", "reset");
              // view.setInitialScale(70);

            }
          }
        });

    webView.setInitialScale(70);

    webView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
    webView.setVerticalScrollBarEnabled(false);
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    webView.setOverScrollMode(WebView.OVER_SCROLL_NEVER);

    webSettings.setBuiltInZoomControls(true);
    webSettings.setDisplayZoomControls(false);

    webSettings.setSupportZoom(true);

    webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
    webSettings.setPluginState(WebSettings.PluginState.ON);
    webSettings.setJavaScriptEnabled(true);
    webSettings.setDomStorageEnabled(true);
    webSettings.setDatabaseEnabled(true);
    webSettings.setDatabasePath(
        "/data/data/" + webView.getContext().getPackageName() + "/databases/");
    webSettings.setSaveFormData(false);
    webSettings.setLightTouchEnabled(false);
    webSettings.setLayoutAlgorithm(LayoutAlgorithm.NORMAL);
    webSettings.setRenderPriority(RenderPriority.HIGH);
    webSettings.setUserAgentString(
        "Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.77 Large Screen Safari/534.24 GoogleTV");

    final Intent intent = getIntent();
    if ((intent.getAction() == Intent.ACTION_VIEW) && (intent.getData() != null)) {
      final String url = intent.getDataString();
      urlField.setText(url);
      webView.loadUrl(url);
      navbar.setVisibility(View.GONE);
    } else {
      webView.loadUrl(HOME_PAGE);
    }

    webView.requestFocus();
  }
Example #24
0
 public void run() {
   WebView webView = new WebView();
   webView.mainLaunch(link);
 }
Example #25
0
 @Override
 protected void onDestroy() {
   super.onDestroy();
   webView.clearCache(true);
 }
  @Override
  public void handleMessage(Message msg) {
    // We don't have to do synchronization because this function operates
    // in the UI thread. The WebViewClient and WebChromeClient functions
    // that check for a non-null callback are ok because java ensures atomic
    // 32-bit reads and writes.
    switch (msg.what) {
      case PAGE_STARTED:
        if (mWebViewClient != null) {
          mWebViewClient.onPageStarted(mWebView, msg.getData().getString("url"), (Bitmap) msg.obj);
        }
        break;

      case PAGE_FINISHED:
        if (mWebViewClient != null) {
          mWebViewClient.onPageFinished(mWebView, (String) msg.obj);
        }
        break;

      case RECEIVED_ICON:
        if (mWebChromeClient != null) {
          mWebChromeClient.onReceivedIcon(mWebView, (Bitmap) msg.obj);
        }
        break;

      case RECEIVED_TITLE:
        if (mWebChromeClient != null) {
          mWebChromeClient.onReceivedTitle(mWebView, (String) msg.obj);
        }
        break;

      case TOO_MANY_REDIRECTS:
        Message cancelMsg = (Message) msg.getData().getParcelable("cancelMsg");
        Message continueMsg = (Message) msg.getData().getParcelable("continueMsg");
        if (mWebViewClient != null) {
          mWebViewClient.onTooManyRedirects(mWebView, cancelMsg, continueMsg);
        } else {
          cancelMsg.sendToTarget();
        }
        break;

      case REPORT_ERROR:
        if (mWebViewClient != null) {
          int reasonCode = msg.arg1;
          final String description = msg.getData().getString("description");
          final String failUrl = msg.getData().getString("failingUrl");
          mWebViewClient.onReceivedError(mWebView, reasonCode, description, failUrl);
        }
        break;

      case RESEND_POST_DATA:
        Message resend = (Message) msg.getData().getParcelable("resend");
        Message dontResend = (Message) msg.getData().getParcelable("dontResend");
        if (mWebViewClient != null) {
          mWebViewClient.onFormResubmission(mWebView, dontResend, resend);
        } else {
          dontResend.sendToTarget();
        }
        break;

      case OVERRIDE_URL:
        String overrideUrl = msg.getData().getString("url");
        boolean override = uiOverrideUrlLoading(overrideUrl);
        ResultTransport<Boolean> result = (ResultTransport<Boolean>) msg.obj;
        synchronized (this) {
          result.setResult(override);
          notify();
        }
        break;

      case AUTH_REQUEST:
        if (mWebViewClient != null) {
          HttpAuthHandler handler = (HttpAuthHandler) msg.obj;
          String host = msg.getData().getString("host");
          String realm = msg.getData().getString("realm");
          mWebViewClient.onReceivedHttpAuthRequest(mWebView, handler, host, realm);
        }
        break;

      case SSL_ERROR:
        if (mWebViewClient != null) {
          HashMap<String, Object> map = (HashMap<String, Object>) msg.obj;
          mWebViewClient.onReceivedSslError(
              mWebView, (SslErrorHandler) map.get("handler"), (SslError) map.get("error"));
        }
        break;

      case PROGRESS:
        // Synchronize to ensure mLatestProgress is not modified after
        // setProgress is called and before mProgressUpdatePending is
        // changed.
        synchronized (this) {
          if (mWebChromeClient != null) {
            mWebChromeClient.onProgressChanged(mWebView, mLatestProgress);
          }
          mProgressUpdatePending = false;
        }
        break;

      case UPDATE_VISITED:
        if (mWebViewClient != null) {
          mWebViewClient.doUpdateVisitedHistory(mWebView, (String) msg.obj, msg.arg1 != 0);
        }
        break;

      case LOAD_RESOURCE:
        if (mWebViewClient != null) {
          mWebViewClient.onLoadResource(mWebView, (String) msg.obj);
        }
        break;

      case DOWNLOAD_FILE:
        if (mDownloadListener != null) {
          String url = msg.getData().getString("url");
          String userAgent = msg.getData().getString("userAgent");
          String contentDisposition = msg.getData().getString("contentDisposition");
          String mimetype = msg.getData().getString("mimetype");
          Long contentLength = msg.getData().getLong("contentLength");

          mDownloadListener.onDownloadStart(
              url, userAgent, contentDisposition, mimetype, contentLength);
        }
        break;

      case CREATE_WINDOW:
        if (mWebChromeClient != null) {
          if (!mWebChromeClient.onCreateWindow(
              mWebView, msg.arg1 == 1, msg.arg2 == 1, (Message) msg.obj)) {
            synchronized (this) {
              notify();
            }
          }
        }
        break;

      case REQUEST_FOCUS:
        if (mWebChromeClient != null) {
          mWebChromeClient.onRequestFocus(mWebView);
        }
        break;

      case CLOSE_WINDOW:
        if (mWebChromeClient != null) {
          mWebChromeClient.onCloseWindow((WebView) msg.obj);
        }
        break;

      case SAVE_PASSWORD:
        Bundle bundle = msg.getData();
        String schemePlusHost = bundle.getString("host");
        String username = bundle.getString("username");
        String password = bundle.getString("password");
        // If the client returned false it means that the notify message
        // will not be sent and we should notify WebCore ourselves.
        if (!mWebView.onSavePassword(schemePlusHost, username, password, (Message) msg.obj)) {
          synchronized (this) {
            notify();
          }
        }
        break;

      case ASYNC_KEYEVENTS:
        if (mWebViewClient != null) {
          mWebViewClient.onUnhandledKeyEvent(mWebView, (KeyEvent) msg.obj);
        }
        break;

      case JS_ALERT:
        if (mWebChromeClient != null) {
          JsResult res = (JsResult) msg.obj;
          String message = msg.getData().getString("message");
          String url = msg.getData().getString("url");
          if (!mWebChromeClient.onJsAlert(mWebView, url, message, res)) {
            res.handleDefault();
          }
          res.setReady();
        }
        break;

      case JS_CONFIRM:
        if (mWebChromeClient != null) {
          JsResult res = (JsResult) msg.obj;
          String message = msg.getData().getString("message");
          String url = msg.getData().getString("url");
          if (!mWebChromeClient.onJsConfirm(mWebView, url, message, res)) {
            res.handleDefault();
          }
          // Tell the JsResult that it is ready for client
          // interaction.
          res.setReady();
        }
        break;

      case JS_PROMPT:
        if (mWebChromeClient != null) {
          JsPromptResult res = (JsPromptResult) msg.obj;
          String message = msg.getData().getString("message");
          String defaultVal = msg.getData().getString("default");
          String url = msg.getData().getString("url");
          if (!mWebChromeClient.onJsPrompt(mWebView, url, message, defaultVal, res)) {
            res.handleDefault();
          }
          // Tell the JsResult that it is ready for client
          // interaction.
          res.setReady();
        }
        break;

      case JS_UNLOAD:
        if (mWebChromeClient != null) {
          JsResult res = (JsResult) msg.obj;
          String message = msg.getData().getString("message");
          String url = msg.getData().getString("url");
          if (!mWebChromeClient.onJsBeforeUnload(mWebView, url, message, res)) {
            res.handleDefault();
          }
          res.setReady();
        }
        break;

      case RECEIVED_CERTIFICATE:
        mWebView.setCertificate((SslCertificate) msg.obj);
        break;

      case NOTIFY:
        synchronized (this) {
          notify();
        }
        break;

      case SCALE_CHANGED:
        if (mWebViewClient != null) {
          mWebViewClient.onScaleChanged(
              mWebView, msg.getData().getFloat("old"), msg.getData().getFloat("new"));
        }
        break;

      case SWITCH_OUT_HISTORY:
        mWebView.switchOutDrawHistory();
        break;
    }
  }
 private void loadWebViewJavascriptBridgeJs(WebView webView) {
   InputStream is = mContext.getResources().openRawResource(R.raw.webviewjavascriptbridge);
   String script = convertStreamToString(is);
   webView.loadUrl("javascript:" + script);
 }
 /** @brief JavaScript 実行 */
 private void runJs(WebView wv, String js) {
   wv.loadUrl(js);
   Log.d(TAG, "exec js: " + js);
 }
Example #29
0
 @Override
 public boolean shouldOverrideUrlLoading(WebView view, String url) {
   view.loadUrl(url);
   return true;
 }
  @Override
  public void writeTo(
      WebView webView,
      Class<?> type,
      Type genericType,
      Annotation[] annotations,
      MediaType mediaType,
      MultivaluedMap<String, Object> httpHeaders,
      OutputStream entityStream)
      throws IOException, WebApplicationException {
    try {

      if (!mediaType.equals(MediaType.APPLICATION_JSON_TYPE)
          && webContext.getTheme() != null
          && !webContext.getTheme().isValidDefinition()) {
        // Fail fast with invalid theme error page, so that the developer knows ASAP and can correct
        // it.
        writeHttpError("Invalid theme definition", entityStream);
        return;
      }

      Template masterTemplate = null;
      try {
        masterTemplate =
            themeFileResolver.getIndexTemplate(webContext.getRequest().getBreakpoint());
      } catch (TemplateNotFoundException e) {
        if (!mediaType.equals(MediaType.APPLICATION_JSON_TYPE)) {
          // For JSON API calls, we don't care if the template is found or not.
          // For other calls, raise the exception
          throw e;
        }
      }

      Template template = null;
      String jsonContext = null;

      if (!mediaType.equals(MediaType.APPLICATION_JSON_TYPE)) {
        if (webView.model().isPresent()) {
          // Check for a model

          Optional<String> path = themeFileResolver.resolveModelPath(webView.model().get());
          if (path.isPresent()) {
            try {
              template =
                  themeFileResolver.getTemplate(
                      path.get(), webContext.getRequest().getBreakpoint());
            } catch (TemplateNotFoundException e) {
              // Keep going
            }
          }
          // else just fallback on the default model
        }

        if (template == null) {
          try {
            template =
                themeFileResolver.getTemplate(
                    webView.template().toString(), webContext.getRequest().getBreakpoint());
          } catch (TemplateNotFoundException e) {
            if (webView.hasOption(WebView.Option.FALLBACK_ON_DEFAULT_THEME)) {
              try {
                template =
                    themeFileResolver.getTemplate(
                        themeManager.getDefaultTheme(),
                        webView.template().toString(),
                        webContext.getRequest().getBreakpoint());
              } catch (TemplateNotFoundException e1) {
                // continue
              }
            }
            if (template == null
                && webView.hasOption(WebView.Option.FALLBACK_ON_GLOBAL_TEMPLATES)) {
              template =
                  themeFileResolver.getGlobalTemplate(
                      webView.template().toString(), webContext.getRequest().getBreakpoint());
            }
          }
        }
      }

      if (!mediaType.equals(MediaType.APPLICATION_JSON_TYPE)
          || httpHeaders.containsKey("X-Mayocat-Full-Context")) {
        if (template != null) {
          webView.data().put("templateContent", template.getId());
          webView.data().put("template", FilenameUtils.getBaseName(webView.template().toString()));
        }

        for (WebDataSupplier supplier : dataSuppliers.values()) {
          supplier.supply(webView.data());
        }
      }

      try {
        ObjectMapper mapper = new ObjectMapper();

        if (mediaType.equals(MediaType.APPLICATION_JSON_TYPE)) {
          mapper.writeValue(entityStream, webView.data());
          return;
        }

        if (template == null) {
          throw new TemplateNotFoundException();
        }

        jsonContext = mapper.writeValueAsString(webView.data());
        engine.get().register(template);
        engine.get().register(masterTemplate);
        String rendered = engine.get().render(masterTemplate.getId(), jsonContext);
        entityStream.write(rendered.getBytes());
      } catch (JsonMappingException e) {
        this.logger.warn("Failed to serialize JSON context", e);
        writeDeveloperError(webView, e, entityStream);
      } catch (TemplateEngineException e) {
        writeDeveloperError(webView, e, entityStream);
      }
    } catch (TemplateNotFoundException e) {
      throw new WebApplicationException(
          Response.status(Response.Status.INTERNAL_SERVER_ERROR)
              .entity("Template not found : " + webView.template().toString())
              .build());
    }
  }