From 310842833d37d0d515ddf2ad2191f8c9fb547acd Mon Sep 17 00:00:00 2001 From: Likai Ding Date: Wed, 14 Aug 2013 17:43:38 +0800 Subject: Gallery2: support stereo/single track play mode User can select stereo/single track play mode. Change-Id: I8225739815484f3c288823802f68478cb457725e --- res/values-zh-rCN/codeaurora_strings.xml | 2 + res/values-zh-rTW/codeaurora_strings.xml | 2 + res/values/bool.xml | 1 + res/values/codeaurora_strings.xml | 2 + src/com/android/gallery3d/app/MovieActivity.java | 7 ++ .../qcom/gallery3d/video/StereoAudioHooker.java | 118 ------------------- .../codeaurora/gallery3d/ext/ActivityHooker.java | 24 ++++ .../gallery3d/ext/ActivityHookerGroup.java | 48 ++++++++ .../codeaurora/gallery3d/ext/IActivityHooker.java | 31 ++++- .../gallery3d/video/ExtensionHelper.java | 4 + .../gallery3d/video/StereoAudioHooker.java | 125 +++++++++++++++++++++ 11 files changed, 245 insertions(+), 119 deletions(-) delete mode 100755 src/com/qcom/gallery3d/video/StereoAudioHooker.java create mode 100644 src/org/codeaurora/gallery3d/video/StereoAudioHooker.java diff --git a/res/values-zh-rCN/codeaurora_strings.xml b/res/values-zh-rCN/codeaurora_strings.xml index 9e9b535e7..cdf3c7811 100644 --- a/res/values-zh-rCN/codeaurora_strings.xml +++ b/res/values-zh-rCN/codeaurora_strings.xml @@ -2,4 +2,6 @@ "循环" "单次" + "立体声" + "单声道" diff --git a/res/values-zh-rTW/codeaurora_strings.xml b/res/values-zh-rTW/codeaurora_strings.xml index a25ec853a..8af6493d4 100644 --- a/res/values-zh-rTW/codeaurora_strings.xml +++ b/res/values-zh-rTW/codeaurora_strings.xml @@ -2,4 +2,6 @@ "循環" "單次" + "立體聲" + "單聲道" diff --git a/res/values/bool.xml b/res/values/bool.xml index 18aade1bb..802388e94 100755 --- a/res/values/bool.xml +++ b/res/values/bool.xml @@ -16,4 +16,5 @@ false false + false \ No newline at end of file diff --git a/res/values/codeaurora_strings.xml b/res/values/codeaurora_strings.xml index e17c15492..5d918b522 100644 --- a/res/values/codeaurora_strings.xml +++ b/res/values/codeaurora_strings.xml @@ -2,4 +2,6 @@ "Loop" "Single" + "Stereo" + "Single track" diff --git a/src/com/android/gallery3d/app/MovieActivity.java b/src/com/android/gallery3d/app/MovieActivity.java index 5152e5b39..937d309bc 100644 --- a/src/com/android/gallery3d/app/MovieActivity.java +++ b/src/com/android/gallery3d/app/MovieActivity.java @@ -196,6 +196,8 @@ public class MovieActivity extends Activity { mMovieHooker.setParameter(null, mPlayer.getMoviePlayerExt()); mMovieHooker.setParameter(null, mMovieItem); mMovieHooker.setParameter(null, mPlayer.getVideoSurface()); + mMovieHooker.onCreate(savedInstanceState); + // Determine available/supported effects final Descriptor[] effects = AudioEffect.queryEffects(); for (final Descriptor effect : effects) { @@ -447,6 +449,7 @@ public class MovieActivity extends Activity { .requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); super.onStart(); + mMovieHooker.onStart(); } @Override @@ -454,6 +457,7 @@ public class MovieActivity extends Activity { ((AudioManager) getSystemService(AUDIO_SERVICE)) .abandonAudioFocus(null); super.onStop(); + mMovieHooker.onStop(); } @Override @@ -465,6 +469,7 @@ public class MovieActivity extends Activity { // Do nothing } super.onPause(); + mMovieHooker.onPause(); } @Override @@ -478,6 +483,7 @@ public class MovieActivity extends Activity { registerReceiver(mReceiver, intentFilter); } super.onResume(); + mMovieHooker.onResume(); } @Override @@ -498,6 +504,7 @@ public class MovieActivity extends Activity { mVirtualizerEffect.release(); } super.onDestroy(); + mMovieHooker.onDestroy(); } @Override diff --git a/src/com/qcom/gallery3d/video/StereoAudioHooker.java b/src/com/qcom/gallery3d/video/StereoAudioHooker.java deleted file mode 100755 index 72f3cb255..000000000 --- a/src/com/qcom/gallery3d/video/StereoAudioHooker.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.qcom.gallery3d.video; - -import android.content.Context; -import android.media.AudioManager; -import android.view.Menu; -import android.view.MenuItem; - -import com.android.gallery3d.R; -import com.qcom.gallery3d.ext.QcomLog; - -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) { - QcomLog.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) { - QcomLog.v(TAG, "setStereoAudio(" + flag + ") value=" + value); - } - } - - private void updateStereoAudioIcon() { - if (mMenuStereoAudio != null) { - if (mCurrentStereoAudio) { - mMenuStereoAudio.setTitle(R.string.single_track); - } else { - mMenuStereoAudio.setTitle(R.string.stereo); - } - } - } - - private void enableStereoAudio() { - if (LOG) { - QcomLog.v(TAG, "enableStereoAudio() mIsInitedStereoAudio=" + mIsInitedStereoAudio - + ", mCurrentStereoAudio=" + mCurrentStereoAudio); - } - mSystemStereoAudio = getStereoAudio(); - if (!mIsInitedStereoAudio) { - mCurrentStereoAudio = mSystemStereoAudio; - mIsInitedStereoAudio = true; - } else { - //if activity is not from onCreate() - //restore old stereo type - setStereoAudio(mCurrentStereoAudio); - } - updateStereoAudioIcon(); - } - - private void restoreStereoAudio() { - setStereoAudio(mSystemStereoAudio); - } -} 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 @@ -51,6 +51,30 @@ public class ActivityHooker implements IActivityHooker { return mIntent; } + @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 @@ -45,6 +45,54 @@ public class ActivityHookerGroup extends ActivityHooker { return mHooks.get(index); } + @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); 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); + } +} -- cgit v1.2.3