11package com.junnanhao.next.ui.player
22
33import android.Manifest
4+ import android.content.BroadcastReceiver
45import android.content.Context
6+ import android.content.Intent
7+ import android.content.IntentFilter
58import android.graphics.*
69import android.os.Bundle
710import android.support.v4.app.Fragment
@@ -18,6 +21,7 @@ import android.support.v4.view.GestureDetectorCompat
1821import timber.log.Timber
1922import android.graphics.drawable.BitmapDrawable
2023import android.graphics.drawable.Drawable
24+ import android.media.AudioManager
2125import android.support.v4.content.ContextCompat
2226import android.support.v7.graphics.Palette
2327import android.view.*
@@ -55,6 +59,8 @@ class PlayerFragment : Fragment(), PlayerContract.View {
5559 }
5660
5761 lateinit var mDetector: GestureDetectorCompat
62+ lateinit var mBecomingNoisyReceiver: BroadcastReceiver
63+ lateinit var mHeadphonePluggedReceiver: BroadcastReceiver
5864
5965 override fun onCreateView (inflater : LayoutInflater ? , container : ViewGroup ? , savedInstanceState : Bundle ? ): View ? {
6066 val view: View = inflater!! .inflate(R .layout.frag_player, container, false )
@@ -64,19 +70,43 @@ class PlayerFragment : Fragment(), PlayerContract.View {
6470 return view
6571 }
6672
67- fun measure () {
68- val wm: WindowManager = context.getSystemService(Context .WINDOW_SERVICE ) as WindowManager
69- val size: Point = Point ()
70- wm.defaultDisplay.getSize(size)
71- rect = Rect (0 ,
72- (size.y * 0.2 ).toInt(),
73- size.x,
74- (size.y * 0.8 ).toInt())
75- }
76-
77-
7873 override fun onCreate (savedInstanceState : Bundle ? ) {
7974 super .onCreate(savedInstanceState)
75+ val result = (context.getSystemService(Context .AUDIO_SERVICE ) as AudioManager ).requestAudioFocus({
76+ focusChange: Int ->
77+ when (focusChange) {
78+ AudioManager .AUDIOFOCUS_GAIN -> mPresenter.play()
79+ AudioManager .AUDIOFOCUS_LOSS -> mPresenter.pause()
80+ AudioManager .AUDIOFOCUS_LOSS_TRANSIENT -> {
81+ mPresenter.pause()
82+ }
83+ AudioManager .AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> mPresenter.pause()
84+ }
85+ }, AudioManager .STREAM_MUSIC , AudioManager .AUDIOFOCUS_GAIN )
86+
87+ if (result != AudioManager .AUDIOFOCUS_REQUEST_GRANTED ) {
88+ Toast .makeText(context, getString(R .string.warning_cannot_get_audio_focus), Toast .LENGTH_SHORT ).show()
89+ }
90+
91+ mBecomingNoisyReceiver = object : BroadcastReceiver () {
92+ override fun onReceive (context : Context ? , intent : Intent ? ) {
93+ if (intent?.getAction().equals(AudioManager .ACTION_AUDIO_BECOMING_NOISY )) {
94+ Timber .wtf(" become noisy" )
95+ mPresenter.pause()
96+ }
97+ }
98+ }
99+ mHeadphonePluggedReceiver = object : BroadcastReceiver () {
100+ override fun onReceive (context : Context ? , intent : Intent ? ) {
101+ if (intent?.getAction().equals(Intent .ACTION_HEADSET_PLUG )) {
102+ if (intent?.getIntExtra(" state" , - 1 ) == 1 ) {
103+ Timber .wtf(" Headset is plugged" )
104+ mPresenter.start()
105+ }
106+ }
107+ }
108+ }
109+
80110 mDetector = GestureDetectorCompat (context, object : GestureDetector .SimpleOnGestureListener () {
81111 override fun onFling (e1 : MotionEvent , e2 : MotionEvent , velocityX : Float , velocityY : Float ): Boolean {
82112 Timber .wtf(" fling" )
@@ -106,6 +136,32 @@ class PlayerFragment : Fragment(), PlayerContract.View {
106136 })
107137 }
108138
139+
140+ override fun onStart () {
141+ super .onStart()
142+ activity.registerReceiver(mBecomingNoisyReceiver,
143+ IntentFilter (AudioManager .ACTION_AUDIO_BECOMING_NOISY ))
144+ activity.registerReceiver(mHeadphonePluggedReceiver,
145+ IntentFilter (Intent .ACTION_HEADSET_PLUG ))
146+ }
147+
148+ override fun onDestroy () {
149+ super .onDestroy()
150+ activity.unregisterReceiver(mBecomingNoisyReceiver)
151+ activity.unregisterReceiver(mHeadphonePluggedReceiver)
152+ }
153+
154+
155+ fun measure () {
156+ val wm: WindowManager = context.getSystemService(Context .WINDOW_SERVICE ) as WindowManager
157+ val size: Point = Point ()
158+ wm.defaultDisplay.getSize(size)
159+ rect = Rect (0 ,
160+ (size.y * 0.2 ).toInt(),
161+ size.x,
162+ (size.y * 0.8 ).toInt())
163+ }
164+
109165 @OnClick(R .id.container)
110166 fun play () {
111167 mPresenter.playPause()
@@ -191,6 +247,7 @@ class PlayerFragment : Fragment(), PlayerContract.View {
191247 artist.setText(" " )
192248 }
193249
250+
194251 fun Drawable.toBitmap (): Bitmap {
195252 if (this is BitmapDrawable ) {
196253 return bitmap
@@ -206,4 +263,5 @@ class PlayerFragment : Fragment(), PlayerContract.View {
206263 return bitmap
207264 }
208265
266+
209267}
0 commit comments