diff options
author | Likai Ding <likaid@codeaurora.org> | 2013-08-14 17:43:38 +0800 |
---|---|---|
committer | Xiaojing Zhang <zhangx@codeaurora.org> | 2014-11-04 20:37:56 -0800 |
commit | 60e2e3ff9ee15841099cd057895db838bda0a8d9 (patch) | |
tree | afadc19425e04c04bfa6cfbd3ed952ce0f2e581f /src/org | |
parent | 3d1a38b32c8508c916ec333db16e393c5d5ca96b (diff) | |
download | android_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')
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); + } +} |