diff options
author | Likai Ding <likaid@codeaurora.org> | 2013-08-14 14:27:58 +0800 |
---|---|---|
committer | emancebo <emancebo@cyngn.com> | 2014-09-04 10:40:17 -0700 |
commit | 76b5081f3e6d39c4466b213e4a71fd4b210a6559 (patch) | |
tree | 9c315bedc5065ca49cf292198987260fbdcd7fbc /src | |
parent | 2f15566fdc3dc524f3710715de9b004e2efcfae3 (diff) | |
download | android_packages_apps_Gallery2-76b5081f3e6d39c4466b213e4a71fd4b210a6559.tar.gz android_packages_apps_Gallery2-76b5081f3e6d39c4466b213e4a71fd4b210a6559.tar.bz2 android_packages_apps_Gallery2-76b5081f3e6d39c4466b213e4a71fd4b210a6559.zip |
Gallery2: support loop/single video play mode
(cherry picked new files from commit id
990c6d43ea7c184846e19d41bef0d93aee4e581b)
Change-Id: I0f55dfdfe812262804e7e45c99c7c9bbc5fb7503
Diffstat (limited to 'src')
-rwxr-xr-x | src/com/qcom/gallery3d/ext/ActivityHooker.java | 87 | ||||
-rwxr-xr-x | src/com/qcom/gallery3d/ext/ActivityHookerGroup.java | 144 | ||||
-rwxr-xr-x | src/com/qcom/gallery3d/ext/IActivityHooker.java | 118 | ||||
-rwxr-xr-x | src/com/qcom/gallery3d/ext/IMovieItem.java | 58 | ||||
-rwxr-xr-x | src/com/qcom/gallery3d/ext/IMoviePlayer.java | 36 | ||||
-rwxr-xr-x | src/com/qcom/gallery3d/ext/MovieItem.java | 115 | ||||
-rwxr-xr-x | src/com/qcom/gallery3d/ext/MovieUtils.java | 89 | ||||
-rwxr-xr-x | src/com/qcom/gallery3d/video/ExtensionHelper.java | 88 | ||||
-rwxr-xr-x | src/com/qcom/gallery3d/video/LoopVideoHooker.java | 63 | ||||
-rwxr-xr-x | src/com/qcom/gallery3d/video/MovieHooker.java | 38 |
10 files changed, 836 insertions, 0 deletions
diff --git a/src/com/qcom/gallery3d/ext/ActivityHooker.java b/src/com/qcom/gallery3d/ext/ActivityHooker.java new file mode 100755 index 000000000..3d1999bc1 --- /dev/null +++ b/src/com/qcom/gallery3d/ext/ActivityHooker.java @@ -0,0 +1,87 @@ +package com.qcom.gallery3d.ext; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +/** + * Default implemention class of IActivityHooker. + */ +public class ActivityHooker implements IActivityHooker { + private static final int MENU_MAX_NUMBER = 100; + private static int sMenuId = 1; + private int mMenuId; + private static Object sMenuLock = new Object(); + private Activity mContext; + private Intent mIntent; + + public ActivityHooker() { + synchronized (sMenuLock) { + sMenuId++; + mMenuId = sMenuId * MENU_MAX_NUMBER; + } + } + + @Override + public int getMenuActivityId(int id) { + return mMenuId + id; + }; + + @Override + public int getMenuOriginalId(int id) { + return id - mMenuId; + } + + @Override + public void init(Activity context, Intent intent) { + mContext = context; + mIntent = intent; + } + + @Override + public Activity getContext() { + return mContext; + } + + @Override + public Intent getIntent() { + 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; + } + @Override + public boolean onOptionsItemSelected(MenuItem item) { + return false; + } + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + return false; + } + + @Override + public void setParameter(String key, Object value) { + } +} diff --git a/src/com/qcom/gallery3d/ext/ActivityHookerGroup.java b/src/com/qcom/gallery3d/ext/ActivityHookerGroup.java new file mode 100755 index 000000000..b1da185fd --- /dev/null +++ b/src/com/qcom/gallery3d/ext/ActivityHookerGroup.java @@ -0,0 +1,144 @@ +package com.qcom.gallery3d.ext; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; + +import java.util.ArrayList; + +/** + * The composite pattern class. + * It will deliver every action to its leaf hookers. + */ +public class ActivityHookerGroup extends ActivityHooker { + private ArrayList<IActivityHooker> mHooks = new ArrayList<IActivityHooker>(); + /** + * Add hooker to current group. + * @param hooker + * @return + */ + public boolean addHooker(IActivityHooker hooker) { + return mHooks.add(hooker); + } + /** + * Remove hooker from current group. + * @param hooker + * @return + */ + public boolean removeHooker(IActivityHooker hooker) { + return mHooks.remove(hooker); + } + /** + * Hooker size of current group. + * @return + */ + public int size() { + return mHooks.size(); + } + /** + * Get hooker of requested location. + * @param index + * @return + */ + public IActivityHooker getHooker(int index) { + 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); + boolean handle = false; + for (IActivityHooker hook : mHooks) { + boolean one = hook.onCreateOptionsMenu(menu); + if (!handle) { + handle = one; + } + } + return handle; + } + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + super.onPrepareOptionsMenu(menu); + boolean handle = false; + for (IActivityHooker hook : mHooks) { + boolean one = hook.onPrepareOptionsMenu(menu); + if (!handle) { + handle = one; + } + } + return handle; + } + @Override + public boolean onOptionsItemSelected(MenuItem item) { + super.onOptionsItemSelected(item); + boolean handle = false; + for (IActivityHooker hook : mHooks) { + boolean one = hook.onOptionsItemSelected(item); + if (!handle) { + handle = one; + } + } + return handle; + } + + @Override + public void setParameter(String key, Object value) { + super.setParameter(key, value); + for (IActivityHooker hook : mHooks) { + hook.setParameter(key, value); + } + } + + @Override + public void init(Activity context, Intent intent) { + super.init(context, intent); + for (IActivityHooker hook : mHooks) { + hook.init(context, intent); + } + } +} diff --git a/src/com/qcom/gallery3d/ext/IActivityHooker.java b/src/com/qcom/gallery3d/ext/IActivityHooker.java new file mode 100755 index 000000000..3be707c6d --- /dev/null +++ b/src/com/qcom/gallery3d/ext/IActivityHooker.java @@ -0,0 +1,118 @@ +package com.qcom.gallery3d.ext; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; + +/** + * Activity action hooker class. + * Host app's activity will call this hooker's functions in its lifecycle. + * For example: HostActivity.onCreate()-->hooker.onCreate(). + * But void init(Activity context, Intent intent) will be called before other functions. + * <br/> + * IActivityHooker objects may show menus, but we should give a unique menu id to every menus. + * Hooker can call getMenuActivityId(int) to get a global unique menu id to be used in menu.add(), + * and can call getMenuOriginalId(int) to get the original menu id. + * the example: + * class Hooker implements IActivityHooker { + * private static final int MENU_EXAMPLE = 1; + * @Override + * public boolean onCreateOptionsMenu(Menu menu) { + * super.onCreateOptionsMenu(menu); + * menu.add(0, getMenuActivityId(MENU_EXAMPLE), 0, android.R.string.ok); + * return true; + * } + * @Override + * public boolean onOptionsItemSelected(MenuItem item) { + * switch(getMenuOriginalId(item.getItemId())) { + * case MENU_EXAMPLE: + * //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 + */ + boolean onCreateOptionsMenu(Menu menu); + /** + * Will be called in Host Activity.onPrepareOptionsMenu(Menu menu) + * @param menu + * @return + */ + boolean onPrepareOptionsMenu(Menu menu); + /** + * Will be called in Host Activity.onOptionsItemSelected(MenuItem item) + * @param item + * @return + */ + boolean onOptionsItemSelected(MenuItem item); + + /** + * Should be called before any other functions. + * @param context + * @param intent + */ + void init(Activity context, Intent intent); + /** + * @return return activity set by init(Activity context, Intent intent) + */ + Activity getContext(); + /** + * @return return intent set by init(Activity context, Intent intent) + */ + Intent getIntent(); + /** + * IActivityHooker objects may show menus, but we should give a unique menu id to every menus. + * Hooker can call this function to get a global unique menu id to be used in menu.add() + * @param id + * @return + */ + int getMenuActivityId(int id); + /** + * When onOptionsItemSelected is called, we can get menu's id from parameter. + * You can get the original menu id by calling this function. + * @param id + * @return + */ + int getMenuOriginalId(int id); + /** + * Host activity will call this function to set parameter to hooker activity. + * @param key + * @param value + */ + void setParameter(String key, Object value); +} diff --git a/src/com/qcom/gallery3d/ext/IMovieItem.java b/src/com/qcom/gallery3d/ext/IMovieItem.java new file mode 100755 index 000000000..6c7f4dd20 --- /dev/null +++ b/src/com/qcom/gallery3d/ext/IMovieItem.java @@ -0,0 +1,58 @@ +package com.qcom.gallery3d.ext; + +import android.net.Uri; +/** + * Movie info class + */ +public interface IMovieItem { + /** + * @return movie Uri, it's may be not the original Uri. + */ + Uri getUri(); + /** + * + * @return MIME type of video + */ + String getMimeType(); + /** + * + * @return title of video + */ + String getTitle(); + /** + * + * @return whether error occured or not. + */ + boolean getError(); + + /** + * set title of video + * @param title + */ + void setTitle(String title); + /** + * set video Uri + * @param uri + */ + void setUri(Uri uri); + /** + * Set MIME type of video + * @param mimeType + */ + void setMimeType(String mimeType); + + /** + * Set error occured flag + */ + void setError(); + /** + * + * @return return original Uri of video. + */ + Uri getOriginalUri(); + /** + * Set video original Uri. + * @param uri + */ + void setOriginalUri(Uri uri); +}
\ No newline at end of file diff --git a/src/com/qcom/gallery3d/ext/IMoviePlayer.java b/src/com/qcom/gallery3d/ext/IMoviePlayer.java new file mode 100755 index 000000000..3a353639c --- /dev/null +++ b/src/com/qcom/gallery3d/ext/IMoviePlayer.java @@ -0,0 +1,36 @@ +package com.qcom.gallery3d.ext; + +public interface IMoviePlayer { + /** + * add new bookmark Uri. + */ + void addBookmark(); + /** + * start current item and stop playing video. + * @param item + */ + void startNextVideo(IMovieItem item); + /** + * Loop current video. + * @param loop + */ + void setLoop(boolean loop); + /** + * Loop current video or not + * @return + */ + boolean getLoop(); + /** + * Show video details. + */ + void showDetail(); + /** + * Can stop current video or not. + * @return + */ + boolean canStop(); + /** + * Stop current video. + */ + void stopVideo(); +} diff --git a/src/com/qcom/gallery3d/ext/MovieItem.java b/src/com/qcom/gallery3d/ext/MovieItem.java new file mode 100755 index 000000000..2da1c2628 --- /dev/null +++ b/src/com/qcom/gallery3d/ext/MovieItem.java @@ -0,0 +1,115 @@ +package com.qcom.gallery3d.ext; + +import android.net.Uri; +import android.provider.MediaStore; + +public class MovieItem implements IMovieItem { + private static final String TAG = "MovieItem"; + private static final boolean LOG = true; + + private Uri mUri; + private String mMimeType; + private String mTitle; + private boolean mError; +// private int mStereoType; + private Uri mOriginal; + + private static final int STREO_TYPE_2D = 1; + + public MovieItem(Uri uri, String mimeType, String title, int stereoType) { + mUri = uri; + mMimeType = mimeType; + mTitle = title; +// mStereoType = stereoType; + mOriginal = uri; + } + + public MovieItem(String uri, String mimeType, String title, int stereoType) { + this(Uri.parse(uri), mimeType, title, stereoType); + } + + public MovieItem(Uri uri, String mimeType, String title) { + this(uri, mimeType, title, STREO_TYPE_2D); + } + + public MovieItem(String uri, String mimeType, String title) { + this(Uri.parse(uri), mimeType, title); + } + + @Override + public Uri getUri() { + return mUri; + } + + @Override + public String getMimeType() { + return mMimeType; + } + + @Override + public String getTitle() { + return mTitle; + } + + @Override + public boolean getError() { + return mError; + } + +// @Override +// public int getStereoType() { +// return mStereoType; +// } + + public void setTitle(String title) { + mTitle = title; + } + + @Override + public void setUri(Uri uri) { + mUri = uri; + } + + @Override + public void setMimeType(String mimeType) { + mMimeType = mimeType; + } + +// @Override +// public void setStereoType(int stereoType) { +// mStereoType = stereoType; +// } + + @Override + public void setError() { + mError = true; + } + + @Override + public Uri getOriginalUri() { + return mOriginal; + } + + @Override + public void setOriginalUri(Uri uri) { + mOriginal = uri; + } + + @Override + public String toString() { + return new StringBuilder().append("MovieItem(uri=") + .append(mUri) + .append(", mime=") + .append(mMimeType) + .append(", title=") + .append(mTitle) + .append(", error=") + .append(mError) +// .append(", support3D=") +// .append(mStereoType) + .append(", mOriginal=") + .append(mOriginal) + .append(")") + .toString(); + } +}
\ No newline at end of file diff --git a/src/com/qcom/gallery3d/ext/MovieUtils.java b/src/com/qcom/gallery3d/ext/MovieUtils.java new file mode 100755 index 000000000..16b7b6375 --- /dev/null +++ b/src/com/qcom/gallery3d/ext/MovieUtils.java @@ -0,0 +1,89 @@ +package com.qcom.gallery3d.ext; + +import android.net.Uri; + +import java.util.Locale; + +/** + * Util class for Movie functions. * + */ +public class MovieUtils { + private static final String TAG = "MovieUtils"; + private static final boolean LOG = true; + + private MovieUtils() {} + /** + * Whether current video(Uri) is RTSP streaming or not. + * @param uri + * @param mimeType + * @return + */ + public static boolean isRtspStreaming(Uri uri, String mimeType) { + boolean rtsp = false; + if (uri != null) { + if ("rtsp".equalsIgnoreCase(uri.getScheme())) { + rtsp = true; + } + } + if (LOG) { + QcomLog.v(TAG, "isRtspStreaming(" + uri + ", " + mimeType + ") return " + rtsp); + } + return rtsp; + } + /** + * Whether current video(Uri) is HTTP streaming or not. + * @param uri + * @param mimeType + * @return + */ + public static boolean isHttpStreaming(Uri uri, String mimeType) { + boolean http = false; + if (uri != null) { + if ("http".equalsIgnoreCase(uri.getScheme())) { + http = true; + } else if ("https".equalsIgnoreCase(uri.getScheme())) { + http = true; + } + } + if (LOG) { + QcomLog.v(TAG, "isHttpStreaming(" + uri + ", " + mimeType + ") return " + http); + } + return http; + } + /** + * Whether current video(Uri) is live streaming or not. + * @param uri + * @param mimeType + * @return + */ + public static boolean isSdpStreaming(Uri uri, String mimeType) { + boolean sdp = false; + if (uri != null) { + if ("application/sdp".equals(mimeType)) { + sdp = true; + } else if (uri.toString().toLowerCase(Locale.ENGLISH).endsWith(".sdp")) { + sdp = true; + } + } + if (LOG) { + QcomLog.v(TAG, "isSdpStreaming(" + uri + ", " + mimeType + ") return " + sdp); + } + return sdp; + } + + /** + * Whether current video(Uri) is local file or not. + * @param uri + * @param mimeType + * @return + */ + public static boolean isLocalFile(Uri uri, String mimeType) { + boolean local = (!isSdpStreaming(uri, mimeType) + && !isRtspStreaming(uri, mimeType) + && !isHttpStreaming(uri, mimeType)); + if (LOG) { + QcomLog.v(TAG, "isLocalFile(" + uri + ", " + mimeType + ") return " + local); + } + return local; + } +} diff --git a/src/com/qcom/gallery3d/video/ExtensionHelper.java b/src/com/qcom/gallery3d/video/ExtensionHelper.java new file mode 100755 index 000000000..ae667eeb5 --- /dev/null +++ b/src/com/qcom/gallery3d/video/ExtensionHelper.java @@ -0,0 +1,88 @@ +package com.qcom.gallery3d.video; + +import android.content.Context; + +import com.android.gallery3d.app.MovieActivity; +import com.qcom.gallery3d.ext.ActivityHookerGroup; +import com.qcom.gallery3d.ext.IActivityHooker; +import com.qcom.gallery3d.ext.IMovieExtension; +import com.qcom.gallery3d.ext.IMovieStrategy; +import com.qcom.gallery3d.ext.MovieExtension; +import com.qcom.gallery3d.ext.MovieStrategy; +import com.qcom.gallery3d.ext.QcomLog; + +import java.util.ArrayList; +import java.util.List; + +public class ExtensionHelper { + private static final String TAG = "ExtensionHelper"; + private static final boolean LOG = true; + + private static List<IMovieExtension> sMovieExtensions; + private static void ensureMovieExtension(final Context context) { + if (sMovieExtensions == null) { + sMovieExtensions = new ArrayList<IMovieExtension>(); + sMovieExtensions.add(new MovieExtension(MovieExtension.CMCC_EXTENSION_FUNCTIONS)); + } + } + + public static IActivityHooker getHooker(final Context context) { + ensureMovieExtension(context); + final ActivityHookerGroup group = new ActivityHookerGroup(); + if (!(ExtensionHelper.getMovieStrategy(context).shouldEnableRewindAndForward())) { + group.addHooker(new StopVideoHooker());//add it for common feature. + } + group.addHooker(new LoopVideoHooker()); //add it for common feature. + + for (final IMovieExtension ext : sMovieExtensions) { //add common feature in host app + final List<Integer> list = ext.getFeatureList(); + if (list != null) { + for (int i = 0, size = list.size(); i < size; i++) { + final int feature = list.get(i); + switch(feature) { + case IMovieExtension.FEATURE_ENABLE_STOP: + //group.addHooker(new StopVideoHooker()); + break; + // case IMovieExtension.FEATURE_ENABLE_NOTIFICATION_PLUS: + // group.addHooker(new NotificationPlusHooker()); + // break; + case IMovieExtension.FEATURE_ENABLE_STREAMING: + group.addHooker(new StreamingHooker()); + break; + case IMovieExtension.FEATURE_ENABLE_BOOKMARK: + group.addHooker(new BookmarkHooker()); + break; + case IMovieExtension.FEATURE_ENABLE_VIDEO_LIST: + group.addHooker(new MovieListHooker()); + break; + case IMovieExtension.FEATURE_ENABLE_STEREO_AUDIO: + group.addHooker(new StereoAudioHooker()); + break; + case IMovieExtension.FEATURE_ENABLE_SETTINGS: + group.addHooker(new StepOptionSettingsHooker()); + break; + default: + break; + } + } + } + } + for (final IMovieExtension ext : sMovieExtensions) { //add other feature in plugin app + final IActivityHooker hooker = ext.getHooker(); + if (hooker != null) { + group.addHooker(hooker); + } + } + for (int i = 0, count = group.size(); i < count; i++) { + if (LOG) { + QcomLog.v(TAG, "getHooker() [" + i + "]=" + group.getHooker(i)); + } + } + return group; + } + + public static IMovieStrategy getMovieStrategy(final Context context) { + return new MovieStrategy(); + } + +} diff --git a/src/com/qcom/gallery3d/video/LoopVideoHooker.java b/src/com/qcom/gallery3d/video/LoopVideoHooker.java new file mode 100755 index 000000000..2b5380f5d --- /dev/null +++ b/src/com/qcom/gallery3d/video/LoopVideoHooker.java @@ -0,0 +1,63 @@ +package com.qcom.gallery3d.video; + +import android.view.Menu; +import android.view.MenuItem; + +import com.android.gallery3d.R; +import com.qcom.gallery3d.ext.MovieUtils; +import com.qcom.gallery3d.ext.QcomLog; + +public class LoopVideoHooker extends MovieHooker { + private static final String TAG = "LoopVideoHooker"; + private static final boolean LOG = true; + + private static final int MENU_LOOP = 1; + + private MenuItem mMenuLoopButton; + + @Override + public boolean onCreateOptionsMenu(final Menu menu) { + super.onCreateOptionsMenu(menu); + mMenuLoopButton = menu.add(0, getMenuActivityId(MENU_LOOP), 0, R.string.loop); + return true; + } + @Override + public boolean onPrepareOptionsMenu(final Menu menu) { + super.onPrepareOptionsMenu(menu); + updateLoop(); + return true; + } + @Override + public boolean onOptionsItemSelected(final MenuItem item) { + super.onOptionsItemSelected(item); + switch(getMenuOriginalId(item.getItemId())) { + case MENU_LOOP: + getPlayer().setLoop(!getPlayer().getLoop()); + updateLoop(); + return true; + default: + return false; + } + } + + private void updateLoop() { + if (LOG) { + QcomLog.v(TAG, "updateLoop() mLoopButton=" + mMenuLoopButton); + } + if (mMenuLoopButton != null) { + if (MovieUtils.isLocalFile(getMovieItem().getUri(), getMovieItem().getMimeType())) { + mMenuLoopButton.setVisible(true); + } else { + mMenuLoopButton.setVisible(false); + } + final boolean newLoop = getPlayer().getLoop(); + if (newLoop) { + mMenuLoopButton.setTitle(R.string.single); + mMenuLoopButton.setIcon(R.drawable.ic_menu_unloop); + } else { + mMenuLoopButton.setTitle(R.string.loop); + mMenuLoopButton.setIcon(R.drawable.ic_menu_loop); + } + } + } +}
\ No newline at end of file diff --git a/src/com/qcom/gallery3d/video/MovieHooker.java b/src/com/qcom/gallery3d/video/MovieHooker.java new file mode 100755 index 000000000..d5cbb347c --- /dev/null +++ b/src/com/qcom/gallery3d/video/MovieHooker.java @@ -0,0 +1,38 @@ +package com.qcom.gallery3d.video; + +import com.qcom.gallery3d.ext.ActivityHooker; +import com.qcom.gallery3d.ext.IMovieItem; +import com.qcom.gallery3d.ext.IMoviePlayer; +import com.qcom.gallery3d.ext.QcomLog; + +public class MovieHooker extends ActivityHooker { + private static final String TAG = "MovieHooker"; + private static final boolean LOG = true; + private IMovieItem mMovieItem; + private IMoviePlayer mPlayer; + + @Override + public void setParameter(final String key, final Object value) { + super.setParameter(key, value); + if (LOG) { + QcomLog.v(TAG, "setParameter(" + key + ", " + value + ")"); + } + if (value instanceof IMovieItem) { + mMovieItem = (IMovieItem) value; + onMovieItemChanged(mMovieItem); + } else if (value instanceof IMoviePlayer) { + mPlayer = (IMoviePlayer) value; + onMoviePlayerChanged(mPlayer); + } + } + + public IMovieItem getMovieItem() { + return mMovieItem; + } + public IMoviePlayer getPlayer() { + return mPlayer; + } + + public void onMovieItemChanged(final IMovieItem item){} + public void onMoviePlayerChanged(final IMoviePlayer player){} +} |