diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt index d1f8786..314ab74 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt @@ -10,6 +10,7 @@ import android.view.View import android.view.ViewGroup import android.widget.EditText import android.widget.ImageButton +import android.widget.ImageView import android.widget.LinearLayout import android.widget.RelativeLayout import android.widget.SeekBar @@ -76,10 +77,27 @@ abstract class BaseActivity : AppCompatActivity() { RecordHelper.stopRecording() } + private val setVoiceAreaRunnable = Runnable { + volumeUtil.mediaVolume = baseBinding.sbSound.progress + } + private fun initSound() { baseBinding.sbSound.max = volumeUtil.mediaMaxVolume val mediaVolume = volumeUtil.mediaVolume baseBinding.sbSound.progress = mediaVolume + baseBinding.sbSound.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + baseBinding.root.removeCallbacks(setVoiceAreaRunnable) + baseBinding.root.postDelayed(setVoiceAreaRunnable, 200) + autoHideVoiceArea(1500) + } + + override fun onStartTrackingTouch(seekBar: SeekBar) { + } + + override fun onStopTrackingTouch(seekBar: SeekBar) { + } + }) } private fun setChildContent() { @@ -181,6 +199,7 @@ abstract class BaseActivity : AppCompatActivity() { "SeekBar" -> SeekBar(context, attrs) "EditText" -> EditText(context, attrs) "ImageButton" -> ImageButton(context, attrs) + "ImageView" -> ImageView(context, attrs) else -> { null } @@ -228,11 +247,7 @@ abstract class BaseActivity : AppCompatActivity() { val keyCode = event.keyCode if (KeyEvent.KEYCODE_DPAD_LEFT == keyCode || KeyEvent.KEYCODE_DPAD_RIGHT == keyCode) { if (isLeftRightLongPress && baseBinding.areaSound.visibility == View.VISIBLE) { - baseBinding.areaSound.postDelayed(300) { - lastFocusView?.requestFocus() - baseBinding.areaSound.visibility = View.GONE - volumeUtil.mediaVolume = baseBinding.sbSound.progress - } + baseBinding.areaSound.postDelayed(hideVoiceAreaRunnable, 1500) return true } } else if (keyCode == KeyEvent.KEYCODE_ENTER) { @@ -254,25 +269,47 @@ abstract class BaseActivity : AppCompatActivity() { val repeatCount = event.repeatCount val keyCode = event.keyCode if (KeyEvent.KEYCODE_DPAD_LEFT == keyCode || KeyEvent.KEYCODE_DPAD_RIGHT == keyCode) { - isLeftRightLongPress = repeatCount > 10 + isLeftRightLongPress = repeatCount > 8 if (isLeftRightLongPress && currentFocus !is SeekBar) { - val visibility = baseBinding.areaSound.visibility - if (View.GONE == visibility) { - lastFocusView = currentFocus - baseBinding.areaSound.visibility = View.VISIBLE - baseBinding.sbSound.requestFocus() - } + showVoiceArea() var mediaVolume = baseBinding.sbSound.progress if (KeyEvent.KEYCODE_DPAD_LEFT == keyCode) mediaVolume-- else mediaVolume++ baseBinding.sbSound.progress = mediaVolume - return true + return super.dispatchKeyEvent(event) } } else if (keyCode == KeyEvent.KEYCODE_ENTER) { - isHomeLongPress = repeatCount > 10 + isHomeLongPress = repeatCount > 8 } else if (keyCode == KeyEvent.KEYCODE_F1) { LogUtils.w("BaseActivity F1 pressed") SoundUtils.playSoundIo() } return super.dispatchKeyEvent(event) } + + fun showVoiceArea() { + val visibility = baseBinding.areaSound.visibility + if (View.GONE == visibility) { + lastFocusView = currentFocus + baseBinding.areaSound.visibility = View.VISIBLE + baseBinding.sbSound.requestFocus() + } + autoHideVoiceArea() + } + + + private fun hideVoiceArea() { + lastFocusView?.requestFocus() + baseBinding.areaSound.visibility = View.GONE + volumeUtil.mediaVolume = baseBinding.sbSound.progress + baseBinding.root.removeCallbacks(hideVoiceAreaRunnable) + } + + private val hideVoiceAreaRunnable = Runnable { + hideVoiceArea() + } + + fun autoHideVoiceArea(delayTime: Long = 2500) { + baseBinding.root.removeCallbacks(hideVoiceAreaRunnable) + baseBinding.root.postDelayed(hideVoiceAreaRunnable, delayTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/player/ProVideoActivity.java b/app/src/main/java/com/yinuo/safetywatcher/watcher/player/ProVideoActivity.java index 958d152..547b795 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/player/ProVideoActivity.java +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/player/ProVideoActivity.java @@ -211,7 +211,7 @@ public class ProVideoActivity extends NoOptionsActivity { } } } - mediaController = new VideoControllerView(this); + mediaController = new VideoControllerView(this, v -> showVoiceArea()); mediaController.setMediaPlayer(mBinding.videoView); mVideoView = mBinding.videoView; mVideoView.setMediaController(mediaController); diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/player/VideoControllerView.java b/app/src/main/java/com/yinuo/safetywatcher/watcher/player/VideoControllerView.java index e3b4932..0b3d072 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/player/VideoControllerView.java +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/player/VideoControllerView.java @@ -16,6 +16,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageButton; +import android.widget.ImageView; import android.widget.MediaController; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; @@ -154,6 +155,14 @@ public class VideoControllerView extends FrameLayout implements IMediaController show(sDefaultTimeout); } }; + View.OnClickListener outVoiceListener = null; + private OnClickListener mVoiceListener = new OnClickListener() { + public void onClick(View v) { + if (outVoiceListener != null) { + outVoiceListener.onClick(v); + } + } + }; /** * ==================== constructor ==================== @@ -178,9 +187,9 @@ public class VideoControllerView extends FrameLayout implements IMediaController Log.i(TAG, TAG); } - public VideoControllerView(Context context) { + public VideoControllerView(Context context, View.OnClickListener voiceListener) { this(context, true); - + outVoiceListener = voiceListener; Log.i(TAG, TAG); } @@ -426,6 +435,9 @@ public class VideoControllerView extends FrameLayout implements IMediaController } } + ImageView voiceView = (ImageView) v.findViewById(R.id.voice); + voiceView.setOnClickListener(mVoiceListener); + mProgress = (SeekBar) v.findViewById(R.id.media_controller_progress); if (mProgress != null) { if (mProgress instanceof SeekBar) { diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/SensorSettingActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/SensorSettingActivity.kt index 28b84c5..3f4eb2b 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/SensorSettingActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/SensorSettingActivity.kt @@ -290,5 +290,7 @@ class SensorSettingActivity : NoOptionsActivity() { MMKVUtils.sync() // } showToast("保存成功") + + initView() } } \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/view/CommonTopBar.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/view/CommonTopBar.kt index 6ddaaa6..0e9affa 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/view/CommonTopBar.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/view/CommonTopBar.kt @@ -89,7 +89,7 @@ class CommonTopBar : LinearLayout { override fun onLevel(level: Int) { Log.i(this@CommonTopBar.javaClass.name, "wifiCallback onLevel = $level") mBinding?.root?.post { - mBinding?.wifi?.visibility = if (!isVirtuallyNet4()) VISIBLE else GONE + mBinding?.wifi?.visibility = if (level > 0 && !isVirtuallyNet4()) VISIBLE else GONE val showLevel = (level + 1) * 20 mBinding?.wifi?.setImageLevel(showLevel) dealForNet4() diff --git a/app/src/main/res/drawable-hdpi/voice_circle.png b/app/src/main/res/drawable-hdpi/voice_circle.png new file mode 100644 index 0000000..5405de3 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/voice_circle.png differ diff --git a/app/src/main/res/layout/layout_topbar.xml b/app/src/main/res/layout/layout_topbar.xml index c8ec6f3..2d8c5d3 100644 --- a/app/src/main/res/layout/layout_topbar.xml +++ b/app/src/main/res/layout/layout_topbar.xml @@ -46,7 +46,7 @@ diff --git a/app/src/main/res/layout/media_controller.xml b/app/src/main/res/layout/media_controller.xml index a376bec..37f103e 100644 --- a/app/src/main/res/layout/media_controller.xml +++ b/app/src/main/res/layout/media_controller.xml @@ -61,6 +61,7 @@ android:layout_weight="1" android:nextFocusLeft="@id/media_controller_progress" android:nextFocusRight="@id/media_controller_progress" + android:nextFocusDown="@id/voice" android:focusable="true" android:progress="0" /> @@ -84,12 +85,20 @@ android:orientation="horizontal" android:paddingHorizontal="@dimen/_580dp"> + +