FP2-1056:[ST_2][Gallery]Video doesn't stop playing when receiving a Wake-up alarm alert

When the alarm clock comes, pause the video.
When the call comes, pause the video.

Change-Id: I8c7f95ff2a3e41e66627a382d1884a60a67c57f7
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c9d3a57..510d95e 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -12,6 +12,7 @@
     <permission android:name="com.android.gallery3d.permission.GALLERY_PROVIDER"
             android:protectionLevel="signatureOrSystem" />
 
+    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
diff --git a/src/com/android/gallery3d/app/MovieActivity.java b/src/com/android/gallery3d/app/MovieActivity.java
index 1547f6f..3879232 100644
--- a/src/com/android/gallery3d/app/MovieActivity.java
+++ b/src/com/android/gallery3d/app/MovieActivity.java
@@ -21,8 +21,11 @@
 import android.app.Activity;
 import android.content.AsyncQueryHandler;
 import android.content.ContentResolver;
+import android.content.BroadcastReceiver;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.pm.ActivityInfo;
+import android.content.Context;
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.drawable.BitmapDrawable;
@@ -32,6 +35,8 @@
 import android.os.Bundle;
 import android.provider.MediaStore;
 import android.provider.OpenableColumns;
+import android.telephony.PhoneStateListener;
+import android.telephony.TelephonyManager;
 import android.view.KeyEvent;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -39,7 +44,6 @@
 import android.view.Window;
 import android.view.WindowManager;
 import android.widget.ShareActionProvider;
-
 import com.android.gallery3d.R;
 import com.android.gallery3d.common.ApiHelper;
 import com.android.gallery3d.common.Utils;
@@ -61,6 +65,8 @@
     private boolean mFinishOnCompletion;
     private Uri mUri;
     private boolean mTreatUpAsBack;
+    private AudioManager mAudioManager;
+    private TelephonyManager mTelephonyManager;
 
     @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
     private void setSystemUiVisibility(View rootView) {
@@ -77,6 +83,9 @@
 
         requestWindowFeature(Window.FEATURE_ACTION_BAR);
         requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
+        mTelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
+        mTelephonyManager.listen(mPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
+        mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
 
         setContentView(R.layout.movie_view);
         View rootView = findViewById(R.id.movie_view_root);
@@ -227,12 +236,17 @@
 
     @Override
     public void onPause() {
+        unregisterReceiver(mReceiver);
         mPlayer.onPause();
         super.onPause();
     }
 
     @Override
     public void onResume() {
+        IntentFilter filter = new IntentFilter();
+        filter.addAction("com.android.deskclock.ALARM_ALERT");
+        filter.addAction("com.android.deskclock.ALARM_DONE");
+        registerReceiver(mReceiver, filter);
         mPlayer.onResume();
         super.onResume();
     }
@@ -260,4 +274,51 @@
         return mPlayer.onKeyUp(keyCode, event)
                 || super.onKeyUp(keyCode, event);
     }
+
+    PhoneStateListener mPhoneListener = new PhoneStateListener() {
+        private boolean mControlPaused = false;
+
+        public void onCallStateChanged(int state, String incomingNumber) {
+            super.onCallStateChanged(state, incomingNumber);
+            switch (state) {
+                case TelephonyManager.CALL_STATE_RINGING:
+                    if (mPlayer != null && mPlayer.isPlaying()) {
+                        mControlPaused = true;
+                        mPlayer.onMoviePlayPause();
+                    }
+                    break;
+                case TelephonyManager.CALL_STATE_IDLE:
+                    if (mPlayer != null && mControlPaused) {
+                        mPlayer.onReplay();
+                        mControlPaused = false;
+                    }
+                    break;
+                default:
+                    break;
+            }
+        };
+    };
+
+    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        private boolean mControlPaused = false;
+
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            String action = intent.getAction();
+            if (intent.getAction().equals("com.android.deskclock.ALARM_ALERT")) {
+                Log.d(TAG, "ALARM_ALERT");
+                if (mPlayer != null && mPlayer.isPlaying()) {
+                    mPlayer.onMoviePlayPause();
+                    mControlPaused = true;
+                }
+            } else if (intent.getAction().equals("com.android.deskclock.ALARM_DONE")) {
+                Log.d(TAG, "ALARM_DONE");
+                if (mPlayer != null && mControlPaused) {
+                    mPlayer.onReplay();
+                    mControlPaused = false;
+                }
+            }
+        }
+    };
+
 }
diff --git a/src/com/android/gallery3d/app/MoviePlayer.java b/src/com/android/gallery3d/app/MoviePlayer.java
index cc08050..ec228b3 100644
--- a/src/com/android/gallery3d/app/MoviePlayer.java
+++ b/src/com/android/gallery3d/app/MoviePlayer.java
@@ -116,6 +116,14 @@
         }
     };
 
+    public boolean isPlaying() {
+        if (mVideoView != null) {
+            return mVideoView.isPlaying();
+        } else {
+            return false;
+        }
+    }
+
     public MoviePlayer(View rootView, final MovieActivity movieActivity,
             Uri videoUri, Bundle savedInstance, boolean canReplay) {
         mContext = movieActivity.getApplicationContext();
@@ -380,6 +388,11 @@
             playVideo();
         }
     }
+    public void onMoviePlayPause() {
+        if (mVideoView.isPlaying()) {
+            pauseVideo();
+        }
+    }
 
     @Override
     public void onSeekStart() {
@@ -549,4 +562,5 @@
         }
         return null;
     }
+
 }