Merge branch 'dev' of gitlab.ghzs.com:halo/assistant-android into dev

This commit is contained in:
kehaoyuan
2019-09-06 14:16:29 +08:00
20 changed files with 735 additions and 205 deletions

View File

@ -79,7 +79,7 @@ class ReserveDialogFragment : BaseDialogFragment() {
mSuccessCallback?.onSuccess()
}
}
dialog.setCanceledOnTouchOutside(true)
dialog?.setCanceledOnTouchOutside(true)
}
private fun showSuccessDialog(withMobile: Boolean) {

View File

@ -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);
}
}

View File

@ -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()
}
}

View 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)
}
}

View File

@ -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])

View File

@ -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()

View File

@ -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

View File

@ -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)
}
}
}

View File

@ -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
}
}
}

View File

@ -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
}
}

View File

@ -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 }
}
}
}

View File

@ -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])
}
}