summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/app/ActivityState.java
diff options
context:
space:
mode:
authorDaniel Sandler <dsandler@android.com>2011-11-28 11:43:23 -0500
committerDaniel Sandler <dsandler@android.com>2011-11-29 08:49:39 -0500
commit8e6fd7cee5467824cd96b4127ccc755c70bd4ea3 (patch)
tree0ca64c5073ebdbd8fe6cc9896dd991031b097ba4 /src/com/android/gallery3d/app/ActivityState.java
parentf36d8f299d57849a1afb1b0c271bb4be0d336e43 (diff)
downloadandroid_packages_apps_Gallery2-8e6fd7cee5467824cd96b4127ccc755c70bd4ea3.tar.gz
android_packages_apps_Gallery2-8e6fd7cee5467824cd96b4127ccc755c70bd4ea3.tar.bz2
android_packages_apps_Gallery2-8e6fd7cee5467824cd96b4127ccc755c70bd4ea3.zip
Improve screen on/off logic in slideshow.
When used as a screensaver or otherwise, the slideshow should not keep the screen on if the device is not plugged in. It should also allow the screen to lock while the slideshow is playing (otherwise a device left in this state may be left unsecured for long periods by accident). Additionally, when used as a screensaver, it must dismiss the keyguard in order to be shown on a secured device. Bug: 5660833 Change-Id: I1bafc50127aaa7ae2b67235d30736faa606c5ac1
Diffstat (limited to 'src/com/android/gallery3d/app/ActivityState.java')
-rw-r--r--src/com/android/gallery3d/app/ActivityState.java58
1 files changed, 54 insertions, 4 deletions
diff --git a/src/com/android/gallery3d/app/ActivityState.java b/src/com/android/gallery3d/app/ActivityState.java
index 519eaff58..1ef93a4bc 100644
--- a/src/com/android/gallery3d/app/ActivityState.java
+++ b/src/com/android/gallery3d/app/ActivityState.java
@@ -20,17 +20,30 @@ import com.android.gallery3d.ui.GLView;
import android.app.ActionBar;
import android.app.Activity;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.content.Intent;
import android.content.res.Configuration;
+import android.os.BatteryManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
+import android.view.Window;
import android.view.WindowManager;
abstract public class ActivityState {
public static final int FLAG_HIDE_ACTION_BAR = 1;
public static final int FLAG_HIDE_STATUS_BAR = 2;
+ public static final int FLAG_SCREEN_ON = 3;
+
+ private static final int SCREEN_ON_FLAGS = (
+ WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
+ | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
+ | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
+ );
protected GalleryActivity mActivity;
protected Bundle mData;
@@ -47,6 +60,7 @@ abstract public class ActivityState {
}
private boolean mDestroyed = false;
+ private boolean mPlugged = false;
protected ActivityState() {
}
@@ -86,7 +100,34 @@ abstract public class ActivityState {
protected void onCreate(Bundle data, Bundle storedState) {
}
+ BroadcastReceiver mPowerIntentReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final String action = intent.getAction();
+ if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
+ boolean plugged = (0 != intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0));
+
+ if (plugged != mPlugged) {
+ mPlugged = plugged;
+ final Window win = ((Activity) mActivity).getWindow();
+ final WindowManager.LayoutParams params = win.getAttributes();
+ setScreenOnFlags(params);
+ win.setAttributes(params);
+ }
+ }
+ }
+ };
+
+ void setScreenOnFlags(WindowManager.LayoutParams params) {
+ if (mPlugged && 0 != (mFlags & FLAG_SCREEN_ON)) {
+ params.flags |= SCREEN_ON_FLAGS;
+ } else {
+ params.flags &= ~SCREEN_ON_FLAGS;
+ }
+ }
+
protected void onPause() {
+ ((Activity) mActivity).unregisterReceiver(mPowerIntentReceiver);
}
// should only be called by StateManager
@@ -108,21 +149,30 @@ abstract public class ActivityState {
activity.invalidateOptionsMenu();
+ final Window win = activity.getWindow();
+ final WindowManager.LayoutParams params = win.getAttributes();
+
if ((mFlags & FLAG_HIDE_STATUS_BAR) != 0) {
- WindowManager.LayoutParams params = ((Activity) mActivity).getWindow().getAttributes();
params.systemUiVisibility = View.SYSTEM_UI_FLAG_LOW_PROFILE;
- ((Activity) mActivity).getWindow().setAttributes(params);
} else {
- WindowManager.LayoutParams params = ((Activity) mActivity).getWindow().getAttributes();
params.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE;
- ((Activity) mActivity).getWindow().setAttributes(params);
}
+ setScreenOnFlags(params);
+ win.setAttributes(params);
+
ResultEntry entry = mReceivedResults;
if (entry != null) {
mReceivedResults = null;
onStateResult(entry.requestCode, entry.resultCode, entry.resultData);
}
+
+ if (0 != (mFlags & FLAG_SCREEN_ON)) {
+ // we need to know whether the device is plugged in to do this correctly
+ final IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_BATTERY_CHANGED);
+ activity.registerReceiver(mPowerIntentReceiver, filter);
+ }
onResume();
}