朱仁义 發表於 2020-11-13 11:00:00

cordova混合App开发:Cordova+Vue实现Android APP开发 (app内打开浏览器及横竖屏) (七)

<p>app内打开浏览器目前主要2个cordova插件</p>
<div>
<div>cordova-plugin-inappbrowser 和&nbsp; cordova-plugin-themeablebrowser</div>
<div>themeablebrowser是在cordova-plugin-inappbrowser基础上二次开发的, 支持webview中有按钮,及相关按钮事件 是我们想要的</div>
<div>&nbsp;</div>
<div>
<h3>第一步</h3>
<blockquote>
<p>在已有项目目录下添加插件 <code>cordova plugin add cordova-plugin-themeablebrowser</code></p>
</blockquote>
</div>
<div>
<div>
<h3>第二步 准备图片</h3>
<p><code><span style="font-size: 18px">&nbsp;vue项目下新建static/browserIcons文件夹, 放入准备好的 back.png 和 close.png</span></code></p>
<p>&nbsp;</p>
<div>
<h3>第三步&nbsp; 修改webpack打包规则</h3>
<p>根据插件要求, <code>wwwImage</code><span><span>从Cordova的</span></span><code>www</code><span><span>目录</span><span>加载图像</span><span>。</span></span><span><span>所以我们需要把插件需要的第二步图片 放到cordova www目录下</span></span></p>
<p><span><span>因为www目录 我们之前修改过vue项目的build目录 每次vue build 会把www目录删掉从新生成, 所以手工拷贝不靠谱</span></span></p>
<p><span><span>安装 copy-webpack-plugin</span></span></p>
<div class="cnblogs_code">
<pre>npm install --save copy-webpack-plugin</pre>
</div>
<p>修改 vue项目&nbsp; vue.config.js&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/782227/202011/782227-20201113103431752-1470159889.png"></p>
<p>&nbsp;</p>
<p>&nbsp;<code>from 定义要拷贝的源文件 from:__dirname+'/src/components'</code></p>
<p><code>to 定义要拷贝到的目标文件夹 to: __dirname+'/dist' </code></p>
<p><code>toType file 或者 dir 可选,默认是文件 </code></p>
<p><code>force 强制覆盖前面的插件 可选,默认是文件 </code></p>
<p><code>context 可选,默认base context可用specific context </code></p>
<p><code>flatten 只拷贝指定的文件 可以用模糊匹配 </code></p>
<p><code>ignore 忽略拷贝指定的文件 可以模糊匹配</code></p>
</div>
</div>
</div>
<div>&nbsp;</div>
</div>
<p>&nbsp;</p>
<h3>第四步 修改相应vue页面&nbsp; 我这里是修改的 helloword.vue</h3>
<p><code><span style="font-size: 18px">&nbsp;相关按钮及事件 参考 插件github&nbsp; https://github.com/initialxy/cordova-plugin-themeablebrowser<br></span></code></p>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">hello</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;
    &lt;h1&gt;{{ msg }}&lt;/h1&gt;
    &lt;button @click=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">handleAxiosRequest</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;axios调用&lt;/button&gt;
    &lt;h1&gt;{{ bjtime }}&lt;/h1&gt;
    &lt;button @click=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">openAppBrowser('https://www.google.com/')</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;跳转页面1&lt;/button&gt;
    &lt;button @click=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">openAppBrowser('https://www.nginx.com/')</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;跳转页面2&lt;/button&gt;

&lt;/div&gt;
&lt;/template&gt;

