cordova混合App开发:Cordova+Vue实现Android APP开发 (app内打开浏览器及横竖屏) (七)
<p>app内打开浏览器目前主要2个cordova插件</p><div>
<div>cordova-plugin-inappbrowser 和 cordova-plugin-themeablebrowser</div>
<div>themeablebrowser是在cordova-plugin-inappbrowser基础上二次开发的, 支持webview中有按钮,及相关按钮事件 是我们想要的</div>
<div> </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"> vue项目下新建static/browserIcons文件夹, 放入准备好的 back.png 和 close.png</span></code></p>
<p> </p>
<div>
<h3>第三步 修改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项目 vue.config.js </p>
<p><img src="https://img2020.cnblogs.com/blog/782227/202011/782227-20201113103431752-1470159889.png"></p>
<p> </p>
<p> <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> </div>
</div>
<p> </p>
<h3>第四步 修改相应vue页面 我这里是修改的 helloword.vue</h3>
<p><code><span style="font-size: 18px"> 相关按钮及事件 参考 插件github https://github.com/initialxy/cordova-plugin-themeablebrowser<br></span></code></p>
<div class="cnblogs_code">
<pre><template>
<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>>
<h1>{{ msg }}</h1>
<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>>axios调用</button>
<h1>{{ bjtime }}</h1>
<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>>跳转页面1</button>
<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>>跳转页面2</button>
</div>
</template>
<script><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>=><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) =><span style="color: rgba(0, 0, 0, 1)"> {
console.log(err);
});
},
},
};
</span></script></pre>
</div>
<p> </p>
<p>就可以看到页面了 点击会返回和关闭 会触发设定好的事件</p>
<p><img src="https://img2020.cnblogs.com/blog/782227/202011/782227-20201113105922472-1793780343.png"></p>
<p> </p>
<h3>第五步 修改源码支持横竖屏打开</h3>
<p><code><span style="font-size: 18px"> <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> </p>
<p> </p>
<p> </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 <<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> && !<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> && 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> && <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> && <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> && <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") && !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> && 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> && (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) && (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 && !<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<EventLabel><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<EventLabel><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<?><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> && i <<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<?><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> && title != <span style="color: rgba(0, 0, 255, 1)">null</span> && features.title != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 766</span> && features.title.staticText == <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 767</span> &&<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 < 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> && features.forwardButton != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 850</span> && !<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> && features.backButton != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 857</span> &&<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> && features.backButton != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 864</span> && !<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> && features.forwardButton != <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 128, 1)"> 871</span> &&<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> &&<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> &&<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> && !<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() < 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 & 0xff) << 24<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 987</span> result = result >> 8 & 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 <<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 <<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)"> <T>
</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<T> <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> </p>
<p>在搞之前 首先要有常识 <span style="color: rgba(255, 0, 0, 1)">在 Android 手机中内置了一款高性能 webkit 内核浏览器,在 SDK 中封装为一个叫做 WebView 组件.</span></p>
<p> 其次 在打开页面时选择横竖屏 , 然后去谷歌搜下 android webview 横竖屏 比如下面这篇文章截图 知道 Activity类可以通过setRequestedOrientation 方法设置 横竖屏显示</p>
<p><img src="https://img2020.cnblogs.com/blog/782227/202011/782227-20201115182945462-144933263.png"></p>
<p> </p>
<p> </p>
<p> </p>
<p><span style="font-size: 18px"><span class="hljs-attr"> 我们调用js 是用的 </span></span>ThemeableBrowser <span style="font-size: 18px"><span class="hljs-attr">类的open 看上面的代码copy<br></span></span></p>
<p>发现它重写了父类 CordovaPlugin 的execute方法去执行open操作 我们调用的方法参数是</p>
<div>
<div>js调用第二个参数是 _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> 返回的就是 Activity 类型 上面搜索知道 Activity.setRequestedOrientation 可以设置横竖屏展示 </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>发现 cordova是个接口 然后搜一下这个接口的实现类 发现是 CordovaInterfaceImpl这个类 发现他的getActivity方法是返回的 构造函数注入的 <span style="color: rgba(102, 14, 122, 1); font-weight: bold">activity</span> </p>
<p>然后再找 CordovaInterfaceImpl 实在 CordovaActivity.java的 makeCordovaInterface 方法中实例化的</p>
<p> makeCordovaInterface 是在 CordovaActivity的 oncreate方法实例化的 </p>
<p>CordovaActivity 继承 Activity MainActivity又继承CordovaActivity</p>
<p> </p>
<p>Activity是Android的四大组件之一。是用户操作的可视化界面 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"> </p>
<p>简单理一下就是 </p>
<p>app启动 => MainActivity初始化 onCreate方法 => makeCordovaInterface(this) 把MainActivity本身最为参数实例化CordovaInterfaceImpl类 => 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()); </span></span></span> cordova.getActivity()即是 MainActivity实例本身</p>
<p>我们通过给MainActivity设置横竖屏的显示方式( setRequestedOrientation) 然后展示 url页面 inAppWebView.loadUrl(url);</p>
<p> </p>
<p> </p>
<p>再看关闭按钮事件 671行 调用 closeDialog</p>
<p>我们在这里用 setRequestedOrientation把 Activity改为竖屏</p>
<p> </p>
<p> </p>
<p>整个解决方式是 </p>
<p><img src="https://img2020.cnblogs.com/blog/782227/202011/782227-20201115210728819-108377867.png"></p>
<p> </p>
<p> </p>
<p> </p>
<p><img src="https://img2020.cnblogs.com/blog/782227/202011/782227-20201115210556925-1838550922.png"></p>
<p> </p>
<p> </p>
<p> js调用时候</p>
<p><img src="https://img2020.cnblogs.com/blog/782227/202011/782227-20201115210828261-344730526.png"></p>
<p> </p><br><br>
来源:https://www.cnblogs.com/xtxtx/p/13968267.html
頁:
[1]