Skip to content

Commit 89b8a16

Browse files
authored
Merge pull request kivy#750 from bobatsar/webview
Webview improvements
2 parents 8d88642 + a4a3f8a commit 89b8a16

File tree

4 files changed

+77
-12
lines changed

4 files changed

+77
-12
lines changed

pythonforandroid/bootstraps/webview/build/src/org/kivy/android/PythonActivity.java

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ protected void onCreate(Bundle savedInstanceState) {
9494
Log.v("Python", "Device: " + android.os.Build.DEVICE);
9595
Log.v("Python", "Model: " + android.os.Build.MODEL);
9696
super.onCreate(savedInstanceState);
97-
97+
9898
PythonActivity.initialize();
9999

100100
// Load shared libraries
@@ -161,7 +161,7 @@ public boolean shouldOverrideUrlLoading(WebView view, String url) {
161161
PythonActivity.nativeSetEnv("ANDROID_ENTRYPOINT", "main.pyo");
162162
PythonActivity.nativeSetEnv("PYTHONHOME", mFilesDirectory);
163163
PythonActivity.nativeSetEnv("PYTHONPATH", mFilesDirectory + ":" + mFilesDirectory + "/lib");
164-
164+
165165
try {
166166
Log.v(TAG, "Access to our meta-data...");
167167
this.mMetaData = this.mActivity.getPackageManager().getApplicationInfo(
@@ -173,16 +173,24 @@ public boolean shouldOverrideUrlLoading(WebView view, String url) {
173173
}
174174
} catch (PackageManager.NameNotFoundException e) {
175175
}
176-
176+
177177
final Thread pythonThread = new Thread(new PythonMain(), "PythonThread");
178178
PythonActivity.mPythonThread = pythonThread;
179179
pythonThread.start();
180180

181181
final Thread wvThread = new Thread(new WebViewLoaderMain(), "WvThread");
182182
wvThread.start();
183+
}
183184

185+
@Override
186+
public void onDestroy() {
187+
Log.i("Destroy", "end of app");
188+
super.onDestroy();
189+
190+
// make sure all child threads (python_thread) are stopped
191+
android.os.Process.killProcess(android.os.Process.myPid());
184192
}
185-
193+
186194
public void loadLibraries() {
187195
PythonUtil.loadLibraries(getFilesDir());
188196
}
@@ -276,10 +284,48 @@ public void unpackData(final String resource, File target) {
276284
}
277285
}
278286

287+
public static void loadUrl(String url) {
288+
class LoadUrl implements Runnable {
289+
private String mUrl;
290+
291+
public LoadUrl(String url) {
292+
mUrl = url;
293+
}
294+
295+
public void run() {
296+
mWebView.loadUrl(mUrl);
297+
}
298+
}
299+
300+
Log.i(TAG, "Opening URL: " + url);
301+
mActivity.runOnUiThread(new LoadUrl(url));
302+
}
303+
279304
public static ViewGroup getLayout() {
280305
return mLayout;
281306
}
282307

308+
long lastBackClick = SystemClock.elapsedRealtime();
309+
@Override
310+
public boolean onKeyDown(int keyCode, KeyEvent event) {
311+
// Check if the key event was the Back button and if there's history
312+
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
313+
mWebView.goBack();
314+
return true;
315+
}
316+
// If it wasn't the Back key or there's no web page history, bubble up to the default
317+
// system behavior (probably exit the activity)
318+
if (SystemClock.elapsedRealtime() - lastBackClick > 2000){
319+
lastBackClick = SystemClock.elapsedRealtime();
320+
Toast.makeText(this, "Click again to close the app",
321+
Toast.LENGTH_LONG).show();
322+
return true;
323+
}
324+
325+
lastBackClick = SystemClock.elapsedRealtime();
326+
return super.onKeyDown(keyCode, event);
327+
}
328+
283329

284330
//----------------------------------------------------------------------------
285331
// Listener interface for onNewIntent
@@ -350,7 +396,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent intent)
350396
}
351397
}
352398

353-
public static void start_service(String serviceTitle, String serviceDescription,
399+
public static void start_service(String serviceTitle, String serviceDescription,
354400
String pythonServiceArgument) {
355401
Intent serviceIntent = new Intent(PythonActivity.mActivity, PythonService.class);
356402
String argument = PythonActivity.mActivity.getFilesDir().getAbsolutePath();

pythonforandroid/bootstraps/webview/build/templates/WebViewLoader.tmpl.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,21 @@ public class WebViewLoader {
1616
private static final String TAG = "WebViewLoader";
1717

1818
public static void testConnection() {
19-
19+
2020
while (true) {
2121
if (WebViewLoader.pingHost("localhost", {{ args.port }}, 100)) {
2222
Log.v(TAG, "Successfully pinged localhost:{{ args.port }}");
2323
Handler mainHandler = new Handler(PythonActivity.mActivity.getMainLooper());
24-
2524
Runnable myRunnable = new Runnable() {
2625
@Override
2726
public void run() {
28-
PythonActivity.mActivity.mWebView.loadUrl("http://127.0.0.1:{{ args.port }}/");
27+
PythonActivity.mActivity.loadUrl("http://127.0.0.1:{{ args.port }}/");
2928
Log.v(TAG, "Loaded webserver in webview");
3029
}
3130
};
3231
mainHandler.post(myRunnable);
3332
break;
34-
33+
3534
} else {
3635
Log.v(TAG, "Could not ping localhost:{{ args.port }}");
3736
try {
@@ -55,5 +54,3 @@ public static boolean pingHost(String host, int port, int timeout) {
5554
}
5655
}
5756
}
58-
59-

testapps/testapp_flask/main.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,14 @@ def vibrate():
6161
vibrator.vibrate(float(args['time']) * 1000)
6262
print('vibrated')
6363

64+
@app.route('/loadUrl')
65+
def loadUrl():
66+
args = request.args
67+
if 'url' not in args:
68+
print('ERROR: asked to open an url but without url argument')
69+
print('asked to open url', args['url'])
70+
activity.loadUrl(args['url'])
71+
6472
@app.route('/orientation')
6573
def orientation():
6674
args = request.args
@@ -69,7 +77,7 @@ def orientation():
6977
direction = args['dir']
7078
if direction not in ('horizontal', 'vertical'):
7179
print('ERROR: asked to orient to neither horizontal nor vertical')
72-
80+
7381
if direction == 'horizontal':
7482
activity.setRequestedOrientation(
7583
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

testapps/testapp_flask/templates/index.html

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,20 @@ <h2>Page one</h2>
2424
}
2525
</script>
2626

27+
<button onClick="loadUrl()">
28+
open url
29+
</button>
30+
<input type="text" value="http://www.google.com" id="url_field"/>
31+
32+
<script>
33+
function loadUrl() {
34+
var request = new XMLHttpRequest();
35+
var url = document.getElementById("url_field").value
36+
request.open('GET', 'loadUrl?url=' + url, true);
37+
request.send();
38+
}
39+
</script>
40+
2741
<button onClick="vertical()">
2842
vertical orientation
2943
</button>

0 commit comments

Comments
 (0)