Android port:

* decouple RockboxFramebuffer resume/suspend behaviour from RockboxActivity
 * make RockboxFramebuffer native methods private
 * refactor attaching the RockboxFramebuffer view to RockboxActivity

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28505 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Maurus Cuelenaere 2010-11-05 23:39:53 +00:00
parent 540dd9c2d0
commit a83043274b
2 changed files with 42 additions and 44 deletions

View file

@ -27,6 +27,7 @@ import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
@ -98,9 +99,7 @@ public class RockboxActivity extends Activity
loadingdialog.dismiss();
if (rbservice.get_fb() == null)
throw new IllegalStateException("FB NULL");
rbservice.set_activity(thisActivity);
setContentView(rbservice.get_fb());
rbservice.get_fb().invalidate();
attachFramebuffer();
}
});
}
@ -112,26 +111,29 @@ public class RockboxActivity extends Activity
rbservice = RockboxService.get_instance();
return (rbservice!= null && rbservice.isRockboxRunning() == true);
}
private void attachFramebuffer()
{
View rbFramebuffer = rbservice.get_fb();
try {
setContentView(rbFramebuffer);
} catch (IllegalStateException e) {
/* we are already using the View,
* need to remove it and re-attach it */
ViewGroup g = (ViewGroup) rbFramebuffer.getParent();
g.removeView(rbFramebuffer);
setContentView(rbFramebuffer);
} finally {
rbFramebuffer.requestFocus();
rbservice.set_activity(this);
}
}
public void onResume()
{
super.onResume();
if (isRockboxRunning())
{
try {
setContentView(rbservice.get_fb());
} catch (IllegalStateException e) {
/* we are already using the View,
* need to remove it and re-attach it */
ViewGroup g = (ViewGroup)rbservice.get_fb().getParent();
g.removeView(rbservice.get_fb());
setContentView(rbservice.get_fb());
} finally {
rbservice.set_activity(this);
rbservice.get_fb().resume();
}
}
attachFramebuffer();
}
/* this is also called when the backlight goes off,
@ -142,7 +144,6 @@ public class RockboxActivity extends Activity
{
super.onPause();
rbservice.set_activity(null);
rbservice.get_fb().suspend();
}
@Override
@ -150,7 +151,6 @@ public class RockboxActivity extends Activity
{
super.onStop();
rbservice.set_activity(null);
rbservice.get_fb().suspend();
}
@Override
@ -158,7 +158,6 @@ public class RockboxActivity extends Activity
{
super.onDestroy();
rbservice.set_activity(null);
rbservice.get_fb().suspend();
}
private HostCallback hostcallback = null;

View file

@ -49,7 +49,6 @@ public class RockboxFramebuffer extends View
setClickable(true);
btm = Bitmap.createBitmap(lcd_width, lcd_height, Bitmap.Config.RGB_565);
native_buf = native_fb;
requestFocus();
media_monitor = new MediaButtonReceiver(c);
media_monitor.register();
/* the service needs to know the about us */
@ -60,7 +59,7 @@ public class RockboxFramebuffer extends View
{
c.drawBitmap(btm, 0.0f, 0.0f, null);
}
@SuppressWarnings("unused")
private void java_lcd_update()
{
@ -112,29 +111,29 @@ public class RockboxFramebuffer extends View
return buttonHandler(keyCode, false);
}
/* the two below should only be called from the activity thread */
public void suspend()
{ /* suspend, Rockbox will not make any lcd updates */
set_lcd_active(0);
}
public void resume()
{
/* Needed so we can catch KeyEvents */
setFocusable(true);
setFocusableInTouchMode(true);
setClickable(true);
requestFocus();
set_lcd_active(1);
}
public void destroy()
{
suspend();
set_lcd_active(0);
media_monitor.unregister();
}
public native void set_lcd_active(int active);
public native void touchHandler(boolean down, int x, int y);
public native boolean buttonHandler(int keycode, boolean state);
@Override
protected void onWindowVisibilityChanged(int visibility)
{
super.onWindowVisibilityChanged(visibility);
switch (visibility) {
case VISIBLE:
set_lcd_active(1);
break;
case GONE:
case INVISIBLE:
set_lcd_active(0);
break;
}
}
private native void set_lcd_active(int active);
private native void touchHandler(boolean down, int x, int y);
private native boolean buttonHandler(int keycode, boolean state);
}