Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.telkom.tuya.presentation.devices.smartcamera
- import android.annotation.SuppressLint
- import android.app.AlertDialog
- import android.app.Dialog
- import android.content.Context
- import android.content.Intent
- import android.graphics.Color
- import android.graphics.drawable.ColorDrawable
- import android.graphics.drawable.InsetDrawable
- import android.net.wifi.WifiManager
- import android.os.Bundle
- import android.view.LayoutInflater
- import android.view.Window
- import android.widget.Button
- import android.widget.ImageView
- import android.widget.TextView
- import android.widget.Toast
- import androidx.activity.result.contract.ActivityResultContracts
- import androidx.lifecycle.Lifecycle
- import androidx.lifecycle.lifecycleScope
- import androidx.lifecycle.repeatOnLifecycle
- import com.bumptech.glide.Glide
- import com.bumptech.glide.load.engine.DiskCacheStrategy
- import com.google.android.material.snackbar.Snackbar
- import com.telkom.eazy.auth.data.UserData
- import com.telkom.eazy.videoanalytic.VideoAnalyticActivity
- import com.telkom.indihome.common.data.source.remote.response.ihs.DataDetailInvoice
- import com.telkom.indihome.common.data.source.remote.response.ihs.DataStatus
- import com.telkom.indihome.common.databinding.LayoutCloudServiceStatusBinding
- import com.telkom.indihome.common.domain.model.CameraQuality
- import com.telkom.indihome.common.domain.model.DeviceData
- import com.telkom.indihome.common.domain.model.WmsOrderStatusDomain
- import com.telkom.indihome.common.ui.ipc.BaseIPCActivity
- import com.telkom.indihome.common.ui.ipc.BaseIPCFragment
- import com.telkom.indihome.common.utils.*
- import com.telkom.indihome.common.utils.extensions.gone
- import com.telkom.indihome.common.utils.extensions.invisible
- import com.telkom.indihome.common.utils.extensions.visible
- import com.telkom.tuya.R
- import com.telkom.tuya.presentation.cloudservice.CloudActivationActivity
- import com.telkom.tuya.presentation.cloudservice.buypackage.uistate.CloudStatusUiState
- import com.telkom.tuya.presentation.cloudservice.buypackage.uistate.DetailInvoiceUiState
- import com.telkom.tuya.presentation.cloudservice.wms.WmsOrderStratusUiState
- import com.telkom.tuya.presentation.devices.smartcamera.camera.TuyaCameraFragment
- import com.telkom.tuya.presentation.devices.smartcamera.multiview.CameraMultiviewActivity
- import com.telkom.tuya.presentation.devices.smartcamera.playback.TuyaIPCPlaybackActivity
- import com.telkom.tuya.presentation.devices.smartcamera.properties.TuyaSmartCameraPropertiesActivity
- import kotlinx.coroutines.launch
- import org.koin.android.ext.android.inject
- import org.koin.androidx.viewmodel.ext.android.viewModel
- class NewTuyaSmartCameraActivity : BaseIPCActivity() {
- lateinit var cloudStatus: DataStatus
- val deviceId by lazy { intent.getStringExtra("deviceId") ?: "" }
- val brand by lazy { intent.getStringExtra("brand") ?: "" }
- val category by lazy { intent.getStringExtra("category") ?: "" }
- val notificationSetting by lazy { intent.getStringExtra("notificationSetting") ?: "" }
- private var status = "disable"
- private lateinit var deviceName: String
- private lateinit var autoPlay: String
- private val tuyaViewModel: NewTuyaSmartCameraViewModel by viewModel()
- private val analyticsHelper: AnalyticsHelper by inject()
- val deviceData by lazy { intent.getParcelableExtra<DeviceData>("deviceData")}
- private val userData: UserData by inject()
- private val videoAnalyticActivationDialog by lazy {
- val dialog = Dialog(this)
- dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
- dialog.setContentView(R.layout.dialog_video_analytic_activation)
- dialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
- dialog.findViewById<Button>(R.id.btn_set_now).setOnClickListener {
- dialog.dismiss()
- Intent(this, VideoAnalyticActivity::class.java).also { intent ->
- intent.putExtra("deviceSerial", deviceId)
- startActivity(intent)
- }
- }
- dialog.findViewById<Button>(R.id.btn_set_next_time).setOnClickListener {
- dialog.dismiss()
- }
- dialog.setOnDismissListener {
- tuyaViewModel.setVideoAnalyticActivationDialogShown()
- }
- dialog.setCancelable(false)
- dialog
- }
- companion object {
- var refreshBanner = false
- }
- override fun onResume() {
- super.onResume()
- if (refreshBanner) {
- tuyaViewModel.getCloudStatus("tuya", deviceId)
- }
- }
- override fun onDestroy() {
- super.onDestroy()
- refreshBanner = false
- }
- private fun getSSIDName():String {
- val wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
- val wifiInfo = wifiManager.connectionInfo
- val ssid = wifiInfo.ssid.removeSurrounding("\"")
- return ssid
- }
- override fun onCreate(savedInstanceState: Bundle?) {
- deviceName = intent.getStringExtra("deviceName") ?: ""
- autoPlay = intent.getStringExtra("autoplay") ?: ""
- super.onCreate(savedInstanceState)
- viewModel.deviceId = deviceId
- viewModel.deviceName = deviceName
- viewModel.brand = "tuya"
- val ssid = getSSIDName()
- Toast.makeText(this, "SSID = $ssid & WMS_ID = ${userData.wmsId}", Toast.LENGTH_LONG).show()
- // check user wms
- // request wms status
- tuyaViewModel.getWmsOrderStatus(userData.wmsId.orEmpty())
- }
- // tuyaViewModel.getWmsOrderStatus("test_wmsId_0059") // demo
- lifecycleScope.launch {
- repeatOnLifecycle(Lifecycle.State.STARTED) {
- launch {
- tuyaViewModel.errorMessage.collect {
- if (it.isNotEmpty())
- Toast.makeText(this@NewTuyaSmartCameraActivity, it, Toast.LENGTH_SHORT)
- .show()
- }
- }
- launch {
- tuyaViewModel.showVideoAnalyticActivationDialog.collect {
- if (it) videoAnalyticActivationDialog.show()
- }
- }
- }
- }
- tuyaViewModel.bitrate.observe(this) {
- setOnBitrate(it, "KB/s")
- }
- tuyaViewModel.clarity.observe(this) {
- val quality = when (it) {
- 2 -> CameraQuality.SD
- 4 -> CameraQuality.HD
- else -> CameraQuality.HD
- }
- setOnCameraQuality(quality)
- }
- initObserver()
- //fetch cloud status data
- tuyaViewModel.getCloudStatus("tuya", deviceId)
- }
- @SuppressLint("SetTextI18n")
- private fun inflateBannerView(dataStatus: DataStatus, detailInvoice: DataDetailInvoice?) {
- val view =
- LayoutInflater.from(this).inflate(R.layout.layout_cloud_service_status, null, false)
- val vBinding = LayoutCloudServiceStatusBinding.bind(view)
- dataStatus.cloud_status?.let {
- when (it.status) {
- ENABLE -> {
- dataStatus.invoiceNumber?.let { logEventActivation(it) }
- Glide.with(this)
- .load(CLOUD_STATUS_ACTIVE)
- .diskCacheStrategy(DiskCacheStrategy.NONE)
- .skipMemoryCache(true)
- .into(vBinding.ivBanner)
- }
- ISOLIR -> {
- Glide.with(this)
- .load(CLOUD_STATUS_ISOLIR)
- .diskCacheStrategy(DiskCacheStrategy.NONE)
- .skipMemoryCache(true)
- .into(vBinding.ivBanner)
- }
- PENDING -> {
- Glide.with(this)
- .load(CLOUD_STATUS_PENDING)
- .diskCacheStrategy(DiskCacheStrategy.NONE)
- .skipMemoryCache(true)
- .into(vBinding.ivBanner)
- }
- else -> {
- Glide.with(this)
- .load(CLOUD_STATUS_INACTIVE)
- .diskCacheStrategy(DiskCacheStrategy.NONE)
- .skipMemoryCache(true)
- .into(vBinding.ivBanner)
- }
- }
- }
- view.setOnClickListener {
- onCloudServiceClicked(dataStatus)
- }
- addBannerView(view)
- }
- private fun logEventActivation(invoiceNumber: String) {
- val sp = getSharedPreferences("CloudActivation", Context.MODE_PRIVATE)
- if (sp.getString(invoiceNumber, null) == null) {
- sp.edit().putString(invoiceNumber, "OK").apply()
- analyticsHelper.trackEventAnalytics(
- FA_CHECK_CLOUD_STATUS,
- EventProperties(
- success = 1,
- message = "OK",
- id_param = deviceId,
- details = deviceName,
- parent = category,
- child = brand
- )
- )
- }
- }
- private fun initObserver() {
- lifecycleScope.launch{
- lifecycleScope.launchWhenCreated {
- tuyaViewModel.wmsOrderStratusUiState.collect{ uiState ->
- when(uiState){
- is WmsOrderStratusUiState.ShowLoading -> {}
- is WmsOrderStratusUiState.OnSuccess -> {
- checkWmsStatus(uiState.data)
- }
- is WmsOrderStratusUiState.OnError -> {
- Snackbar.make(binding.root, uiState.message.toString(), Snackbar.LENGTH_SHORT).show()
- }
- }
- }
- }
- }
- lifecycleScope.launch() {
- lifecycleScope.launchWhenCreated {
- tuyaViewModel.cloudStatusUiState.collect { uiState ->
- when (uiState) {
- is CloudStatusUiState.ShowLoading -> showLoadingBanner()
- is CloudStatusUiState.ShowCloudStatus -> {
- cloudStatus = uiState.data
- status = uiState.data.cloud_status?.status ?: "disable"
- inflateBannerView(cloudStatus, null)
- tuyaViewModel.getVideoAnalyticActivationDialog(status == "enable")
- // tuyaViewModel.getInvoiceDetail(userData.userId, cloudStatus.invoiceNumber ?: "")
- }
- is CloudStatusUiState.CommonError -> {
- binding.containerBanner.gone()
- binding.shimmerLiveBanner.root.stopShimmer()
- binding.shimmerLiveBanner.root.gone()
- Snackbar.make(binding.root, uiState.errorMessage, Snackbar.LENGTH_SHORT)
- .show()
- }
- }
- }
- }
- }
- lifecycleScope.launch {
- lifecycleScope.launchWhenCreated {
- tuyaViewModel.invoiceUiState.collect{ uiState ->
- when(uiState){
- is DetailInvoiceUiState.ShowLoading ->{
- binding.shimmerLiveBanner.root.startShimmer()
- binding.shimmerLiveBanner.root.visible()
- binding.containerBanner.invisible()
- }
- is DetailInvoiceUiState.ShowDetailInvoice ->{
- binding.shimmerLiveBanner.root.stopShimmer()
- binding.shimmerLiveBanner.root.gone()
- binding.containerBanner.visible()
- inflateBannerView(cloudStatus, uiState.data)
- }
- is DetailInvoiceUiState.CommonError ->{
- binding.shimmerLiveBanner.root.stopShimmer()
- binding.shimmerLiveBanner.root.gone()
- binding.containerBanner.gone()
- Snackbar.make(binding.root, uiState.errorMessage, Snackbar.LENGTH_SHORT).show()
- }
- }
- }
- }
- }
- }
- private fun checkWmsStatus(data: WmsOrderStatusDomain?) {
- if (data?.data?.status == "suspend"){
- showPopupIsolir()
- }
- }
- private fun showLoadingBanner() {
- }
- override fun getCameraName(): String {
- return deviceName
- }
- override fun getCameraBrand(): String = "tuya"
- override fun getCameraFragment(): BaseIPCFragment {
- return TuyaCameraFragment.newInstance(deviceId, deviceName, brand, category)
- }
- override fun getCloudStatus(): String {
- return status
- }
- override fun onCloudServiceClicked(data: DataStatus) {
- val bundle = Bundle()
- bundle.putString("deviceName", deviceName)
- bundle.putString("deviceId", deviceId)
- bundle.putString("brand", brand)
- bundle.putString("status", status)
- bundle.putParcelable("cloudStatus", cloudStatus)
- bundle.putParcelable("deviceData", deviceData)
- val intent = Intent(Intent(this, CloudActivationActivity::class.java))
- intent.putExtras(bundle)
- startActivity(intent)
- }
- override fun getAvailableQuality(): List<CameraQuality> = listOf(
- CameraQuality.HD, CameraQuality.SD
- )
- private val resultLauncher =
- registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
- if (result.resultCode == RESULT_OK) {
- val isDeviceRemoved = result.data?.getBooleanExtra(
- TuyaSmartCameraPropertiesActivity.IS_DEVICE_REMOVED,
- false
- )
- if (isDeviceRemoved == true) finish()
- val updatedDeviceName = result.data?.getStringExtra(
- TuyaSmartCameraPropertiesActivity.DEVICE_NEW_NAME
- )
- result.data?.getStringExtra(
- TuyaSmartCameraPropertiesActivity.AUTOPLAY
- )?.let {
- autoPlay = it
- }
- if (updatedDeviceName.isNullOrEmpty().not()) {
- deviceName = updatedDeviceName ?: ""
- supportActionBar?.title = updatedDeviceName
- }
- }
- }
- override fun onCameraQualityChange(quality: CameraQuality) {
- val tuyaQuality = when (quality) {
- CameraQuality.HD -> 4
- CameraQuality.SD -> 2
- else -> 4
- }
- tuyaViewModel.onTapClarity(tuyaQuality)
- }
- override fun goToSettingsPage() {
- resultLauncher.launch(
- Intent(
- this,
- TuyaSmartCameraPropertiesActivity::class.java
- ).also { intent ->
- intent.putExtra("deviceId", deviceId)
- intent.putExtra("deviceName", deviceName)
- intent.putExtra("brand", brand)
- intent.putExtra("isSensor", false)
- intent.putExtra("notificationSetting", notificationSetting)
- intent.putExtra("dataStatus", cloudStatus)
- intent.putExtra("autoplay", autoPlay)
- }
- )
- }
- override fun goToMultiviewPage() {
- startActivity(
- Intent(this, CameraMultiviewActivity::class.java)
- )
- }
- override fun goToPlaybackPage() {
- val isCameraError = viewModel.cameraError.value.isNullOrBlank().not()
- val isCameraNotConnected = viewModel.cameraOnline.value != true
- startActivity(
- Intent(this, TuyaIPCPlaybackActivity::class.java).apply {
- putExtra("deviceData", deviceData)
- putExtra("dataStatus", cloudStatus)
- putExtra("isSleepMode", viewModel.isSleepMode.value)
- putExtra("isCameraError", isCameraError)
- putExtra("isCameraNotConnected", isCameraNotConnected)
- }
- )
- }
- private fun showPopupIsolir() {
- val builder = AlertDialog.Builder(this)
- val customView = layoutInflater.inflate(R.layout.layout_popup_alert_wms, null)
- builder.setView(customView)
- builder.setCancelable(false)
- val dialog = builder.create()
- val inset = InsetDrawable(ColorDrawable(Color.TRANSPARENT), 50)
- dialog.window?.setBackgroundDrawable(inset)
- customView.apply {
- findViewById<TextView>(R.id.tv_title_alert).text = getString(R.string.isolated_title)
- findViewById<TextView>(R.id.tv_desc_alert).text =
- getString(R.string.isolated_description)
- findViewById<ImageView>(R.id.iv_alert).setImageResource(R.drawable.isolir_wms)
- findViewById<TextView>(R.id.btn_alert_ok).setOnClickListener {
- dialog.dismiss()
- finish()
- }
- }
- dialog.show()
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement