1
0
Fork 0
forked from len0rd/rockbox
foxbox/android/src/org/rockbox/RockboxActivity.java
Jonathan Gordon 4b181b4517 Fix android black screen crash
Change-Id: I7a0eb121ff151b8b6e8f824ee8dbab8d99b73499
2014-05-21 18:39:56 +10:00

142 lines
5.2 KiB
Java

/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2010 Thomas Martitz
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
package org.rockbox;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.ResultReceiver;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
public class RockboxActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
Intent intent = new Intent(this, RockboxService.class);
intent.setAction(Intent.ACTION_MAIN);
intent.putExtra("callback", new ResultReceiver(new Handler(getMainLooper())) {
private boolean unzip = false;
private ProgressDialog loadingdialog;
private void createProgressDialog()
{
loadingdialog = new ProgressDialog(RockboxActivity.this);
loadingdialog.setMessage(getString(R.string.rockbox_extracting));
loadingdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
loadingdialog.setIndeterminate(true);
loadingdialog.setCancelable(false);
loadingdialog.show();
}
@Override
protected void onReceiveResult(final int resultCode, final Bundle resultData)
{
RockboxFramebuffer fb;
switch (resultCode) {
case RockboxService.RESULT_INVOKING_MAIN:
if (loadingdialog != null)
loadingdialog.dismiss();
fb = new RockboxFramebuffer(RockboxActivity.this);
setContentView(fb);
fb.requestFocus();
break;
case RockboxService.RESULT_LIB_LOAD_PROGRESS:
if (loadingdialog == null)
createProgressDialog();
loadingdialog.setIndeterminate(false);
loadingdialog.setMax(resultData.getInt("max", 100));
loadingdialog.setProgress(resultData.getInt("value", 0));
break;
case RockboxService.RESULT_LIB_LOADED:
unzip = resultData.getBoolean("unzip");
break;
case RockboxService.RESULT_SERVICE_RUNNING:
if (!unzip) /* defer to RESULT_INVOKING_MAIN */
{
fb = new RockboxFramebuffer(RockboxActivity.this);
setContentView(fb);
fb.requestFocus();
}
setServiceActivity(true);
break;
case RockboxService.RESULT_ERROR_OCCURED:
Toast.makeText(RockboxActivity.this, resultData.getString("error"), Toast.LENGTH_LONG);
break;
case RockboxService.RESULT_ROCKBOX_EXIT:
finish();
break;
}
}
});
startService(intent);
}
private void setServiceActivity(boolean set)
{
RockboxService s = RockboxService.getInstance();
if (s != null)
s.setActivity(set ? this : null);
}
public void onResume()
{
super.onResume();
setVisible(true);
setServiceActivity(true);
}
/* this is also called when the backlight goes off,
* which is nice
*/
@Override
protected void onPause()
{
super.onPause();
/* this will cause the framebuffer's Surface to be destroyed, enabling
* us to disable drawing */
setVisible(false);
}
@Override
protected void onStop()
{
super.onStop();
setServiceActivity(false);
}
@Override
protected void onDestroy()
{
super.onDestroy();
setServiceActivity(false);
}
}