&lt;script&gt;<span style="color: rgba(0, 0, 0, 1)">
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
name: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">HelloWorld</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
props: {
    msg: String,
},
data() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
      bjtime: </span><span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,
    };
},
methods: {
    openAppBrowser(url) {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Keep in mind that you must add your own images to native resource.
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Images below are for sample only. They are not imported by this plugin.</span>
      window.cordova.ThemeableBrowser.open(url, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_blank</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, {
      statusbar: {
          color: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">#EBCE9C</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      },
      title: {
          color: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">#000000</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          showPageTitle: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
          staticText:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">换成自己的标题,或者不显示</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      },
      backButton: {
          wwwImage: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">browserIcons/back.png</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          wwwImagePressed: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">browserIcons/back.png</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          align: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">left</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          wwwImageDensity: </span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">,
          </span><span style="color: rgba(0, 0, 255, 1)">event</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">backPressed</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      },
      closeButton: {
          wwwImage: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">browserIcons/close.png</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          wwwImagePressed: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">browserIcons/close.png</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          align: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">right</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
          wwwImageDensity: </span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">,
          </span><span style="color: rgba(0, 0, 255, 1)">event</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">closePressed</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      },
      backButtonCanClose: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
      })
      .addEventListener(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">backPressed</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, function (e) {
          alert(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">back pressed</span><span style="color: rgba(128, 0, 0, 1)">"</span>+<span style="color: rgba(0, 0, 0, 1)">e);
      })
      .addEventListener(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">helloPressed</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, function (e) {
          alert(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">hello pressed</span><span style="color: rgba(128, 0, 0, 1)">"</span>+<span style="color: rgba(0, 0, 0, 1)">e);
      })
      .addEventListener(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">sharePressed</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, function (e) {
          alert(e.url);
      })
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> .addEventListener(window.cordova.ThemeableBrowser.EVT_ERR, function (e) {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   console.error(e.message);
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> })
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> .addEventListener(window.cordova.ThemeableBrowser.EVT_WRN, function (e) {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   console.log(e.message);
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> });</span>
<span style="color: rgba(0, 0, 0, 1)">    },
    handleAxiosRequest() {
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.$axios
      .</span><span style="color: rgba(0, 0, 255, 1)">get</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">https://quan.suning.com/getSysTime.do</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
      .then(({ data }) </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
          </span><span style="color: rgba(0, 0, 255, 1)">this</span>.bjtime =<span style="color: rgba(0, 0, 0, 1)"> data;
      })
      .</span><span style="color: rgba(0, 0, 255, 1)">catch</span>((err) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
          console.log(err);
      });
    },
},
};
</span>&lt;/script&gt;</pre>
</div>
<p>&nbsp;</p>
<p>就可以看到页面了 点击会返回和关闭 会触发设定好的事件</p>
<p><img src="https://img2020.cnblogs.com/blog/782227/202011/782227-20201113105922472-1793780343.png"></p>
<p>&nbsp;</p>
<h3>第五步 修改源码支持横竖屏打开</h3>
<p><code><span style="font-size: 18px">&nbsp;<code><span style="font-size: 18px">cordova-plugin-themeablebrowser</span></code>这个插件 并不支持横竖屏打开webview页面 如何让它支持呢<br></span></code></p>
<p><span style="font-size: 18px">用 Android studio打开 <span class="hljs-attr">platforms/android/build.gradle 文件 找到下面 ThemeableBrowser 类</span></span></p>
<p><span style="font-size: 18px"><span class="hljs-attr"><img src="https://img2020.cnblogs.com/blog/782227/202011/782227-20201115165241409-982523983.png"></span></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>把代码贴出来</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">   1</span> <span style="color: rgba(0, 128, 0, 1)">/*</span>
<span style="color: rgba(0, 128, 128, 1)">   2</span> <span style="color: rgba(0, 128, 0, 1)">       Licensed to the Apache Software Foundation (ASF) under one
</span><span style="color: rgba(0, 128, 128, 1)">   3</span> <span style="color: rgba(0, 128, 0, 1)">       or more contributor license agreements.See the NOTICE file
</span><span style="color: rgba(0, 128, 128, 1)">   4</span> <span style="color: rgba(0, 128, 0, 1)">       distributed with this work for additional information
</span><span style="color: rgba(0, 128, 128, 1)">   5</span> <span style="color: rgba(0, 128, 0, 1)">       regarding copyright ownership.The ASF licenses this file
</span><span style="color: rgba(0, 128, 128, 1)">   6</span> <span style="color: rgba(0, 128, 0, 1)">       to you under the Apache License, Version 2.0 (the
</span><span style="color: rgba(0, 128, 128, 1)">   7</span> <span style="color: rgba(0, 128, 0, 1)">       "License"); you may not use this file except in compliance
</span><span style="color: rgba(0, 128, 128, 1)">   8</span> <span style="color: rgba(0, 128, 0, 1)">       with the License.You may obtain a copy of the License at
</span><span style="color: rgba(0, 128, 128, 1)">   9</span>
<span style="color: rgba(0, 128, 128, 1)">10</span>          <span style="color: rgba(0, 128, 0, 1); text-decoration: underline">http://www.apache.org/licenses/LICENSE-2.0</span>
<span style="color: rgba(0, 128, 128, 1)">11</span>
<span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 128, 0, 1)">       Unless required by applicable law or agreed to in writing,
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 128, 0, 1)">       software distributed under the License is distributed on an
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 128, 0, 1)">       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 128, 0, 1)">       KIND, either express or implied.See the License for the
</span><span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 128, 0, 1)">       specific language governing permissions and limitations
</span><span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 128, 0, 1)">       under the License.
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 255, 1)">package</span><span style="color: rgba(0, 0, 0, 1)"> com.initialxy.cordova.themeablebrowser;
</span><span style="color: rgba(0, 128, 128, 1)">20</span>
<span style="color: rgba(0, 128, 128, 1)">21</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.annotation.SuppressLint;
</span><span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.content.Context;
</span><span style="color: rgba(0, 128, 128, 1)">23</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.content.Intent;
</span><span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.content.res.Resources;
</span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.graphics.Bitmap;
</span><span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.graphics.BitmapFactory;
</span><span style="color: rgba(0, 128, 128, 1)">27</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.graphics.Canvas;
</span><span style="color: rgba(0, 128, 128, 1)">28</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.graphics.Paint;
</span><span style="color: rgba(0, 128, 128, 1)">29</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.graphics.drawable.BitmapDrawable;
</span><span style="color: rgba(0, 128, 128, 1)">30</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.graphics.drawable.Drawable;
</span><span style="color: rgba(0, 128, 128, 1)">31</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.graphics.drawable.StateListDrawable;
</span><span style="color: rgba(0, 128, 128, 1)">32</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.net.Uri;
</span><span style="color: rgba(0, 128, 128, 1)">33</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.os.Build;
</span><span style="color: rgba(0, 128, 128, 1)">34</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.os.Bundle;
</span><span style="color: rgba(0, 128, 128, 1)">35</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.provider.Browser;
</span><span style="color: rgba(0, 128, 128, 1)">36</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.text.InputType;
</span><span style="color: rgba(0, 128, 128, 1)">37</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.text.TextUtils;
</span><span style="color: rgba(0, 128, 128, 1)">38</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.util.DisplayMetrics;
</span><span style="color: rgba(0, 128, 128, 1)">39</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.util.Log;
</span><span style="color: rgba(0, 128, 128, 1)">40</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.util.TypedValue;
</span><span style="color: rgba(0, 128, 128, 1)">41</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.view.Gravity;
</span><span style="color: rgba(0, 128, 128, 1)">42</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.view.KeyEvent;
</span><span style="color: rgba(0, 128, 128, 1)">43</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.view.MotionEvent;
</span><span style="color: rgba(0, 128, 128, 1)">44</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.view.View;
</span><span style="color: rgba(0, 128, 128, 1)">45</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.view.ViewGroup;
</span><span style="color: rgba(0, 128, 128, 1)">46</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.view.ViewGroup.LayoutParams;
</span><span style="color: rgba(0, 128, 128, 1)">47</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.view.Window;
</span><span style="color: rgba(0, 128, 128, 1)">48</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.view.WindowManager;
</span><span style="color: rgba(0, 128, 128, 1)">49</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.view.inputmethod.EditorInfo;
</span><span style="color: rgba(0, 128, 128, 1)">50</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.view.inputmethod.InputMethodManager;
</span><span style="color: rgba(0, 128, 128, 1)">51</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.webkit.CookieManager;
</span><span style="color: rgba(0, 128, 128, 1)">52</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.webkit.WebSettings;
</span><span style="color: rgba(0, 128, 128, 1)">53</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.webkit.WebView;
</span><span style="color: rgba(0, 128, 128, 1)">54</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.webkit.WebViewClient;
</span><span style="color: rgba(0, 128, 128, 1)">55</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.widget.AdapterView;
</span><span style="color: rgba(0, 128, 128, 1)">56</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.widget.ArrayAdapter;
</span><span style="color: rgba(0, 128, 128, 1)">57</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.widget.Button;
</span><span style="color: rgba(0, 128, 128, 1)">58</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.widget.EditText;
</span><span style="color: rgba(0, 128, 128, 1)">59</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.widget.FrameLayout;
</span><span style="color: rgba(0, 128, 128, 1)">60</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.widget.LinearLayout;
</span><span style="color: rgba(0, 128, 128, 1)">61</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.widget.RelativeLayout;
</span><span style="color: rgba(0, 128, 128, 1)">62</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.widget.Spinner;
</span><span style="color: rgba(0, 128, 128, 1)">63</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> android.widget.TextView;
</span><span style="color: rgba(0, 128, 128, 1)">64</span>
<span style="color: rgba(0, 128, 128, 1)">65</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.apache.cordova.CallbackContext;
</span><span style="color: rgba(0, 128, 128, 1)">66</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.apache.cordova.CordovaArgs;
</span><span style="color: rgba(0, 128, 128, 1)">67</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.apache.cordova.CordovaPlugin;
</span><span style="color: rgba(0, 128, 128, 1)">68</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.apache.cordova.CordovaWebView;
</span><span style="color: rgba(0, 128, 128, 1)">69</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.apache.cordova.PluginManager;
</span><span style="color: rgba(0, 128, 128, 1)">70</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.apache.cordova.PluginResult;
</span><span style="color: rgba(0, 128, 128, 1)">71</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.apache.cordova.Whitelist;
</span><span style="color: rgba(0, 128, 128, 1)">72</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.json.JSONException;
</span><span style="color: rgba(0, 128, 128, 1)">73</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.json.JSONObject;
</span><span style="color: rgba(0, 128, 128, 1)">74</span>
<span style="color: rgba(0, 128, 128, 1)">75</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.io.File;
</span><span style="color: rgba(0, 128, 128, 1)">76</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.io.IOException;
</span><span style="color: rgba(0, 128, 128, 1)">77</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.io.InputStream;
</span><span style="color: rgba(0, 128, 128, 1)">78</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.lang.reflect.InvocationTargetException;
</span><span style="color: rgba(0, 128, 128, 1)">79</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.lang.reflect.Method;
</span><span style="color: rgba(0, 128, 128, 1)">80</span>
<span style="color: rgba(0, 128, 128, 1)">81</span> @SuppressLint("SetJavaScriptEnabled"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">82</span> <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span> ThemeableBrowser <span style="color: rgba(0, 0, 255, 1)">extends</span><span style="color: rgba(0, 0, 0, 1)"> CordovaPlugin {
</span><span style="color: rgba(0, 128, 128, 1)">83</span>
<span style="color: rgba(0, 128, 128, 1)">84</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> String NULL = "null"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">85</span>   <span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> String LOG_TAG = "ThemeableBrowser"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">86</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> String SELF = "_self"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">87</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> String SYSTEM = "_system"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">88</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> private static final String BLANK = "_blank";</span>
<span style="color: rgba(0, 128, 128, 1)">89</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> String EXIT_EVENT = "exit"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">90</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> String LOAD_START_EVENT = "loadstart"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">91</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> String LOAD_STOP_EVENT = "loadstop"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">92</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> String LOAD_ERROR_EVENT = "loaderror"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">93</span>
<span style="color: rgba(0, 128, 128, 1)">94</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> String ALIGN_LEFT = "left"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">95</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> String ALIGN_RIGHT = "right"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">96</span>
<span style="color: rgba(0, 128, 128, 1)">97</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> <span style="color: rgba(0, 0, 255, 1)">int</span> TOOLBAR_DEF_HEIGHT = 44<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">98</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> <span style="color: rgba(0, 0, 255, 1)">int</span> DISABLED_ALPHA = 127;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 50% AKA 127/255.</span>
<span style="color: rgba(0, 128, 128, 1)">99</span>
<span style="color: rgba(0, 128, 128, 1)"> 100</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> String EVT_ERR = "ThemeableBrowserError"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 101</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> String EVT_WRN = "ThemeableBrowserWarning"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 102</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> String ERR_CRITICAL = "critical"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 103</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> String ERR_LOADFAIL = "loadfail"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 104</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> String WRN_UNEXPECTED = "unexpected"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 105</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> String WRN_UNDEFINED = "undefined"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 106</span>
<span style="color: rgba(0, 128, 128, 1)"> 107</span>   <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> ThemeableBrowserDialog dialog;
</span><span style="color: rgba(0, 128, 128, 1)"> 108</span>   <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> WebView inAppWebView;
</span><span style="color: rgba(0, 128, 128, 1)"> 109</span>   <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> EditText edittext;
</span><span style="color: rgba(0, 128, 128, 1)"> 110</span>   <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> CallbackContext callbackContext;
</span><span style="color: rgba(0, 128, 128, 1)"> 111</span>
<span style="color: rgba(0, 128, 128, 1)"> 112</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)"> 113</span> <span style="color: rgba(0, 128, 0, 1)">   * Executes the request and returns PluginResult.
</span><span style="color: rgba(0, 128, 128, 1)"> 114</span> <span style="color: rgba(0, 128, 0, 1)">   *
</span><span style="color: rgba(0, 128, 128, 1)"> 115</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> action          The action to execute.
</span><span style="color: rgba(0, 128, 128, 1)"> 116</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> args            The exec() arguments, wrapped with some Cordova helpers.
</span><span style="color: rgba(0, 128, 128, 1)"> 117</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> callbackContext The callback context used when calling back into JavaScript.
</span><span style="color: rgba(0, 128, 128, 1)"> 118</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
<span style="color: rgba(0, 128, 128, 1)"> 119</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> JSONException
</span><span style="color: rgba(0, 128, 128, 1)"> 120</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 121</span>   <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span> execute(String action, CordovaArgs args, <span style="color: rgba(0, 0, 255, 1)">final</span> CallbackContext callbackContext) <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> JSONException {
</span><span style="color: rgba(0, 128, 128, 1)"> 122</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (action.equals("open"<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 123</span>             <span style="color: rgba(0, 0, 255, 1)">this</span>.callbackContext =<span style="color: rgba(0, 0, 0, 1)"> callbackContext;
</span><span style="color: rgba(0, 128, 128, 1)"> 124</span>             <span style="color: rgba(0, 0, 255, 1)">final</span> String url = args.getString(0<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 125</span>             String t = args.optString(1<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 126</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> (t == <span style="color: rgba(0, 0, 255, 1)">null</span> || t.equals("") ||<span style="color: rgba(0, 0, 0, 1)"> t.equals(NULL)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 127</span>               t =<span style="color: rgba(0, 0, 0, 1)"> SELF;
</span><span style="color: rgba(0, 128, 128, 1)"> 128</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 129</span>             <span style="color: rgba(0, 0, 255, 1)">final</span> String target =<span style="color: rgba(0, 0, 0, 1)"> t;
</span><span style="color: rgba(0, 128, 128, 1)"> 130</span>             <span style="color: rgba(0, 0, 255, 1)">final</span> Options features = parseFeature(args.optString(2<span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 128, 1)"> 131</span>
<span style="color: rgba(0, 128, 128, 1)"> 132</span>             <span style="color: rgba(0, 0, 255, 1)">this</span>.cordova.getActivity().runOnUiThread(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Runnable() {
</span><span style="color: rgba(0, 128, 128, 1)"> 133</span> <span style="color: rgba(0, 0, 0, 1)">                @Override
</span><span style="color: rgba(0, 128, 128, 1)"> 134</span>               <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> run() {
</span><span style="color: rgba(0, 128, 128, 1)"> 135</span>                     String result = ""<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 136</span>                     <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> SELF</span>
<span style="color: rgba(0, 128, 128, 1)"> 137</span>                     <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (SELF.equals(target)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 138</span>                         <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> This code exists for compatibility between 3.x and 4.x versions of Cordova.
</span><span style="color: rgba(0, 128, 128, 1)"> 139</span> <span style="color: rgba(0, 128, 0, 1)">                         * Previously the Config class had a static method, isUrlWhitelisted(). That
</span><span style="color: rgba(0, 128, 128, 1)"> 140</span> <span style="color: rgba(0, 128, 0, 1)">                         * responsibility has been moved to the plugins, with an aggregating method in
</span><span style="color: rgba(0, 128, 128, 1)"> 141</span> <span style="color: rgba(0, 128, 0, 1)">                         * PluginManager.
</span><span style="color: rgba(0, 128, 128, 1)"> 142</span>                        <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 143</span>                         Boolean shouldAllowNavigation = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 144</span>                         <span style="color: rgba(0, 0, 255, 1)">if</span> (url.startsWith("javascript:"<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 145</span>                           shouldAllowNavigation = <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 146</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span><span style="color: rgba(0, 128, 128, 1)"> 147</span>                         <span style="color: rgba(0, 0, 255, 1)">if</span> (shouldAllowNavigation == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 148</span>                           shouldAllowNavigation = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Whitelist().isUrlWhiteListed(url);
</span><span style="color: rgba(0, 128, 128, 1)"> 149</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span><span style="color: rgba(0, 128, 128, 1)"> 150</span>                         <span style="color: rgba(0, 0, 255, 1)">if</span> (shouldAllowNavigation == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 151</span>                           <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 152</span>                                 Method gpm = webView.getClass().getMethod("getPluginManager"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 153</span>                                 PluginManager pm =<span style="color: rgba(0, 0, 0, 1)"> (PluginManager)gpm.invoke(webView);
</span><span style="color: rgba(0, 128, 128, 1)"> 154</span>                                 Method san = pm.getClass().getMethod("shouldAllowNavigation", String.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 155</span>                                 shouldAllowNavigation =<span style="color: rgba(0, 0, 0, 1)"> (Boolean)san.invoke(pm, url);
</span><span style="color: rgba(0, 128, 128, 1)"> 156</span>                           } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (NoSuchMethodException e) {
</span><span style="color: rgba(0, 128, 128, 1)"> 157</span>                           } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (IllegalAccessException e) {
</span><span style="color: rgba(0, 128, 128, 1)"> 158</span>                           } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (InvocationTargetException e) {
</span><span style="color: rgba(0, 128, 128, 1)"> 159</span> <span style="color: rgba(0, 0, 0, 1)">                            }
</span><span style="color: rgba(0, 128, 128, 1)"> 160</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span><span style="color: rgba(0, 128, 128, 1)"> 161</span>                         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> load in webview</span>
<span style="color: rgba(0, 128, 128, 1)"> 162</span>                         <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (Boolean.TRUE.equals(shouldAllowNavigation)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 163</span> <span style="color: rgba(0, 0, 0, 1)">                            webView.loadUrl(url);
</span><span style="color: rgba(0, 128, 128, 1)"> 164</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span><span style="color: rgba(0, 128, 128, 1)"> 165</span>                         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Load the dialer</span>
<span style="color: rgba(0, 128, 128, 1)"> 166</span>                         <span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (url.startsWith(WebView.SCHEME_TEL))
</span><span style="color: rgba(0, 128, 128, 1)"> 167</span> <span style="color: rgba(0, 0, 0, 1)">                        {
</span><span style="color: rgba(0, 128, 128, 1)"> 168</span>                           <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 169</span>                                 Intent intent = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Intent(Intent.ACTION_DIAL);
</span><span style="color: rgba(0, 128, 128, 1)"> 170</span> <span style="color: rgba(0, 0, 0, 1)">                              intent.setData(Uri.parse(url));
</span><span style="color: rgba(0, 128, 128, 1)"> 171</span> <span style="color: rgba(0, 0, 0, 1)">                              cordova.getActivity().startActivity(intent);
</span><span style="color: rgba(0, 128, 128, 1)"> 172</span>                           } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (android.content.ActivityNotFoundException e) {
</span><span style="color: rgba(0, 128, 128, 1)"> 173</span> <span style="color: rgba(0, 0, 0, 1)">                              emitError(ERR_CRITICAL,
</span><span style="color: rgba(0, 128, 128, 1)"> 174</span>                                       String.format("Error dialing %s: %s"<span style="color: rgba(0, 0, 0, 1)">, url, e.toString()));
</span><span style="color: rgba(0, 128, 128, 1)"> 175</span> <span style="color: rgba(0, 0, 0, 1)">                            }
</span><span style="color: rgba(0, 128, 128, 1)"> 176</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span><span style="color: rgba(0, 128, 128, 1)"> 177</span>                         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> load in ThemeableBrowser</span>
<span style="color: rgba(0, 128, 128, 1)"> 178</span>                         <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 179</span>                           result =<span style="color: rgba(0, 0, 0, 1)"> showWebPage(url, features);
</span><span style="color: rgba(0, 128, 128, 1)"> 180</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span><span style="color: rgba(0, 128, 128, 1)"> 181</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)"> 182</span>                     <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> SYSTEM</span>
<span style="color: rgba(0, 128, 128, 1)"> 183</span>                     <span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (SYSTEM.equals(target)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 184</span>                         result =<span style="color: rgba(0, 0, 0, 1)"> openExternal(url);
</span><span style="color: rgba(0, 128, 128, 1)"> 185</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)"> 186</span>                     <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> BLANK - or anything else</span>
<span style="color: rgba(0, 128, 128, 1)"> 187</span>                     <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 188</span>                         result =<span style="color: rgba(0, 0, 0, 1)"> showWebPage(url, features);
</span><span style="color: rgba(0, 128, 128, 1)"> 189</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)"> 190</span>
<span style="color: rgba(0, 128, 128, 1)"> 191</span>                     PluginResult pluginResult = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> PluginResult(PluginResult.Status.OK, result);
</span><span style="color: rgba(0, 128, 128, 1)"> 192</span>                     pluginResult.setKeepCallback(<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 193</span> <span style="color: rgba(0, 0, 0, 1)">                  callbackContext.sendPluginResult(pluginResult);
</span><span style="color: rgba(0, 128, 128, 1)"> 194</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 195</span> <span style="color: rgba(0, 0, 0, 1)">            });
</span><span style="color: rgba(0, 128, 128, 1)"> 196</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 197</span>         <span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (action.equals("close"<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 198</span> <span style="color: rgba(0, 0, 0, 1)">            closeDialog();
</span><span style="color: rgba(0, 128, 128, 1)"> 199</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 200</span>         <span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (action.equals("injectScriptCode"<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 201</span>             String jsWrapper = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 202</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> (args.getBoolean(1<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 203</span>               jsWrapper = String.format("prompt(JSON.stringify(), 'gap-iab://%s')"<span style="color: rgba(0, 0, 0, 1)">, callbackContext.getCallbackId());
</span><span style="color: rgba(0, 128, 128, 1)"> 204</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 205</span>             injectDeferredObject(args.getString(0<span style="color: rgba(0, 0, 0, 1)">), jsWrapper);
</span><span style="color: rgba(0, 128, 128, 1)"> 206</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 207</span>         <span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (action.equals("injectScriptFile"<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 208</span> <span style="color: rgba(0, 0, 0, 1)">            String jsWrapper;
</span><span style="color: rgba(0, 128, 128, 1)"> 209</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> (args.getBoolean(1<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 210</span>               jsWrapper = String.format("(function(d) { var c = d.createElement('script'); c.src = %%s; c.onload = function() { prompt('', 'gap-iab://%s'); }; d.body.appendChild(c); })(document)"<span style="color: rgba(0, 0, 0, 1)">, callbackContext.getCallbackId());
</span><span style="color: rgba(0, 128, 128, 1)"> 211</span>             } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 212</span>               jsWrapper = "(function(d) { var c = d.createElement('script'); c.src = %s; d.body.appendChild(c); })(document)"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 213</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 214</span>             injectDeferredObject(args.getString(0<span style="color: rgba(0, 0, 0, 1)">), jsWrapper);
</span><span style="color: rgba(0, 128, 128, 1)"> 215</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 216</span>         <span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (action.equals("injectStyleCode"<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 217</span> <span style="color: rgba(0, 0, 0, 1)">            String jsWrapper;
</span><span style="color: rgba(0, 128, 128, 1)"> 218</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> (args.getBoolean(1<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 219</span>               jsWrapper = String.format("(function(d) { var c = d.createElement('style'); c.innerHTML = %%s; d.body.appendChild(c); prompt('', 'gap-iab://%s');})(document)"<span style="color: rgba(0, 0, 0, 1)">, callbackContext.getCallbackId());
</span><span style="color: rgba(0, 128, 128, 1)"> 220</span>             } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 221</span>               jsWrapper = "(function(d) { var c = d.createElement('style'); c.innerHTML = %s; d.body.appendChild(c); })(document)"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 222</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 223</span>             injectDeferredObject(args.getString(0<span style="color: rgba(0, 0, 0, 1)">), jsWrapper);
</span><span style="color: rgba(0, 128, 128, 1)"> 224</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 225</span>         <span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (action.equals("injectStyleFile"<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 226</span> <span style="color: rgba(0, 0, 0, 1)">            String jsWrapper;
</span><span style="color: rgba(0, 128, 128, 1)"> 227</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> (args.getBoolean(1<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 228</span>               jsWrapper = String.format("(function(d) { var c = d.createElement('link'); c.rel='stylesheet'; c.type='text/css'; c.href = %%s; d.head.appendChild(c); prompt('', 'gap-iab://%s');})(document)"<span style="color: rgba(0, 0, 0, 1)">, callbackContext.getCallbackId());
</span><span style="color: rgba(0, 128, 128, 1)"> 229</span>             } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 230</span>               jsWrapper = "(function(d) { var c = d.createElement('link'); c.rel='stylesheet'; c.type='text/css'; c.href = %s; d.head.appendChild(c); })(document)"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 231</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 232</span>             injectDeferredObject(args.getString(0<span style="color: rgba(0, 0, 0, 1)">), jsWrapper);
</span><span style="color: rgba(0, 128, 128, 1)"> 233</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 234</span>         <span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (action.equals("show"<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 235</span>             <span style="color: rgba(0, 0, 255, 1)">this</span>.cordova.getActivity().runOnUiThread(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Runnable() {
</span><span style="color: rgba(0, 128, 128, 1)"> 236</span> <span style="color: rgba(0, 0, 0, 1)">                @Override
</span><span style="color: rgba(0, 128, 128, 1)"> 237</span>               <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> run() {
</span><span style="color: rgba(0, 128, 128, 1)"> 238</span> <span style="color: rgba(0, 0, 0, 1)">                  dialog.show();
</span><span style="color: rgba(0, 128, 128, 1)"> 239</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 240</span> <span style="color: rgba(0, 0, 0, 1)">            });
</span><span style="color: rgba(0, 128, 128, 1)"> 241</span>             PluginResult pluginResult = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> PluginResult(PluginResult.Status.OK);
</span><span style="color: rgba(0, 128, 128, 1)"> 242</span>             pluginResult.setKeepCallback(<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 243</span>             <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.callbackContext.sendPluginResult(pluginResult);
</span><span style="color: rgba(0, 128, 128, 1)"> 244</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 245</span>         <span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (action.equals("reload"<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 246</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> (inAppWebView != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 247</span>               <span style="color: rgba(0, 0, 255, 1)">this</span>.cordova.getActivity().runOnUiThread(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Runnable() {
</span><span style="color: rgba(0, 128, 128, 1)"> 248</span> <span style="color: rgba(0, 0, 0, 1)">                  @Override
</span><span style="color: rgba(0, 128, 128, 1)"> 249</span>                     <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> run() {
</span><span style="color: rgba(0, 128, 128, 1)"> 250</span> <span style="color: rgba(0, 0, 0, 1)">                        inAppWebView.reload();
</span><span style="color: rgba(0, 128, 128, 1)"> 251</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)"> 252</span> <span style="color: rgba(0, 0, 0, 1)">                });
</span><span style="color: rgba(0, 128, 128, 1)"> 253</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 254</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 255</span>         <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 256</span>             <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 257</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 258</span>         <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 259</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 260</span>
<span style="color: rgba(0, 128, 128, 1)"> 261</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)"> 262</span> <span style="color: rgba(0, 128, 0, 1)">   * Called when the view navigates.
</span><span style="color: rgba(0, 128, 128, 1)"> 263</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 264</span> <span style="color: rgba(0, 0, 0, 1)">    @Override
</span><span style="color: rgba(0, 128, 128, 1)"> 265</span>   <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onReset() {
</span><span style="color: rgba(0, 128, 128, 1)"> 266</span> <span style="color: rgba(0, 0, 0, 1)">      closeDialog();
</span><span style="color: rgba(0, 128, 128, 1)"> 267</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 268</span>
<span style="color: rgba(0, 128, 128, 1)"> 269</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)"> 270</span> <span style="color: rgba(0, 128, 0, 1)">   * Called by AccelBroker when listener is to be shut down.
</span><span style="color: rgba(0, 128, 128, 1)"> 271</span> <span style="color: rgba(0, 128, 0, 1)">   * Stop listener.
</span><span style="color: rgba(0, 128, 128, 1)"> 272</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 273</span>   <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onDestroy() {
</span><span style="color: rgba(0, 128, 128, 1)"> 274</span> <span style="color: rgba(0, 0, 0, 1)">      closeDialog();
</span><span style="color: rgba(0, 128, 128, 1)"> 275</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 276</span>
<span style="color: rgba(0, 128, 128, 1)"> 277</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)"> 278</span> <span style="color: rgba(0, 128, 0, 1)">   * Inject an object (script or style) into the ThemeableBrowser WebView.
</span><span style="color: rgba(0, 128, 128, 1)"> 279</span> <span style="color: rgba(0, 128, 0, 1)">   *
</span><span style="color: rgba(0, 128, 128, 1)"> 280</span> <span style="color: rgba(0, 128, 0, 1)">   * This is a helper method for the inject{Script|Style}{Code|File} API calls, which
</span><span style="color: rgba(0, 128, 128, 1)"> 281</span> <span style="color: rgba(0, 128, 0, 1)">   * provides a consistent method for injecting JavaScript code into the document.
</span><span style="color: rgba(0, 128, 128, 1)"> 282</span> <span style="color: rgba(0, 128, 0, 1)">   *
</span><span style="color: rgba(0, 128, 128, 1)"> 283</span> <span style="color: rgba(0, 128, 0, 1)">   * If a wrapper string is supplied, then the source string will be JSON-encoded (adding
</span><span style="color: rgba(0, 128, 128, 1)"> 284</span> <span style="color: rgba(0, 128, 0, 1)">   * quotes) and wrapped using string formatting. (The wrapper string should have a single
</span><span style="color: rgba(0, 128, 128, 1)"> 285</span> <span style="color: rgba(0, 128, 0, 1)">   * '%s' marker)
</span><span style="color: rgba(0, 128, 128, 1)"> 286</span> <span style="color: rgba(0, 128, 0, 1)">   *
</span><span style="color: rgba(0, 128, 128, 1)"> 287</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> source      The source object (filename or script/style text) to inject into
</span><span style="color: rgba(0, 128, 128, 1)"> 288</span> <span style="color: rgba(0, 128, 0, 1)">   *                  the document.
</span><span style="color: rgba(0, 128, 128, 1)"> 289</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> jsWrapper   A JavaScript string to wrap the source string in, so that the object
</span><span style="color: rgba(0, 128, 128, 1)"> 290</span> <span style="color: rgba(0, 128, 0, 1)">   *                  is properly injected, or null if the source string is JavaScript text
</span><span style="color: rgba(0, 128, 128, 1)"> 291</span> <span style="color: rgba(0, 128, 0, 1)">   *                  which should be executed directly.
</span><span style="color: rgba(0, 128, 128, 1)"> 292</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 293</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> injectDeferredObject(String source, String jsWrapper) {
</span><span style="color: rgba(0, 128, 128, 1)"> 294</span> <span style="color: rgba(0, 0, 0, 1)">      String scriptToInject;
</span><span style="color: rgba(0, 128, 128, 1)"> 295</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (jsWrapper != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 296</span>             org.json.JSONArray jsonEsc = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> org.json.JSONArray();
</span><span style="color: rgba(0, 128, 128, 1)"> 297</span> <span style="color: rgba(0, 0, 0, 1)">            jsonEsc.put(source);
</span><span style="color: rgba(0, 128, 128, 1)"> 298</span>             String jsonRepr =<span style="color: rgba(0, 0, 0, 1)"> jsonEsc.toString();
</span><span style="color: rgba(0, 128, 128, 1)"> 299</span>             String jsonSourceString = jsonRepr.substring(1, jsonRepr.length()-1<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 300</span>             scriptToInject =<span style="color: rgba(0, 0, 0, 1)"> String.format(jsWrapper, jsonSourceString);
</span><span style="color: rgba(0, 128, 128, 1)"> 301</span>         } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 302</span>             scriptToInject =<span style="color: rgba(0, 0, 0, 1)"> source;
</span><span style="color: rgba(0, 128, 128, 1)"> 303</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 304</span>         <span style="color: rgba(0, 0, 255, 1)">final</span> String finalScriptToInject =<span style="color: rgba(0, 0, 0, 1)"> scriptToInject;
</span><span style="color: rgba(0, 128, 128, 1)"> 305</span>         <span style="color: rgba(0, 0, 255, 1)">this</span>.cordova.getActivity().runOnUiThread(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Runnable() {
</span><span style="color: rgba(0, 128, 128, 1)"> 306</span>             @SuppressLint("NewApi"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 307</span> <span style="color: rgba(0, 0, 0, 1)">            @Override
</span><span style="color: rgba(0, 128, 128, 1)"> 308</span>             <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> run() {
</span><span style="color: rgba(0, 128, 128, 1)"> 309</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (inAppWebView != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 310</span>                     <span style="color: rgba(0, 0, 255, 1)">if</span> (Build.VERSION.SDK_INT &lt;<span style="color: rgba(0, 0, 0, 1)"> Build.VERSION_CODES.KITKAT) {
</span><span style="color: rgba(0, 128, 128, 1)"> 311</span>                         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> This action will have the side-effect of blurring the currently focused
</span><span style="color: rgba(0, 128, 128, 1)"> 312</span>                         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> element</span>
<span style="color: rgba(0, 128, 128, 1)"> 313</span>                         inAppWebView.loadUrl("javascript:" +<span style="color: rgba(0, 0, 0, 1)"> finalScriptToInject);
</span><span style="color: rgba(0, 128, 128, 1)"> 314</span>                     } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 315</span>                         inAppWebView.evaluateJavascript(finalScriptToInject, <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 316</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)"> 317</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 318</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 319</span> <span style="color: rgba(0, 0, 0, 1)">      });
</span><span style="color: rgba(0, 128, 128, 1)"> 320</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 321</span>
<span style="color: rgba(0, 128, 128, 1)"> 322</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)"> 323</span> <span style="color: rgba(0, 128, 0, 1)">   * Put the list of features into a hash map
</span><span style="color: rgba(0, 128, 128, 1)"> 324</span> <span style="color: rgba(0, 128, 0, 1)">   *
</span><span style="color: rgba(0, 128, 128, 1)"> 325</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> optString
</span><span style="color: rgba(0, 128, 128, 1)"> 326</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
<span style="color: rgba(0, 128, 128, 1)"> 327</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 328</span>   <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> Options parseFeature(String optString) {
</span><span style="color: rgba(0, 128, 128, 1)"> 329</span>         Options result = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 330</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (optString != <span style="color: rgba(0, 0, 255, 1)">null</span> &amp;&amp; !<span style="color: rgba(0, 0, 0, 1)">optString.isEmpty()) {
</span><span style="color: rgba(0, 128, 128, 1)"> 331</span>             <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 332</span>               result =<span style="color: rgba(0, 0, 0, 1)"> ThemeableBrowserUnmarshaller.JSONToObj(
</span><span style="color: rgba(0, 128, 128, 1)"> 333</span>                         optString, Options.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 334</span>             } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception e) {
</span><span style="color: rgba(0, 128, 128, 1)"> 335</span> <span style="color: rgba(0, 0, 0, 1)">                emitError(ERR_CRITICAL,
</span><span style="color: rgba(0, 128, 128, 1)"> 336</span>                         String.format("Invalid JSON @s"<span style="color: rgba(0, 0, 0, 1)">, e.toString()));
</span><span style="color: rgba(0, 128, 128, 1)"> 337</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 338</span>         } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 339</span> <span style="color: rgba(0, 0, 0, 1)">            emitWarning(WRN_UNDEFINED,
</span><span style="color: rgba(0, 128, 128, 1)"> 340</span>                     "No config was given, defaults will be used, "
<span style="color: rgba(0, 128, 128, 1)"> 341</span>                     + "which is quite boring."<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 342</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 343</span>
<span style="color: rgba(0, 128, 128, 1)"> 344</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (result == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 345</span>             result = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Options();
</span><span style="color: rgba(0, 128, 128, 1)"> 346</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 347</span>
<span style="color: rgba(0, 128, 128, 1)"> 348</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Always show location, this property is overwritten.</span>
<span style="color: rgba(0, 128, 128, 1)"> 349</span>         result.location = <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 350</span>
<span style="color: rgba(0, 128, 128, 1)"> 351</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result;
</span><span style="color: rgba(0, 128, 128, 1)"> 352</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 353</span>
<span style="color: rgba(0, 128, 128, 1)"> 354</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)"> 355</span> <span style="color: rgba(0, 128, 0, 1)">   * Display a new browser with the specified URL.
</span><span style="color: rgba(0, 128, 128, 1)"> 356</span> <span style="color: rgba(0, 128, 0, 1)">   *
</span><span style="color: rgba(0, 128, 128, 1)"> 357</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> url
</span><span style="color: rgba(0, 128, 128, 1)"> 358</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
<span style="color: rgba(0, 128, 128, 1)"> 359</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 360</span>   <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String openExternal(String url) {
</span><span style="color: rgba(0, 128, 128, 1)"> 361</span>         <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 362</span>             Intent intent = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 363</span>             intent = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Intent(Intent.ACTION_VIEW);
</span><span style="color: rgba(0, 128, 128, 1)"> 364</span>             <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Omitting the MIME type for file: URLs causes "No Activity found to handle Intent".
</span><span style="color: rgba(0, 128, 128, 1)"> 365</span>             <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Adding the MIME type to http: URLs causes them to not be handled by the downloader.</span>
<span style="color: rgba(0, 128, 128, 1)"> 366</span>             Uri uri =<span style="color: rgba(0, 0, 0, 1)"> Uri.parse(url);
</span><span style="color: rgba(0, 128, 128, 1)"> 367</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> ("file"<span style="color: rgba(0, 0, 0, 1)">.equals(uri.getScheme())) {
</span><span style="color: rgba(0, 128, 128, 1)"> 368</span> <span style="color: rgba(0, 0, 0, 1)">                intent.setDataAndType(uri, webView.getResourceApi().getMimeType(uri));
</span><span style="color: rgba(0, 128, 128, 1)"> 369</span>             } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 370</span> <span style="color: rgba(0, 0, 0, 1)">                intent.setData(uri);
</span><span style="color: rgba(0, 128, 128, 1)"> 371</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 372</span> <span style="color: rgba(0, 0, 0, 1)">            intent.putExtra(Browser.EXTRA_APPLICATION_ID, cordova.getActivity().getPackageName());
</span><span style="color: rgba(0, 128, 128, 1)"> 373</span>             <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.cordova.getActivity().startActivity(intent);
</span><span style="color: rgba(0, 128, 128, 1)"> 374</span>             <span style="color: rgba(0, 0, 255, 1)">return</span> ""<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 375</span>         } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (android.content.ActivityNotFoundException e) {
</span><span style="color: rgba(0, 128, 128, 1)"> 376</span>             Log.d(LOG_TAG, "ThemeableBrowser: Error loading url "+url+":"+<span style="color: rgba(0, 0, 0, 1)"> e.toString());
</span><span style="color: rgba(0, 128, 128, 1)"> 377</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> e.toString();
</span><span style="color: rgba(0, 128, 128, 1)"> 378</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 379</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 380</span>
<span style="color: rgba(0, 128, 128, 1)"> 381</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)"> 382</span> <span style="color: rgba(0, 128, 0, 1)">   * Closes the dialog
</span><span style="color: rgba(0, 128, 128, 1)"> 383</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 384</span>   <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> closeDialog() {
</span><span style="color: rgba(0, 128, 128, 1)"> 385</span>         <span style="color: rgba(0, 0, 255, 1)">this</span>.cordova.getActivity().runOnUiThread(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Runnable() {
</span><span style="color: rgba(0, 128, 128, 1)"> 386</span> <span style="color: rgba(0, 0, 0, 1)">            @Override
</span><span style="color: rgba(0, 128, 128, 1)"> 387</span>             <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> run() {
</span><span style="color: rgba(0, 128, 128, 1)"> 388</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> The JS protects against multiple calls, so this should happen only when
</span><span style="color: rgba(0, 128, 128, 1)"> 389</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> closeDialog() is called by other native code.</span>
<span style="color: rgba(0, 128, 128, 1)"> 390</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (inAppWebView == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 391</span>                     emitWarning(WRN_UNEXPECTED, "Close called but already closed."<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 392</span>                     <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 393</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 394</span>
<span style="color: rgba(0, 128, 128, 1)"> 395</span>               inAppWebView.setWebViewClient(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> WebViewClient() {
</span><span style="color: rgba(0, 128, 128, 1)"> 396</span>                     <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> NB: wait for about:blank before dismissing</span>
<span style="color: rgba(0, 128, 128, 1)"> 397</span>                     <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onPageFinished(WebView view, String url) {
</span><span style="color: rgba(0, 128, 128, 1)"> 398</span>                         <span style="color: rgba(0, 0, 255, 1)">if</span> (dialog != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 399</span> <span style="color: rgba(0, 0, 0, 1)">                            dialog.dismiss();
</span><span style="color: rgba(0, 128, 128, 1)"> 400</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span><span style="color: rgba(0, 128, 128, 1)"> 401</span>
<span style="color: rgba(0, 128, 128, 1)"> 402</span>                         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Clean up.</span>
<span style="color: rgba(0, 128, 128, 1)"> 403</span>                         dialog = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 404</span>                         inAppWebView = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 405</span>                         edittext = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 406</span>                         callbackContext = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 407</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)"> 408</span> <span style="color: rgba(0, 0, 0, 1)">                });
</span><span style="color: rgba(0, 128, 128, 1)"> 409</span>
<span style="color: rgba(0, 128, 128, 1)"> 410</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> NB: From SDK 19: "If you call methods on WebView from any
</span><span style="color: rgba(0, 128, 128, 1)"> 411</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> thread other than your app's UI thread, it can cause
</span><span style="color: rgba(0, 128, 128, 1)"> 412</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> unexpected results."
</span><span style="color: rgba(0, 128, 128, 1)"> 413</span>               <span style="color: rgba(0, 128, 0, 1)">//</span> <span style="color: rgba(0, 128, 0, 1); text-decoration: underline">http://developer.android.com/guide/webapps/migrating.html</span><span style="color: rgba(0, 128, 0, 1)">#Threads</span>
<span style="color: rgba(0, 128, 128, 1)"> 414</span>               inAppWebView.loadUrl("about:blank"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 415</span>
<span style="color: rgba(0, 128, 128, 1)"> 416</span>               <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 417</span>                     JSONObject obj = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> JSONObject();
</span><span style="color: rgba(0, 128, 128, 1)"> 418</span>                     obj.put("type"<span style="color: rgba(0, 0, 0, 1)">, EXIT_EVENT);
</span><span style="color: rgba(0, 128, 128, 1)"> 419</span>                     sendUpdate(obj, <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 420</span>               } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (JSONException ex) {
</span><span style="color: rgba(0, 128, 128, 1)"> 421</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 422</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 423</span> <span style="color: rgba(0, 0, 0, 1)">      });
</span><span style="color: rgba(0, 128, 128, 1)"> 424</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 425</span>
<span style="color: rgba(0, 128, 128, 1)"> 426</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> emitButtonEvent(Event event, String url) {
</span><span style="color: rgba(0, 128, 128, 1)"> 427</span>         emitButtonEvent(event, url, <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 428</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 429</span>
<span style="color: rgba(0, 128, 128, 1)"> 430</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> emitButtonEvent(Event event, String url, Integer index) {
</span><span style="color: rgba(0, 128, 128, 1)"> 431</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (event != <span style="color: rgba(0, 0, 255, 1)">null</span> &amp;&amp; event.event != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 432</span>             <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 433</span>               JSONObject obj = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> JSONObject();
</span><span style="color: rgba(0, 128, 128, 1)"> 434</span>               obj.put("type"<span style="color: rgba(0, 0, 0, 1)">, event.event);
</span><span style="color: rgba(0, 128, 128, 1)"> 435</span>               obj.put("url"<span style="color: rgba(0, 0, 0, 1)">, url);
</span><span style="color: rgba(0, 128, 128, 1)"> 436</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (index != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 437</span>                     obj.put("index"<span style="color: rgba(0, 0, 0, 1)">, index.intValue());
</span><span style="color: rgba(0, 128, 128, 1)"> 438</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 439</span>               sendUpdate(obj, <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 440</span>             } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (JSONException e) {
</span><span style="color: rgba(0, 128, 128, 1)"> 441</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Ignore, should never happen.</span>
<span style="color: rgba(0, 128, 128, 1)"> 442</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 443</span>         } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 444</span> <span style="color: rgba(0, 0, 0, 1)">            emitWarning(WRN_UNDEFINED,
</span><span style="color: rgba(0, 128, 128, 1)"> 445</span>                     "Button clicked, but event property undefined. "
<span style="color: rgba(0, 128, 128, 1)"> 446</span>                     + "No event will be raised."<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 447</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 448</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 449</span>
<span style="color: rgba(0, 128, 128, 1)"> 450</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> emitError(String code, String message) {
</span><span style="color: rgba(0, 128, 128, 1)"> 451</span> <span style="color: rgba(0, 0, 0, 1)">      emitLog(EVT_ERR, code, message);
</span><span style="color: rgba(0, 128, 128, 1)"> 452</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 453</span>
<span style="color: rgba(0, 128, 128, 1)"> 454</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> emitWarning(String code, String message) {
</span><span style="color: rgba(0, 128, 128, 1)"> 455</span> <span style="color: rgba(0, 0, 0, 1)">      emitLog(EVT_WRN, code, message);
</span><span style="color: rgba(0, 128, 128, 1)"> 456</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 457</span>
<span style="color: rgba(0, 128, 128, 1)"> 458</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> emitLog(String type, String code, String message) {
</span><span style="color: rgba(0, 128, 128, 1)"> 459</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (type != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 460</span>             <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 461</span>               JSONObject obj = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> JSONObject();
</span><span style="color: rgba(0, 128, 128, 1)"> 462</span>               obj.put("type"<span style="color: rgba(0, 0, 0, 1)">, type);
</span><span style="color: rgba(0, 128, 128, 1)"> 463</span>               obj.put("code"<span style="color: rgba(0, 0, 0, 1)">, code);
</span><span style="color: rgba(0, 128, 128, 1)"> 464</span>               obj.put("message"<span style="color: rgba(0, 0, 0, 1)">, message);
</span><span style="color: rgba(0, 128, 128, 1)"> 465</span>               sendUpdate(obj, <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 466</span>             } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (JSONException e) {
</span><span style="color: rgba(0, 128, 128, 1)"> 467</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Ignore, should never happen.</span>
<span style="color: rgba(0, 128, 128, 1)"> 468</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 469</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 470</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 471</span>
<span style="color: rgba(0, 128, 128, 1)"> 472</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)"> 473</span> <span style="color: rgba(0, 128, 0, 1)">   * Checks to see if it is possible to go back one page in history, then does so.
</span><span style="color: rgba(0, 128, 128, 1)"> 474</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 475</span>   <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> goBack() {
</span><span style="color: rgba(0, 128, 128, 1)"> 476</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">this</span>.inAppWebView != <span style="color: rgba(0, 0, 255, 1)">null</span> &amp;&amp; <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.inAppWebView.canGoBack()) {
</span><span style="color: rgba(0, 128, 128, 1)"> 477</span>             <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.inAppWebView.goBack();
</span><span style="color: rgba(0, 128, 128, 1)"> 478</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 479</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 480</span>
<span style="color: rgba(0, 128, 128, 1)"> 481</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)"> 482</span> <span style="color: rgba(0, 128, 0, 1)">   * Can the web browser go back?
</span><span style="color: rgba(0, 128, 128, 1)"> 483</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> boolean
</span><span style="color: rgba(0, 128, 128, 1)"> 484</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 485</span>   <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> canGoBack() {
</span><span style="color: rgba(0, 128, 128, 1)"> 486</span>         <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span>.inAppWebView != <span style="color: rgba(0, 0, 255, 1)">null</span> &amp;&amp; <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.inAppWebView.canGoBack();
</span><span style="color: rgba(0, 128, 128, 1)"> 487</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 488</span>
<span style="color: rgba(0, 128, 128, 1)"> 489</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)"> 490</span> <span style="color: rgba(0, 128, 0, 1)">   * Checks to see if it is possible to go forward one page in history, then does so.
</span><span style="color: rgba(0, 128, 128, 1)"> 491</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 492</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> goForward() {
</span><span style="color: rgba(0, 128, 128, 1)"> 493</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">this</span>.inAppWebView != <span style="color: rgba(0, 0, 255, 1)">null</span> &amp;&amp; <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.inAppWebView.canGoForward()) {
</span><span style="color: rgba(0, 128, 128, 1)"> 494</span>             <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.inAppWebView.goForward();
</span><span style="color: rgba(0, 128, 128, 1)"> 495</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 496</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 497</span>
<span style="color: rgba(0, 128, 128, 1)"> 498</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)"> 499</span> <span style="color: rgba(0, 128, 0, 1)">   * Navigate to the new page
</span><span style="color: rgba(0, 128, 128, 1)"> 500</span> <span style="color: rgba(0, 128, 0, 1)">   *
</span><span style="color: rgba(0, 128, 128, 1)"> 501</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> url to load
</span><span style="color: rgba(0, 128, 128, 1)"> 502</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 503</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> navigate(String url) {
</span><span style="color: rgba(0, 128, 128, 1)"> 504</span>         InputMethodManager imm = (InputMethodManager)<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.cordova.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
</span><span style="color: rgba(0, 128, 128, 1)"> 505</span>         imm.hideSoftInputFromWindow(edittext.getWindowToken(), 0<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 506</span>
<span style="color: rgba(0, 128, 128, 1)"> 507</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (!url.startsWith("http") &amp;&amp; !url.startsWith("file:"<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 508</span>             <span style="color: rgba(0, 0, 255, 1)">this</span>.inAppWebView.loadUrl("http://" +<span style="color: rgba(0, 0, 0, 1)"> url);
</span><span style="color: rgba(0, 128, 128, 1)"> 509</span>         } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 510</span>             <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.inAppWebView.loadUrl(url);
</span><span style="color: rgba(0, 128, 128, 1)"> 511</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 512</span>         <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.inAppWebView.requestFocus();
</span><span style="color: rgba(0, 128, 128, 1)"> 513</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 514</span>
<span style="color: rgba(0, 128, 128, 1)"> 515</span>   <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> ThemeableBrowser getThemeableBrowser() {
</span><span style="color: rgba(0, 128, 128, 1)"> 516</span>         <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 517</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 518</span>
<span style="color: rgba(0, 128, 128, 1)"> 519</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)"> 520</span> <span style="color: rgba(0, 128, 0, 1)">   * Display a new browser with the specified URL.
</span><span style="color: rgba(0, 128, 128, 1)"> 521</span> <span style="color: rgba(0, 128, 0, 1)">   *
</span><span style="color: rgba(0, 128, 128, 1)"> 522</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> url
</span><span style="color: rgba(0, 128, 128, 1)"> 523</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> features
</span><span style="color: rgba(0, 128, 128, 1)"> 524</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
<span style="color: rgba(0, 128, 128, 1)"> 525</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 526</span>   <span style="color: rgba(0, 0, 255, 1)">public</span> String showWebPage(<span style="color: rgba(0, 0, 255, 1)">final</span> String url, <span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> Options features) {
</span><span style="color: rgba(0, 128, 128, 1)"> 527</span>         <span style="color: rgba(0, 0, 255, 1)">final</span> CordovaWebView thatWebView = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.webView;
</span><span style="color: rgba(0, 128, 128, 1)"> 528</span>
<span style="color: rgba(0, 128, 128, 1)"> 529</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Create dialog in new thread</span>
<span style="color: rgba(0, 128, 128, 1)"> 530</span>         Runnable runnable = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Runnable() {
</span><span style="color: rgba(0, 128, 128, 1)"> 531</span>             @SuppressLint("NewApi"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 532</span>             <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> run() {
</span><span style="color: rgba(0, 128, 128, 1)"> 533</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Let's create the main dialog</span>
<span style="color: rgba(0, 128, 128, 1)"> 534</span>               dialog = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ThemeableBrowserDialog(cordova.getActivity(),
</span><span style="color: rgba(0, 128, 128, 1)"> 535</span> <span style="color: rgba(0, 0, 0, 1)">                        android.R.style.Theme_Black_NoTitleBar,
</span><span style="color: rgba(0, 128, 128, 1)"> 536</span> <span style="color: rgba(0, 0, 0, 1)">                        features.hardwareback);
</span><span style="color: rgba(0, 128, 128, 1)"> 537</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">features.disableAnimation) {
</span><span style="color: rgba(0, 128, 128, 1)"> 538</span> <span style="color: rgba(0, 0, 0, 1)">                  dialog.getWindow().getAttributes().windowAnimations
</span><span style="color: rgba(0, 128, 128, 1)"> 539</span>                           =<span style="color: rgba(0, 0, 0, 1)"> android.R.style.Animation_Dialog;
</span><span style="color: rgba(0, 128, 128, 1)"> 540</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 541</span> <span style="color: rgba(0, 0, 0, 1)">                dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
</span><span style="color: rgba(0, 128, 128, 1)"> 542</span>               dialog.setCancelable(<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 543</span> <span style="color: rgba(0, 0, 0, 1)">                dialog.setThemeableBrowser(getThemeableBrowser());
</span><span style="color: rgba(0, 128, 128, 1)"> 544</span>
<span style="color: rgba(0, 128, 128, 1)"> 545</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Main container layout</span>
<span style="color: rgba(0, 128, 128, 1)"> 546</span>               ViewGroup main = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 547</span>
<span style="color: rgba(0, 128, 128, 1)"> 548</span>               <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (features.fullscreen) {
</span><span style="color: rgba(0, 128, 128, 1)"> 549</span>                     main = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> FrameLayout(cordova.getActivity());
</span><span style="color: rgba(0, 128, 128, 1)"> 550</span>               } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 551</span>                     main = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> LinearLayout(cordova.getActivity());
</span><span style="color: rgba(0, 128, 128, 1)"> 552</span> <span style="color: rgba(0, 0, 0, 1)">                  ((LinearLayout) main).setOrientation(LinearLayout.VERTICAL);
</span><span style="color: rgba(0, 128, 128, 1)"> 553</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 554</span>
<span style="color: rgba(0, 128, 128, 1)"> 555</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Toolbar layout</span>
<span style="color: rgba(0, 128, 128, 1)"> 556</span>               Toolbar toolbarDef =<span style="color: rgba(0, 0, 0, 1)"> features.toolbar;
</span><span style="color: rgba(0, 128, 128, 1)"> 557</span>               FrameLayout toolbar = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> FrameLayout(cordova.getActivity());
</span><span style="color: rgba(0, 128, 128, 1)"> 558</span> <span style="color: rgba(0, 0, 0, 1)">                toolbar.setBackgroundColor(hexStringToColor(
</span><span style="color: rgba(0, 128, 128, 1)"> 559</span>                         toolbarDef != <span style="color: rgba(0, 0, 255, 1)">null</span> &amp;&amp; toolbarDef.color != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 560</span>                                 ? toolbarDef.color : "#ffffffff"<span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 128, 1)"> 561</span>               toolbar.setLayoutParams(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ViewGroup.LayoutParams(
</span><span style="color: rgba(0, 128, 128, 1)"> 562</span> <span style="color: rgba(0, 0, 0, 1)">                        LayoutParams.MATCH_PARENT,
</span><span style="color: rgba(0, 128, 128, 1)"> 563</span>                         dpToPixels(toolbarDef != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 564</span>                                 ?<span style="color: rgba(0, 0, 0, 1)"> toolbarDef.height : TOOLBAR_DEF_HEIGHT)));
</span><span style="color: rgba(0, 128, 128, 1)"> 565</span>
<span style="color: rgba(0, 128, 128, 1)"> 566</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (toolbarDef != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 567</span>                         &amp;&amp; (toolbarDef.image != <span style="color: rgba(0, 0, 255, 1)">null</span> || toolbarDef.wwwImage != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 568</span>                     <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 569</span>                         Drawable background =<span style="color: rgba(0, 0, 0, 1)"> getImage(toolbarDef.image
</span><span style="color: rgba(0, 128, 128, 1)"> 570</span> <span style="color: rgba(0, 0, 0, 1)">                              , toolbarDef.wwwImage, toolbarDef.wwwImageDensity);
</span><span style="color: rgba(0, 128, 128, 1)"> 571</span> <span style="color: rgba(0, 0, 0, 1)">                        setBackground(toolbar, background);
</span><span style="color: rgba(0, 128, 128, 1)"> 572</span>                     } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Resources.NotFoundException e) {
</span><span style="color: rgba(0, 128, 128, 1)"> 573</span> <span style="color: rgba(0, 0, 0, 1)">                        emitError(ERR_LOADFAIL,
</span><span style="color: rgba(0, 128, 128, 1)"> 574</span>                                 String.format("Image for toolbar, %s, failed to load"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 575</span> <span style="color: rgba(0, 0, 0, 1)">                                        toolbarDef.image));
</span><span style="color: rgba(0, 128, 128, 1)"> 576</span>                     } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (IOException ioe) {
</span><span style="color: rgba(0, 128, 128, 1)"> 577</span> <span style="color: rgba(0, 0, 0, 1)">                        emitError(ERR_LOADFAIL,
</span><span style="color: rgba(0, 128, 128, 1)"> 578</span>                                 String.format("Image for toolbar, %s, failed to load"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 579</span> <span style="color: rgba(0, 0, 0, 1)">                                        toolbarDef.wwwImage));
</span><span style="color: rgba(0, 128, 128, 1)"> 580</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)"> 581</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 582</span>
<span style="color: rgba(0, 128, 128, 1)"> 583</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Left Button Container layout</span>
<span style="color: rgba(0, 128, 128, 1)"> 584</span>               LinearLayout leftButtonContainer = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> LinearLayout(cordova.getActivity());
</span><span style="color: rgba(0, 128, 128, 1)"> 585</span>               FrameLayout.LayoutParams leftButtonContainerParams = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
</span><span style="color: rgba(0, 128, 128, 1)"> 586</span>               leftButtonContainerParams.gravity = Gravity.LEFT |<span style="color: rgba(0, 0, 0, 1)"> Gravity.CENTER_VERTICAL;
</span><span style="color: rgba(0, 128, 128, 1)"> 587</span> <span style="color: rgba(0, 0, 0, 1)">                leftButtonContainer.setLayoutParams(leftButtonContainerParams);
</span><span style="color: rgba(0, 128, 128, 1)"> 588</span> <span style="color: rgba(0, 0, 0, 1)">                leftButtonContainer.setVerticalGravity(Gravity.CENTER_VERTICAL);
</span><span style="color: rgba(0, 128, 128, 1)"> 589</span>
<span style="color: rgba(0, 128, 128, 1)"> 590</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Right Button Container layout</span>
<span style="color: rgba(0, 128, 128, 1)"> 591</span>               LinearLayout rightButtonContainer = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> LinearLayout(cordova.getActivity());
</span><span style="color: rgba(0, 128, 128, 1)"> 592</span>               FrameLayout.LayoutParams rightButtonContainerParams = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
</span><span style="color: rgba(0, 128, 128, 1)"> 593</span>               rightButtonContainerParams.gravity = Gravity.RIGHT |<span style="color: rgba(0, 0, 0, 1)"> Gravity.CENTER_VERTICAL;
</span><span style="color: rgba(0, 128, 128, 1)"> 594</span> <span style="color: rgba(0, 0, 0, 1)">                rightButtonContainer.setLayoutParams(rightButtonContainerParams);
</span><span style="color: rgba(0, 128, 128, 1)"> 595</span> <span style="color: rgba(0, 0, 0, 1)">                rightButtonContainer.setVerticalGravity(Gravity.CENTER_VERTICAL);
</span><span style="color: rgba(0, 128, 128, 1)"> 596</span>
<span style="color: rgba(0, 128, 128, 1)"> 597</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Edit Text Box</span>
<span style="color: rgba(0, 128, 128, 1)"> 598</span>               edittext = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> EditText(cordova.getActivity());
</span><span style="color: rgba(0, 128, 128, 1)"> 599</span>               RelativeLayout.LayoutParams textLayoutParams = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
</span><span style="color: rgba(0, 128, 128, 1)"> 600</span>               textLayoutParams.addRule(RelativeLayout.RIGHT_OF, 1<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 601</span>               textLayoutParams.addRule(RelativeLayout.LEFT_OF, 5<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 602</span> <span style="color: rgba(0, 0, 0, 1)">                edittext.setLayoutParams(textLayoutParams);
</span><span style="color: rgba(0, 128, 128, 1)"> 603</span>               edittext.setSingleLine(<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 604</span> <span style="color: rgba(0, 0, 0, 1)">                edittext.setText(url);
</span><span style="color: rgba(0, 128, 128, 1)"> 605</span> <span style="color: rgba(0, 0, 0, 1)">                edittext.setInputType(InputType.TYPE_TEXT_VARIATION_URI);
</span><span style="color: rgba(0, 128, 128, 1)"> 606</span> <span style="color: rgba(0, 0, 0, 1)">                edittext.setImeOptions(EditorInfo.IME_ACTION_GO);
</span><span style="color: rgba(0, 128, 128, 1)"> 607</span>               edittext.setInputType(InputType.TYPE_NULL); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Will not except input... Makes the text NON-EDITABLE</span>
<span style="color: rgba(0, 128, 128, 1)"> 608</span>               edittext.setOnKeyListener(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> View.OnKeyListener() {
</span><span style="color: rgba(0, 128, 128, 1)"> 609</span>                     <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span> onKey(View v, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> keyCode, KeyEvent event) {
</span><span style="color: rgba(0, 128, 128, 1)"> 610</span>                         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> If the event is a key-down event on the "enter" button</span>
<span style="color: rgba(0, 128, 128, 1)"> 611</span>                         <span style="color: rgba(0, 0, 255, 1)">if</span> ((event.getAction() == KeyEvent.ACTION_DOWN) &amp;&amp; (keyCode ==<span style="color: rgba(0, 0, 0, 1)"> KeyEvent.KEYCODE_ENTER)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 612</span> <span style="color: rgba(0, 0, 0, 1)">                            navigate(edittext.getText().toString());
</span><span style="color: rgba(0, 128, 128, 1)"> 613</span>                           <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 614</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span><span style="color: rgba(0, 128, 128, 1)"> 615</span>                         <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 616</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)"> 617</span> <span style="color: rgba(0, 0, 0, 1)">                });
</span><span style="color: rgba(0, 128, 128, 1)"> 618</span>
<span style="color: rgba(0, 128, 128, 1)"> 619</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Back button</span>
<span style="color: rgba(0, 128, 128, 1)"> 620</span>               <span style="color: rgba(0, 0, 255, 1)">final</span> Button back =<span style="color: rgba(0, 0, 0, 1)"> createButton(
</span><span style="color: rgba(0, 128, 128, 1)"> 621</span> <span style="color: rgba(0, 0, 0, 1)">                  features.backButton,
</span><span style="color: rgba(0, 128, 128, 1)"> 622</span>                     "back button"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 623</span>                     <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> View.OnClickListener() {
</span><span style="color: rgba(0, 128, 128, 1)"> 624</span>                         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onClick(View v) {
</span><span style="color: rgba(0, 128, 128, 1)"> 625</span> <span style="color: rgba(0, 0, 0, 1)">                            emitButtonEvent(
</span><span style="color: rgba(0, 128, 128, 1)"> 626</span> <span style="color: rgba(0, 0, 0, 1)">                                    features.backButton,
</span><span style="color: rgba(0, 128, 128, 1)"> 627</span> <span style="color: rgba(0, 0, 0, 1)">                                    inAppWebView.getUrl());
</span><span style="color: rgba(0, 128, 128, 1)"> 628</span>
<span style="color: rgba(0, 128, 128, 1)"> 629</span>                           <span style="color: rgba(0, 0, 255, 1)">if</span> (features.backButtonCanClose &amp;&amp; !<span style="color: rgba(0, 0, 0, 1)">canGoBack()) {
</span><span style="color: rgba(0, 128, 128, 1)"> 630</span> <span style="color: rgba(0, 0, 0, 1)">                              closeDialog();
</span><span style="color: rgba(0, 128, 128, 1)"> 631</span>                           } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 632</span> <span style="color: rgba(0, 0, 0, 1)">                              goBack();
</span><span style="color: rgba(0, 128, 128, 1)"> 633</span> <span style="color: rgba(0, 0, 0, 1)">                            }
</span><span style="color: rgba(0, 128, 128, 1)"> 634</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span><span style="color: rgba(0, 128, 128, 1)"> 635</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)"> 636</span> <span style="color: rgba(0, 0, 0, 1)">                );
</span><span style="color: rgba(0, 128, 128, 1)"> 637</span>
<span style="color: rgba(0, 128, 128, 1)"> 638</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (back != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 639</span> <span style="color: rgba(0, 0, 0, 1)">                  back.setEnabled(features.backButtonCanClose);
</span><span style="color: rgba(0, 128, 128, 1)"> 640</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 641</span>
<span style="color: rgba(0, 128, 128, 1)"> 642</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Forward button</span>
<span style="color: rgba(0, 128, 128, 1)"> 643</span>               <span style="color: rgba(0, 0, 255, 1)">final</span> Button forward =<span style="color: rgba(0, 0, 0, 1)"> createButton(
</span><span style="color: rgba(0, 128, 128, 1)"> 644</span> <span style="color: rgba(0, 0, 0, 1)">                  features.forwardButton,
</span><span style="color: rgba(0, 128, 128, 1)"> 645</span>                     "forward button"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 646</span>                     <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> View.OnClickListener() {
</span><span style="color: rgba(0, 128, 128, 1)"> 647</span>                         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onClick(View v) {
</span><span style="color: rgba(0, 128, 128, 1)"> 648</span> <span style="color: rgba(0, 0, 0, 1)">                            emitButtonEvent(
</span><span style="color: rgba(0, 128, 128, 1)"> 649</span> <span style="color: rgba(0, 0, 0, 1)">                                    features.forwardButton,
</span><span style="color: rgba(0, 128, 128, 1)"> 650</span> <span style="color: rgba(0, 0, 0, 1)">                                    inAppWebView.getUrl());
</span><span style="color: rgba(0, 128, 128, 1)"> 651</span>
<span style="color: rgba(0, 128, 128, 1)"> 652</span> <span style="color: rgba(0, 0, 0, 1)">                            goForward();
</span><span style="color: rgba(0, 128, 128, 1)"> 653</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span><span style="color: rgba(0, 128, 128, 1)"> 654</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)"> 655</span> <span style="color: rgba(0, 0, 0, 1)">                );
</span><span style="color: rgba(0, 128, 128, 1)"> 656</span>
<span style="color: rgba(0, 128, 128, 1)"> 657</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (back != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 658</span>                     back.setEnabled(<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 659</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 660</span>
<span style="color: rgba(0, 128, 128, 1)"> 661</span>
<span style="color: rgba(0, 128, 128, 1)"> 662</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Close/Done button</span>
<span style="color: rgba(0, 128, 128, 1)"> 663</span>               Button close =<span style="color: rgba(0, 0, 0, 1)"> createButton(
</span><span style="color: rgba(0, 128, 128, 1)"> 664</span> <span style="color: rgba(0, 0, 0, 1)">                  features.closeButton,
</span><span style="color: rgba(0, 128, 128, 1)"> 665</span>                     "close button"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 666</span>                     <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> View.OnClickListener() {
</span><span style="color: rgba(0, 128, 128, 1)"> 667</span>                         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onClick(View v) {
</span><span style="color: rgba(0, 128, 128, 1)"> 668</span> <span style="color: rgba(0, 0, 0, 1)">                            emitButtonEvent(
</span><span style="color: rgba(0, 128, 128, 1)"> 669</span> <span style="color: rgba(0, 0, 0, 1)">                                    features.closeButton,
</span><span style="color: rgba(0, 128, 128, 1)"> 670</span> <span style="color: rgba(0, 0, 0, 1)">                                    inAppWebView.getUrl());
</span><span style="color: rgba(0, 128, 128, 1)"> 671</span> <span style="color: rgba(0, 0, 0, 1)">                            closeDialog();
</span><span style="color: rgba(0, 128, 128, 1)"> 672</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span><span style="color: rgba(0, 128, 128, 1)"> 673</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)"> 674</span> <span style="color: rgba(0, 0, 0, 1)">                );
</span><span style="color: rgba(0, 128, 128, 1)"> 675</span>
<span style="color: rgba(0, 128, 128, 1)"> 676</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Menu button</span>
<span style="color: rgba(0, 128, 128, 1)"> 677</span>               Spinner menu = features.menu != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 678</span>                         ? <span style="color: rgba(0, 0, 255, 1)">new</span> MenuSpinner(cordova.getActivity()) : <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 679</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (menu != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 680</span>                     menu.setLayoutParams(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> LinearLayout.LayoutParams(
</span><span style="color: rgba(0, 128, 128, 1)"> 681</span> <span style="color: rgba(0, 0, 0, 1)">                            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
</span><span style="color: rgba(0, 128, 128, 1)"> 682</span>                     menu.setContentDescription("menu button"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 683</span> <span style="color: rgba(0, 0, 0, 1)">                  setButtonImages(menu, features.menu, DISABLED_ALPHA);
</span><span style="color: rgba(0, 128, 128, 1)"> 684</span>
<span style="color: rgba(0, 128, 128, 1)"> 685</span>                     <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> We are not allowed to use onClickListener for Spinner, so we will use
</span><span style="color: rgba(0, 128, 128, 1)"> 686</span>                     <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> onTouchListener as a fallback.</span>
<span style="color: rgba(0, 128, 128, 1)"> 687</span>                     menu.setOnTouchListener(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> View.OnTouchListener() {
</span><span style="color: rgba(0, 128, 128, 1)"> 688</span> <span style="color: rgba(0, 0, 0, 1)">                        @Override
</span><span style="color: rgba(0, 128, 128, 1)"> 689</span>                         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> onTouch(View v, MotionEvent event) {
</span><span style="color: rgba(0, 128, 128, 1)"> 690</span>                           <span style="color: rgba(0, 0, 255, 1)">if</span> (event.getAction() ==<span style="color: rgba(0, 0, 0, 1)"> MotionEvent.ACTION_UP) {
</span><span style="color: rgba(0, 128, 128, 1)"> 691</span> <span style="color: rgba(0, 0, 0, 1)">                              emitButtonEvent(
</span><span style="color: rgba(0, 128, 128, 1)"> 692</span> <span style="color: rgba(0, 0, 0, 1)">                                        features.menu,
</span><span style="color: rgba(0, 128, 128, 1)"> 693</span> <span style="color: rgba(0, 0, 0, 1)">                                        inAppWebView.getUrl());
</span><span style="color: rgba(0, 128, 128, 1)"> 694</span> <span style="color: rgba(0, 0, 0, 1)">                            }
</span><span style="color: rgba(0, 128, 128, 1)"> 695</span>                           <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 696</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span><span style="color: rgba(0, 128, 128, 1)"> 697</span> <span style="color: rgba(0, 0, 0, 1)">                  });
</span><span style="color: rgba(0, 128, 128, 1)"> 698</span>
<span style="color: rgba(0, 128, 128, 1)"> 699</span>                     <span style="color: rgba(0, 0, 255, 1)">if</span> (features.menu.items != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 700</span>                         HideSelectedAdapter&lt;EventLabel&gt;<span style="color: rgba(0, 0, 0, 1)"> adapter
</span><span style="color: rgba(0, 128, 128, 1)"> 701</span>                                 = <span style="color: rgba(0, 0, 255, 1)">new</span> HideSelectedAdapter&lt;EventLabel&gt;<span style="color: rgba(0, 0, 0, 1)">(
</span><span style="color: rgba(0, 128, 128, 1)"> 702</span> <span style="color: rgba(0, 0, 0, 1)">                              cordova.getActivity(),
</span><span style="color: rgba(0, 128, 128, 1)"> 703</span> <span style="color: rgba(0, 0, 0, 1)">                              android.R.layout.simple_spinner_item,
</span><span style="color: rgba(0, 128, 128, 1)"> 704</span> <span style="color: rgba(0, 0, 0, 1)">                              features.menu.items);
</span><span style="color: rgba(0, 128, 128, 1)"> 705</span> <span style="color: rgba(0, 0, 0, 1)">                        adapter.setDropDownViewResource(
</span><span style="color: rgba(0, 128, 128, 1)"> 706</span> <span style="color: rgba(0, 0, 0, 1)">                              android.R.layout.simple_spinner_dropdown_item);
</span><span style="color: rgba(0, 128, 128, 1)"> 707</span> <span style="color: rgba(0, 0, 0, 1)">                        menu.setAdapter(adapter);
</span><span style="color: rgba(0, 128, 128, 1)"> 708</span> <span style="color: rgba(0, 0, 0, 1)">                        menu.setOnItemSelectedListener(
</span><span style="color: rgba(0, 128, 128, 1)"> 709</span>                                 <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> AdapterView.OnItemSelectedListener() {
</span><span style="color: rgba(0, 128, 128, 1)"> 710</span> <span style="color: rgba(0, 0, 0, 1)">                                    @Override
</span><span style="color: rgba(0, 128, 128, 1)"> 711</span>                                     <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onItemSelected(
</span><span style="color: rgba(0, 128, 128, 1)"> 712</span>                                             AdapterView&lt;?&gt;<span style="color: rgba(0, 0, 0, 1)"> adapterView,
</span><span style="color: rgba(0, 128, 128, 1)"> 713</span>                                             View view, <span style="color: rgba(0, 0, 255, 1)">int</span> i, <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> l) {
</span><span style="color: rgba(0, 128, 128, 1)"> 714</span>                                       <span style="color: rgba(0, 0, 255, 1)">if</span> (inAppWebView != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 715</span>                                                 &amp;&amp; i &lt;<span style="color: rgba(0, 0, 0, 1)"> features.menu.items.length) {
</span><span style="color: rgba(0, 128, 128, 1)"> 716</span> <span style="color: rgba(0, 0, 0, 1)">                                          emitButtonEvent(
</span><span style="color: rgba(0, 128, 128, 1)"> 717</span> <span style="color: rgba(0, 0, 0, 1)">                                                    features.menu.items,
</span><span style="color: rgba(0, 128, 128, 1)"> 718</span> <span style="color: rgba(0, 0, 0, 1)">                                                    inAppWebView.getUrl(), i);
</span><span style="color: rgba(0, 128, 128, 1)"> 719</span> <span style="color: rgba(0, 0, 0, 1)">                                        }
</span><span style="color: rgba(0, 128, 128, 1)"> 720</span> <span style="color: rgba(0, 0, 0, 1)">                                    }
</span><span style="color: rgba(0, 128, 128, 1)"> 721</span>
<span style="color: rgba(0, 128, 128, 1)"> 722</span> <span style="color: rgba(0, 0, 0, 1)">                                    @Override
</span><span style="color: rgba(0, 128, 128, 1)"> 723</span>                                     <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onNothingSelected(
</span><span style="color: rgba(0, 128, 128, 1)"> 724</span>                                             AdapterView&lt;?&gt;<span style="color: rgba(0, 0, 0, 1)"> adapterView) {
</span><span style="color: rgba(0, 128, 128, 1)"> 725</span> <span style="color: rgba(0, 0, 0, 1)">                                    }
</span><span style="color: rgba(0, 128, 128, 1)"> 726</span> <span style="color: rgba(0, 0, 0, 1)">                              }
</span><span style="color: rgba(0, 128, 128, 1)"> 727</span> <span style="color: rgba(0, 0, 0, 1)">                        );
</span><span style="color: rgba(0, 128, 128, 1)"> 728</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)"> 729</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 730</span>
<span style="color: rgba(0, 128, 128, 1)"> 731</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Title</span>
<span style="color: rgba(0, 128, 128, 1)"> 732</span>               <span style="color: rgba(0, 0, 255, 1)">final</span> TextView title = features.title != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 733</span>                         ? <span style="color: rgba(0, 0, 255, 1)">new</span> TextView(cordova.getActivity()) : <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 734</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (title != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 735</span> <span style="color: rgba(0, 0, 0, 1)">                  FrameLayout.LayoutParams titleParams
</span><span style="color: rgba(0, 128, 128, 1)"> 736</span>                           = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> FrameLayout.LayoutParams(
</span><span style="color: rgba(0, 128, 128, 1)"> 737</span> <span style="color: rgba(0, 0, 0, 1)">                            LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
</span><span style="color: rgba(0, 128, 128, 1)"> 738</span>                     titleParams.gravity =<span style="color: rgba(0, 0, 0, 1)"> Gravity.CENTER;
</span><span style="color: rgba(0, 128, 128, 1)"> 739</span> <span style="color: rgba(0, 0, 0, 1)">                  title.setLayoutParams(titleParams);
</span><span style="color: rgba(0, 128, 128, 1)"> 740</span> <span style="color: rgba(0, 0, 0, 1)">                  title.setSingleLine();
</span><span style="color: rgba(0, 128, 128, 1)"> 741</span> <span style="color: rgba(0, 0, 0, 1)">                  title.setEllipsize(TextUtils.TruncateAt.END);
</span><span style="color: rgba(0, 128, 128, 1)"> 742</span> <span style="color: rgba(0, 0, 0, 1)">                  title.setGravity(Gravity.CENTER);
</span><span style="color: rgba(0, 128, 128, 1)"> 743</span> <span style="color: rgba(0, 0, 0, 1)">                  title.setTextColor(hexStringToColor(
</span><span style="color: rgba(0, 128, 128, 1)"> 744</span>                           features.title.color != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 745</span>                                     ? features.title.color : "#000000ff"<span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 128, 1)"> 746</span>                     <span style="color: rgba(0, 0, 255, 1)">if</span> (features.title.staticText != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 747</span> <span style="color: rgba(0, 0, 0, 1)">                        title.setText(features.title.staticText);
</span><span style="color: rgba(0, 128, 128, 1)"> 748</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)"> 749</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 750</span>
<span style="color: rgba(0, 128, 128, 1)"> 751</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> WebView</span>
<span style="color: rgba(0, 128, 128, 1)"> 752</span>               inAppWebView = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> WebView(cordova.getActivity());
</span><span style="color: rgba(0, 128, 128, 1)"> 753</span>               <span style="color: rgba(0, 0, 255, 1)">final</span> ViewGroup.LayoutParams inAppWebViewParams =<span style="color: rgba(0, 0, 0, 1)"> features.fullscreen
</span><span style="color: rgba(0, 128, 128, 1)"> 754</span>                         ? <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)
</span><span style="color: rgba(0, 128, 128, 1)"> 755</span>                         : <span style="color: rgba(0, 0, 255, 1)">new</span> LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 0<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 756</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">features.fullscreen) {
</span><span style="color: rgba(0, 128, 128, 1)"> 757</span>                     ((LinearLayout.LayoutParams) inAppWebViewParams).weight = 1<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 758</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 759</span> <span style="color: rgba(0, 0, 0, 1)">                inAppWebView.setLayoutParams(inAppWebViewParams);
</span><span style="color: rgba(0, 128, 128, 1)"> 760</span>               inAppWebView.setWebChromeClient(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> InAppChromeClient(thatWebView));
</span><span style="color: rgba(0, 128, 128, 1)"> 761</span>               WebViewClient client = <span style="color: rgba(0, 0, 255, 1)">new</span> ThemeableBrowserClient(thatWebView, <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> PageLoadListener() {
</span><span style="color: rgba(0, 128, 128, 1)"> 762</span> <span style="color: rgba(0, 0, 0, 1)">                  @Override
</span><span style="color: rgba(0, 128, 128, 1)"> 763</span>                     <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> onPageFinished(String url, <span style="color: rgba(0, 0, 255, 1)">boolean</span> canGoBack, <span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> canGoForward) {
</span><span style="color: rgba(0, 128, 128, 1)"> 764</span>                         <span style="color: rgba(0, 0, 255, 1)">if</span> (inAppWebView != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 765</span>                                 &amp;&amp; title != <span style="color: rgba(0, 0, 255, 1)">null</span> &amp;&amp; features.title != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 766</span>                                 &amp;&amp; features.title.staticText == <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 767</span>                                 &amp;&amp;<span style="color: rgba(0, 0, 0, 1)"> features.title.showPageTitle) {
</span><span style="color: rgba(0, 128, 128, 1)"> 768</span> <span style="color: rgba(0, 0, 0, 1)">                            title.setText(inAppWebView.getTitle());
</span><span style="color: rgba(0, 128, 128, 1)"> 769</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span><span style="color: rgba(0, 128, 128, 1)"> 770</span>
<span style="color: rgba(0, 128, 128, 1)"> 771</span>                         <span style="color: rgba(0, 0, 255, 1)">if</span> (back != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 772</span>                           back.setEnabled(canGoBack ||<span style="color: rgba(0, 0, 0, 1)"> features.backButtonCanClose);
</span><span style="color: rgba(0, 128, 128, 1)"> 773</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span><span style="color: rgba(0, 128, 128, 1)"> 774</span>
<span style="color: rgba(0, 128, 128, 1)"> 775</span>                         <span style="color: rgba(0, 0, 255, 1)">if</span> (forward != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 776</span> <span style="color: rgba(0, 0, 0, 1)">                            forward.setEnabled(canGoForward);
</span><span style="color: rgba(0, 128, 128, 1)"> 777</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span><span style="color: rgba(0, 128, 128, 1)"> 778</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)"> 779</span> <span style="color: rgba(0, 0, 0, 1)">                });
</span><span style="color: rgba(0, 128, 128, 1)"> 780</span> <span style="color: rgba(0, 0, 0, 1)">                inAppWebView.setWebViewClient(client);
</span><span style="color: rgba(0, 128, 128, 1)"> 781</span>               WebSettings settings =<span style="color: rgba(0, 0, 0, 1)"> inAppWebView.getSettings();
</span><span style="color: rgba(0, 128, 128, 1)"> 782</span>               settings.setJavaScriptEnabled(<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 783</span>               settings.setJavaScriptCanOpenWindowsAutomatically(<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 784</span> <span style="color: rgba(0, 0, 0, 1)">                settings.setBuiltInZoomControls(features.zoom);
</span><span style="color: rgba(0, 128, 128, 1)"> 785</span>               settings.setDisplayZoomControls(<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 786</span> <span style="color: rgba(0, 0, 0, 1)">                settings.setPluginState(android.webkit.WebSettings.PluginState.ON);
</span><span style="color: rgba(0, 128, 128, 1)"> 787</span>
<span style="color: rgba(0, 128, 128, 1)"> 788</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Toggle whether this is enabled or not!</span>
<span style="color: rgba(0, 128, 128, 1)"> 789</span>               Bundle appSettings =<span style="color: rgba(0, 0, 0, 1)"> cordova.getActivity().getIntent().getExtras();
</span><span style="color: rgba(0, 128, 128, 1)"> 790</span>               <span style="color: rgba(0, 0, 255, 1)">boolean</span> enableDatabase = appSettings == <span style="color: rgba(0, 0, 255, 1)">null</span> || appSettings.getBoolean("ThemeableBrowserStorageEnabled", <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 791</span>               <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (enableDatabase) {
</span><span style="color: rgba(0, 128, 128, 1)"> 792</span>                     String databasePath = cordova.getActivity().getApplicationContext().getDir("themeableBrowserDB"<span style="color: rgba(0, 0, 0, 1)">, Context.MODE_PRIVATE).getPath();
</span><span style="color: rgba(0, 128, 128, 1)"> 793</span> <span style="color: rgba(0, 0, 0, 1)">                  settings.setDatabasePath(databasePath);
</span><span style="color: rgba(0, 128, 128, 1)"> 794</span>                     settings.setDatabaseEnabled(<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 795</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 796</span>               settings.setDomStorageEnabled(<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 797</span>
<span style="color: rgba(0, 128, 128, 1)"> 798</span>               <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (features.clearcache) {
</span><span style="color: rgba(0, 128, 128, 1)"> 799</span> <span style="color: rgba(0, 0, 0, 1)">                  CookieManager.getInstance().removeAllCookie();
</span><span style="color: rgba(0, 128, 128, 1)"> 800</span>               } <span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (features.clearsessioncache) {
</span><span style="color: rgba(0, 128, 128, 1)"> 801</span> <span style="color: rgba(0, 0, 0, 1)">                  CookieManager.getInstance().removeSessionCookie();
</span><span style="color: rgba(0, 128, 128, 1)"> 802</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 803</span>
<span style="color: rgba(0, 128, 128, 1)"> 804</span> <span style="color: rgba(0, 0, 0, 1)">                inAppWebView.loadUrl(url);
</span><span style="color: rgba(0, 128, 128, 1)"> 805</span>               inAppWebView.getSettings().setLoadWithOverviewMode(<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 806</span>               inAppWebView.getSettings().setUseWideViewPort(<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 807</span> <span style="color: rgba(0, 0, 0, 1)">                inAppWebView.requestFocus();
</span><span style="color: rgba(0, 128, 128, 1)"> 808</span> <span style="color: rgba(0, 0, 0, 1)">                inAppWebView.requestFocusFromTouch();
</span><span style="color: rgba(0, 128, 128, 1)"> 809</span>
<span style="color: rgba(0, 128, 128, 1)"> 810</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Add buttons to either leftButtonsContainer or
</span><span style="color: rgba(0, 128, 128, 1)"> 811</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> rightButtonsContainer according to user's alignment
</span><span style="color: rgba(0, 128, 128, 1)"> 812</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> configuration.</span>
<span style="color: rgba(0, 128, 128, 1)"> 813</span>               <span style="color: rgba(0, 0, 255, 1)">int</span> leftContainerWidth = 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 814</span>               <span style="color: rgba(0, 0, 255, 1)">int</span> rightContainerWidth = 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 815</span>
<span style="color: rgba(0, 128, 128, 1)"> 816</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (features.customButtons != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 817</span>                     <span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i &lt; features.customButtons.length; i++<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 818</span>                         <span style="color: rgba(0, 0, 255, 1)">final</span> BrowserButton buttonProps =<span style="color: rgba(0, 0, 0, 1)"> features.customButtons;
</span><span style="color: rgba(0, 128, 128, 1)"> 819</span>                         <span style="color: rgba(0, 0, 255, 1)">final</span> <span style="color: rgba(0, 0, 255, 1)">int</span> index =<span style="color: rgba(0, 0, 0, 1)"> i;
</span><span style="color: rgba(0, 128, 128, 1)"> 820</span>                         Button button =<span style="color: rgba(0, 0, 0, 1)"> createButton(
</span><span style="color: rgba(0, 128, 128, 1)"> 821</span> <span style="color: rgba(0, 0, 0, 1)">                            buttonProps,
</span><span style="color: rgba(0, 128, 128, 1)"> 822</span>                           String.format("custom button at %d"<span style="color: rgba(0, 0, 0, 1)">, i),
</span><span style="color: rgba(0, 128, 128, 1)"> 823</span>                           <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> View.OnClickListener() {
</span><span style="color: rgba(0, 128, 128, 1)"> 824</span> <span style="color: rgba(0, 0, 0, 1)">                              @Override
</span><span style="color: rgba(0, 128, 128, 1)"> 825</span>                                 <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onClick(View view) {
</span><span style="color: rgba(0, 128, 128, 1)"> 826</span>                                     <span style="color: rgba(0, 0, 255, 1)">if</span> (inAppWebView != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 827</span> <span style="color: rgba(0, 0, 0, 1)">                                        emitButtonEvent(buttonProps,
</span><span style="color: rgba(0, 128, 128, 1)"> 828</span> <span style="color: rgba(0, 0, 0, 1)">                                                inAppWebView.getUrl(), index);
</span><span style="color: rgba(0, 128, 128, 1)"> 829</span> <span style="color: rgba(0, 0, 0, 1)">                                    }
</span><span style="color: rgba(0, 128, 128, 1)"> 830</span> <span style="color: rgba(0, 0, 0, 1)">                              }
</span><span style="color: rgba(0, 128, 128, 1)"> 831</span> <span style="color: rgba(0, 0, 0, 1)">                            }
</span><span style="color: rgba(0, 128, 128, 1)"> 832</span> <span style="color: rgba(0, 0, 0, 1)">                        );
</span><span style="color: rgba(0, 128, 128, 1)"> 833</span>
<span style="color: rgba(0, 128, 128, 1)"> 834</span>                         <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (ALIGN_RIGHT.equals(buttonProps.align)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 835</span> <span style="color: rgba(0, 0, 0, 1)">                            rightButtonContainer.addView(button);
</span><span style="color: rgba(0, 128, 128, 1)"> 836</span> <span style="color: rgba(0, 0, 0, 1)">                            rightContainerWidth
</span><span style="color: rgba(0, 128, 128, 1)"> 837</span>                                     +=<span style="color: rgba(0, 0, 0, 1)"> button.getLayoutParams().width;
</span><span style="color: rgba(0, 128, 128, 1)"> 838</span>                         } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 839</span>                           leftButtonContainer.addView(button, 0<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 840</span> <span style="color: rgba(0, 0, 0, 1)">                            leftContainerWidth
</span><span style="color: rgba(0, 128, 128, 1)"> 841</span>                                     +=<span style="color: rgba(0, 0, 0, 1)"> button.getLayoutParams().width;
</span><span style="color: rgba(0, 128, 128, 1)"> 842</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span><span style="color: rgba(0, 128, 128, 1)"> 843</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)"> 844</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 845</span>
<span style="color: rgba(0, 128, 128, 1)"> 846</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Back and forward buttons must be added with special ordering logic such
</span><span style="color: rgba(0, 128, 128, 1)"> 847</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> that back button is always on the left of forward button if both buttons
</span><span style="color: rgba(0, 128, 128, 1)"> 848</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> are on the same side.</span>
<span style="color: rgba(0, 128, 128, 1)"> 849</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (forward != <span style="color: rgba(0, 0, 255, 1)">null</span> &amp;&amp; features.forwardButton != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 850</span>                         &amp;&amp; !<span style="color: rgba(0, 0, 0, 1)">ALIGN_RIGHT.equals(features.forwardButton.align)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 851</span>                     leftButtonContainer.addView(forward, 0<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 852</span> <span style="color: rgba(0, 0, 0, 1)">                  leftContainerWidth
</span><span style="color: rgba(0, 128, 128, 1)"> 853</span>                           +=<span style="color: rgba(0, 0, 0, 1)"> forward.getLayoutParams().width;
</span><span style="color: rgba(0, 128, 128, 1)"> 854</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 855</span>
<span style="color: rgba(0, 128, 128, 1)"> 856</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (back != <span style="color: rgba(0, 0, 255, 1)">null</span> &amp;&amp; features.backButton != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 857</span>                         &amp;&amp;<span style="color: rgba(0, 0, 0, 1)"> ALIGN_RIGHT.equals(features.backButton.align)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 858</span> <span style="color: rgba(0, 0, 0, 1)">                  rightButtonContainer.addView(back);
</span><span style="color: rgba(0, 128, 128, 1)"> 859</span> <span style="color: rgba(0, 0, 0, 1)">                  rightContainerWidth
</span><span style="color: rgba(0, 128, 128, 1)"> 860</span>                           +=<span style="color: rgba(0, 0, 0, 1)"> back.getLayoutParams().width;
</span><span style="color: rgba(0, 128, 128, 1)"> 861</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 862</span>
<span style="color: rgba(0, 128, 128, 1)"> 863</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (back != <span style="color: rgba(0, 0, 255, 1)">null</span> &amp;&amp; features.backButton != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 864</span>                         &amp;&amp; !<span style="color: rgba(0, 0, 0, 1)">ALIGN_RIGHT.equals(features.backButton.align)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 865</span>                     leftButtonContainer.addView(back, 0<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 866</span> <span style="color: rgba(0, 0, 0, 1)">                  leftContainerWidth
</span><span style="color: rgba(0, 128, 128, 1)"> 867</span>                           +=<span style="color: rgba(0, 0, 0, 1)"> back.getLayoutParams().width;
</span><span style="color: rgba(0, 128, 128, 1)"> 868</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 869</span>
<span style="color: rgba(0, 128, 128, 1)"> 870</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (forward != <span style="color: rgba(0, 0, 255, 1)">null</span> &amp;&amp; features.forwardButton != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 871</span>                         &amp;&amp;<span style="color: rgba(0, 0, 0, 1)"> ALIGN_RIGHT.equals(features.forwardButton.align)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 872</span> <span style="color: rgba(0, 0, 0, 1)">                  rightButtonContainer.addView(forward);
</span><span style="color: rgba(0, 128, 128, 1)"> 873</span> <span style="color: rgba(0, 0, 0, 1)">                  rightContainerWidth
</span><span style="color: rgba(0, 128, 128, 1)"> 874</span>                           +=<span style="color: rgba(0, 0, 0, 1)"> forward.getLayoutParams().width;
</span><span style="color: rgba(0, 128, 128, 1)"> 875</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 876</span>
<span style="color: rgba(0, 128, 128, 1)"> 877</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (menu != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 878</span>                     <span style="color: rgba(0, 0, 255, 1)">if</span> (features.menu != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 879</span>                           &amp;&amp;<span style="color: rgba(0, 0, 0, 1)"> ALIGN_RIGHT.equals(features.menu.align)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 880</span> <span style="color: rgba(0, 0, 0, 1)">                        rightButtonContainer.addView(menu);
</span><span style="color: rgba(0, 128, 128, 1)"> 881</span> <span style="color: rgba(0, 0, 0, 1)">                        rightContainerWidth
</span><span style="color: rgba(0, 128, 128, 1)"> 882</span>                                 +=<span style="color: rgba(0, 0, 0, 1)"> menu.getLayoutParams().width;
</span><span style="color: rgba(0, 128, 128, 1)"> 883</span>                     } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 884</span>                         leftButtonContainer.addView(menu, 0<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 885</span> <span style="color: rgba(0, 0, 0, 1)">                        leftContainerWidth
</span><span style="color: rgba(0, 128, 128, 1)"> 886</span>                                 +=<span style="color: rgba(0, 0, 0, 1)"> menu.getLayoutParams().width;
</span><span style="color: rgba(0, 128, 128, 1)"> 887</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)"> 888</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 889</span>
<span style="color: rgba(0, 128, 128, 1)"> 890</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (close != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 891</span>                     <span style="color: rgba(0, 0, 255, 1)">if</span> (features.closeButton != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 892</span>                           &amp;&amp;<span style="color: rgba(0, 0, 0, 1)"> ALIGN_RIGHT.equals(features.closeButton.align)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 893</span> <span style="color: rgba(0, 0, 0, 1)">                        rightButtonContainer.addView(close);
</span><span style="color: rgba(0, 128, 128, 1)"> 894</span> <span style="color: rgba(0, 0, 0, 1)">                        rightContainerWidth
</span><span style="color: rgba(0, 128, 128, 1)"> 895</span>                                 +=<span style="color: rgba(0, 0, 0, 1)"> close.getLayoutParams().width;
</span><span style="color: rgba(0, 128, 128, 1)"> 896</span>                     } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 897</span>                         leftButtonContainer.addView(close, 0<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 898</span> <span style="color: rgba(0, 0, 0, 1)">                        leftContainerWidth
</span><span style="color: rgba(0, 128, 128, 1)"> 899</span>                                 +=<span style="color: rgba(0, 0, 0, 1)"> close.getLayoutParams().width;
</span><span style="color: rgba(0, 128, 128, 1)"> 900</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)"> 901</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 902</span>
<span style="color: rgba(0, 128, 128, 1)"> 903</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Add the views to our toolbar</span>
<span style="color: rgba(0, 128, 128, 1)"> 904</span> <span style="color: rgba(0, 0, 0, 1)">                toolbar.addView(leftButtonContainer);
</span><span style="color: rgba(0, 128, 128, 1)"> 905</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Don't show address bar.
</span><span style="color: rgba(0, 128, 128, 1)"> 906</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> toolbar.addView(edittext);</span>
<span style="color: rgba(0, 128, 128, 1)"> 907</span> <span style="color: rgba(0, 0, 0, 1)">                toolbar.addView(rightButtonContainer);
</span><span style="color: rgba(0, 128, 128, 1)"> 908</span>
<span style="color: rgba(0, 128, 128, 1)"> 909</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (title != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 910</span>                     <span style="color: rgba(0, 0, 255, 1)">int</span> titleMargin =<span style="color: rgba(0, 0, 0, 1)"> Math.max(
</span><span style="color: rgba(0, 128, 128, 1)"> 911</span> <span style="color: rgba(0, 0, 0, 1)">                            leftContainerWidth, rightContainerWidth);
</span><span style="color: rgba(0, 128, 128, 1)"> 912</span>
<span style="color: rgba(0, 128, 128, 1)"> 913</span> <span style="color: rgba(0, 0, 0, 1)">                  FrameLayout.LayoutParams titleParams
</span><span style="color: rgba(0, 128, 128, 1)"> 914</span>                           =<span style="color: rgba(0, 0, 0, 1)"> (FrameLayout.LayoutParams) title.getLayoutParams();
</span><span style="color: rgba(0, 128, 128, 1)"> 915</span>                     titleParams.setMargins(titleMargin, 0, titleMargin, 0<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 916</span> <span style="color: rgba(0, 0, 0, 1)">                  toolbar.addView(title);
</span><span style="color: rgba(0, 128, 128, 1)"> 917</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 918</span>
<span style="color: rgba(0, 128, 128, 1)"> 919</span>               <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (features.fullscreen) {
</span><span style="color: rgba(0, 128, 128, 1)"> 920</span>                     <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> If full screen mode, we have to add inAppWebView before adding toolbar.</span>
<span style="color: rgba(0, 128, 128, 1)"> 921</span> <span style="color: rgba(0, 0, 0, 1)">                  main.addView(inAppWebView);
</span><span style="color: rgba(0, 128, 128, 1)"> 922</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 923</span>
<span style="color: rgba(0, 128, 128, 1)"> 924</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Don't add the toolbar if its been disabled</span>
<span style="color: rgba(0, 128, 128, 1)"> 925</span>               <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (features.location) {
</span><span style="color: rgba(0, 128, 128, 1)"> 926</span>                     <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Add our toolbar to our main view/layout</span>
<span style="color: rgba(0, 128, 128, 1)"> 927</span> <span style="color: rgba(0, 0, 0, 1)">                  main.addView(toolbar);
</span><span style="color: rgba(0, 128, 128, 1)"> 928</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 929</span>
<span style="color: rgba(0, 128, 128, 1)"> 930</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">features.fullscreen) {
</span><span style="color: rgba(0, 128, 128, 1)"> 931</span>                     <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> If not full screen, we add inAppWebView after adding toolbar.</span>
<span style="color: rgba(0, 128, 128, 1)"> 932</span> <span style="color: rgba(0, 0, 0, 1)">                  main.addView(inAppWebView);
</span><span style="color: rgba(0, 128, 128, 1)"> 933</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 934</span>
<span style="color: rgba(0, 128, 128, 1)"> 935</span>               WindowManager.LayoutParams lp = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> WindowManager.LayoutParams();
</span><span style="color: rgba(0, 128, 128, 1)"> 936</span> <span style="color: rgba(0, 0, 0, 1)">                lp.copyFrom(dialog.getWindow().getAttributes());
</span><span style="color: rgba(0, 128, 128, 1)"> 937</span>               lp.width =<span style="color: rgba(0, 0, 0, 1)"> WindowManager.LayoutParams.MATCH_PARENT;
</span><span style="color: rgba(0, 128, 128, 1)"> 938</span>               lp.height =<span style="color: rgba(0, 0, 0, 1)"> WindowManager.LayoutParams.MATCH_PARENT;
</span><span style="color: rgba(0, 128, 128, 1)"> 939</span>
<span style="color: rgba(0, 128, 128, 1)"> 940</span> <span style="color: rgba(0, 0, 0, 1)">                dialog.setContentView(main);
</span><span style="color: rgba(0, 128, 128, 1)"> 941</span> <span style="color: rgba(0, 0, 0, 1)">                dialog.show();
</span><span style="color: rgba(0, 128, 128, 1)"> 942</span> <span style="color: rgba(0, 0, 0, 1)">                dialog.getWindow().setAttributes(lp);
</span><span style="color: rgba(0, 128, 128, 1)"> 943</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> the goal of openhidden is to load the url and not display it
</span><span style="color: rgba(0, 128, 128, 1)"> 944</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Show() needs to be called to cause the URL to be loaded</span>
<span style="color: rgba(0, 128, 128, 1)"> 945</span>               <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)">(features.hidden) {
</span><span style="color: rgba(0, 128, 128, 1)"> 946</span> <span style="color: rgba(0, 0, 0, 1)">                  dialog.hide();
</span><span style="color: rgba(0, 128, 128, 1)"> 947</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 948</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 949</span> <span style="color: rgba(0, 0, 0, 1)">      };
</span><span style="color: rgba(0, 128, 128, 1)"> 950</span>         <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.cordova.getActivity().runOnUiThread(runnable);
</span><span style="color: rgba(0, 128, 128, 1)"> 951</span>         <span style="color: rgba(0, 0, 255, 1)">return</span> ""<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 952</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 953</span>
<span style="color: rgba(0, 128, 128, 1)"> 954</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)"> 955</span> <span style="color: rgba(0, 128, 0, 1)">   * Convert our DIP units to Pixels
</span><span style="color: rgba(0, 128, 128, 1)"> 956</span> <span style="color: rgba(0, 128, 0, 1)">   *
</span><span style="color: rgba(0, 128, 128, 1)"> 957</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> int
</span><span style="color: rgba(0, 128, 128, 1)"> 958</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 959</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">int</span> dpToPixels(<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> dipValue) {
</span><span style="color: rgba(0, 128, 128, 1)"> 960</span>         <span style="color: rgba(0, 0, 255, 1)">int</span> value = (<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)">) TypedValue.applyDimension(
</span><span style="color: rgba(0, 128, 128, 1)"> 961</span> <span style="color: rgba(0, 0, 0, 1)">                TypedValue.COMPLEX_UNIT_DIP,
</span><span style="color: rgba(0, 128, 128, 1)"> 962</span>               (<span style="color: rgba(0, 0, 255, 1)">float</span><span style="color: rgba(0, 0, 0, 1)">) dipValue,
</span><span style="color: rgba(0, 128, 128, 1)"> 963</span> <span style="color: rgba(0, 0, 0, 1)">                cordova.getActivity().getResources().getDisplayMetrics()
</span><span style="color: rgba(0, 128, 128, 1)"> 964</span> <span style="color: rgba(0, 0, 0, 1)">      );
</span><span style="color: rgba(0, 128, 128, 1)"> 965</span>
<span style="color: rgba(0, 128, 128, 1)"> 966</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> value;
</span><span style="color: rgba(0, 128, 128, 1)"> 967</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 968</span>
<span style="color: rgba(0, 128, 128, 1)"> 969</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> hexStringToColor(String hex) {
</span><span style="color: rgba(0, 128, 128, 1)"> 970</span>         <span style="color: rgba(0, 0, 255, 1)">int</span> result = 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 971</span>
<span style="color: rgba(0, 128, 128, 1)"> 972</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (hex != <span style="color: rgba(0, 0, 255, 1)">null</span> &amp;&amp; !<span style="color: rgba(0, 0, 0, 1)">hex.isEmpty()) {
</span><span style="color: rgba(0, 128, 128, 1)"> 973</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> (hex.charAt(0) == '#'<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 974</span>               hex = hex.substring(1<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 975</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 976</span>
<span style="color: rgba(0, 128, 128, 1)"> 977</span>             <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> No alpha, that's fine, we will just attach ff.</span>
<span style="color: rgba(0, 128, 128, 1)"> 978</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> (hex.length() &lt; 8<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 979</span>               hex += "ff"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 980</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 981</span>
<span style="color: rgba(0, 128, 128, 1)"> 982</span>             result = (<span style="color: rgba(0, 0, 255, 1)">int</span>) Long.parseLong(hex, 16<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 983</span>
<span style="color: rgba(0, 128, 128, 1)"> 984</span>             <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Almost done, but Android color code is in form of ARGB instead of
</span><span style="color: rgba(0, 128, 128, 1)"> 985</span>             <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> RGBA, so we gotta shift it a bit.</span>
<span style="color: rgba(0, 128, 128, 1)"> 986</span>             <span style="color: rgba(0, 0, 255, 1)">int</span> alpha = (result &amp; 0xff) &lt;&lt; 24<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 987</span>             result = result &gt;&gt; 8 &amp; 0xffffff |<span style="color: rgba(0, 0, 0, 1)"> alpha;
</span><span style="color: rgba(0, 128, 128, 1)"> 988</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 989</span>
<span style="color: rgba(0, 128, 128, 1)"> 990</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result;
</span><span style="color: rgba(0, 128, 128, 1)"> 991</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 992</span>
<span style="color: rgba(0, 128, 128, 1)"> 993</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)"> 994</span> <span style="color: rgba(0, 128, 0, 1)">    * This is a rather unintuitive helper method to load images. The reason why this method exists
</span><span style="color: rgba(0, 128, 128, 1)"> 995</span> <span style="color: rgba(0, 128, 0, 1)">    * is because due to some service limitations, one may not be able to add images to native
</span><span style="color: rgba(0, 128, 128, 1)"> 996</span> <span style="color: rgba(0, 128, 0, 1)">    * resource bundle. So this method offers a way to load image from www contents instead.
</span><span style="color: rgba(0, 128, 128, 1)"> 997</span> <span style="color: rgba(0, 128, 0, 1)">    * However loading from native resource bundle is already preferred over loading from www. So
</span><span style="color: rgba(0, 128, 128, 1)"> 998</span> <span style="color: rgba(0, 128, 0, 1)">    * if name is given, then it simply loads from resource bundle and the other two parameters are
</span><span style="color: rgba(0, 128, 128, 1)"> 999</span> <span style="color: rgba(0, 128, 0, 1)">    * ignored. If name is not given, then altPath is assumed to be a file path _under_ www and
</span><span style="color: rgba(0, 128, 128, 1)">1000</span> <span style="color: rgba(0, 128, 0, 1)">    * altDensity is the desired density of the given image file, because without native resource
</span><span style="color: rgba(0, 128, 128, 1)">1001</span> <span style="color: rgba(0, 128, 0, 1)">    * bundle, we can't tell what density the image is supposed to be so it needs to be given
</span><span style="color: rgba(0, 128, 128, 1)">1002</span> <span style="color: rgba(0, 128, 0, 1)">    * explicitly.
</span><span style="color: rgba(0, 128, 128, 1)">1003</span>   <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">1004</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> Drawable getImage(String name, String altPath, <span style="color: rgba(0, 0, 255, 1)">double</span> altDensity) <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> IOException {
</span><span style="color: rgba(0, 128, 128, 1)">1005</span>         Drawable result = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1006</span>         Resources activityRes =<span style="color: rgba(0, 0, 0, 1)"> cordova.getActivity().getResources();
</span><span style="color: rgba(0, 128, 128, 1)">1007</span>
<span style="color: rgba(0, 128, 128, 1)">1008</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (name != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">1009</span>             <span style="color: rgba(0, 0, 255, 1)">int</span> id = activityRes.getIdentifier(name, "drawable"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">1010</span> <span style="color: rgba(0, 0, 0, 1)">                  cordova.getActivity().getPackageName());
</span><span style="color: rgba(0, 128, 128, 1)">1011</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> (Build.VERSION.SDK_INT &lt;<span style="color: rgba(0, 0, 0, 1)"> Build.VERSION_CODES.LOLLIPOP) {
</span><span style="color: rgba(0, 128, 128, 1)">1012</span>               result =<span style="color: rgba(0, 0, 0, 1)"> activityRes.getDrawable(id);
</span><span style="color: rgba(0, 128, 128, 1)">1013</span>             } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">1014</span>               result =<span style="color: rgba(0, 0, 0, 1)"> activityRes.getDrawable(id, cordova.getActivity().getTheme());
</span><span style="color: rgba(0, 128, 128, 1)">1015</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">1016</span>         } <span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (altPath != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">1017</span>             File file = <span style="color: rgba(0, 0, 255, 1)">new</span> File("www"<span style="color: rgba(0, 0, 0, 1)">, altPath);
</span><span style="color: rgba(0, 128, 128, 1)">1018</span>             InputStream is = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1019</span>             <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">1020</span>               is =<span style="color: rgba(0, 0, 0, 1)"> cordova.getActivity().getAssets().open(file.getPath());
</span><span style="color: rgba(0, 128, 128, 1)">1021</span>               Bitmap bitmap =<span style="color: rgba(0, 0, 0, 1)"> BitmapFactory.decodeStream(is);
</span><span style="color: rgba(0, 128, 128, 1)">1022</span>               bitmap.setDensity((<span style="color: rgba(0, 0, 255, 1)">int</span>) (DisplayMetrics.DENSITY_MEDIUM *<span style="color: rgba(0, 0, 0, 1)"> altDensity));
</span><span style="color: rgba(0, 128, 128, 1)">1023</span>               result = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> BitmapDrawable(activityRes, bitmap);
</span><span style="color: rgba(0, 128, 128, 1)">1024</span>             } <span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">1025</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Make sure we close this input stream to prevent resource leak.</span>
<span style="color: rgba(0, 128, 128, 1)">1026</span>               <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">1027</span> <span style="color: rgba(0, 0, 0, 1)">                  is.close();
</span><span style="color: rgba(0, 128, 128, 1)">1028</span>               } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception e) {}
</span><span style="color: rgba(0, 128, 128, 1)">1029</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">1030</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1031</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result;
</span><span style="color: rgba(0, 128, 128, 1)">1032</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">1033</span>
<span style="color: rgba(0, 128, 128, 1)">1034</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span> setButtonImages(View view, BrowserButton buttonProps, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> disabledAlpha) {
</span><span style="color: rgba(0, 128, 128, 1)">1035</span>         Drawable normalDrawable = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1036</span>         Drawable disabledDrawable = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1037</span>         Drawable pressedDrawable = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1038</span>
<span style="color: rgba(0, 128, 128, 1)">1039</span>         CharSequence description =<span style="color: rgba(0, 0, 0, 1)"> view.getContentDescription();
</span><span style="color: rgba(0, 128, 128, 1)">1040</span>
<span style="color: rgba(0, 128, 128, 1)">1041</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (buttonProps.image != <span style="color: rgba(0, 0, 255, 1)">null</span> || buttonProps.wwwImage != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">1042</span>             <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">1043</span>               normalDrawable =<span style="color: rgba(0, 0, 0, 1)"> getImage(buttonProps.image, buttonProps.wwwImage,
</span><span style="color: rgba(0, 128, 128, 1)">1044</span> <span style="color: rgba(0, 0, 0, 1)">                        buttonProps.wwwImageDensity);
</span><span style="color: rgba(0, 128, 128, 1)">1045</span>               ViewGroup.LayoutParams params =<span style="color: rgba(0, 0, 0, 1)"> view.getLayoutParams();
</span><span style="color: rgba(0, 128, 128, 1)">1046</span>               params.width =<span style="color: rgba(0, 0, 0, 1)"> normalDrawable.getIntrinsicWidth();
</span><span style="color: rgba(0, 128, 128, 1)">1047</span>               params.height =<span style="color: rgba(0, 0, 0, 1)"> normalDrawable.getIntrinsicHeight();
</span><span style="color: rgba(0, 128, 128, 1)">1048</span>             } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Resources.NotFoundException e) {
</span><span style="color: rgba(0, 128, 128, 1)">1049</span> <span style="color: rgba(0, 0, 0, 1)">                emitError(ERR_LOADFAIL,
</span><span style="color: rgba(0, 128, 128, 1)">1050</span>                         String.format("Image for %s, %s, failed to load"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">1051</span> <span style="color: rgba(0, 0, 0, 1)">                              description, buttonProps.image));
</span><span style="color: rgba(0, 128, 128, 1)">1052</span>             } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (IOException ioe) {
</span><span style="color: rgba(0, 128, 128, 1)">1053</span> <span style="color: rgba(0, 0, 0, 1)">                emitError(ERR_LOADFAIL,
</span><span style="color: rgba(0, 128, 128, 1)">1054</span>                         String.format("Image for %s, %s, failed to load"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">1055</span> <span style="color: rgba(0, 0, 0, 1)">                              description, buttonProps.wwwImage));
</span><span style="color: rgba(0, 128, 128, 1)">1056</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">1057</span>         } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">1058</span> <span style="color: rgba(0, 0, 0, 1)">            emitWarning(WRN_UNDEFINED,
</span><span style="color: rgba(0, 128, 128, 1)">1059</span>                     String.format("Image for %s is not defined. Button will not be shown"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">1060</span> <span style="color: rgba(0, 0, 0, 1)">                            description));
</span><span style="color: rgba(0, 128, 128, 1)">1061</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1062</span>
<span style="color: rgba(0, 128, 128, 1)">1063</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (buttonProps.imagePressed != <span style="color: rgba(0, 0, 255, 1)">null</span> || buttonProps.wwwImagePressed != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">1064</span>             <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">1065</span>               pressedDrawable =<span style="color: rgba(0, 0, 0, 1)"> getImage(buttonProps.imagePressed, buttonProps.wwwImagePressed,
</span><span style="color: rgba(0, 128, 128, 1)">1066</span> <span style="color: rgba(0, 0, 0, 1)">                        buttonProps.wwwImageDensity);
</span><span style="color: rgba(0, 128, 128, 1)">1067</span>             } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Resources.NotFoundException e) {
</span><span style="color: rgba(0, 128, 128, 1)">1068</span> <span style="color: rgba(0, 0, 0, 1)">                emitError(ERR_LOADFAIL,
</span><span style="color: rgba(0, 128, 128, 1)">1069</span>                         String.format("Pressed image for %s, %s, failed to load"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">1070</span> <span style="color: rgba(0, 0, 0, 1)">                              description, buttonProps.imagePressed));
</span><span style="color: rgba(0, 128, 128, 1)">1071</span>             } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (IOException e) {
</span><span style="color: rgba(0, 128, 128, 1)">1072</span> <span style="color: rgba(0, 0, 0, 1)">                emitError(ERR_LOADFAIL,
</span><span style="color: rgba(0, 128, 128, 1)">1073</span>                         String.format("Pressed image for %s, %s, failed to load"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">1074</span> <span style="color: rgba(0, 0, 0, 1)">                              description, buttonProps.wwwImagePressed));
</span><span style="color: rgba(0, 128, 128, 1)">1075</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">1076</span>         } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">1077</span> <span style="color: rgba(0, 0, 0, 1)">            emitWarning(WRN_UNDEFINED,
</span><span style="color: rgba(0, 128, 128, 1)">1078</span>                     String.format("Pressed image for %s is not defined."<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">1079</span> <span style="color: rgba(0, 0, 0, 1)">                            description));
</span><span style="color: rgba(0, 128, 128, 1)">1080</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1081</span>
<span style="color: rgba(0, 128, 128, 1)">1082</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (normalDrawable != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">1083</span>             <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Create the disabled state drawable by fading the normal state
</span><span style="color: rgba(0, 128, 128, 1)">1084</span>             <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> drawable. Drawable.setAlpha() stopped working above Android 4.4
</span><span style="color: rgba(0, 128, 128, 1)">1085</span>             <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> so we gotta bring out some bitmap magic. Credit goes to:
</span><span style="color: rgba(0, 128, 128, 1)">1086</span>             <span style="color: rgba(0, 128, 0, 1)">//</span> <span style="color: rgba(0, 128, 0, 1); text-decoration: underline">http://stackoverflow.com/a/7477572</span>
<span style="color: rgba(0, 128, 128, 1)">1087</span>             Bitmap enabledBitmap =<span style="color: rgba(0, 0, 0, 1)"> ((BitmapDrawable) normalDrawable).getBitmap();
</span><span style="color: rgba(0, 128, 128, 1)">1088</span>             Bitmap disabledBitmap =<span style="color: rgba(0, 0, 0, 1)"> Bitmap.createBitmap(
</span><span style="color: rgba(0, 128, 128, 1)">1089</span> <span style="color: rgba(0, 0, 0, 1)">                  normalDrawable.getIntrinsicWidth(),
</span><span style="color: rgba(0, 128, 128, 1)">1090</span> <span style="color: rgba(0, 0, 0, 1)">                  normalDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
</span><span style="color: rgba(0, 128, 128, 1)">1091</span>             Canvas canvas = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Canvas(disabledBitmap);
</span><span style="color: rgba(0, 128, 128, 1)">1092</span>
<span style="color: rgba(0, 128, 128, 1)">1093</span>             Paint paint = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Paint();
</span><span style="color: rgba(0, 128, 128, 1)">1094</span> <span style="color: rgba(0, 0, 0, 1)">            paint.setAlpha(disabledAlpha);
</span><span style="color: rgba(0, 128, 128, 1)">1095</span>             canvas.drawBitmap(enabledBitmap, 0, 0<span style="color: rgba(0, 0, 0, 1)">, paint);
</span><span style="color: rgba(0, 128, 128, 1)">1096</span>
<span style="color: rgba(0, 128, 128, 1)">1097</span>             Resources activityRes =<span style="color: rgba(0, 0, 0, 1)"> cordova.getActivity().getResources();
</span><span style="color: rgba(0, 128, 128, 1)">1098</span>             disabledDrawable = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> BitmapDrawable(activityRes, disabledBitmap);
</span><span style="color: rgba(0, 128, 128, 1)">1099</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1100</span>
<span style="color: rgba(0, 128, 128, 1)">1101</span>         StateListDrawable states = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> StateListDrawable();
</span><span style="color: rgba(0, 128, 128, 1)">1102</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (pressedDrawable != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">1103</span> <span style="color: rgba(0, 0, 0, 1)">            states.addState(
</span><span style="color: rgba(0, 128, 128, 1)">1104</span>               <span style="color: rgba(0, 0, 255, 1)">new</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)">[] {
</span><span style="color: rgba(0, 128, 128, 1)">1105</span> <span style="color: rgba(0, 0, 0, 1)">                  android.R.attr.state_pressed
</span><span style="color: rgba(0, 128, 128, 1)">1106</span> <span style="color: rgba(0, 0, 0, 1)">                },
</span><span style="color: rgba(0, 128, 128, 1)">1107</span> <span style="color: rgba(0, 0, 0, 1)">                pressedDrawable
</span><span style="color: rgba(0, 128, 128, 1)">1108</span> <span style="color: rgba(0, 0, 0, 1)">            );
</span><span style="color: rgba(0, 128, 128, 1)">1109</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1110</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (normalDrawable != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">1111</span> <span style="color: rgba(0, 0, 0, 1)">            states.addState(
</span><span style="color: rgba(0, 128, 128, 1)">1112</span>               <span style="color: rgba(0, 0, 255, 1)">new</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)">[] {
</span><span style="color: rgba(0, 128, 128, 1)">1113</span> <span style="color: rgba(0, 0, 0, 1)">                  android.R.attr.state_enabled
</span><span style="color: rgba(0, 128, 128, 1)">1114</span> <span style="color: rgba(0, 0, 0, 1)">                },
</span><span style="color: rgba(0, 128, 128, 1)">1115</span> <span style="color: rgba(0, 0, 0, 1)">                normalDrawable
</span><span style="color: rgba(0, 128, 128, 1)">1116</span> <span style="color: rgba(0, 0, 0, 1)">            );
</span><span style="color: rgba(0, 128, 128, 1)">1117</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1118</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (disabledDrawable != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">1119</span> <span style="color: rgba(0, 0, 0, 1)">            states.addState(
</span><span style="color: rgba(0, 128, 128, 1)">1120</span>               <span style="color: rgba(0, 0, 255, 1)">new</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)">[] {},
</span><span style="color: rgba(0, 128, 128, 1)">1121</span> <span style="color: rgba(0, 0, 0, 1)">                disabledDrawable
</span><span style="color: rgba(0, 128, 128, 1)">1122</span> <span style="color: rgba(0, 0, 0, 1)">            );
</span><span style="color: rgba(0, 128, 128, 1)">1123</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1124</span>
<span style="color: rgba(0, 128, 128, 1)">1125</span> <span style="color: rgba(0, 0, 0, 1)">      setBackground(view, states);
</span><span style="color: rgba(0, 128, 128, 1)">1126</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">1127</span>
<span style="color: rgba(0, 128, 128, 1)">1128</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> setBackground(View view, Drawable drawable) {
</span><span style="color: rgba(0, 128, 128, 1)">1129</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (Build.VERSION.SDK_INT &lt;<span style="color: rgba(0, 0, 0, 1)"> Build.VERSION_CODES.JELLY_BEAN) {
</span><span style="color: rgba(0, 128, 128, 1)">1130</span> <span style="color: rgba(0, 0, 0, 1)">            view.setBackgroundDrawable(drawable);
</span><span style="color: rgba(0, 128, 128, 1)">1131</span>         } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">1132</span> <span style="color: rgba(0, 0, 0, 1)">            view.setBackground(drawable);
</span><span style="color: rgba(0, 128, 128, 1)">1133</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1134</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">1135</span>
<span style="color: rgba(0, 128, 128, 1)">1136</span>   <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> Button createButton(BrowserButton buttonProps, String description,
</span><span style="color: rgba(0, 128, 128, 1)">1137</span> <span style="color: rgba(0, 0, 0, 1)">            View.OnClickListener listener) {
</span><span style="color: rgba(0, 128, 128, 1)">1138</span>         Button result = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1139</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (buttonProps != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">1140</span>             result = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Button(cordova.getActivity());
</span><span style="color: rgba(0, 128, 128, 1)">1141</span> <span style="color: rgba(0, 0, 0, 1)">            result.setContentDescription(description);
</span><span style="color: rgba(0, 128, 128, 1)">1142</span>             result.setLayoutParams(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> LinearLayout.LayoutParams(
</span><span style="color: rgba(0, 128, 128, 1)">1143</span> <span style="color: rgba(0, 0, 0, 1)">                  LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
</span><span style="color: rgba(0, 128, 128, 1)">1144</span> <span style="color: rgba(0, 0, 0, 1)">            setButtonImages(result, buttonProps, DISABLED_ALPHA);
</span><span style="color: rgba(0, 128, 128, 1)">1145</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> (listener != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">1146</span> <span style="color: rgba(0, 0, 0, 1)">                result.setOnClickListener(listener);
</span><span style="color: rgba(0, 128, 128, 1)">1147</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">1148</span>         } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">1149</span> <span style="color: rgba(0, 0, 0, 1)">            emitWarning(WRN_UNDEFINED,
</span><span style="color: rgba(0, 128, 128, 1)">1150</span>                     String.format("%s is not defined. Button will not be shown."<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">1151</span> <span style="color: rgba(0, 0, 0, 1)">                            description));
</span><span style="color: rgba(0, 128, 128, 1)">1152</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1153</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result;
</span><span style="color: rgba(0, 128, 128, 1)">1154</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">1155</span>
<span style="color: rgba(0, 128, 128, 1)">1156</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)">1157</span> <span style="color: rgba(0, 128, 0, 1)">   * Create a new plugin success result and send it back to JavaScript
</span><span style="color: rgba(0, 128, 128, 1)">1158</span> <span style="color: rgba(0, 128, 0, 1)">   *
</span><span style="color: rgba(0, 128, 128, 1)">1159</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> obj a JSONObject contain event payload information
</span><span style="color: rgba(0, 128, 128, 1)">1160</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">1161</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span> sendUpdate(JSONObject obj, <span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> keepCallback) {
</span><span style="color: rgba(0, 128, 128, 1)">1162</span> <span style="color: rgba(0, 0, 0, 1)">      sendUpdate(obj, keepCallback, PluginResult.Status.OK);
</span><span style="color: rgba(0, 128, 128, 1)">1163</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">1164</span>
<span style="color: rgba(0, 128, 128, 1)">1165</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)">1166</span> <span style="color: rgba(0, 128, 0, 1)">   * Create a new plugin result and send it back to JavaScript
</span><span style="color: rgba(0, 128, 128, 1)">1167</span> <span style="color: rgba(0, 128, 0, 1)">   *
</span><span style="color: rgba(0, 128, 128, 1)">1168</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> obj a JSONObject contain event payload information
</span><span style="color: rgba(0, 128, 128, 1)">1169</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> status the status code to return to the JavaScript environment
</span><span style="color: rgba(0, 128, 128, 1)">1170</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">1171</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span> sendUpdate(JSONObject obj, <span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> keepCallback, PluginResult.Status status) {
</span><span style="color: rgba(0, 128, 128, 1)">1172</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (callbackContext != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">1173</span>             PluginResult result = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> PluginResult(status, obj);
</span><span style="color: rgba(0, 128, 128, 1)">1174</span> <span style="color: rgba(0, 0, 0, 1)">            result.setKeepCallback(keepCallback);
</span><span style="color: rgba(0, 128, 128, 1)">1175</span> <span style="color: rgba(0, 0, 0, 1)">            callbackContext.sendPluginResult(result);
</span><span style="color: rgba(0, 128, 128, 1)">1176</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">keepCallback) {
</span><span style="color: rgba(0, 128, 128, 1)">1177</span>               callbackContext = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1178</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">1179</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1180</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">1181</span>
<span style="color: rgba(0, 128, 128, 1)">1182</span>   <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> PageLoadListener {
</span><span style="color: rgba(0, 128, 128, 1)">1183</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> onPageFinished(String url, <span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> canGoBack,
</span><span style="color: rgba(0, 128, 128, 1)">1184</span>               <span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> canGoForward);
</span><span style="color: rgba(0, 128, 128, 1)">1185</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">1186</span>
<span style="color: rgba(0, 128, 128, 1)">1187</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)">1188</span> <span style="color: rgba(0, 128, 0, 1)">   * The webview client receives notifications about appView
</span><span style="color: rgba(0, 128, 128, 1)">1189</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">1190</span>   <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span> ThemeableBrowserClient <span style="color: rgba(0, 0, 255, 1)">extends</span><span style="color: rgba(0, 0, 0, 1)"> WebViewClient {
</span><span style="color: rgba(0, 128, 128, 1)">1191</span> <span style="color: rgba(0, 0, 0, 1)">      PageLoadListener callback;
</span><span style="color: rgba(0, 128, 128, 1)">1192</span> <span style="color: rgba(0, 0, 0, 1)">      CordovaWebView webView;
</span><span style="color: rgba(0, 128, 128, 1)">1193</span>
<span style="color: rgba(0, 128, 128, 1)">1194</span>         <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)">1195</span> <span style="color: rgba(0, 128, 0, 1)">         * Constructor.
</span><span style="color: rgba(0, 128, 128, 1)">1196</span> <span style="color: rgba(0, 128, 0, 1)">         *
</span><span style="color: rgba(0, 128, 128, 1)">1197</span> <span style="color: rgba(0, 128, 0, 1)">         * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> webView
</span><span style="color: rgba(0, 128, 128, 1)">1198</span> <span style="color: rgba(0, 128, 0, 1)">         * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> callback
</span><span style="color: rgba(0, 128, 128, 1)">1199</span>          <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">1200</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> ThemeableBrowserClient(CordovaWebView webView,
</span><span style="color: rgba(0, 128, 128, 1)">1201</span> <span style="color: rgba(0, 0, 0, 1)">                PageLoadListener callback) {
</span><span style="color: rgba(0, 128, 128, 1)">1202</span>             <span style="color: rgba(0, 0, 255, 1)">this</span>.webView =<span style="color: rgba(0, 0, 0, 1)"> webView;
</span><span style="color: rgba(0, 128, 128, 1)">1203</span>             <span style="color: rgba(0, 0, 255, 1)">this</span>.callback =<span style="color: rgba(0, 0, 0, 1)"> callback;
</span><span style="color: rgba(0, 128, 128, 1)">1204</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1205</span>
<span style="color: rgba(0, 128, 128, 1)">1206</span>         <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)">1207</span> <span style="color: rgba(0, 128, 0, 1)">         * Override the URL that should be loaded
</span><span style="color: rgba(0, 128, 128, 1)">1208</span> <span style="color: rgba(0, 128, 0, 1)">         *
</span><span style="color: rgba(0, 128, 128, 1)">1209</span> <span style="color: rgba(0, 128, 0, 1)">         * This handles a small subset of all the URIs that would be encountered.
</span><span style="color: rgba(0, 128, 128, 1)">1210</span> <span style="color: rgba(0, 128, 0, 1)">         *
</span><span style="color: rgba(0, 128, 128, 1)">1211</span> <span style="color: rgba(0, 128, 0, 1)">         * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> webView
</span><span style="color: rgba(0, 128, 128, 1)">1212</span> <span style="color: rgba(0, 128, 0, 1)">         * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> url
</span><span style="color: rgba(0, 128, 128, 1)">1213</span>          <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">1214</span> <span style="color: rgba(0, 0, 0, 1)">      @Override
</span><span style="color: rgba(0, 128, 128, 1)">1215</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> shouldOverrideUrlLoading(WebView webView, String url) {
</span><span style="color: rgba(0, 128, 128, 1)">1216</span>             <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (url.startsWith(WebView.SCHEME_TEL)) {
</span><span style="color: rgba(0, 128, 128, 1)">1217</span>               <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">1218</span>                     Intent intent = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Intent(Intent.ACTION_DIAL);
</span><span style="color: rgba(0, 128, 128, 1)">1219</span> <span style="color: rgba(0, 0, 0, 1)">                  intent.setData(Uri.parse(url));
</span><span style="color: rgba(0, 128, 128, 1)">1220</span> <span style="color: rgba(0, 0, 0, 1)">                  cordova.getActivity().startActivity(intent);
</span><span style="color: rgba(0, 128, 128, 1)">1221</span>                     <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1222</span>               } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (android.content.ActivityNotFoundException e) {
</span><span style="color: rgba(0, 128, 128, 1)">1223</span>                     Log.e(LOG_TAG, "Error dialing " + url + ": " +<span style="color: rgba(0, 0, 0, 1)"> e.toString());
</span><span style="color: rgba(0, 128, 128, 1)">1224</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)">1225</span>             } <span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (url.startsWith("geo:") || url.startsWith(WebView.SCHEME_MAILTO) || url.startsWith("market:"<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)">1226</span>               <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">1227</span>                     Intent intent = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Intent(Intent.ACTION_VIEW);
</span><span style="color: rgba(0, 128, 128, 1)">1228</span> <span style="color: rgba(0, 0, 0, 1)">                  intent.setData(Uri.parse(url));
</span><span style="color: rgba(0, 128, 128, 1)">1229</span> <span style="color: rgba(0, 0, 0, 1)">                  cordova.getActivity().startActivity(intent);
</span><span style="color: rgba(0, 128, 128, 1)">1230</span>                     <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1231</span>               } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (android.content.ActivityNotFoundException e) {
</span><span style="color: rgba(0, 128, 128, 1)">1232</span>                     Log.e(LOG_TAG, "Error with " + url + ": " +<span style="color: rgba(0, 0, 0, 1)"> e.toString());
</span><span style="color: rgba(0, 128, 128, 1)">1233</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)">1234</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">1235</span>             <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> If sms:5551212?body=This is the message</span>
<span style="color: rgba(0, 128, 128, 1)">1236</span>             <span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (url.startsWith("sms:"<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)">1237</span>               <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">1238</span>                     Intent intent = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Intent(Intent.ACTION_VIEW);
</span><span style="color: rgba(0, 128, 128, 1)">1239</span>
<span style="color: rgba(0, 128, 128, 1)">1240</span>                     <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Get address</span>
<span style="color: rgba(0, 128, 128, 1)">1241</span>                     String address = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1242</span>                     <span style="color: rgba(0, 0, 255, 1)">int</span> parmIndex = url.indexOf('?'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">1243</span>                     <span style="color: rgba(0, 0, 255, 1)">if</span> (parmIndex == -1<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">1244</span>                         address = url.substring(4<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">1245</span>                     } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">1246</span>                         address = url.substring(4<span style="color: rgba(0, 0, 0, 1)">, parmIndex);
</span><span style="color: rgba(0, 128, 128, 1)">1247</span>
<span style="color: rgba(0, 128, 128, 1)">1248</span>                         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> If body, then set sms body</span>
<span style="color: rgba(0, 128, 128, 1)">1249</span>                         Uri uri =<span style="color: rgba(0, 0, 0, 1)"> Uri.parse(url);
</span><span style="color: rgba(0, 128, 128, 1)">1250</span>                         String query =<span style="color: rgba(0, 0, 0, 1)"> uri.getQuery();
</span><span style="color: rgba(0, 128, 128, 1)">1251</span>                         <span style="color: rgba(0, 0, 255, 1)">if</span> (query != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">1252</span>                           <span style="color: rgba(0, 0, 255, 1)">if</span> (query.startsWith("body="<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)">1253</span>                                 intent.putExtra("sms_body", query.substring(5<span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 128, 1)">1254</span> <span style="color: rgba(0, 0, 0, 1)">                            }
</span><span style="color: rgba(0, 128, 128, 1)">1255</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span><span style="color: rgba(0, 128, 128, 1)">1256</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)">1257</span>                     intent.setData(Uri.parse("sms:" +<span style="color: rgba(0, 0, 0, 1)"> address));
</span><span style="color: rgba(0, 128, 128, 1)">1258</span>                     intent.putExtra("address"<span style="color: rgba(0, 0, 0, 1)">, address);
</span><span style="color: rgba(0, 128, 128, 1)">1259</span>                     intent.setType("vnd.android-dir/mms-sms"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">1260</span> <span style="color: rgba(0, 0, 0, 1)">                  cordova.getActivity().startActivity(intent);
</span><span style="color: rgba(0, 128, 128, 1)">1261</span>                     <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1262</span>               } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (android.content.ActivityNotFoundException e) {
</span><span style="color: rgba(0, 128, 128, 1)">1263</span>                     Log.e(LOG_TAG, "Error sending sms " + url + ":" +<span style="color: rgba(0, 0, 0, 1)"> e.toString());
</span><span style="color: rgba(0, 128, 128, 1)">1264</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)">1265</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">1266</span>             <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1267</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1268</span>
<span style="color: rgba(0, 128, 128, 1)">1269</span>
<span style="color: rgba(0, 128, 128, 1)">1270</span>         <span style="color: rgba(0, 128, 0, 1)">/*</span>
<span style="color: rgba(0, 128, 128, 1)">1271</span> <span style="color: rgba(0, 128, 0, 1)">         * onPageStarted fires the LOAD_START_EVENT
</span><span style="color: rgba(0, 128, 128, 1)">1272</span> <span style="color: rgba(0, 128, 0, 1)">         *
</span><span style="color: rgba(0, 128, 128, 1)">1273</span> <span style="color: rgba(0, 128, 0, 1)">         * @param view
</span><span style="color: rgba(0, 128, 128, 1)">1274</span> <span style="color: rgba(0, 128, 0, 1)">         * @param url
</span><span style="color: rgba(0, 128, 128, 1)">1275</span> <span style="color: rgba(0, 128, 0, 1)">         * @param favicon
</span><span style="color: rgba(0, 128, 128, 1)">1276</span>          <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">1277</span> <span style="color: rgba(0, 0, 0, 1)">      @Override
</span><span style="color: rgba(0, 128, 128, 1)">1278</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onPageStarted(WebView view, String url, Bitmap favicon) {
</span><span style="color: rgba(0, 128, 128, 1)">1279</span>             <span style="color: rgba(0, 0, 255, 1)">super</span><span style="color: rgba(0, 0, 0, 1)">.onPageStarted(view, url, favicon);
</span><span style="color: rgba(0, 128, 128, 1)">1280</span>             String newloc = ""<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1281</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> (url.startsWith("http:") || url.startsWith("https:") || url.startsWith("file:"<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)">1282</span>               newloc =<span style="color: rgba(0, 0, 0, 1)"> url;
</span><span style="color: rgba(0, 128, 128, 1)">1283</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">1284</span>             <span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 128, 128, 1)">1285</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)">1286</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Assume that everything is HTTP at this point, because if we don't specify,
</span><span style="color: rgba(0, 128, 128, 1)">1287</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> it really should be.Complain loudly about this!!!</span>
<span style="color: rgba(0, 128, 128, 1)">1288</span>               Log.e(LOG_TAG, "Possible Uncaught/Unknown URI"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">1289</span>               newloc = "http://" +<span style="color: rgba(0, 0, 0, 1)"> url;
</span><span style="color: rgba(0, 128, 128, 1)">1290</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">1291</span>
<span style="color: rgba(0, 128, 128, 1)">1292</span>             <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Update the UI if we haven't already</span>
<span style="color: rgba(0, 128, 128, 1)">1293</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">newloc.equals(edittext.getText().toString())) {
</span><span style="color: rgba(0, 128, 128, 1)">1294</span> <span style="color: rgba(0, 0, 0, 1)">                edittext.setText(newloc);
</span><span style="color: rgba(0, 128, 128, 1)">1295</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">1296</span>
<span style="color: rgba(0, 128, 128, 1)">1297</span>             <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">1298</span>               JSONObject obj = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> JSONObject();
</span><span style="color: rgba(0, 128, 128, 1)">1299</span>               obj.put("type"<span style="color: rgba(0, 0, 0, 1)">, LOAD_START_EVENT);
</span><span style="color: rgba(0, 128, 128, 1)">1300</span>               obj.put("url"<span style="color: rgba(0, 0, 0, 1)">, newloc);
</span><span style="color: rgba(0, 128, 128, 1)">1301</span>               sendUpdate(obj, <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">1302</span>             } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (JSONException ex) {
</span><span style="color: rgba(0, 128, 128, 1)">1303</span>               Log.e(LOG_TAG, "URI passed in has caused a JSON error."<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">1304</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">1305</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1306</span>
<span style="color: rgba(0, 128, 128, 1)">1307</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onPageFinished(WebView view, String url) {
</span><span style="color: rgba(0, 128, 128, 1)">1308</span>             <span style="color: rgba(0, 0, 255, 1)">super</span><span style="color: rgba(0, 0, 0, 1)">.onPageFinished(view, url);
</span><span style="color: rgba(0, 128, 128, 1)">1309</span>
<span style="color: rgba(0, 128, 128, 1)">1310</span>             <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">1311</span>               JSONObject obj = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> JSONObject();
</span><span style="color: rgba(0, 128, 128, 1)">1312</span>               obj.put("type"<span style="color: rgba(0, 0, 0, 1)">, LOAD_STOP_EVENT);
</span><span style="color: rgba(0, 128, 128, 1)">1313</span>               obj.put("url"<span style="color: rgba(0, 0, 0, 1)">, url);
</span><span style="color: rgba(0, 128, 128, 1)">1314</span>
<span style="color: rgba(0, 128, 128, 1)">1315</span>               sendUpdate(obj, <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">1316</span>
<span style="color: rgba(0, 128, 128, 1)">1317</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">this</span>.callback != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">1318</span>                     <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.callback.onPageFinished(url, view.canGoBack(),
</span><span style="color: rgba(0, 128, 128, 1)">1319</span> <span style="color: rgba(0, 0, 0, 1)">                            view.canGoForward());
</span><span style="color: rgba(0, 128, 128, 1)">1320</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)">1321</span>             } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (JSONException ex) {
</span><span style="color: rgba(0, 128, 128, 1)">1322</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">1323</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1324</span>
<span style="color: rgba(0, 128, 128, 1)">1325</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> onReceivedError(WebView view, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> errorCode, String description, String failingUrl) {
</span><span style="color: rgba(0, 128, 128, 1)">1326</span>             <span style="color: rgba(0, 0, 255, 1)">super</span><span style="color: rgba(0, 0, 0, 1)">.onReceivedError(view, errorCode, description, failingUrl);
</span><span style="color: rgba(0, 128, 128, 1)">1327</span>
<span style="color: rgba(0, 128, 128, 1)">1328</span>             <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">1329</span>               JSONObject obj = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> JSONObject();
</span><span style="color: rgba(0, 128, 128, 1)">1330</span>               obj.put("type"<span style="color: rgba(0, 0, 0, 1)">, LOAD_ERROR_EVENT);
</span><span style="color: rgba(0, 128, 128, 1)">1331</span>               obj.put("url"<span style="color: rgba(0, 0, 0, 1)">, failingUrl);
</span><span style="color: rgba(0, 128, 128, 1)">1332</span>               obj.put("code"<span style="color: rgba(0, 0, 0, 1)">, errorCode);
</span><span style="color: rgba(0, 128, 128, 1)">1333</span>               obj.put("message"<span style="color: rgba(0, 0, 0, 1)">, description);
</span><span style="color: rgba(0, 128, 128, 1)">1334</span>
<span style="color: rgba(0, 128, 128, 1)">1335</span>               sendUpdate(obj, <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">, PluginResult.Status.ERROR);
</span><span style="color: rgba(0, 128, 128, 1)">1336</span>             } <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (JSONException ex) {
</span><span style="color: rgba(0, 128, 128, 1)">1337</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">1338</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1339</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">1340</span>
<span style="color: rgba(0, 128, 128, 1)">1341</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)">1342</span> <span style="color: rgba(0, 128, 0, 1)">   * Like Spinner but will always trigger onItemSelected even if a selected
</span><span style="color: rgba(0, 128, 128, 1)">1343</span> <span style="color: rgba(0, 128, 0, 1)">   * item is selected, and always ignore default selection.
</span><span style="color: rgba(0, 128, 128, 1)">1344</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">1345</span>   <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span> MenuSpinner <span style="color: rgba(0, 0, 255, 1)">extends</span><span style="color: rgba(0, 0, 0, 1)"> Spinner {
</span><span style="color: rgba(0, 128, 128, 1)">1346</span>         <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> OnItemSelectedListener listener;
</span><span style="color: rgba(0, 128, 128, 1)">1347</span>
<span style="color: rgba(0, 128, 128, 1)">1348</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> MenuSpinner(Context context) {
</span><span style="color: rgba(0, 128, 128, 1)">1349</span>             <span style="color: rgba(0, 0, 255, 1)">super</span><span style="color: rgba(0, 0, 0, 1)">(context);
</span><span style="color: rgba(0, 128, 128, 1)">1350</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1351</span>
<span style="color: rgba(0, 128, 128, 1)">1352</span> <span style="color: rgba(0, 0, 0, 1)">      @Override
</span><span style="color: rgba(0, 128, 128, 1)">1353</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> setSelection(<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> position) {
</span><span style="color: rgba(0, 128, 128, 1)">1354</span>             <span style="color: rgba(0, 0, 255, 1)">super</span><span style="color: rgba(0, 0, 0, 1)">.setSelection(position);
</span><span style="color: rgba(0, 128, 128, 1)">1355</span>
<span style="color: rgba(0, 128, 128, 1)">1356</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> (listener != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">1357</span>               listener.onItemSelected(<span style="color: rgba(0, 0, 255, 1)">null</span>, <span style="color: rgba(0, 0, 255, 1)">this</span>, position, 0<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">1358</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">1359</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1360</span>
<span style="color: rgba(0, 128, 128, 1)">1361</span> <span style="color: rgba(0, 0, 0, 1)">      @Override
</span><span style="color: rgba(0, 128, 128, 1)">1362</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> setOnItemSelectedListener(OnItemSelectedListener listener) {
</span><span style="color: rgba(0, 128, 128, 1)">1363</span>             <span style="color: rgba(0, 0, 255, 1)">this</span>.listener =<span style="color: rgba(0, 0, 0, 1)"> listener;
</span><span style="color: rgba(0, 128, 128, 1)">1364</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1365</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">1366</span>
<span style="color: rgba(0, 128, 128, 1)">1367</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)">1368</span> <span style="color: rgba(0, 128, 0, 1)">   * Extension of ArrayAdapter. The only difference is that it hides the
</span><span style="color: rgba(0, 128, 128, 1)">1369</span> <span style="color: rgba(0, 128, 0, 1)">   * selected text that's shown inside spinner.
</span><span style="color: rgba(0, 128, 128, 1)">1370</span> <span style="color: rgba(0, 128, 0, 1)">   * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> &lt;T&gt;
</span><span style="color: rgba(0, 128, 128, 1)">1371</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">1372</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">class</span> HideSelectedAdapter&lt;T&gt; <span style="color: rgba(0, 0, 255, 1)">extends</span><span style="color: rgba(0, 0, 0, 1)"> ArrayAdapter {
</span><span style="color: rgba(0, 128, 128, 1)">1373</span>
<span style="color: rgba(0, 128, 128, 1)">1374</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> HideSelectedAdapter(Context context, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> resource, T[] objects) {
</span><span style="color: rgba(0, 128, 128, 1)">1375</span>             <span style="color: rgba(0, 0, 255, 1)">super</span><span style="color: rgba(0, 0, 0, 1)">(context, resource, objects);
</span><span style="color: rgba(0, 128, 128, 1)">1376</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1377</span>
<span style="color: rgba(0, 128, 128, 1)">1378</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> View getView (<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> position, View convertView, ViewGroup parent) {
</span><span style="color: rgba(0, 128, 128, 1)">1379</span>             View v = <span style="color: rgba(0, 0, 255, 1)">super</span><span style="color: rgba(0, 0, 0, 1)">.getView(position, convertView, parent);
</span><span style="color: rgba(0, 128, 128, 1)">1380</span> <span style="color: rgba(0, 0, 0, 1)">            v.setVisibility(View.GONE);
</span><span style="color: rgba(0, 128, 128, 1)">1381</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> v;
</span><span style="color: rgba(0, 128, 128, 1)">1382</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1383</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">1384</span>
<span style="color: rgba(0, 128, 128, 1)">1385</span>
<span style="color: rgba(0, 128, 128, 1)">1386</span>   <span style="color: rgba(0, 128, 0, 1)">/**</span>
<span style="color: rgba(0, 128, 128, 1)">1387</span> <span style="color: rgba(0, 128, 0, 1)">   * A class to hold parsed option properties.
</span><span style="color: rgba(0, 128, 128, 1)">1388</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">1389</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Options {
</span><span style="color: rgba(0, 128, 128, 1)">1390</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span> location = <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1391</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span> hidden = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1392</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span> clearcache = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1393</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span> clearsessioncache = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1394</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span> zoom = <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1395</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span> hardwareback = <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1396</span>
<span style="color: rgba(0, 128, 128, 1)">1397</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> Toolbar toolbar;
</span><span style="color: rgba(0, 128, 128, 1)">1398</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> Title title;
</span><span style="color: rgba(0, 128, 128, 1)">1399</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> BrowserButton backButton;
</span><span style="color: rgba(0, 128, 128, 1)">1400</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> BrowserButton forwardButton;
</span><span style="color: rgba(0, 128, 128, 1)">1401</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> BrowserButton closeButton;
</span><span style="color: rgba(0, 128, 128, 1)">1402</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> BrowserMenu menu;
</span><span style="color: rgba(0, 128, 128, 1)">1403</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> BrowserButton[] customButtons;
</span><span style="color: rgba(0, 128, 128, 1)">1404</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> backButtonCanClose;
</span><span style="color: rgba(0, 128, 128, 1)">1405</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> disableAnimation;
</span><span style="color: rgba(0, 128, 128, 1)">1406</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> fullscreen;
</span><span style="color: rgba(0, 128, 128, 1)">1407</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">1408</span>
<span style="color: rgba(0, 128, 128, 1)">1409</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Event {
</span><span style="color: rgba(0, 128, 128, 1)">1410</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String event;
</span><span style="color: rgba(0, 128, 128, 1)">1411</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">1412</span>
<span style="color: rgba(0, 128, 128, 1)">1413</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">class</span> EventLabel <span style="color: rgba(0, 0, 255, 1)">extends</span><span style="color: rgba(0, 0, 0, 1)"> Event {
</span><span style="color: rgba(0, 128, 128, 1)">1414</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String label;
</span><span style="color: rgba(0, 128, 128, 1)">1415</span>
<span style="color: rgba(0, 128, 128, 1)">1416</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String toString() {
</span><span style="color: rgba(0, 128, 128, 1)">1417</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> label;
</span><span style="color: rgba(0, 128, 128, 1)">1418</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">1419</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">1420</span>
<span style="color: rgba(0, 128, 128, 1)">1421</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">class</span> BrowserButton <span style="color: rgba(0, 0, 255, 1)">extends</span><span style="color: rgba(0, 0, 0, 1)"> Event {
</span><span style="color: rgba(0, 128, 128, 1)">1422</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String image;
</span><span style="color: rgba(0, 128, 128, 1)">1423</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String wwwImage;
</span><span style="color: rgba(0, 128, 128, 1)">1424</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String imagePressed;
</span><span style="color: rgba(0, 128, 128, 1)">1425</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String wwwImagePressed;
</span><span style="color: rgba(0, 128, 128, 1)">1426</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">double</span> wwwImageDensity = 1<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1427</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> String align =<span style="color: rgba(0, 0, 0, 1)"> ALIGN_LEFT;
</span><span style="color: rgba(0, 128, 128, 1)">1428</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">1429</span>
<span style="color: rgba(0, 128, 128, 1)">1430</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">class</span> BrowserMenu <span style="color: rgba(0, 0, 255, 1)">extends</span><span style="color: rgba(0, 0, 0, 1)"> BrowserButton {
</span><span style="color: rgba(0, 128, 128, 1)">1431</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> EventLabel[] items;
</span><span style="color: rgba(0, 128, 128, 1)">1432</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">1433</span>
<span style="color: rgba(0, 128, 128, 1)">1434</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Toolbar {
</span><span style="color: rgba(0, 128, 128, 1)">1435</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span> height =<span style="color: rgba(0, 0, 0, 1)"> TOOLBAR_DEF_HEIGHT;
</span><span style="color: rgba(0, 128, 128, 1)">1436</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String color;
</span><span style="color: rgba(0, 128, 128, 1)">1437</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String image;
</span><span style="color: rgba(0, 128, 128, 1)">1438</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String wwwImage;
</span><span style="color: rgba(0, 128, 128, 1)">1439</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">double</span> wwwImageDensity = 1<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">1440</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">1441</span>
<span style="color: rgba(0, 128, 128, 1)">1442</span>   <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Title {
</span><span style="color: rgba(0, 128, 128, 1)">1443</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String color;
</span><span style="color: rgba(0, 128, 128, 1)">1444</span>         <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String staticText;
</span><span style="color: rgba(0, 128, 128, 1)">1445</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> showPageTitle;
</span><span style="color: rgba(0, 128, 128, 1)">1446</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">1447</span> }</pre>
</div>
<p>&nbsp;</p>
<p>在搞之前 首先要有常识&nbsp;&nbsp; <span style="color: rgba(255, 0, 0, 1)">在 Android 手机中内置了一款高性能 webkit 内核浏览器,在 SDK 中封装为一个叫做 WebView 组件.</span></p>
<p> 其次 在打开页面时选择横竖屏 , 然后去谷歌搜下 android webview 横竖屏 比如下面这篇文章截图&nbsp; 知道 Activity类可以通过setRequestedOrientation 方法设置 横竖屏显示</p>
<p><img src="https://img2020.cnblogs.com/blog/782227/202011/782227-20201115182945462-144933263.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 18px"><span class="hljs-attr">&nbsp; 我们调用js 是用的 </span></span>ThemeableBrowser <span style="font-size: 18px"><span class="hljs-attr">类的open&nbsp; 看上面的代码copy<br></span></span></p>
<p>发现它重写了父类&nbsp;CordovaPlugin 的execute方法去执行open操作 我们调用的方法参数是</p>
<div>
<div>js调用第二个参数是&nbsp; _black 所以直接看188行 然后跳转526行 showWebPage</div>
<div>看752行 </div>
<div>
<pre><span style="color: rgba(102, 14, 122, 1); font-weight: bold">inAppWebView = <span style="color: rgba(0, 0, 128, 1); font-weight: bold">new WebView(<span style="color: rgba(102, 14, 122, 1); font-weight: bold">cordova.getActivity());</span></span></span></pre>
</div>
<div>804行</div>
<div>
<pre><span style="color: rgba(102, 14, 122, 1); font-weight: bold">inAppWebView.loadUrl(<span style="color: rgba(102, 14, 122, 1)">url);<br></span></span></pre>
</div>
</div>
<p>loadUrl就是把webview展示出来, 这个webview实例是通过 752行 <span style="color: rgba(102, 14, 122, 1); font-weight: bold"><span style="color: rgba(0, 0, 128, 1); font-weight: bold"><span style="color: rgba(102, 14, 122, 1); font-weight: bold">cordova.getActivity()</span></span></span> 来实例化的</p>
<p><span style="color: rgba(102, 14, 122, 1); font-weight: bold"><span style="color: rgba(0, 0, 128, 1); font-weight: bold"><span style="color: rgba(102, 14, 122, 1); font-weight: bold">cordova.getActivity()</span></span></span> 返回的就是&nbsp; Activity 类型&nbsp; 上面搜索知道&nbsp; Activity.setRequestedOrientation 可以设置横竖屏展示&nbsp;</p>
<p>然后搜索 <span style="color: rgba(102, 14, 122, 1); font-weight: bold"><span style="color: rgba(0, 0, 128, 1); font-weight: bold"><span style="color: rgba(102, 14, 122, 1); font-weight: bold">cordova.getActivity()&nbsp;&nbsp; </span></span></span>发现 cordova是个接口&nbsp; 然后搜一下这个接口的实现类 发现是 CordovaInterfaceImpl这个类 发现他的getActivity方法是返回的 构造函数注入的 <span style="color: rgba(102, 14, 122, 1); font-weight: bold">activity</span> </p>
<p>然后再找 CordovaInterfaceImpl 实在 CordovaActivity.java的 makeCordovaInterface 方法中实例化的</p>
<p>&nbsp;makeCordovaInterface 是在 CordovaActivity的 oncreate方法实例化的 </p>
<p>CordovaActivity 继承 Activity&nbsp; MainActivity又继承CordovaActivity</p>
<p>&nbsp;</p>
<p>Activity是Android的四大组件之一。是用户操作的可视化界面&nbsp; MainActivity一般作为主页面展示</p>
<p data-spm-anchor-id="a2c6h.12873639.0.i1.5cb3ffe9WBrsdF">Android手机APP启动的第一个Activity是可以自己设置的,不是必须的MainActivity,可以是任何的Activity。</p>
<p data-spm-anchor-id="a2c6h.12873639.0.i3.5cb3ffe9WBrsdF">设置Android手机APP启动的第一个Activity得看Android项目里的mainfest.xml文件:</p>
<p data-spm-anchor-id="a2c6h.12873639.0.i3.5cb3ffe9WBrsdF">&nbsp;</p>
<p>简单理一下就是 </p>
<p>app启动 =&gt; MainActivity初始化 onCreate方法 =&gt; makeCordovaInterface(this) 把MainActivity本身最为参数实例化CordovaInterfaceImpl类 =&gt; CordovaInterface作为接口参数cordova 被组合到 ThemeableBrowser类</p>
<p>js调用 ThemeableBrowser.open 方法实例化一个<span style="color: rgba(102, 14, 122, 1); font-weight: bold">inAppWebView = <span style="color: rgba(0, 0, 128, 1); font-weight: bold">new WebView(<span style="color: rgba(102, 14, 122, 1); font-weight: bold">cordova.getActivity());&nbsp;&nbsp;&nbsp;</span></span></span> cordova.getActivity()即是 MainActivity实例本身</p>
<p>我们通过给MainActivity设置横竖屏的显示方式( setRequestedOrientation) 然后展示 url页面&nbsp; inAppWebView.loadUrl(url);</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>再看关闭按钮事件 671行 调用 closeDialog</p>
<p>我们在这里用 setRequestedOrientation把 Activity改为竖屏</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>整个解决方式是 </p>
<p><img src="https://img2020.cnblogs.com/blog/782227/202011/782227-20201115210728819-108377867.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/782227/202011/782227-20201115210556925-1838550922.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;js调用时候</p>
<p><img src="https://img2020.cnblogs.com/blog/782227/202011/782227-20201115210828261-344730526.png"></p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/xtxtx/p/13968267.html
頁: [1]
查看完整版本: cordova混合App开发:Cordova+Vue实现Android APP开发 (app内打开浏览器及横竖屏) (七)