@rentlydev/rently-tuya 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -0
- package/README.md +281 -0
- package/android/build.gradle +182 -0
- package/android/gradle.properties +7 -0
- package/android/libs/airbrake-android-1.4.0.jar +0 -0
- package/android/src/main/AndroidManifest.xml +1 -0
- package/android/src/main/AndroidManifestNew.xml +25 -0
- package/android/src/main/java/com/rentlytuya/RentlyTuyaModule.kt +503 -0
- package/android/src/main/java/com/rentlytuya/RentlyTuyaPackage.kt +18 -0
- package/android/src/main/java/com/rentlytuya/TuyaActivity.kt +45 -0
- package/android/src/main/java/com/rentlytuya/alerts/FormatSDCardAlert.kt +83 -0
- package/android/src/main/java/com/rentlytuya/alerts/PermissionAlert.kt +91 -0
- package/android/src/main/java/com/rentlytuya/alerts/RemoveDoorbellAlert.kt +83 -0
- package/android/src/main/java/com/rentlytuya/alerts/RemoveDoorbellFailureAlert.kt +71 -0
- package/android/src/main/java/com/rentlytuya/alerts/ResetWifiAlert.kt +83 -0
- package/android/src/main/java/com/rentlytuya/alerts/SuccessAlert.kt +74 -0
- package/android/src/main/java/com/rentlytuya/components/Alert.kt +47 -0
- package/android/src/main/java/com/rentlytuya/components/AnchorButton.kt +125 -0
- package/android/src/main/java/com/rentlytuya/components/Button.kt +147 -0
- package/android/src/main/java/com/rentlytuya/components/CustomDatePicker.kt +275 -0
- package/android/src/main/java/com/rentlytuya/components/Divider.kt +53 -0
- package/android/src/main/java/com/rentlytuya/components/EncryptedImageView.kt +59 -0
- package/android/src/main/java/com/rentlytuya/components/Label.kt +155 -0
- package/android/src/main/java/com/rentlytuya/components/LoadingIndicator.kt +75 -0
- package/android/src/main/java/com/rentlytuya/components/Slider.kt +66 -0
- package/android/src/main/java/com/rentlytuya/components/Switch.kt +51 -0
- package/android/src/main/java/com/rentlytuya/components/VideoView.kt +45 -0
- package/android/src/main/java/com/rentlytuya/dashboard/AdvancedSettings.kt +259 -0
- package/android/src/main/java/com/rentlytuya/dashboard/Dashboard.kt +551 -0
- package/android/src/main/java/com/rentlytuya/dashboard/DoorbellSettings.kt +874 -0
- package/android/src/main/java/com/rentlytuya/dashboard/Messages.kt +463 -0
- package/android/src/main/java/com/rentlytuya/dashboard/NavController.kt +358 -0
- package/android/src/main/java/com/rentlytuya/dashboard/OfflineScreen.kt +160 -0
- package/android/src/main/java/com/rentlytuya/dashboard/Playback.kt +685 -0
- package/android/src/main/java/com/rentlytuya/tuya/Messages.kt +234 -0
- package/android/src/main/java/com/rentlytuya/tuya/Playback.kt +385 -0
- package/android/src/main/java/com/rentlytuya/tuya/ScreenCapture.kt +244 -0
- package/android/src/main/java/com/rentlytuya/tuya/Settings.kt +809 -0
- package/android/src/main/java/com/rentlytuya/tuya/Tuya.kt +497 -0
- package/android/src/main/java/com/rentlytuya/ui/theme/LocalColor.kt +80 -0
- package/android/src/main/java/com/rentlytuya/ui/theme/LocalFont.kt +35 -0
- package/android/src/main/java/com/rentlytuya/ui/theme/Theme.kt +34 -0
- package/android/src/main/java/com/rentlytuya/ui/theme/Type.kt +34 -0
- package/android/src/main/java/com/rentlytuya/util/Airbrake.kt +40 -0
- package/android/src/main/java/com/rentlytuya/util/DpConstants.kt +53 -0
- package/android/src/main/java/com/rentlytuya/util/FrescoManager.kt +86 -0
- package/android/src/main/java/com/rentlytuya/util/HeapAnalytics.kt +16 -0
- package/android/src/main/java/com/rentlytuya/util/KeylessModule.kt +81 -0
- package/android/src/main/java/com/rentlytuya/util/PermissionHandler.kt +75 -0
- package/android/src/main/java/com/rentlytuya/util/ReactParamsCheck.kt +152 -0
- package/android/src/main/java/com/rentlytuya/util/Util.kt +128 -0
- package/android/src/main/res/drawable/ic_close.xml +12 -0
- package/android/src/main/res/drawable/ic_launcher_background.xml +170 -0
- package/android/src/main/res/drawable/ic_launcher_foreground.xml +30 -0
- package/android/src/main/res/drawable/img_place_holder.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_action_arrow_backward.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_arrow_backward_white.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_arrow_blue_right.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_calendar.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_camera.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_message.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_pause.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_play.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_play_back.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_record.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_retry.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_setting.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_sound_off.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_sound_on.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_action_arrow_backward.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_arrow_backward_white.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_arrow_blue_right.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_battery_average.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_battery_charging.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_battery_full.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_battery_good.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_battery_low.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_calendar.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_camera.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_message.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_pause.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_play.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_play_back.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_record.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_retry.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_setting.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_sound_off.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_sound_on.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_action_arrow_backward.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_arrow_backward_white.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_arrow_blue_right.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_battery_average.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_battery_charging.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_battery_full.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_battery_good.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_battery_low.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_calendar.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_camera.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_message.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_pause.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_play.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_play_back.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_record.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_retry.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_setting.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_sound_off.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_sound_on.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_action_arrow_backward.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_arrow_backward_white.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_arrow_blue_right.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_battery_average.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_battery_charging.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_battery_full.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_battery_good.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_battery_low.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_calendar.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_camera.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_message.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_pause.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_play.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_play_back.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_record.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_retry.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_setting.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_sound_off.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_sound_on.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_action_arrow_backward.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_arrow_backward_white.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_arrow_blue_right.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_calendar.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_camera.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_message.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_pause.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_play.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_play_back.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_record.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_retry.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_setting.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_sound_off.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_sound_on.png +0 -0
- package/android/src/main/res/font/quicksand_bold.ttf +0 -0
- package/android/src/main/res/font/quicksand_light.ttf +0 -0
- package/android/src/main/res/font/quicksand_medium.ttf +0 -0
- package/android/src/main/res/font/quicksand_regular.ttf +0 -0
- package/android/src/main/res/font/quicksand_semi_bold.ttf +0 -0
- package/android/src/main/res/values/strings.xml +121 -0
- package/android/thingMapping.gradle +200 -0
- package/android/thingMapping.json +2014 -0
- package/ios/components/Alert.swift +54 -0
- package/ios/components/AnchorButton.swift +100 -0
- package/ios/components/Button.swift +118 -0
- package/ios/components/CustomDatePicker.swift +275 -0
- package/ios/components/Divider.swift +28 -0
- package/ios/components/Image.swift +72 -0
- package/ios/components/Label.swift +105 -0
- package/ios/components/Switch.swift +61 -0
- package/ios/dashboard/AdvanceSettings.swift +127 -0
- package/ios/dashboard/Dashboard.swift +354 -0
- package/ios/dashboard/Messages.swift +361 -0
- package/ios/dashboard/NavigationController.swift +173 -0
- package/ios/dashboard/OfflineScreen.swift +109 -0
- package/ios/dashboard/Playback.swift +543 -0
- package/ios/dashboard/PreviewManager.swift +117 -0
- package/ios/dashboard/Settings.swift +672 -0
- package/ios/icons/Charging.png +0 -0
- package/ios/icons/Charging@2x.png +0 -0
- package/ios/icons/Charging@3x.png +0 -0
- package/ios/icons/back_arraow.png +0 -0
- package/ios/icons/back_arraow@2x.png +0 -0
- package/ios/icons/back_arraow@3x.png +0 -0
- package/ios/icons/battery_average.png +0 -0
- package/ios/icons/battery_average@2x.png +0 -0
- package/ios/icons/battery_average@3x.png +0 -0
- package/ios/icons/battery_full.png +0 -0
- package/ios/icons/battery_full@2x.png +0 -0
- package/ios/icons/battery_full@3x.png +0 -0
- package/ios/icons/battery_good.png +0 -0
- package/ios/icons/battery_good@2x.png +0 -0
- package/ios/icons/battery_good@3x.png +0 -0
- package/ios/icons/battery_low.png +0 -0
- package/ios/icons/battery_low@2x.png +0 -0
- package/ios/icons/battery_low@3x.png +0 -0
- package/ios/icons/calendar.png +0 -0
- package/ios/icons/calendar@2x.png +0 -0
- package/ios/icons/calendar@3x.png +0 -0
- package/ios/icons/cloud.png +0 -0
- package/ios/icons/cloud@2x.png +0 -0
- package/ios/icons/cloud@3x.png +0 -0
- package/ios/icons/down_update.png +0 -0
- package/ios/icons/down_update@2x.png +0 -0
- package/ios/icons/down_update@3x.png +0 -0
- package/ios/icons/exit_fullscreen.png +0 -0
- package/ios/icons/exit_fullscreen@2x.png +0 -0
- package/ios/icons/exit_fullscreen@3x.png +0 -0
- package/ios/icons/expand.png +0 -0
- package/ios/icons/fullscreen.png +0 -0
- package/ios/icons/fullscreen@2x.png +0 -0
- package/ios/icons/fullscreen@3x.png +0 -0
- package/ios/icons/image_placeholder.png +0 -0
- package/ios/icons/information.png +0 -0
- package/ios/icons/information@2x.png +0 -0
- package/ios/icons/information@3x.png +0 -0
- package/ios/icons/keyless_Setting.png +0 -0
- package/ios/icons/keyless_Setting@2x.png +0 -0
- package/ios/icons/keyless_Setting@3x.png +0 -0
- package/ios/icons/keyless_back@1x.png +0 -0
- package/ios/icons/keyless_back@2x.png +0 -0
- package/ios/icons/keyless_back@3x.png +0 -0
- package/ios/icons/keyless_filter.png +0 -0
- package/ios/icons/keyless_filter@2x.png +0 -0
- package/ios/icons/keyless_filter@3x.png +0 -0
- package/ios/icons/keyless_message.png +0 -0
- package/ios/icons/keyless_message@2x.png +0 -0
- package/ios/icons/keyless_message@3x.png +0 -0
- package/ios/icons/keyless_pause.png +0 -0
- package/ios/icons/keyless_pause@2x.png +0 -0
- package/ios/icons/keyless_pause@3x.png +0 -0
- package/ios/icons/keyless_photo.png +0 -0
- package/ios/icons/keyless_photo@2x.png +0 -0
- package/ios/icons/keyless_photo@3x.png +0 -0
- package/ios/icons/keyless_play.png +0 -0
- package/ios/icons/keyless_play@2x.png +0 -0
- package/ios/icons/keyless_play@3x.png +0 -0
- package/ios/icons/keyless_play_list.png +0 -0
- package/ios/icons/keyless_play_list@2x.png +0 -0
- package/ios/icons/keyless_play_list@3x.png +0 -0
- package/ios/icons/keyless_play_playback.png +0 -0
- package/ios/icons/keyless_play_playback@2x.png +0 -0
- package/ios/icons/keyless_play_playback@3x.png +0 -0
- package/ios/icons/keyless_record.png +0 -0
- package/ios/icons/keyless_record@2x.png +0 -0
- package/ios/icons/keyless_record@3x.png +0 -0
- package/ios/icons/keyless_record_on.png +0 -0
- package/ios/icons/keyless_record_on@2x.png +0 -0
- package/ios/icons/keyless_record_on@3x.png +0 -0
- package/ios/icons/keyless_sound_off.png +0 -0
- package/ios/icons/keyless_sound_off@2x.png +0 -0
- package/ios/icons/keyless_sound_off@3x.png +0 -0
- package/ios/icons/keyless_sound_on.png +0 -0
- package/ios/icons/keyless_sound_on@2x.png +0 -0
- package/ios/icons/keyless_sound_on@3x.png +0 -0
- package/ios/icons/keyless_speak_off.png +0 -0
- package/ios/icons/keyless_speak_off@2x.png +0 -0
- package/ios/icons/keyless_speak_on.png +0 -0
- package/ios/icons/keyless_speak_on@2x.png +0 -0
- package/ios/icons/keyless_speak_on@3x.png +0 -0
- package/ios/icons/refresh.png +0 -0
- package/ios/icons/refresh@2x.png +0 -0
- package/ios/icons/refresh@3x.png +0 -0
- package/ios/icons/ty_camera_control_hd_normal@2x.png +0 -0
- package/ios/icons/ty_camera_control_hd_normal@3x.png +0 -0
- package/ios/icons/ty_camera_control_sd_normal@2x.png +0 -0
- package/ios/icons/ty_camera_control_sd_normal@3x.png +0 -0
- package/ios/icons/upgrade_success.png +0 -0
- package/ios/icons/upgrade_success@2x.png +0 -0
- package/ios/icons/upgrade_success@3x.png +0 -0
- package/ios/listener/KeylessListener.m +8 -0
- package/ios/listener/KeylessListener.swift +56 -0
- package/ios/listener/RentlyTuya-Bridging-Header.h +5 -0
- package/ios/listener/RentlyTuya.mm +56 -0
- package/ios/listener/RentlyTuya.swift +544 -0
- package/ios/theme/LocalColor.swift +33 -0
- package/ios/theme/LocalFont.swift +32 -0
- package/ios/theme/Theme.swift +71 -0
- package/ios/tuya/CameraManager.swift +296 -0
- package/ios/tuya/SettingsManager.swift +475 -0
- package/ios/tuya/Tuya.swift +570 -0
- package/ios/tuya/TuyaMessages.swift +98 -0
- package/ios/utils/Airbrake.swift +31 -0
- package/ios/utils/AppUtility.swift +76 -0
- package/ios/utils/HeapAnalytics.swift +8 -0
- package/ios/utils/OrientationManager.swift +60 -0
- package/ios/utils/PromiseHandler.swift +36 -0
- package/lib/commonjs/index.js +90 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/module/index.js +83 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +75 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/src/index.d.ts +75 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -0
- package/package.json +188 -0
- package/rently-tuya.podspec +52 -0
- package/src/index.tsx +158 -0
@@ -0,0 +1,497 @@
|
|
1
|
+
package com.rentlytuya.tuya
|
2
|
+
|
3
|
+
import android.Manifest
|
4
|
+
import android.app.Activity
|
5
|
+
import android.content.Context
|
6
|
+
import android.util.Log
|
7
|
+
import com.rentlytuya.util.Airbrake
|
8
|
+
import com.rentlytuya.util.DateUtil.isNotNull
|
9
|
+
import com.rentlytuya.util.DateUtil.isTrue
|
10
|
+
import com.rentlytuya.util.PermissionHandler
|
11
|
+
import com.thingclips.smart.android.camera.sdk.ThingIPCSdk
|
12
|
+
import com.thingclips.smart.android.camera.sdk.api.IThingIPCDpHelper
|
13
|
+
import com.thingclips.smart.android.user.api.ILoginCallback
|
14
|
+
import com.thingclips.smart.android.user.bean.User
|
15
|
+
import com.thingclips.smart.camera.camerasdk.thingplayer.callback.OperationDelegateCallBack
|
16
|
+
import com.thingclips.smart.camera.middleware.p2p.IThingSmartCameraP2P
|
17
|
+
import com.thingclips.smart.home.sdk.ThingHomeSdk
|
18
|
+
import com.thingclips.smart.home.sdk.bean.HomeBean
|
19
|
+
import com.thingclips.smart.home.sdk.callback.IThingHomeResultCallback
|
20
|
+
import com.thingclips.smart.sdk.api.IThingDevice
|
21
|
+
import kotlinx.coroutines.CoroutineScope
|
22
|
+
import kotlinx.coroutines.Dispatchers
|
23
|
+
import kotlinx.coroutines.SupervisorJob
|
24
|
+
import kotlinx.coroutines.launch
|
25
|
+
import kotlinx.coroutines.suspendCancellableCoroutine
|
26
|
+
import kotlinx.coroutines.withTimeoutOrNull
|
27
|
+
import kotlin.coroutines.resume
|
28
|
+
|
29
|
+
object Tuya {
|
30
|
+
|
31
|
+
var deviceId: String? = null
|
32
|
+
var mCameraP2P: IThingSmartCameraP2P<Any>? = null
|
33
|
+
var iTuyaDevice: IThingDevice? = null
|
34
|
+
var p2pType: Int? = null
|
35
|
+
var ipcDpHelper: IThingIPCDpHelper? = null
|
36
|
+
|
37
|
+
const val TAG = "RentlyTuya"
|
38
|
+
private const val TIME_OUT = 8000L
|
39
|
+
|
40
|
+
// Smart Home values
|
41
|
+
var id: String? = null
|
42
|
+
var uuid: String? = null
|
43
|
+
var serialNumber: String? = null
|
44
|
+
var tuyaProductName: String? = null
|
45
|
+
var tuyaProductID: String? = null
|
46
|
+
var lastMoveOutDate: String? = null
|
47
|
+
var resetRequired: Boolean? = null
|
48
|
+
var isResident: Boolean = true
|
49
|
+
var displayRemoveDoorbellButton: Boolean? = null
|
50
|
+
|
51
|
+
// Default Settings values
|
52
|
+
var isDefaultSettingsUpdated: Boolean = false
|
53
|
+
var motionDetection: Boolean = false
|
54
|
+
var continuousRecording: Boolean = false
|
55
|
+
var eventRecording: Boolean = false
|
56
|
+
var setSensitivityLow: Boolean = false
|
57
|
+
|
58
|
+
val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())
|
59
|
+
|
60
|
+
suspend fun login(
|
61
|
+
uid: String,
|
62
|
+
password: String,
|
63
|
+
countryCode: String,
|
64
|
+
): Boolean {
|
65
|
+
val success: Boolean? = withTimeoutOrNull(TIME_OUT) {
|
66
|
+
suspendCancellableCoroutine { continuation ->
|
67
|
+
ThingHomeSdk.getUserInstance()
|
68
|
+
.loginWithUid(
|
69
|
+
countryCode,
|
70
|
+
uid,
|
71
|
+
password,
|
72
|
+
object : ILoginCallback {
|
73
|
+
override fun onSuccess(user: User?) {
|
74
|
+
Log.i(TAG, "Login Successful, User Info: $user")
|
75
|
+
continuation.resume(true)
|
76
|
+
}
|
77
|
+
|
78
|
+
override fun onError(code: String?, error: String?) {
|
79
|
+
Log.i(TAG, "Login Failed, Error: $code $error")
|
80
|
+
Airbrake.logMessage(
|
81
|
+
title = "Login Failed",
|
82
|
+
message = "Error Code: $code",
|
83
|
+
additionalInfo = mapOf(
|
84
|
+
"error" to error.toString(),
|
85
|
+
"uid" to uid,
|
86
|
+
"password" to password, // TODO:: Check whether it is ok to log
|
87
|
+
"countryCode" to countryCode
|
88
|
+
)
|
89
|
+
)
|
90
|
+
continuation.resume(false)
|
91
|
+
}
|
92
|
+
})
|
93
|
+
}
|
94
|
+
}
|
95
|
+
|
96
|
+
return success.isTrue()
|
97
|
+
}
|
98
|
+
|
99
|
+
suspend fun loginAndSetDevice(
|
100
|
+
deviceId: String,
|
101
|
+
homeId: Long,
|
102
|
+
username: String,
|
103
|
+
password: String,
|
104
|
+
countryCode: String
|
105
|
+
): Boolean {
|
106
|
+
this.deviceId = deviceId
|
107
|
+
val success: Boolean? = withTimeoutOrNull(TIME_OUT) {
|
108
|
+
suspendCancellableCoroutine { continuation ->
|
109
|
+
ThingHomeSdk.getUserInstance()
|
110
|
+
.loginWithUid(
|
111
|
+
countryCode,
|
112
|
+
username,
|
113
|
+
password,
|
114
|
+
object : ILoginCallback {
|
115
|
+
override fun onSuccess(user: User?) {
|
116
|
+
Log.i(TAG, "Login Successful for property, User Info: $user")
|
117
|
+
|
118
|
+
ThingHomeSdk.newHomeInstance(homeId)
|
119
|
+
.getHomeDetail(object : IThingHomeResultCallback {
|
120
|
+
override fun onSuccess(bean: HomeBean) {
|
121
|
+
Log.i(TAG, "Get Home Data success: $bean")
|
122
|
+
|
123
|
+
val cameraInstance = ThingIPCSdk.getCameraInstance()
|
124
|
+
if (cameraInstance.isNotNull()) {
|
125
|
+
mCameraP2P = cameraInstance.createCameraP2P(deviceId)
|
126
|
+
p2pType = cameraInstance.getP2PType(deviceId)
|
127
|
+
iTuyaDevice = ThingHomeSdk.newDeviceInstance(deviceId)
|
128
|
+
ipcDpHelper = ThingIPCSdk.createIPCDpHelper(deviceId)
|
129
|
+
} else {
|
130
|
+
continuation.resume(false)
|
131
|
+
return
|
132
|
+
}
|
133
|
+
|
134
|
+
continuation.resume(true)
|
135
|
+
}
|
136
|
+
|
137
|
+
override fun onError(errorCode: String, errorMsg: String) {
|
138
|
+
Airbrake.logMessage(
|
139
|
+
title = "Get Home Data Failed",
|
140
|
+
message = "Error Code: $errorCode",
|
141
|
+
additionalInfo = mapOf(
|
142
|
+
"error" to errorMsg,
|
143
|
+
"deviceID" to deviceId,
|
144
|
+
"homeID" to homeId.toString(),
|
145
|
+
"username" to username,
|
146
|
+
"password" to password,
|
147
|
+
"countryCode" to countryCode
|
148
|
+
)
|
149
|
+
)
|
150
|
+
continuation.resume(false)
|
151
|
+
}
|
152
|
+
})
|
153
|
+
}
|
154
|
+
|
155
|
+
override fun onError(code: String?, error: String?) {
|
156
|
+
Airbrake.logMessage(
|
157
|
+
title = "Property Login Failed",
|
158
|
+
message = "Error Code: $code",
|
159
|
+
additionalInfo = mapOf(
|
160
|
+
"error" to error.toString(),
|
161
|
+
"deviceID" to deviceId,
|
162
|
+
"homeID" to homeId.toString(),
|
163
|
+
"username" to username,
|
164
|
+
"password" to password,
|
165
|
+
"countryCode" to countryCode
|
166
|
+
)
|
167
|
+
)
|
168
|
+
continuation.resume(false)
|
169
|
+
}
|
170
|
+
})
|
171
|
+
}
|
172
|
+
}
|
173
|
+
|
174
|
+
return success.isTrue()
|
175
|
+
}
|
176
|
+
|
177
|
+
private fun wakeDevice(deviceId: String) {
|
178
|
+
try {
|
179
|
+
val doorbell = ThingIPCSdk.getDoorbell()
|
180
|
+
doorbell?.wirelessWake(deviceId)
|
181
|
+
Log.i(TAG, "Wake device success")
|
182
|
+
} catch (e: Exception) {
|
183
|
+
Airbrake.logMessage(
|
184
|
+
title = "Wake Doorbell Failed",
|
185
|
+
message = "Error: ${e.message}"
|
186
|
+
)
|
187
|
+
}
|
188
|
+
}
|
189
|
+
|
190
|
+
fun connectAndStartPreview(
|
191
|
+
setOnline: (value: Boolean) -> Unit,
|
192
|
+
setMute: (value: Boolean) -> Unit,
|
193
|
+
setLoading: (value: Boolean) -> Unit
|
194
|
+
) {
|
195
|
+
setLoading(true)
|
196
|
+
if (mCameraP2P.isNotNull() && deviceId.isNotNull()) {
|
197
|
+
deviceId?.let { wakeDevice(it) }
|
198
|
+
mCameraP2P?.connect(deviceId, object : OperationDelegateCallBack {
|
199
|
+
override fun onSuccess(sessionId: Int, requestId: Int, data: String) {
|
200
|
+
Log.i(TAG, "Connection Successful, $sessionId, RequestId: $requestId, Data: $data")
|
201
|
+
setOnline(true)
|
202
|
+
|
203
|
+
scope.launch {
|
204
|
+
preview(
|
205
|
+
setOnline = setOnline,
|
206
|
+
setMute = setMute,
|
207
|
+
setLoading = setLoading
|
208
|
+
)
|
209
|
+
}
|
210
|
+
}
|
211
|
+
|
212
|
+
override fun onFailure(sessionId: Int, requestId: Int, errCode: Int) {
|
213
|
+
setLoading(false)
|
214
|
+
setOnline(false)
|
215
|
+
Airbrake.logMessage(
|
216
|
+
title = "Connection Failed",
|
217
|
+
message = "Error Code: $errCode",
|
218
|
+
additionalInfo = mapOf(
|
219
|
+
"sessionId" to sessionId.toString(),
|
220
|
+
"requestId" to requestId.toString()
|
221
|
+
)
|
222
|
+
)
|
223
|
+
}
|
224
|
+
})
|
225
|
+
} else {
|
226
|
+
setLoading(false)
|
227
|
+
setOnline(false)
|
228
|
+
Log.i(TAG, "mCameraP2P or deviceId is null - Device ID: $deviceId, mCameraP2P: $mCameraP2P")
|
229
|
+
}
|
230
|
+
}
|
231
|
+
|
232
|
+
fun getDeviceName(
|
233
|
+
setDeviceName: (value: String) -> Unit
|
234
|
+
) {
|
235
|
+
ThingHomeSdk.getDataInstance().getDeviceBean(deviceId)?.getName()?.let { setDeviceName(it) }
|
236
|
+
}
|
237
|
+
|
238
|
+
private suspend fun preview(
|
239
|
+
setOnline: (value: Boolean) -> Unit,
|
240
|
+
setMute: (value: Boolean) -> Unit,
|
241
|
+
setLoading: (value: Boolean) -> Unit
|
242
|
+
): Boolean {
|
243
|
+
val success: Boolean? = withTimeoutOrNull(TIME_OUT) {
|
244
|
+
suspendCancellableCoroutine { continuation ->
|
245
|
+
if (mCameraP2P.isNotNull()) {
|
246
|
+
mCameraP2P?.startPreview(object : OperationDelegateCallBack {
|
247
|
+
override fun onSuccess(sessionId: Int, requestId: Int, data: String) {
|
248
|
+
Log.i(
|
249
|
+
TAG,
|
250
|
+
"Start preview success, SessionId: $sessionId, RequestId: $requestId, Data: $data"
|
251
|
+
)
|
252
|
+
setLoading(false)
|
253
|
+
setMute(0, setMute)
|
254
|
+
continuation.resume(true)
|
255
|
+
}
|
256
|
+
|
257
|
+
override fun onFailure(sessionId: Int, requestId: Int, errCode: Int) {
|
258
|
+
setLoading(false)
|
259
|
+
setOnline(false)
|
260
|
+
Airbrake.logMessage(
|
261
|
+
title = "Start Preview Failed",
|
262
|
+
message = "Error Code: $errCode",
|
263
|
+
additionalInfo = mapOf(
|
264
|
+
"sessionId" to sessionId.toString(),
|
265
|
+
"requestId" to requestId.toString()
|
266
|
+
)
|
267
|
+
)
|
268
|
+
continuation.resume(false)
|
269
|
+
}
|
270
|
+
})
|
271
|
+
} else {
|
272
|
+
continuation.resume(false)
|
273
|
+
Log.i(TAG, "mCameraP2P is null, check if the device is initialized")
|
274
|
+
}
|
275
|
+
}
|
276
|
+
}
|
277
|
+
|
278
|
+
return success.isTrue()
|
279
|
+
}
|
280
|
+
|
281
|
+
suspend fun stopPreview(): Boolean {
|
282
|
+
val success: Boolean? = withTimeoutOrNull(TIME_OUT) {
|
283
|
+
suspendCancellableCoroutine { continuation ->
|
284
|
+
if (mCameraP2P.isNotNull()) {
|
285
|
+
mCameraP2P?.stopPreview(object : OperationDelegateCallBack {
|
286
|
+
override fun onSuccess(sessionId: Int, requestId: Int, data: String) {
|
287
|
+
Log.i(
|
288
|
+
TAG,
|
289
|
+
"Stop preview success, SessionId: $sessionId, RequestId: $requestId, Data: $data"
|
290
|
+
)
|
291
|
+
continuation.resume(true)
|
292
|
+
}
|
293
|
+
|
294
|
+
override fun onFailure(sessionId: Int, requestId: Int, errCode: Int) {
|
295
|
+
Airbrake.logMessage(
|
296
|
+
title = "Stop Preview Failed",
|
297
|
+
message = "Error Code: $errCode",
|
298
|
+
additionalInfo = mapOf(
|
299
|
+
"sessionId" to sessionId.toString(),
|
300
|
+
"requestId" to requestId.toString()
|
301
|
+
)
|
302
|
+
)
|
303
|
+
continuation.resume(false)
|
304
|
+
}
|
305
|
+
})
|
306
|
+
} else {
|
307
|
+
Log.i(TAG, "mCameraP2P is null, check if the device is initialized")
|
308
|
+
}
|
309
|
+
}
|
310
|
+
}
|
311
|
+
|
312
|
+
return success.isTrue()
|
313
|
+
}
|
314
|
+
|
315
|
+
suspend fun disconnect(
|
316
|
+
setLoading: (value: Boolean) -> Unit = {},
|
317
|
+
): Boolean {
|
318
|
+
val success: Boolean? = withTimeoutOrNull(TIME_OUT) {
|
319
|
+
suspendCancellableCoroutine { continuation ->
|
320
|
+
// Disconnect, you must disconnect when exiting from doorbell.
|
321
|
+
setLoading(true)
|
322
|
+
if (mCameraP2P.isNotNull()) {
|
323
|
+
mCameraP2P?.disconnect(object : OperationDelegateCallBack {
|
324
|
+
override fun onSuccess(sessionId: Int, requestId: Int, data: String) {
|
325
|
+
Log.i(
|
326
|
+
TAG,
|
327
|
+
"Disconnect Success, SessionId: $sessionId, RequestId: $requestId, Data: $data"
|
328
|
+
)
|
329
|
+
setLoading(false)
|
330
|
+
continuation.resume(true)
|
331
|
+
}
|
332
|
+
|
333
|
+
override fun onFailure(sessionId: Int, requestId: Int, errCode: Int) {
|
334
|
+
setLoading(false)
|
335
|
+
Airbrake.logMessage(
|
336
|
+
title = "Disconnect Failed",
|
337
|
+
message = "Error Code: $errCode",
|
338
|
+
additionalInfo = mapOf(
|
339
|
+
"sessionId" to sessionId.toString(),
|
340
|
+
"requestId" to requestId.toString()
|
341
|
+
)
|
342
|
+
)
|
343
|
+
continuation.resume(false)
|
344
|
+
}
|
345
|
+
})
|
346
|
+
} else {
|
347
|
+
Log.i(TAG, "mCameraP2P is null")
|
348
|
+
setLoading(false)
|
349
|
+
continuation.resume(true)
|
350
|
+
}
|
351
|
+
}
|
352
|
+
}
|
353
|
+
|
354
|
+
return success.isTrue()
|
355
|
+
}
|
356
|
+
|
357
|
+
fun setMute(
|
358
|
+
mute: Int,
|
359
|
+
setMute: (value: Boolean) -> Unit,
|
360
|
+
) {
|
361
|
+
// 1-Mute, 0-UnMute
|
362
|
+
try {
|
363
|
+
if (mCameraP2P.isNotNull()) {
|
364
|
+
mCameraP2P?.setMute(mute, object : OperationDelegateCallBack {
|
365
|
+
override fun onSuccess(sessionId: Int, requestId: Int, data: String) {
|
366
|
+
setMute(mute == 1)
|
367
|
+
Log.i(TAG, "Set to mute: SessionID: $sessionId, RequestId: $requestId, Data: $data")
|
368
|
+
}
|
369
|
+
|
370
|
+
override fun onFailure(sessionId: Int, requestId: Int, errCode: Int) {
|
371
|
+
Airbrake.logMessage(
|
372
|
+
title = "Set Mute Failed",
|
373
|
+
message = "Error Code: $errCode",
|
374
|
+
additionalInfo = mapOf(
|
375
|
+
"sessionId" to sessionId.toString(),
|
376
|
+
"requestId" to requestId.toString()
|
377
|
+
)
|
378
|
+
)
|
379
|
+
}
|
380
|
+
})
|
381
|
+
} else {
|
382
|
+
Log.i(TAG, "mCameraP2P is null")
|
383
|
+
}
|
384
|
+
} catch (e: Exception) {
|
385
|
+
Log.i(TAG, "Exception in Set Mute $e")
|
386
|
+
}
|
387
|
+
}
|
388
|
+
|
389
|
+
fun startVoiceTalk(
|
390
|
+
context: Context,
|
391
|
+
setMic: (value: Boolean) -> Unit,
|
392
|
+
setLoading: (value: Boolean) -> Unit
|
393
|
+
) {
|
394
|
+
if (mCameraP2P.isNotNull()) {
|
395
|
+
val permissions = arrayOf(
|
396
|
+
Manifest.permission.RECORD_AUDIO,
|
397
|
+
)
|
398
|
+
if (PermissionHandler.arePermissionsGranted(context, permissions)) {
|
399
|
+
setLoading(true)
|
400
|
+
mCameraP2P?.startAudioTalk(object : OperationDelegateCallBack {
|
401
|
+
override fun onSuccess(sessionId: Int, requestId: Int, data: String?) {
|
402
|
+
Log.i(
|
403
|
+
TAG,
|
404
|
+
"Start talking Successful: SessionID: $sessionId, RequestId: $requestId, Data: $data"
|
405
|
+
)
|
406
|
+
setMic(true)
|
407
|
+
setLoading(false)
|
408
|
+
}
|
409
|
+
|
410
|
+
override fun onFailure(sessionId: Int, requestId: Int, errCode: Int) {
|
411
|
+
setMic(false)
|
412
|
+
setLoading(false)
|
413
|
+
Airbrake.logMessage(
|
414
|
+
title = "Start Voice Talk Failed",
|
415
|
+
message = "Error Code: $errCode",
|
416
|
+
additionalInfo = mapOf(
|
417
|
+
"sessionId" to sessionId.toString(),
|
418
|
+
"requestId" to requestId.toString()
|
419
|
+
)
|
420
|
+
)
|
421
|
+
}
|
422
|
+
})
|
423
|
+
} else {
|
424
|
+
PermissionHandler.checkAndRequestPermissions(
|
425
|
+
context as Activity,
|
426
|
+
permissions,
|
427
|
+
200
|
428
|
+
)
|
429
|
+
}
|
430
|
+
}
|
431
|
+
}
|
432
|
+
|
433
|
+
fun stopVoiceTalk(
|
434
|
+
setMic: (value: Boolean) -> Unit,
|
435
|
+
setLoading: (value: Boolean) -> Unit
|
436
|
+
) {
|
437
|
+
if (mCameraP2P.isNotNull()) {
|
438
|
+
setLoading(true)
|
439
|
+
mCameraP2P?.stopAudioTalk(object : OperationDelegateCallBack {
|
440
|
+
override fun onSuccess(sessionId: Int, requestId: Int, data: String?) {
|
441
|
+
setMic(false)
|
442
|
+
setLoading(false)
|
443
|
+
Log.i(
|
444
|
+
TAG,
|
445
|
+
"Stop talking Successful: SessionID: $sessionId, RequestId: $requestId, Data: $data"
|
446
|
+
)
|
447
|
+
}
|
448
|
+
|
449
|
+
override fun onFailure(sessionId: Int, requestId: Int, errCode: Int) {
|
450
|
+
setMic(true)
|
451
|
+
setLoading(false)
|
452
|
+
Airbrake.logMessage(
|
453
|
+
title = "Stop Voice Talk Failed",
|
454
|
+
message = "Error Code: $errCode",
|
455
|
+
additionalInfo = mapOf(
|
456
|
+
"sessionId" to sessionId.toString(),
|
457
|
+
"requestId" to requestId.toString()
|
458
|
+
)
|
459
|
+
)
|
460
|
+
}
|
461
|
+
})
|
462
|
+
}
|
463
|
+
}
|
464
|
+
|
465
|
+
fun changeResolution(
|
466
|
+
videoId: Int,
|
467
|
+
setVideoType: (value: Int) -> Unit,
|
468
|
+
setLoading: (value: Boolean) -> Unit
|
469
|
+
) {
|
470
|
+
// 2-SD 4-HD 8-Ultra HD
|
471
|
+
if (mCameraP2P.isNotNull()) {
|
472
|
+
setLoading(true)
|
473
|
+
mCameraP2P?.setVideoClarity(videoId, object : OperationDelegateCallBack {
|
474
|
+
override fun onSuccess(sessionId: Int, requestId: Int, data: String) {
|
475
|
+
setVideoType(videoId)
|
476
|
+
setLoading(false)
|
477
|
+
Log.i(
|
478
|
+
TAG,
|
479
|
+
"Change Resolution Successful: SessionID: $sessionId, RequestId: $requestId, Data: $data"
|
480
|
+
)
|
481
|
+
}
|
482
|
+
|
483
|
+
override fun onFailure(sessionId: Int, requestId: Int, errCode: Int) {
|
484
|
+
setLoading(false)
|
485
|
+
Airbrake.logMessage(
|
486
|
+
title = "Change Resolution Failed",
|
487
|
+
message = "Error Code: $errCode",
|
488
|
+
additionalInfo = mapOf(
|
489
|
+
"sessionId" to sessionId.toString(),
|
490
|
+
"requestId" to requestId.toString()
|
491
|
+
)
|
492
|
+
)
|
493
|
+
}
|
494
|
+
})
|
495
|
+
}
|
496
|
+
}
|
497
|
+
}
|
@@ -0,0 +1,80 @@
|
|
1
|
+
package com.rentlytuya.ui.theme
|
2
|
+
|
3
|
+
import android.util.Log
|
4
|
+
import androidx.compose.ui.graphics.Color
|
5
|
+
import com.rentlytuya.tuya.Tuya.TAG
|
6
|
+
|
7
|
+
object LocalColor {
|
8
|
+
|
9
|
+
object Main {
|
10
|
+
var Light = Color(0xFFf3faff)
|
11
|
+
var Dark = Color(0xFF329ddc)
|
12
|
+
}
|
13
|
+
|
14
|
+
object Primary {
|
15
|
+
var Light = Color(0xFF39a1e8)
|
16
|
+
var Secondary = Color(0xFF6a97b5)
|
17
|
+
var Dark = Color(0xFF329ddc)
|
18
|
+
var Medium = Color(0xFF008adc)
|
19
|
+
}
|
20
|
+
|
21
|
+
object Secondary {
|
22
|
+
var White = Color(0xFFf3faff)
|
23
|
+
var Light = Color(0xFFd9edfb)
|
24
|
+
}
|
25
|
+
|
26
|
+
object Danger {
|
27
|
+
var Primary = Color(0xFFcb0000)
|
28
|
+
}
|
29
|
+
|
30
|
+
object Monochrome {
|
31
|
+
var White = Color(0xFFFFFFFF)
|
32
|
+
var LightGrey = Color(0xFF80FFFFFF)
|
33
|
+
var Regular = Color(0xFF86858C)
|
34
|
+
var Medium = Color(0xFF3f4d59)
|
35
|
+
var Grey = Color(0xFF373737)
|
36
|
+
var Black = Color(0xFF000000)
|
37
|
+
}
|
38
|
+
|
39
|
+
fun setTheme(flavour: String) {
|
40
|
+
when (flavour.lowercase()) {
|
41
|
+
"keyless" -> {
|
42
|
+
setSmartHomeTheme()
|
43
|
+
}
|
44
|
+
|
45
|
+
"progress" -> {
|
46
|
+
setProgressTheme()
|
47
|
+
}
|
48
|
+
|
49
|
+
"coveyhomes" -> {
|
50
|
+
setCoveyHomesTheme()
|
51
|
+
}
|
52
|
+
|
53
|
+
"bellanet" -> {
|
54
|
+
setBellaNetTheme()
|
55
|
+
}
|
56
|
+
|
57
|
+
else -> Log.e(TAG, "Flavor mismatch")
|
58
|
+
}
|
59
|
+
}
|
60
|
+
}
|
61
|
+
|
62
|
+
private fun setSmartHomeTheme() {
|
63
|
+
LocalColor.Main.Light = Color(0xFFf3faff)
|
64
|
+
LocalColor.Main.Dark = Color(0xFF329ddc)
|
65
|
+
}
|
66
|
+
|
67
|
+
private fun setProgressTheme() {
|
68
|
+
LocalColor.Main.Light = Color(0xFFEFF5F4)
|
69
|
+
LocalColor.Main.Dark = Color(0xFF279989)
|
70
|
+
}
|
71
|
+
|
72
|
+
private fun setCoveyHomesTheme() {
|
73
|
+
LocalColor.Main.Light = Color(0xFFFAF6F6)
|
74
|
+
LocalColor.Main.Dark = Color(0xFF99855E)
|
75
|
+
}
|
76
|
+
|
77
|
+
private fun setBellaNetTheme() {
|
78
|
+
LocalColor.Main.Light = Color(0xFFE9F0FF)
|
79
|
+
LocalColor.Main.Dark = Color(0xFF0B1E44)
|
80
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
package com.rentlytuya.ui.theme
|
2
|
+
|
3
|
+
import androidx.compose.ui.text.font.Font
|
4
|
+
import androidx.compose.ui.text.font.FontFamily
|
5
|
+
import androidx.compose.ui.unit.sp
|
6
|
+
import com.rentlytuya.R
|
7
|
+
|
8
|
+
object LocalFont {
|
9
|
+
object FontSize {
|
10
|
+
val XS = 10.sp
|
11
|
+
val S = 12.sp
|
12
|
+
val M = 14.sp
|
13
|
+
val L = 16.sp
|
14
|
+
val XL18 = 18.sp
|
15
|
+
val XL20 = 20.sp
|
16
|
+
val XL22 = 22.sp
|
17
|
+
val XL24 = 24.sp
|
18
|
+
val XL26 = 26.sp
|
19
|
+
val XL28 = 28.sp
|
20
|
+
val XL30 = 30.sp
|
21
|
+
val XL34 = 34.sp
|
22
|
+
val XL40 = 40.sp
|
23
|
+
val XL50 = 50.sp
|
24
|
+
val XL80 = 80.sp
|
25
|
+
val XL200 = 200.sp
|
26
|
+
}
|
27
|
+
|
28
|
+
object FontFamily {
|
29
|
+
val light = FontFamily(Font(R.font.quicksand_light))
|
30
|
+
val regular = FontFamily(Font(R.font.quicksand_regular))
|
31
|
+
val medium = FontFamily(Font(R.font.quicksand_medium))
|
32
|
+
val semiBold = FontFamily(Font(R.font.quicksand_semi_bold))
|
33
|
+
val bold = FontFamily(Font(R.font.quicksand_bold))
|
34
|
+
}
|
35
|
+
}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
package com.rentlytuya.ui.theme
|
2
|
+
|
3
|
+
import android.app.Activity
|
4
|
+
import androidx.compose.foundation.isSystemInDarkTheme
|
5
|
+
import androidx.compose.material3.MaterialTheme
|
6
|
+
import androidx.compose.runtime.Composable
|
7
|
+
import androidx.compose.runtime.SideEffect
|
8
|
+
import androidx.compose.ui.graphics.toArgb
|
9
|
+
import androidx.compose.ui.platform.LocalView
|
10
|
+
import androidx.core.view.WindowCompat
|
11
|
+
|
12
|
+
@Composable
|
13
|
+
fun TuyaTheme(
|
14
|
+
darkTheme: Boolean = isSystemInDarkTheme(),
|
15
|
+
// Dynamic color is available on Android 12+
|
16
|
+
dynamicColor: Boolean = true,
|
17
|
+
content: @Composable () -> Unit
|
18
|
+
) {
|
19
|
+
|
20
|
+
val view = LocalView.current
|
21
|
+
if (!view.isInEditMode) {
|
22
|
+
SideEffect {
|
23
|
+
val window = (view.context as Activity).window
|
24
|
+
// window.statusBarColor = LocalColor.Monochrome.Grey.toArgb()
|
25
|
+
window.navigationBarColor = LocalColor.Monochrome.Grey.toArgb()
|
26
|
+
WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
MaterialTheme(
|
31
|
+
typography = Typography,
|
32
|
+
content = content
|
33
|
+
)
|
34
|
+
}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
package com.rentlytuya.ui.theme
|
2
|
+
|
3
|
+
import androidx.compose.material3.Typography
|
4
|
+
import androidx.compose.ui.text.TextStyle
|
5
|
+
import androidx.compose.ui.text.font.FontFamily
|
6
|
+
import androidx.compose.ui.text.font.FontWeight
|
7
|
+
import androidx.compose.ui.unit.sp
|
8
|
+
|
9
|
+
// Set of Material typography styles to start with
|
10
|
+
val Typography = Typography(
|
11
|
+
bodyLarge = TextStyle(
|
12
|
+
fontFamily = FontFamily.Default,
|
13
|
+
fontWeight = FontWeight.Normal,
|
14
|
+
fontSize = 16.sp,
|
15
|
+
lineHeight = 24.sp,
|
16
|
+
letterSpacing = 0.5.sp
|
17
|
+
)
|
18
|
+
/* Other default text styles to override
|
19
|
+
titleLarge = TextStyle(
|
20
|
+
fontFamily = FontFamily.Default,
|
21
|
+
fontWeight = FontWeight.Normal,
|
22
|
+
fontSize = 22.sp,
|
23
|
+
lineHeight = 28.sp,
|
24
|
+
letterSpacing = 0.sp
|
25
|
+
),
|
26
|
+
labelSmall = TextStyle(
|
27
|
+
fontFamily = FontFamily.Default,
|
28
|
+
fontWeight = FontWeight.Medium,
|
29
|
+
fontSize = 11.sp,
|
30
|
+
lineHeight = 16.sp,
|
31
|
+
letterSpacing = 0.5.sp
|
32
|
+
)
|
33
|
+
*/
|
34
|
+
)
|