Merge branch 'dev' of gitlab.ghzs.com:halo/assistant-android into dev
This commit is contained in:
@ -79,7 +79,7 @@ class ReserveDialogFragment : BaseDialogFragment() {
|
||||
mSuccessCallback?.onSuccess()
|
||||
}
|
||||
}
|
||||
dialog.setCanceledOnTouchOutside(true)
|
||||
dialog?.setCanceledOnTouchOutside(true)
|
||||
}
|
||||
|
||||
private fun showSuccessDialog(withMobile: Boolean) {
|
||||
|
||||
@ -1,7 +1,13 @@
|
||||
package com.gh.common.util;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Color;
|
||||
import android.os.Build;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import com.halo.assistant.HaloApp;
|
||||
|
||||
@ -75,4 +81,36 @@ public class DisplayUtils {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void transparentStatusAndNavigation(Activity activity) {
|
||||
//make full transparent statusBar
|
||||
if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) {
|
||||
setWindowFlag(activity, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
|
||||
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, true);
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= 19) {
|
||||
activity.getWindow().getDecorView().setSystemUiVisibility(
|
||||
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
||||
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|
||||
);
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= 21) {
|
||||
setWindowFlag(activity, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
|
||||
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, false);
|
||||
activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
|
||||
activity.getWindow().setNavigationBarColor(Color.TRANSPARENT);
|
||||
}
|
||||
}
|
||||
|
||||
private static void setWindowFlag(Activity activity, final int bits, boolean on) {
|
||||
Window win = activity.getWindow();
|
||||
WindowManager.LayoutParams winParams = win.getAttributes();
|
||||
if (on) {
|
||||
winParams.flags |= bits;
|
||||
} else {
|
||||
winParams.flags &= ~bits;
|
||||
}
|
||||
win.setAttributes(winParams);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -11,18 +11,18 @@ import android.view.Gravity
|
||||
import android.view.View
|
||||
import android.widget.PopupWindow
|
||||
import android.widget.TextView
|
||||
import androidx.annotation.ColorInt
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.lifecycle.*
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import com.gh.common.constant.Config
|
||||
import com.gh.gamecenter.BuildConfig
|
||||
import com.gh.gamecenter.R
|
||||
import com.google.gson.reflect.TypeToken
|
||||
import com.halo.assistant.HaloApp
|
||||
import com.lightgame.utils.Utils
|
||||
import okhttp3.MediaType
|
||||
import okhttp3.RequestBody
|
||||
import org.json.JSONArray
|
||||
import java.net.URI
|
||||
|
||||
/**
|
||||
@ -302,4 +302,19 @@ fun TextView.setTextChangedListener(action: (s: CharSequence, start: Int, before
|
||||
|
||||
fun Int.toColor() : Int{
|
||||
return HaloApp.getInstance().application.resources.getColor(this)
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试用包裹
|
||||
*/
|
||||
inline fun debugOnly(f: () -> Unit) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
f()
|
||||
}
|
||||
}
|
||||
|
||||
inline fun testChannelOnly(f: () -> Unit) {
|
||||
if (HaloApp.getInstance().channel == Config.DEFAULT_CHANNEL) {
|
||||
f()
|
||||
}
|
||||
}
|
||||
18
app/src/main/java/com/gh/common/view/StatusBarView.kt
Normal file
18
app/src/main/java/com/gh/common/view/StatusBarView.kt
Normal file
@ -0,0 +1,18 @@
|
||||
package com.gh.common.view
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Build
|
||||
import android.util.AttributeSet
|
||||
import android.view.View
|
||||
import com.gh.common.util.DisplayUtils
|
||||
|
||||
class StatusBarView @JvmOverloads constructor(context: Context?, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : View(context, attrs, defStyleAttr) {
|
||||
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
|
||||
val height = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
|
||||
0
|
||||
} else {
|
||||
DisplayUtils.getStatusBarHeight(resources)
|
||||
}
|
||||
setMeasuredDimension(View.MeasureSpec.getSize(widthMeasureSpec), height)
|
||||
}
|
||||
}
|
||||
@ -14,12 +14,11 @@ import butterknife.BindView
|
||||
import cn.jzvd.JzvdStd
|
||||
import com.facebook.drawee.view.SimpleDraweeView
|
||||
import com.gh.base.BaseRecyclerViewHolder
|
||||
import com.gh.common.util.DataCollectionUtils
|
||||
import com.gh.common.util.DataUtils
|
||||
import com.gh.common.util.ImageUtils
|
||||
import com.gh.common.util.*
|
||||
import com.gh.gamecenter.R
|
||||
import com.gh.gamecenter.ViewImageActivity
|
||||
import com.gh.gamecenter.databinding.GalleryVideoItemBinding
|
||||
import com.gh.gamecenter.video.detail.VideoDetailActivity
|
||||
import com.halo.assistant.HaloApp
|
||||
import kotlinx.android.synthetic.main.player_view.view.*
|
||||
import java.util.*
|
||||
@ -66,6 +65,15 @@ class GameGalleryAdapter(var context: Context,
|
||||
holder.adapterPosition, mEntrance)
|
||||
context.startActivity(intent)
|
||||
}
|
||||
|
||||
testChannelOnly {
|
||||
holder.itemView.setOnLongClickListener {
|
||||
consume {
|
||||
val intent = VideoDetailActivity.getIntent(context)
|
||||
context.startActivity(intent)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
is VideoViewHolder -> {
|
||||
ImageUtils.display(holder.binding.playerView.thumb, mGallery[position])
|
||||
|
||||
@ -2,14 +2,14 @@ package com.gh.gamecenter.qa.follow
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import android.graphics.Point
|
||||
import android.os.Bundle
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.gh.base.fragment.BaseDialogFragment
|
||||
import com.gh.gamecenter.PersonalHomeActivity
|
||||
import com.gh.gamecenter.R
|
||||
@ -29,7 +29,7 @@ class AskFollowMoreDialog : BaseDialogFragment() {
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
dialog.setCanceledOnTouchOutside(true)
|
||||
dialog?.setCanceledOnTouchOutside(true)
|
||||
|
||||
val lp = container.layoutParams
|
||||
lp.width = ((getScreenWidth(requireActivity())) * 0.8).toInt()
|
||||
|
||||
@ -3,18 +3,17 @@ package com.gh.gamecenter.qa.questions.edit
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.app.Dialog
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.lifecycle.ViewModelProviders
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import android.os.Bundle
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import android.text.Editable
|
||||
import android.text.TextWatcher
|
||||
import android.view.KeyEvent
|
||||
import android.view.MenuItem
|
||||
import android.widget.EditText
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.lifecycle.ViewModelProviders
|
||||
import com.gh.base.BaseActivity
|
||||
import com.gh.base.fragment.BaseDialogWrapperFragment
|
||||
import com.gh.base.fragment.WaitingDialogFragment
|
||||
@ -263,11 +262,11 @@ class QuestionEditActivity : BaseActivity() {
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle?) {
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
super.onSaveInstanceState(outState)
|
||||
outState?.putString(mSaveTitleKey, mViewModel.title)
|
||||
outState?.putString(mSaveContentKey, mViewModel.content)
|
||||
outState?.putStringArrayList(mSaveImagesKey, mViewModel.picList.value as java.util.ArrayList<String>?)
|
||||
outState.putString(mSaveTitleKey, mViewModel.title)
|
||||
outState.putString(mSaveContentKey, mViewModel.content)
|
||||
outState.putStringArrayList(mSaveImagesKey, mViewModel.picList.value as java.util.ArrayList<String>?)
|
||||
}
|
||||
|
||||
// Limits of EditText
|
||||
|
||||
@ -0,0 +1,109 @@
|
||||
package com.gh.gamecenter.video.detail
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.Surface
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import com.gh.gamecenter.R
|
||||
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
|
||||
import com.shuyu.gsyvideoplayer.video.base.GSYVideoView
|
||||
import com.squareup.picasso.Picasso
|
||||
|
||||
class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null)
|
||||
: StandardGSYVideoPlayer(context, attrs) {
|
||||
|
||||
override fun init(context: Context) {
|
||||
super.init(context)
|
||||
|
||||
if (mThumbImageViewLayout != null && (mCurrentState == -1 || mCurrentState == GSYVideoView.CURRENT_STATE_NORMAL || mCurrentState == GSYVideoView.CURRENT_STATE_ERROR)) {
|
||||
mThumbImageViewLayout.visibility = View.VISIBLE
|
||||
}
|
||||
}
|
||||
|
||||
fun updateThumb(url: String) {
|
||||
Picasso.with(context).load(url)
|
||||
.into(findViewById<ImageView>(R.id.thumbImage))
|
||||
}
|
||||
|
||||
override fun getLayoutId(): Int {
|
||||
return R.layout.layout_simple_player
|
||||
}
|
||||
|
||||
/******************* 下方两个重载方法,在播放开始前不屏蔽封面,不需要可屏蔽 ********************/
|
||||
|
||||
override fun onSurfaceUpdated(surface: Surface) {
|
||||
super.onSurfaceUpdated(surface)
|
||||
if (mThumbImageViewLayout != null && mThumbImageViewLayout.visibility == View.VISIBLE) {
|
||||
mThumbImageViewLayout.visibility = View.INVISIBLE
|
||||
}
|
||||
}
|
||||
|
||||
override fun setViewShowState(view: View?, visibility: Int) {
|
||||
if (view === mThumbImageViewLayout && visibility != View.VISIBLE) {
|
||||
return
|
||||
}
|
||||
super.setViewShowState(view, visibility)
|
||||
}
|
||||
|
||||
/********************************各类UI的状态显示*********************************************/
|
||||
|
||||
override fun hideAllWidget() {
|
||||
super.hideAllWidget()
|
||||
setViewShowState(mBottomProgressBar, View.VISIBLE)
|
||||
}
|
||||
|
||||
override fun changeUiToNormal() {
|
||||
super.changeUiToNormal()
|
||||
setViewShowState(mStartButton, View.INVISIBLE)
|
||||
setViewShowState(mBottomProgressBar, View.VISIBLE)
|
||||
}
|
||||
|
||||
override fun changeUiToPreparingShow() {
|
||||
super.changeUiToPreparingShow()
|
||||
}
|
||||
|
||||
override fun changeUiToPlayingShow() {
|
||||
super.changeUiToPlayingShow()
|
||||
setViewShowState(mStartButton, View.INVISIBLE)
|
||||
setViewShowState(mBottomProgressBar, View.VISIBLE)
|
||||
}
|
||||
|
||||
override fun changeUiToPauseShow() {
|
||||
super.changeUiToPauseShow()
|
||||
setViewShowState(mStartButton, View.VISIBLE)
|
||||
setViewShowState(mBottomProgressBar, View.VISIBLE)
|
||||
}
|
||||
|
||||
override fun changeUiToPlayingBufferingShow() {
|
||||
super.changeUiToPlayingBufferingShow()
|
||||
setViewShowState(mBottomProgressBar, View.VISIBLE)
|
||||
}
|
||||
|
||||
override fun changeUiToCompleteShow() {
|
||||
super.changeUiToCompleteShow()
|
||||
setViewShowState(mBottomProgressBar, View.VISIBLE)
|
||||
}
|
||||
|
||||
override fun updateStartImage() {
|
||||
// no need to change
|
||||
}
|
||||
|
||||
override fun touchDoubleUp() {
|
||||
// we don't need double tap to stop
|
||||
}
|
||||
|
||||
override fun changeUiToPauseClear() {
|
||||
// we don't need to hide play icon
|
||||
}
|
||||
|
||||
override fun onClick(v: View) {
|
||||
val id = v.id
|
||||
if (id == R.id.surface_container) {
|
||||
clickStartIcon()
|
||||
} else {
|
||||
super.onClick(v)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,33 @@
|
||||
package com.gh.gamecenter.video.detail
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import com.gh.base.BaseActivity
|
||||
import com.gh.common.util.DisplayUtils
|
||||
import com.gh.gamecenter.R
|
||||
|
||||
class VideoDetailActivity : BaseActivity() {
|
||||
|
||||
override fun getLayoutId(): Int {
|
||||
return R.layout.activity_video_detail
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
DisplayUtils.transparentStatusAndNavigation(this)
|
||||
|
||||
val containerFragment = VideoDetailContainerFragment()
|
||||
|
||||
supportFragmentManager.beginTransaction().replace(R.id.placeholder, containerFragment).commitNowAllowingStateLoss()
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun getIntent(context: Context): Intent {
|
||||
val intent = Intent(context, VideoDetailActivity::class.java)
|
||||
return intent
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
package com.gh.gamecenter.video.detail
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.viewpager2.widget.ViewPager2
|
||||
import com.gh.gamecenter.R
|
||||
import com.gh.gamecenter.normal.NormalFragment
|
||||
import kotlinx.android.synthetic.main.fragment_video_detail_container.*
|
||||
|
||||
class VideoDetailContainerFragment : NormalFragment() {
|
||||
|
||||
private lateinit var mFragmentAdapter: VideoFragmentPagerAdapter
|
||||
|
||||
override fun getLayoutId(): Int {
|
||||
return R.layout.fragment_video_detail_container
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_material)
|
||||
toolbar.setNavigationOnClickListener {
|
||||
requireActivity().finish()
|
||||
}
|
||||
|
||||
mFragmentAdapter = VideoFragmentPagerAdapter(this)
|
||||
|
||||
mFragmentAdapter.videoList = arrayListOf(
|
||||
"https://resource.ghzs.com/video/game/5cef8c58bb946d11052dfe65.mp4",
|
||||
"https://resource.ghzs.com/video/game/5d26e984c391ca0c9a16121c.mp4",
|
||||
"https://resource.ghzs.com/video/game/5d53bc8e656a5c05bf59d2e7.mp4")
|
||||
|
||||
viewpager.adapter = mFragmentAdapter
|
||||
viewpager.orientation = ViewPager2.ORIENTATION_VERTICAL
|
||||
viewpager.offscreenPageLimit = 1
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,57 @@
|
||||
package com.gh.gamecenter.video.detail
|
||||
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import butterknife.BindView
|
||||
import com.gh.gamecenter.R
|
||||
import com.gh.gamecenter.normal.NormalFragment
|
||||
import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder
|
||||
|
||||
class VideoDetailFragment : NormalFragment() {
|
||||
|
||||
private var videoUrl = ""
|
||||
|
||||
@BindView(R.id.video)
|
||||
lateinit var videoView: DetailPlayerView
|
||||
|
||||
override fun getLayoutId(): Int {
|
||||
return R.layout.fragment_video_detail
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
GSYVideoOptionBuilder()
|
||||
.setIsTouchWiget(false)
|
||||
.setUrl(videoUrl)
|
||||
.setRotateViewAuto(false)
|
||||
.setCacheWithPlay(true)
|
||||
.setRotateViewAuto(false)
|
||||
.setRotateWithSystem(false)
|
||||
.setReleaseWhenLossAudio(true)
|
||||
.setLockLand(true)
|
||||
.setLooping(true)
|
||||
.build(videoView)
|
||||
|
||||
videoView.updateThumb("$videoUrl?x-oss-process=video/snapshot,t_0,f_jpg,w_0,h_0")
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
videoView.startPlayLogic()
|
||||
Log.d("lifeCycle", "onResume")
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
Log.d("lifeCycle", "onPause")
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun newInstance(url: String): VideoDetailFragment {
|
||||
return VideoDetailFragment().apply { videoUrl = url }
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
package com.gh.gamecenter.video.detail
|
||||
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||
|
||||
class VideoFragmentPagerAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {
|
||||
|
||||
var videoList = arrayListOf<String>()
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return videoList.size
|
||||
}
|
||||
|
||||
override fun createFragment(position: Int): Fragment {
|
||||
return VideoDetailFragment.newInstance(videoList[position])
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user