@@ -109,115 +109,119 @@ public static void initialize() {
109
109
protected void onCreate (Bundle savedInstanceState ) {
110
110
Log .v (TAG , "My oncreate running" );
111
111
resourceManager = new ResourceManager (this );
112
-
113
- Log .v (TAG , "Ready to unpack" );
114
- File app_root_file = new File (getAppRoot ());
115
- unpackData ("private" , app_root_file );
116
-
117
- Log .v (TAG , "About to do super onCreate" );
118
112
super .onCreate (savedInstanceState );
119
- Log .v (TAG , "Did super onCreate" );
120
113
121
114
this .mActivity = this ;
122
- // this.showLoadingScreen();
123
- Log . v ( "Python" , "Device: " + android . os . Build . DEVICE );
124
- Log . v ( "Python" , "Model: " + android . os . Build . MODEL );
115
+ this .showLoadingScreen ();
116
+ new UnpackFilesTask (). execute ( getAppRoot () );
117
+ }
125
118
126
- //Log.v(TAG, "Ready to unpack");
127
- //new UnpackFilesTask().execute(getAppRoot());
119
+ private class UnpackFilesTask extends AsyncTask <String , Void , String > {
120
+ @ Override
121
+ protected String doInBackground (String ... params ) {
122
+ File app_root_file = new File (params [0 ]);
123
+ Log .v (TAG , "Ready to unpack" );
124
+ unpackData ("private" , app_root_file );
125
+ return null ;
126
+ }
128
127
129
- PythonActivity .initialize ();
128
+ @ Override
129
+ protected void onPostExecute (String result ) {
130
+ Log .v ("Python" , "Device: " + android .os .Build .DEVICE );
131
+ Log .v ("Python" , "Model: " + android .os .Build .MODEL );
130
132
131
- // Load shared libraries
132
- String errorMsgBrokenLib = "" ;
133
- try {
134
- loadLibraries ();
135
- } catch (UnsatisfiedLinkError e ) {
136
- System .err .println (e .getMessage ());
137
- mBrokenLibraries = true ;
138
- errorMsgBrokenLib = e .getMessage ();
139
- } catch (Exception e ) {
140
- System .err .println (e .getMessage ());
141
- mBrokenLibraries = true ;
142
- errorMsgBrokenLib = e .getMessage ();
143
- }
133
+ PythonActivity .initialize ();
144
134
145
- if (mBrokenLibraries )
146
- {
147
- AlertDialog .Builder dlgAlert = new AlertDialog .Builder (this );
148
- dlgAlert .setMessage ("An error occurred while trying to load the application libraries. Please try again and/or reinstall."
149
- + System .getProperty ("line.separator" )
150
- + System .getProperty ("line.separator" )
151
- + "Error: " + errorMsgBrokenLib );
152
- dlgAlert .setTitle ("Python Error" );
153
- dlgAlert .setPositiveButton ("Exit" ,
154
- new DialogInterface .OnClickListener () {
155
- @ Override
156
- public void onClick (DialogInterface dialog ,int id ) {
157
- // if this button is clicked, close current activity
158
- PythonActivity .mActivity .finish ();
159
- }
160
- });
161
- dlgAlert .setCancelable (false );
162
- dlgAlert .create ().show ();
135
+ // Load shared libraries
136
+ String errorMsgBrokenLib = "" ;
137
+ try {
138
+ loadLibraries ();
139
+ } catch (UnsatisfiedLinkError e ) {
140
+ System .err .println (e .getMessage ());
141
+ mBrokenLibraries = true ;
142
+ errorMsgBrokenLib = e .getMessage ();
143
+ } catch (Exception e ) {
144
+ System .err .println (e .getMessage ());
145
+ mBrokenLibraries = true ;
146
+ errorMsgBrokenLib = e .getMessage ();
147
+ }
163
148
164
- return ;
165
- }
149
+ if (mBrokenLibraries )
150
+ {
151
+ AlertDialog .Builder dlgAlert = new AlertDialog .Builder (PythonActivity .mActivity );
152
+ dlgAlert .setMessage ("An error occurred while trying to load the application libraries. Please try again and/or reinstall."
153
+ + System .getProperty ("line.separator" )
154
+ + System .getProperty ("line.separator" )
155
+ + "Error: " + errorMsgBrokenLib );
156
+ dlgAlert .setTitle ("Python Error" );
157
+ dlgAlert .setPositiveButton ("Exit" ,
158
+ new DialogInterface .OnClickListener () {
159
+ @ Override
160
+ public void onClick (DialogInterface dialog ,int id ) {
161
+ // if this button is clicked, close current activity
162
+ PythonActivity .mActivity .finish ();
163
+ }
164
+ });
165
+ dlgAlert .setCancelable (false );
166
+ dlgAlert .create ().show ();
167
+
168
+ return ;
169
+ }
166
170
167
- // Set up the webview
168
- String app_root_dir = getAppRoot ();
171
+ // Set up the webview
172
+ String app_root_dir = getAppRoot ();
169
173
170
- mWebView = new WebView (this );
171
- mWebView .getSettings ().setJavaScriptEnabled (true );
172
- mWebView .getSettings ().setDomStorageEnabled (true );
173
- mWebView .loadUrl ("file:///" + app_root_dir + "/_load.html" );
174
+ mWebView = new WebView (PythonActivity . mActivity );
175
+ mWebView .getSettings ().setJavaScriptEnabled (true );
176
+ mWebView .getSettings ().setDomStorageEnabled (true );
177
+ mWebView .loadUrl ("file:///" + app_root_dir + "/_load.html" );
174
178
175
- mWebView .setLayoutParams (new LayoutParams (LayoutParams .FILL_PARENT , LayoutParams .FILL_PARENT ));
176
- mWebView .setWebViewClient (new WebViewClient () {
177
- @ Override
178
- public boolean shouldOverrideUrlLoading (WebView view , String url ) {
179
- view .loadUrl (url );
180
- return false ;
181
- }
182
- });
183
- mLayout = new AbsoluteLayout (this );
184
- mLayout .addView (mWebView );
179
+ mWebView .setLayoutParams (new LayoutParams (LayoutParams .FILL_PARENT , LayoutParams .FILL_PARENT ));
180
+ mWebView .setWebViewClient (new WebViewClient () {
181
+ @ Override
182
+ public boolean shouldOverrideUrlLoading (WebView view , String url ) {
183
+ view .loadUrl (url );
184
+ return false ;
185
+ }
186
+ });
187
+ mLayout = new AbsoluteLayout (PythonActivity . mActivity );
188
+ mLayout .addView (mWebView );
185
189
186
- setContentView (mLayout );
190
+ setContentView (mLayout );
187
191
188
- String mFilesDirectory = mActivity .getFilesDir ().getAbsolutePath ();
189
- String entry_point = getEntryPoint (app_root_dir );
192
+ String mFilesDirectory = mActivity .getFilesDir ().getAbsolutePath ();
193
+ String entry_point = getEntryPoint (app_root_dir );
190
194
191
- Log .v (TAG , "Setting env vars for start.c and Python to use" );
192
- PythonActivity .nativeSetenv ("ANDROID_ENTRYPOINT" , entry_point );
193
- PythonActivity .nativeSetenv ("ANDROID_ARGUMENT" , app_root_dir );
194
- PythonActivity .nativeSetenv ("ANDROID_APP_PATH" , app_root_dir );
195
- PythonActivity .nativeSetenv ("ANDROID_PRIVATE" , mFilesDirectory );
196
- PythonActivity .nativeSetenv ("ANDROID_UNPACK" , app_root_dir );
197
- PythonActivity .nativeSetenv ("PYTHONHOME" , app_root_dir );
198
- PythonActivity .nativeSetenv ("PYTHONPATH" , app_root_dir + ":" + app_root_dir + "/lib" );
199
- PythonActivity .nativeSetenv ("PYTHONOPTIMIZE" , "2" );
195
+ Log .v (TAG , "Setting env vars for start.c and Python to use" );
196
+ PythonActivity .nativeSetenv ("ANDROID_ENTRYPOINT" , entry_point );
197
+ PythonActivity .nativeSetenv ("ANDROID_ARGUMENT" , app_root_dir );
198
+ PythonActivity .nativeSetenv ("ANDROID_APP_PATH" , app_root_dir );
199
+ PythonActivity .nativeSetenv ("ANDROID_PRIVATE" , mFilesDirectory );
200
+ PythonActivity .nativeSetenv ("ANDROID_UNPACK" , app_root_dir );
201
+ PythonActivity .nativeSetenv ("PYTHONHOME" , app_root_dir );
202
+ PythonActivity .nativeSetenv ("PYTHONPATH" , app_root_dir + ":" + app_root_dir + "/lib" );
203
+ PythonActivity .nativeSetenv ("PYTHONOPTIMIZE" , "2" );
200
204
201
- try {
202
- Log .v (TAG , "Access to our meta-data..." );
203
- mActivity .mMetaData = mActivity .getPackageManager ().getApplicationInfo (
204
- mActivity .getPackageName (), PackageManager .GET_META_DATA ).metaData ;
205
-
206
- PowerManager pm = (PowerManager ) mActivity .getSystemService (Context .POWER_SERVICE );
207
- if ( mActivity .mMetaData .getInt ("wakelock" ) == 1 ) {
208
- mActivity .mWakeLock = pm .newWakeLock (PowerManager .SCREEN_BRIGHT_WAKE_LOCK , "Screen On" );
209
- mActivity .mWakeLock .acquire ();
205
+ try {
206
+ Log .v (TAG , "Access to our meta-data..." );
207
+ mActivity .mMetaData = mActivity .getPackageManager ().getApplicationInfo (
208
+ mActivity .getPackageName (), PackageManager .GET_META_DATA ).metaData ;
209
+
210
+ PowerManager pm = (PowerManager ) mActivity .getSystemService (Context .POWER_SERVICE );
211
+ if ( mActivity .mMetaData .getInt ("wakelock" ) == 1 ) {
212
+ mActivity .mWakeLock = pm .newWakeLock (PowerManager .SCREEN_BRIGHT_WAKE_LOCK , "Screen On" );
213
+ mActivity .mWakeLock .acquire ();
214
+ }
215
+ } catch (PackageManager .NameNotFoundException e ) {
210
216
}
211
- } catch (PackageManager .NameNotFoundException e ) {
212
- }
213
-
214
- final Thread pythonThread = new Thread (new PythonMain (), "PythonThread" );
215
- PythonActivity .mPythonThread = pythonThread ;
216
- pythonThread .start ();
217
217
218
- final Thread wvThread = new Thread (new WebViewLoaderMain (), "WvThread" );
219
- wvThread .start ();
218
+ final Thread pythonThread = new Thread (new PythonMain (), "PythonThread" );
219
+ PythonActivity .mPythonThread = pythonThread ;
220
+ pythonThread .start ();
220
221
222
+ final Thread wvThread = new Thread (new WebViewLoaderMain (), "WvThread" );
223
+ wvThread .start ();
224
+ }
221
225
}
222
226
223
227
@ Override
@@ -367,6 +371,73 @@ public boolean onKeyDown(int keyCode, KeyEvent event) {
367
371
return super .onKeyDown (keyCode , event );
368
372
}
369
373
374
+ // loading screen implementation
375
+ public static ImageView mImageView = null ;
376
+ public void removeLoadingScreen () {
377
+ runOnUiThread (new Runnable () {
378
+ public void run () {
379
+ if (PythonActivity .mImageView != null &&
380
+ PythonActivity .mImageView .getParent () != null ) {
381
+ ((ViewGroup )PythonActivity .mImageView .getParent ()).removeView (
382
+ PythonActivity .mImageView );
383
+ PythonActivity .mImageView = null ;
384
+ }
385
+ }
386
+ });
387
+ }
388
+
389
+ protected void showLoadingScreen () {
390
+ // load the bitmap
391
+ // 1. if the image is valid and we don't have layout yet, assign this bitmap
392
+ // as main view.
393
+ // 2. if we have a layout, just set it in the layout.
394
+ // 3. If we have an mImageView already, then do nothing because it will have
395
+ // already been made the content view or added to the layout.
396
+
397
+ if (mImageView == null ) {
398
+ int presplashId = this .resourceManager .getIdentifier ("presplash" , "drawable" );
399
+ InputStream is = this .getResources ().openRawResource (presplashId );
400
+ Bitmap bitmap = null ;
401
+ try {
402
+ bitmap = BitmapFactory .decodeStream (is );
403
+ } finally {
404
+ try {
405
+ is .close ();
406
+ } catch (IOException e ) {};
407
+ }
408
+
409
+ mImageView = new ImageView (this );
410
+ mImageView .setImageBitmap (bitmap );
411
+
412
+ /*
413
+ * Set the presplash loading screen background color
414
+ * https://developer.android.com/reference/android/graphics/Color.html
415
+ * Parse the color string, and return the corresponding color-int.
416
+ * If the string cannot be parsed, throws an IllegalArgumentException exception.
417
+ * Supported formats are: #RRGGBB #AARRGGBB or one of the following names:
418
+ * 'red', 'blue', 'green', 'black', 'white', 'gray', 'cyan', 'magenta', 'yellow',
419
+ * 'lightgray', 'darkgray', 'grey', 'lightgrey', 'darkgrey', 'aqua', 'fuchsia',
420
+ * 'lime', 'maroon', 'navy', 'olive', 'purple', 'silver', 'teal'.
421
+ */
422
+ String backgroundColor = resourceManager .getString ("presplash_color" );
423
+ if (backgroundColor != null ) {
424
+ try {
425
+ mImageView .setBackgroundColor (Color .parseColor (backgroundColor ));
426
+ } catch (IllegalArgumentException e ) {}
427
+ }
428
+ mImageView .setLayoutParams (new ViewGroup .LayoutParams (
429
+ ViewGroup .LayoutParams .FILL_PARENT ,
430
+ ViewGroup .LayoutParams .FILL_PARENT ));
431
+ mImageView .setScaleType (ImageView .ScaleType .FIT_CENTER );
432
+
433
+ }
434
+
435
+ if (mLayout == null ) {
436
+ setContentView (mImageView );
437
+ } else if (PythonActivity .mImageView .getParent () == null ){
438
+ mLayout .addView (mImageView );
439
+ }
440
+ }
370
441
371
442
//----------------------------------------------------------------------------
372
443
// Listener interface for onNewIntent
0 commit comments