summaryrefslogtreecommitdiffstats
path: root/android
diff options
context:
space:
mode:
authorMaurus Cuelenaere <mcuelenaere@gmail.com>2010-11-05 23:39:53 +0000
committerMaurus Cuelenaere <mcuelenaere@gmail.com>2010-11-05 23:39:53 +0000
commita83043274bdbf56935f8b38f5b940b672413f261 (patch)
tree825b506c01c31fe47479c9ae4a54e02516eb3b4b /android
parent540dd9c2d0510636536684a4c0b88fabd5326a9b (diff)
downloadrockbox-a83043274bdbf56935f8b38f5b940b672413f261.tar.gz
rockbox-a83043274bdbf56935f8b38f5b940b672413f261.tar.bz2
rockbox-a83043274bdbf56935f8b38f5b940b672413f261.zip
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
Diffstat (limited to 'android')
-rw-r--r--android/src/org/rockbox/RockboxActivity.java43
-rw-r--r--android/src/org/rockbox/RockboxFramebuffer.java41
2 files changed, 41 insertions, 43 deletions
diff --git a/android/src/org/rockbox/RockboxActivity.java b/android/src/org/rockbox/RockboxActivity.java
index d8c1307ff3..2e13a034c7 100644
--- a/android/src/org/rockbox/RockboxActivity.java
+++ b/android/src/org/rockbox/RockboxActivity.java
@@ -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;
diff --git a/android/src/org/rockbox/RockboxFramebuffer.java b/android/src/org/rockbox/RockboxFramebuffer.java
index 84974d627a..0a60182502 100644
--- a/android/src/org/rockbox/RockboxFramebuffer.java
+++ b/android/src/org/rockbox/RockboxFramebuffer.java
@@ -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 */
+ public void destroy()
+ {
set_lcd_active(0);
- }
- public void resume()
- {
- /* Needed so we can catch KeyEvents */
- setFocusable(true);
- setFocusableInTouchMode(true);
- setClickable(true);
- requestFocus();
- set_lcd_active(1);
+ media_monitor.unregister();
}
- public void destroy()
+ @Override
+ protected void onWindowVisibilityChanged(int visibility)
{
- suspend();
- media_monitor.unregister();
+ super.onWindowVisibilityChanged(visibility);
+
+ switch (visibility) {
+ case VISIBLE:
+ set_lcd_active(1);
+ break;
+ case GONE:
+ case INVISIBLE:
+ set_lcd_active(0);
+ break;
+ }
}
- 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);
-
+ 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);
}