2626import android .content .Intent ;
2727import android .util .Log ;
2828import android .widget .Toast ;
29+ import android .os .AsyncTask ;
2930import android .os .Bundle ;
3031import android .os .PowerManager ;
3132import android .graphics .PixelFormat ;
3233import android .view .SurfaceHolder ;
3334import android .content .Context ;
35+ import android .content .pm .ActivityInfo ;
3436import android .content .pm .PackageManager ;
3537import android .content .pm .ApplicationInfo ;
3638import android .content .Intent ;
3739import android .widget .ImageView ;
3840import java .io .InputStream ;
3941import android .graphics .Bitmap ;
4042import android .graphics .BitmapFactory ;
43+ import android .graphics .Color ;
4144
4245import android .widget .AbsoluteLayout ;
4346import 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