Skip to content

Commit 2aa9787

Browse files
committed
Fix PythonActivity.java for webview's bootstrap
Based on sdl2 bootstrap.
1 parent da273a9 commit 2aa9787

File tree

1 file changed

+44
-21
lines changed

1 file changed

+44
-21
lines changed

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

Lines changed: 44 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,21 @@
2626
import android.content.Intent;
2727
import android.util.Log;
2828
import android.widget.Toast;
29+
import android.os.AsyncTask;
2930
import android.os.Bundle;
3031
import android.os.PowerManager;
3132
import android.graphics.PixelFormat;
3233
import android.view.SurfaceHolder;
3334
import android.content.Context;
35+
import android.content.pm.ActivityInfo;
3436
import android.content.pm.PackageManager;
3537
import android.content.pm.ApplicationInfo;
3638
import android.content.Intent;
3739
import android.widget.ImageView;
3840
import java.io.InputStream;
3941
import android.graphics.Bitmap;
4042
import android.graphics.BitmapFactory;
43+
import android.graphics.Color;
4144

4245
import android.widget.AbsoluteLayout;
4346
import android.view.ViewGroup.LayoutParams;
@@ -73,6 +76,11 @@ public class PythonActivity extends Activity {
7376
private Bundle mMetaData = null;
7477
private PowerManager.WakeLock mWakeLock = null;
7578

79+
public String getAppRoot() {
80+
String app_root = getFilesDir().getAbsolutePath() + "/app";
81+
return app_root;
82+
}
83+
7684
public static void initialize() {
7785
// The static nature of the singleton and Android quirkyness force us to initialize everything here
7886
// Otherwise, when exiting the app and returning to it, these variables *keep* their pre exit values
@@ -87,13 +95,20 @@ protected void onCreate(Bundle savedInstanceState) {
8795
resourceManager = new ResourceManager(this);
8896

8997
Log.v(TAG, "Ready to unpack");
90-
unpackData("private", getFilesDir());
98+
File app_root_file = new File(getAppRoot());
99+
unpackData("private", app_root_file);
91100

92-
this.mActivity = this;
101+
Log.v(TAG, "About to do super onCreate");
102+
super.onCreate(savedInstanceState);
103+
Log.v(TAG, "Did super onCreate");
93104

105+
this.mActivity = this;
106+
//this.showLoadingScreen();
94107
Log.v("Python", "Device: " + android.os.Build.DEVICE);
95108
Log.v("Python", "Model: " + android.os.Build.MODEL);
96-
super.onCreate(savedInstanceState);
109+
110+
//Log.v(TAG, "Ready to unpack");
111+
//new UnpackFilesTask().execute(getAppRoot());
97112

98113
PythonActivity.initialize();
99114

@@ -134,10 +149,12 @@ public void onClick(DialogInterface dialog,int id) {
134149
}
135150

136151
// Set up the webview
152+
String app_root_dir = getAppRoot();
153+
137154
mWebView = new WebView(this);
138155
mWebView.getSettings().setJavaScriptEnabled(true);
139156
mWebView.getSettings().setDomStorageEnabled(true);
140-
mWebView.loadUrl("file:///" + mActivity.getFilesDir().getAbsolutePath() + "/_load.html");
157+
mWebView.loadUrl("file:///" + app_root_dir + "/_load.html");
141158

142159
mWebView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
143160
mWebView.setWebViewClient(new WebViewClient() {
@@ -147,30 +164,32 @@ public boolean shouldOverrideUrlLoading(WebView view, String url) {
147164
return false;
148165
}
149166
});
150-
151167
mLayout = new AbsoluteLayout(this);
152168
mLayout.addView(mWebView);
153169

154170
setContentView(mLayout);
155171

156172
String mFilesDirectory = mActivity.getFilesDir().getAbsolutePath();
173+
157174
Log.v(TAG, "Setting env vars for start.c and Python to use");
158-
PythonActivity.nativeSetEnv("ANDROID_PRIVATE", mFilesDirectory);
159-
PythonActivity.nativeSetEnv("ANDROID_ARGUMENT", mFilesDirectory);
160-
PythonActivity.nativeSetEnv("ANDROID_APP_PATH", mFilesDirectory);
161-
PythonActivity.nativeSetEnv("ANDROID_UNPACK", mFilesDirectory);
162175
PythonActivity.nativeSetEnv("ANDROID_ENTRYPOINT", "main.pyo");
163-
PythonActivity.nativeSetEnv("PYTHONHOME", mFilesDirectory);
164-
PythonActivity.nativeSetEnv("PYTHONPATH", mFilesDirectory + ":" + mFilesDirectory + "/lib");
176+
PythonActivity.nativeSetEnv("ANDROID_ARGUMENT", app_root_dir);
177+
PythonActivity.nativeSetEnv("ANDROID_APP_PATH", app_root_dir);
178+
PythonActivity.nativeSetEnv("ANDROID_PRIVATE", mFilesDirectory);
179+
PythonActivity.nativeSetEnv("ANDROID_UNPACK", app_root_dir);
180+
PythonActivity.nativeSetEnv("PYTHONHOME", app_root_dir);
181+
PythonActivity.nativeSetEnv("PYTHONPATH", app_root_dir + ":" + app_root_dir + "/lib");
182+
PythonActivity.nativeSetEnv("PYTHONOPTIMIZE", "2");
165183

166184
try {
167185
Log.v(TAG, "Access to our meta-data...");
168-
this.mMetaData = this.mActivity.getPackageManager().getApplicationInfo(
169-
this.mActivity.getPackageName(), PackageManager.GET_META_DATA).metaData;
186+
mActivity.mMetaData = mActivity.getPackageManager().getApplicationInfo(
187+
mActivity.getPackageName(), PackageManager.GET_META_DATA).metaData;
170188

171-
PowerManager pm = (PowerManager) this.mActivity.getSystemService(Context.POWER_SERVICE);
172-
if ( this.mMetaData.getInt("wakelock") == 1 ) {
173-
this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "Screen On");
189+
PowerManager pm = (PowerManager) mActivity.getSystemService(Context.POWER_SERVICE);
190+
if ( mActivity.mMetaData.getInt("wakelock") == 1 ) {
191+
mActivity.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "Screen On");
192+
mActivity.mWakeLock.acquire();
174193
}
175194
} catch (PackageManager.NameNotFoundException e) {
176195
}
@@ -181,19 +200,22 @@ public boolean shouldOverrideUrlLoading(WebView view, String url) {
181200

182201
final Thread wvThread = new Thread(new WebViewLoaderMain(), "WvThread");
183202
wvThread.start();
203+
184204
}
185205

186206
@Override
187207
public void onDestroy() {
188208
Log.i("Destroy", "end of app");
189209
super.onDestroy();
190-
210+
191211
// make sure all child threads (python_thread) are stopped
192212
android.os.Process.killProcess(android.os.Process.myPid());
193213
}
194214

195215
public void loadLibraries() {
196-
PythonUtil.loadLibraries(getFilesDir());
216+
String app_root = new String(getAppRoot());
217+
File app_root_file = new File(app_root);
218+
PythonUtil.loadLibraries(app_root_file);
197219
}
198220

199221
public void recursiveDelete(File f) {
@@ -402,12 +424,13 @@ public static void start_service(String serviceTitle, String serviceDescription,
402424
Intent serviceIntent = new Intent(PythonActivity.mActivity, PythonService.class);
403425
String argument = PythonActivity.mActivity.getFilesDir().getAbsolutePath();
404426
String filesDirectory = argument;
427+
String app_root_dir = PythonActivity.mActivity.getAppRoot();
405428
serviceIntent.putExtra("androidPrivate", argument);
406-
serviceIntent.putExtra("androidArgument", argument);
429+
serviceIntent.putExtra("androidArgument", app_root_dir);
407430
serviceIntent.putExtra("serviceEntrypoint", "service/main.pyo");
408431
serviceIntent.putExtra("pythonName", "python");
409-
serviceIntent.putExtra("pythonHome", argument);
410-
serviceIntent.putExtra("pythonPath", argument + ":" + filesDirectory + "/lib");
432+
serviceIntent.putExtra("pythonHome", app_root_dir);
433+
serviceIntent.putExtra("pythonPath", app_root_dir + ":" + app_root_dir + "/lib");
411434
serviceIntent.putExtra("serviceTitle", serviceTitle);
412435
serviceIntent.putExtra("serviceDescription", serviceDescription);
413436
serviceIntent.putExtra("pythonServiceArgument", pythonServiceArgument);

0 commit comments

Comments
 (0)