summaryrefslogtreecommitdiffstats
path: root/src/org
diff options
context:
space:
mode:
authorLikai Ding <likaid@codeaurora.org>2013-08-14 17:43:38 +0800
committerXiaojing Zhang <zhangx@codeaurora.org>2014-11-04 20:37:56 -0800
commit60e2e3ff9ee15841099cd057895db838bda0a8d9 (patch)
treeafadc19425e04c04bfa6cfbd3ed952ce0f2e581f /src/org
parent3d1a38b32c8508c916ec333db16e393c5d5ca96b (diff)
downloadandroid_packages_apps_Gallery2-60e2e3ff9ee15841099cd057895db838bda0a8d9.tar.gz
android_packages_apps_Gallery2-60e2e3ff9ee15841099cd057895db838bda0a8d9.tar.bz2
android_packages_apps_Gallery2-60e2e3ff9ee15841099cd057895db838bda0a8d9.zip
Gallery2: support stereo/single track play mode
User can select stereo/single track play mode. Change-Id: I8225739815484f3c288823802f68478cb457725e
Diffstat (limited to 'src/org')
-rw-r--r--src/org/codeaurora/gallery3d/ext/ActivityHooker.java24
-rw-r--r--src/org/codeaurora/gallery3d/ext/ActivityHookerGroup.java48
-rw-r--r--src/org/codeaurora/gallery3d/ext/IActivityHooker.java31
-rwxr-xr-xsrc/org/codeaurora/gallery3d/video/ExtensionHelper.java4
-rw-r--r--src/org/codeaurora/gallery3d/video/StereoAudioHooker.java125
5 files changed, 231 insertions, 1 deletions
diff --git a/src/org/codeaurora/gallery3d/ext/ActivityHooker.java b/src/org/codeaurora/gallery3d/ext/ActivityHooker.java
index 039c5a04e..65761ff23 100644
--- a/src/org/codeaurora/gallery3d/ext/ActivityHooker.java
+++ b/src/org/codeaurora/gallery3d/ext/ActivityHooker.java
@@ -52,6 +52,30 @@ public class ActivityHooker implements IActivityHooker {
}
@Override
+ public void onCreate(Bundle savedInstanceState) {
+ }
+
+ @Override
+ public void onStart() {
+ }
+
+ @Override
+ public void onResume() {
+ }
+
+ @Override
+ public void onPause() {
+ }
+
+ @Override
+ public void onStop() {
+ }
+
+ @Override
+ public void onDestroy() {
+ }
+
+ @Override
public boolean onCreateOptionsMenu(Menu menu) {
return false;
}
diff --git a/src/org/codeaurora/gallery3d/ext/ActivityHookerGroup.java b/src/org/codeaurora/gallery3d/ext/ActivityHookerGroup.java
index 2e24aa688..4bf8616e7 100644
--- a/src/org/codeaurora/gallery3d/ext/ActivityHookerGroup.java
+++ b/src/org/codeaurora/gallery3d/ext/ActivityHookerGroup.java
@@ -46,6 +46,54 @@ public class ActivityHookerGroup extends ActivityHooker {
}
@Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ for (IActivityHooker hook : mHooks) {
+ hook.onCreate(savedInstanceState);
+ }
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ for (IActivityHooker hook : mHooks) {
+ hook.onStart();
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ for (IActivityHooker hook : mHooks) {
+ hook.onResume();
+ }
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ for (IActivityHooker hook : mHooks) {
+ hook.onPause();
+ }
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ for (IActivityHooker hook : mHooks) {
+ hook.onStop();
+ }
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ for (IActivityHooker hook : mHooks) {
+ hook.onDestroy();
+ }
+ }
+
+ @Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
boolean handle = false;
diff --git a/src/org/codeaurora/gallery3d/ext/IActivityHooker.java b/src/org/codeaurora/gallery3d/ext/IActivityHooker.java
index fa1b5c0a0..a83799626 100644
--- a/src/org/codeaurora/gallery3d/ext/IActivityHooker.java
+++ b/src/org/codeaurora/gallery3d/ext/IActivityHooker.java
@@ -26,7 +26,36 @@ import android.view.MenuItem;
* //do something return true; default: return false; } } }
*/
public interface IActivityHooker {
-
+ /**
+ * Will be called in Host Activity.onCreate(Bundle savedInstanceState)
+ * @param savedInstanceState
+ */
+ void onCreate(Bundle savedInstanceState);
+ /**
+ * Will be called in Host Activity.onStart()
+ */
+ void onStart();
+ /**
+ * Will be called in Host Activity.onStop()
+ */
+ void onStop();
+ /**
+ * Will be called in Host Activity.onPause()
+ */
+ void onPause();
+ /**
+ * Will be called in Host Activity.onResume()
+ */
+ void onResume();
+ /**
+ * Will be called in Host Activity.onDestroy()
+ */
+ void onDestroy();
+ /**
+ * Will be called in Host Activity.onCreateOptionsMenu(Menu menu)
+ * @param menu
+ * @return
+ */
/**
* Will be called in Host Activity.onCreateOptionsMenu(Menu menu)
*
diff --git a/src/org/codeaurora/gallery3d/video/ExtensionHelper.java b/src/org/codeaurora/gallery3d/video/ExtensionHelper.java
index cef0f96d7..7694cbfff 100755
--- a/src/org/codeaurora/gallery3d/video/ExtensionHelper.java
+++ b/src/org/codeaurora/gallery3d/video/ExtensionHelper.java
@@ -17,10 +17,14 @@ public class ExtensionHelper {
final ActivityHookerGroup group = new ActivityHookerGroup();
boolean loop = context.getResources().getBoolean(R.bool.loop);
+ boolean stereo = context.getResources().getBoolean(R.bool.stereo);
if (loop == true) {
group.addHooker(new LoopVideoHooker()); // add it for common feature.
}
+ if (stereo == true) {
+ group.addHooker(new StereoAudioHooker()); // add it for common feature.
+ }
return group;
}
diff --git a/src/org/codeaurora/gallery3d/video/StereoAudioHooker.java b/src/org/codeaurora/gallery3d/video/StereoAudioHooker.java
new file mode 100644
index 000000000..cb52f5972
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/StereoAudioHooker.java
@@ -0,0 +1,125 @@
+package org.codeaurora.gallery3d.video;
+
+import android.content.Context;
+import android.media.AudioManager;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import com.android.gallery3d.R;
+
+public class StereoAudioHooker extends MovieHooker {
+ private static final String TAG = "StereoAudioHooker";
+ private static final boolean LOG = true;
+
+ private static final int MENU_STEREO_AUDIO = 1;
+ private MenuItem mMenuStereoAudio;
+
+ private static final String KEY_STEREO = "EnableStereoOutput";
+ private boolean mSystemStereoAudio;
+ private boolean mCurrentStereoAudio;
+ private boolean mIsInitedStereoAudio;
+ private AudioManager mAudioManager;
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ enableStereoAudio();
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ restoreStereoAudio();
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(final Menu menu) {
+ super.onCreateOptionsMenu(menu);
+ mMenuStereoAudio = menu.add(0, getMenuActivityId(MENU_STEREO_AUDIO), 0,
+ R.string.single_track);
+ return true;
+ }
+
+ @Override
+ public boolean onPrepareOptionsMenu(final Menu menu) {
+ super.onPrepareOptionsMenu(menu);
+ updateStereoAudioIcon();
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(final MenuItem item) {
+ super.onOptionsItemSelected(item);
+ switch (getMenuOriginalId(item.getItemId())) {
+ case MENU_STEREO_AUDIO:
+ mCurrentStereoAudio = !mCurrentStereoAudio;
+ setStereoAudio(mCurrentStereoAudio);
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ private boolean getStereoAudio() {
+ boolean isstereo = false;
+ if (mAudioManager == null) {
+ mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
+ }
+ final String stereo = mAudioManager.getParameters(KEY_STEREO);
+ final String key = KEY_STEREO + "=1";
+ if (stereo != null && stereo.indexOf(key) > -1) {
+ isstereo = true;
+ } else {
+ isstereo = false;
+ }
+ if (LOG) {
+ Log.v(TAG, "getStereoAudio() isstereo=" + isstereo + ", stereo=" + stereo
+ + ", key=" + key);
+ }
+ return isstereo;
+ }
+
+ private void setStereoAudio(final boolean flag) {
+ final String value = KEY_STEREO + "=" + (flag ? "1" : "0");
+ if (mAudioManager == null) {
+ mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
+ }
+ mAudioManager.setParameters(value);
+ if (LOG) {
+ Log.v(TAG, "setStereoAudio(" + flag + ") value=" + value);
+ }
+ }
+
+ private void updateStereoAudioIcon() {
+ if (mMenuStereoAudio != null) {
+ if (mCurrentStereoAudio) {
+ mMenuStereoAudio.setTitle(R.string.single_track);
+ mMenuStereoAudio.setIcon(R.drawable.ic_menu_single_track);
+ } else {
+ mMenuStereoAudio.setTitle(R.string.stereo);
+ mMenuStereoAudio.setIcon(R.drawable.ic_menu_stereo);
+ }
+ }
+ }
+
+ private void enableStereoAudio() {
+ if (LOG) {
+ Log.v(TAG, "enableStereoAudio() mIsInitedStereoAudio=" + mIsInitedStereoAudio
+ + ", mCurrentStereoAudio=" + mCurrentStereoAudio);
+ }
+ mSystemStereoAudio = getStereoAudio();
+ if (!mIsInitedStereoAudio) {
+ mCurrentStereoAudio = mSystemStereoAudio;
+ mIsInitedStereoAudio = true;
+ } else {
+ // restore old stereo type
+ setStereoAudio(mCurrentStereoAudio);
+ }
+ updateStereoAudioIcon();
+ }
+
+ private void restoreStereoAudio() {
+ setStereoAudio(mSystemStereoAudio);
+ }
+}