fragment_clone_voice.xml 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <layout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools">
  5. <data>
  6. <variable
  7. name="cloneVoiceViewModel"
  8. type="com.atmob.voiceai.module.clonevoice.CloneVoiceViewModel" />
  9. <import type="com.atmob.voiceai.module.clonevoice.CloneState" />
  10. <import type="com.atmob.voiceai.utils.DateUtil" />
  11. <import type="com.atmob.common.ui.SizeUtil" />
  12. </data>
  13. <androidx.constraintlayout.widget.ConstraintLayout
  14. android:layout_width="match_parent"
  15. android:layout_height="match_parent">
  16. <androidx.core.widget.NestedScrollView
  17. android:id="@+id/scroll_view"
  18. android:layout_width="match_parent"
  19. android:layout_height="match_parent">
  20. <androidx.constraintlayout.widget.ConstraintLayout
  21. android:layout_width="match_parent"
  22. android:layout_height="wrap_content">
  23. <Space
  24. android:id="@+id/space_status"
  25. android:layout_width="match_parent"
  26. android:layout_height="@{SizeUtil.getStatusBarHeight(), default=@dimen/app_status_bar_height}"
  27. app:layout_constraintTop_toTopOf="parent" />
  28. <Space
  29. android:id="@+id/space1"
  30. android:layout_width="match_parent"
  31. android:layout_height="0dp"
  32. app:layout_constraintDimensionRatio="360:50"
  33. app:layout_constraintTop_toBottomOf="@id/space_status" />
  34. <ImageView
  35. android:layout_width="match_parent"
  36. android:layout_height="0dp"
  37. android:src="@drawable/bg_clone_voice_head_background"
  38. app:layout_constraintDimensionRatio="1080:620"
  39. app:layout_constraintTop_toTopOf="parent" />
  40. <ImageView
  41. android:id="@+id/iv_logo"
  42. android:layout_width="0dp"
  43. android:layout_height="0dp"
  44. android:src="@drawable/icon_clone_voice_logo"
  45. app:layout_constraintDimensionRatio="216:203"
  46. app:layout_constraintEnd_toEndOf="parent"
  47. app:layout_constraintStart_toStartOf="parent"
  48. app:layout_constraintTop_toBottomOf="@+id/space1"
  49. app:layout_constraintWidth_percent="0.1833333333333333" />
  50. <Space
  51. android:id="@+id/space2"
  52. android:layout_width="match_parent"
  53. android:layout_height="0dp"
  54. app:layout_constraintDimensionRatio="360:50"
  55. app:layout_constraintTop_toBottomOf="@+id/iv_logo" />
  56. <TextView
  57. android:id="@+id/tv_clone_tip"
  58. android:layout_width="wrap_content"
  59. android:layout_height="wrap_content"
  60. android:layout_marginStart="@dimen/clone_voice_padding"
  61. android:text="@{cloneVoiceViewModel.cloneTip}"
  62. android:textColor="@color/white"
  63. android:textSize="26sp"
  64. android:textStyle="bold"
  65. app:layout_constraintStart_toStartOf="parent"
  66. app:layout_constraintTop_toBottomOf="@+id/space2"
  67. tools:text="CREATE YOUR OWN \nAI VOICE" />
  68. <TextView
  69. android:id="@+id/tv_clone_hint"
  70. android:layout_width="match_parent"
  71. android:layout_height="wrap_content"
  72. android:layout_marginHorizontal="@dimen/clone_voice_padding"
  73. android:layout_marginTop="12dp"
  74. android:text="@string/clone_voice_hint"
  75. android:textColor="@color/white80"
  76. android:textSize="14sp"
  77. app:layout_constraintTop_toBottomOf="@+id/tv_clone_tip" />
  78. <Space
  79. android:id="@+id/space3"
  80. android:layout_width="match_parent"
  81. android:layout_height="0dp"
  82. app:layout_constraintDimensionRatio="360:56"
  83. app:layout_constraintTop_toBottomOf="@+id/tv_clone_hint" />
  84. <TextView
  85. android:id="@+id/tv_clone_hint2"
  86. isGone="@{cloneVoiceViewModel.cloneState == CloneState.CLONE_SUCCESS}"
  87. android:layout_width="match_parent"
  88. android:layout_height="wrap_content"
  89. android:layout_marginHorizontal="@dimen/clone_voice_padding"
  90. android:text="@string/clone_voice_hint2"
  91. android:textColor="@color/white80"
  92. android:textSize="14sp"
  93. app:layout_constraintTop_toBottomOf="@+id/space3" />
  94. <Space
  95. android:id="@+id/space4"
  96. isGone="@{cloneVoiceViewModel.cloneState == CloneState.CLONE_SUCCESS}"
  97. android:layout_width="match_parent"
  98. android:layout_height="0dp"
  99. app:layout_constraintDimensionRatio="360:12"
  100. app:layout_constraintTop_toBottomOf="@+id/tv_clone_hint2" />
  101. <androidx.constraintlayout.widget.ConstraintLayout
  102. isGone="@{cloneVoiceViewModel.cloneState != CloneState.NO_UPLOAD_DATA}"
  103. android:layout_width="match_parent"
  104. android:layout_height="wrap_content"
  105. android:paddingBottom="@dimen/clone_voice_padding"
  106. app:layout_constraintTop_toBottomOf="@+id/space4"
  107. tools:visibility="gone">
  108. <View
  109. android:id="@+id/v_clone_upload"
  110. android:layout_width="match_parent"
  111. android:layout_height="0dp"
  112. android:layout_marginHorizontal="@dimen/clone_voice_padding"
  113. android:background="@drawable/bg_clone_card"
  114. android:onClick="@{()-> cloneVoiceViewModel.onLocalUploadClick()}"
  115. app:layout_constraintDimensionRatio="312:80"
  116. app:layout_constraintTop_toTopOf="parent" />
  117. <ImageView
  118. android:id="@+id/iv_clone_upload"
  119. android:layout_width="0dp"
  120. android:layout_height="0dp"
  121. android:layout_marginStart="16dp"
  122. android:src="@drawable/icon_clone_upload"
  123. app:layout_constraintBottom_toBottomOf="@+id/v_clone_upload"
  124. app:layout_constraintDimensionRatio="1:1"
  125. app:layout_constraintStart_toStartOf="@+id/v_clone_upload"
  126. app:layout_constraintTop_toTopOf="@+id/v_clone_upload"
  127. app:layout_constraintWidth_percent="0.1" />
  128. <TextView
  129. android:id="@+id/tv_clone_upload"
  130. android:layout_width="wrap_content"
  131. android:layout_height="wrap_content"
  132. android:layout_marginStart="10dp"
  133. android:text="@string/clone_voice_upload"
  134. android:textColor="@color/white"
  135. android:textSize="17sp"
  136. android:textStyle="bold"
  137. app:layout_constraintBottom_toTopOf="@+id/tv_clone_upload_tips"
  138. app:layout_constraintStart_toEndOf="@+id/iv_clone_upload"
  139. app:layout_constraintTop_toTopOf="@+id/iv_clone_upload"
  140. app:layout_constraintVertical_chainStyle="packed" />
  141. <TextView
  142. android:id="@+id/tv_clone_upload_tips"
  143. android:layout_width="wrap_content"
  144. android:layout_height="wrap_content"
  145. android:layout_marginTop="4dp"
  146. android:text="@string/clone_voice_upload_tips"
  147. android:textColor="@color/white80"
  148. app:layout_constraintBottom_toBottomOf="@+id/iv_clone_upload"
  149. app:layout_constraintStart_toStartOf="@+id/tv_clone_upload"
  150. app:layout_constraintTop_toBottomOf="@+id/tv_clone_upload" />
  151. <ImageView
  152. android:layout_width="0dp"
  153. android:layout_height="0dp"
  154. android:layout_marginEnd="16dp"
  155. android:src="@drawable/icon_clone_right_arrow"
  156. app:layout_constraintBottom_toBottomOf="@+id/v_clone_upload"
  157. app:layout_constraintDimensionRatio="1:1"
  158. app:layout_constraintEnd_toEndOf="@+id/v_clone_upload"
  159. app:layout_constraintTop_toTopOf="@+id/v_clone_upload"
  160. app:layout_constraintWidth_percent="0.1" />
  161. <View
  162. android:id="@+id/v_clone_record"
  163. android:layout_width="match_parent"
  164. android:layout_height="0dp"
  165. android:layout_marginHorizontal="@dimen/clone_voice_padding"
  166. android:layout_marginTop="8dp"
  167. android:background="@drawable/bg_clone_card"
  168. android:onClick="@{()-> cloneVoiceViewModel.onRecordClick()}"
  169. app:layout_constraintDimensionRatio="312:80"
  170. app:layout_constraintTop_toBottomOf="@+id/v_clone_upload" />
  171. <ImageView
  172. android:id="@+id/iv_clone_record"
  173. android:layout_width="0dp"
  174. android:layout_height="0dp"
  175. android:layout_marginStart="16dp"
  176. android:src="@drawable/icon_clone_record"
  177. app:layout_constraintBottom_toBottomOf="@+id/v_clone_record"
  178. app:layout_constraintDimensionRatio="1:1"
  179. app:layout_constraintStart_toStartOf="@+id/v_clone_record"
  180. app:layout_constraintTop_toTopOf="@+id/v_clone_record"
  181. app:layout_constraintWidth_percent="0.1" />
  182. <TextView
  183. android:id="@+id/tv_clone_record"
  184. android:layout_width="wrap_content"
  185. android:layout_height="wrap_content"
  186. android:layout_marginStart="10dp"
  187. android:text="@string/clone_voice_record"
  188. android:textColor="@color/white"
  189. android:textSize="17sp"
  190. android:textStyle="bold"
  191. app:layout_constraintBottom_toTopOf="@+id/tv_clone_record_tips"
  192. app:layout_constraintStart_toEndOf="@+id/iv_clone_record"
  193. app:layout_constraintTop_toTopOf="@+id/iv_clone_record"
  194. app:layout_constraintVertical_chainStyle="packed" />
  195. <TextView
  196. android:id="@+id/tv_clone_record_tips"
  197. android:layout_width="wrap_content"
  198. android:layout_height="wrap_content"
  199. android:layout_marginTop="4dp"
  200. android:text="@string/clone_voice_record_tips"
  201. android:textColor="@color/white80"
  202. app:layout_constraintBottom_toBottomOf="@+id/iv_clone_record"
  203. app:layout_constraintStart_toStartOf="@+id/tv_clone_record"
  204. app:layout_constraintTop_toBottomOf="@+id/tv_clone_record" />
  205. <ImageView
  206. android:layout_width="0dp"
  207. android:layout_height="0dp"
  208. android:layout_marginEnd="16dp"
  209. android:src="@drawable/icon_clone_right_arrow"
  210. app:layout_constraintBottom_toBottomOf="@+id/v_clone_record"
  211. app:layout_constraintDimensionRatio="1:1"
  212. app:layout_constraintEnd_toEndOf="@+id/v_clone_record"
  213. app:layout_constraintTop_toTopOf="@+id/v_clone_record"
  214. app:layout_constraintWidth_percent="0.1" />
  215. </androidx.constraintlayout.widget.ConstraintLayout>
  216. <androidx.constraintlayout.widget.ConstraintLayout
  217. isGone="@{cloneVoiceViewModel.cloneState != CloneState.UPLOAD_CHOICE_LOCAL &amp;&amp; cloneVoiceViewModel.cloneState != CloneState.UPLOAD_CHOICE_RECORDING}"
  218. android:layout_width="match_parent"
  219. android:layout_height="wrap_content"
  220. android:paddingBottom="@dimen/clone_voice_padding"
  221. app:layout_constraintTop_toBottomOf="@+id/space4"
  222. tools:visibility="gone">
  223. <View
  224. android:id="@+id/v_clone_upload_preview"
  225. android:layout_width="match_parent"
  226. android:layout_height="0dp"
  227. android:layout_marginHorizontal="@dimen/clone_voice_padding"
  228. android:background="@drawable/bg_clone_card"
  229. app:layout_constraintDimensionRatio="312:298"
  230. app:layout_constraintTop_toTopOf="parent" />
  231. <TextView
  232. android:id="@+id/tv_clone_upload_preview"
  233. android:layout_width="0dp"
  234. android:layout_height="wrap_content"
  235. android:layout_marginHorizontal="@dimen/clone_voice_padding"
  236. android:ellipsize="middle"
  237. android:gravity="center"
  238. android:singleLine="true"
  239. android:text="@{cloneVoiceViewModel.uploadPreviewName}"
  240. android:textColor="@color/white"
  241. android:textSize="18sp"
  242. android:textStyle="bold"
  243. app:layout_constraintBottom_toBottomOf="@+id/v_clone_upload_preview"
  244. app:layout_constraintEnd_toEndOf="@+id/v_clone_upload_preview"
  245. app:layout_constraintStart_toStartOf="@+id/v_clone_upload_preview"
  246. app:layout_constraintTop_toTopOf="@+id/v_clone_upload_preview"
  247. app:layout_constraintVertical_bias="0.1083032490974729"
  248. tools:text="Love_story.MP3" />
  249. <TextView
  250. android:layout_width="wrap_content"
  251. android:layout_height="wrap_content"
  252. android:layout_marginTop="4dp"
  253. android:text="@{cloneVoiceViewModel.uploadPreviewSize}"
  254. android:textColor="@color/white50"
  255. android:textSize="14sp"
  256. app:layout_constraintEnd_toEndOf="@+id/tv_clone_upload_preview"
  257. app:layout_constraintStart_toStartOf="@+id/tv_clone_upload_preview"
  258. app:layout_constraintTop_toBottomOf="@+id/tv_clone_upload_preview"
  259. tools:text="2.5MB" />
  260. <SeekBar
  261. android:id="@+id/voice_seek_bar"
  262. android:layout_width="0dp"
  263. android:layout_height="wrap_content"
  264. android:layout_marginHorizontal="10dp"
  265. android:max="@{(int)cloneVoiceViewModel.totalDuration}"
  266. android:maxHeight="2dp"
  267. android:minHeight="2dp"
  268. android:paddingStart="6dp"
  269. android:paddingEnd="6dp"
  270. android:progress="@{(int)cloneVoiceViewModel.currentDuration}"
  271. android:progressDrawable="@drawable/shape_preview_clone_audio_seekbar"
  272. android:splitTrack="false"
  273. android:thumb="@drawable/shape_preview_audio_seekbar_thumb"
  274. app:layout_constraintBottom_toBottomOf="@+id/v_clone_upload_preview"
  275. app:layout_constraintEnd_toEndOf="@+id/v_clone_upload_preview"
  276. app:layout_constraintStart_toStartOf="@+id/v_clone_upload_preview"
  277. app:layout_constraintTop_toTopOf="@+id/v_clone_upload_preview"
  278. app:layout_constraintVertical_bias="0.3146853146853147"
  279. tools:progress="30" />
  280. <TextView
  281. android:id="@+id/tv_current_time"
  282. android:layout_width="wrap_content"
  283. android:layout_height="wrap_content"
  284. android:layout_marginStart="6dp"
  285. android:layout_marginTop="3dp"
  286. android:text="@{DateUtil.formatDuration(cloneVoiceViewModel.currentDuration)}"
  287. android:textColor="@color/white50"
  288. android:textSize="12sp"
  289. app:layout_constraintLeft_toLeftOf="@+id/voice_seek_bar"
  290. app:layout_constraintTop_toBottomOf="@+id/voice_seek_bar"
  291. tools:text="00:53" />
  292. <TextView
  293. android:id="@+id/tv_total_time"
  294. android:layout_width="wrap_content"
  295. android:layout_height="wrap_content"
  296. android:layout_marginEnd="6dp"
  297. android:text="@{DateUtil.formatDuration(cloneVoiceViewModel.totalDuration)}"
  298. android:textColor="@color/white50"
  299. android:textSize="12sp"
  300. app:layout_constraintEnd_toEndOf="@id/voice_seek_bar"
  301. app:layout_constraintTop_toBottomOf="@+id/voice_seek_bar"
  302. app:layout_constraintTop_toTopOf="@+id/tv_current_time"
  303. tools:text="02:53" />
  304. <ImageView
  305. android:id="@+id/iv_voice_reduce"
  306. android:layout_width="0dp"
  307. android:layout_height="0dp"
  308. android:src="@drawable/icon_voice_reduce"
  309. app:layout_constraintBottom_toBottomOf="@+id/iv_play"
  310. app:layout_constraintDimensionRatio="1:1"
  311. app:layout_constraintEnd_toEndOf="@+id/v_clone_upload_preview"
  312. app:layout_constraintHorizontal_bias="0.1739130434782609"
  313. app:layout_constraintStart_toStartOf="@+id/v_clone_upload_preview"
  314. app:layout_constraintTop_toTopOf="@+id/iv_play" />
  315. <ImageView
  316. android:id="@+id/iv_play"
  317. android:layout_width="0dp"
  318. android:layout_height="0dp"
  319. android:src="@{cloneVoiceViewModel.isPlay ? @drawable/icon_voice_playing: @drawable/icon_voice_suspend}"
  320. app:layout_constraintBottom_toBottomOf="@+id/v_clone_upload_preview"
  321. app:layout_constraintDimensionRatio="1:1"
  322. app:layout_constraintEnd_toEndOf="@+id/v_clone_upload_preview"
  323. app:layout_constraintStart_toStartOf="@+id/v_clone_upload_preview"
  324. app:layout_constraintTop_toTopOf="@+id/v_clone_upload_preview"
  325. app:layout_constraintVertical_bias="0.4961832061068702"
  326. app:layout_constraintWidth_percent="0.1"
  327. tools:src="@drawable/icon_voice_playing" />
  328. <ImageView
  329. android:id="@+id/iv_voice_speed"
  330. android:layout_width="0dp"
  331. android:layout_height="0dp"
  332. android:src="@drawable/icon_voice_speed_up"
  333. app:layout_constraintBottom_toBottomOf="@+id/iv_play"
  334. app:layout_constraintDimensionRatio="1:1"
  335. app:layout_constraintEnd_toEndOf="@+id/v_clone_upload_preview"
  336. app:layout_constraintHorizontal_bias="0.8260869565217391"
  337. app:layout_constraintStart_toStartOf="@+id/v_clone_upload_preview"
  338. app:layout_constraintTop_toTopOf="@+id/iv_play" />
  339. <TextView
  340. android:id="@+id/tv_voice_speed"
  341. android:layout_width="0dp"
  342. android:layout_height="0dp"
  343. android:background="@drawable/bg_voice_ai_btn"
  344. android:gravity="center"
  345. android:onClick="@{()-> cloneVoiceViewModel.onCloneVoiceClick(cloneVoiceViewModel.cloneState)}"
  346. android:text="@string/clone_voice_btn_txt"
  347. android:textColor="@color/colorPrimary"
  348. android:textSize="17sp"
  349. android:textStyle="bold"
  350. app:layout_constraintBottom_toBottomOf="@+id/v_clone_upload_preview"
  351. app:layout_constraintDimensionRatio="256:48"
  352. app:layout_constraintEnd_toEndOf="@+id/v_clone_upload_preview"
  353. app:layout_constraintStart_toStartOf="@+id/v_clone_upload_preview"
  354. app:layout_constraintTop_toTopOf="@+id/v_clone_upload_preview"
  355. app:layout_constraintVertical_bias="0.808"
  356. app:layout_constraintWidth_percent="0.7111111111111111" />
  357. <TextView
  358. android:layout_width="wrap_content"
  359. android:layout_height="wrap_content"
  360. android:onClick="@{()-> cloneVoiceViewModel.cloneState == CloneState.UPLOAD_CHOICE_LOCAL ? cloneVoiceViewModel.onLocalReSelectClick() : cloneVoiceViewModel.onReRecordClick()}"
  361. android:text="@{cloneVoiceViewModel.cloneState == CloneState.UPLOAD_CHOICE_LOCAL ? @string/clone_voice_reselect: @string/clone_voice_start_over }"
  362. android:textColor="@color/colorPrimaryVariant"
  363. android:textSize="17sp"
  364. app:layout_constraintBottom_toBottomOf="@+id/v_clone_upload_preview"
  365. app:layout_constraintEnd_toEndOf="@+id/v_clone_upload_preview"
  366. app:layout_constraintStart_toStartOf="@+id/v_clone_upload_preview"
  367. app:layout_constraintTop_toTopOf="@+id/v_clone_upload_preview"
  368. app:layout_constraintVertical_bias="0.960431654676259"
  369. tools:text="Reselect" />
  370. </androidx.constraintlayout.widget.ConstraintLayout>
  371. <androidx.constraintlayout.widget.ConstraintLayout
  372. isGone="@{cloneVoiceViewModel.cloneState != CloneState.CLONE_SUCCESS}"
  373. android:layout_width="match_parent"
  374. android:layout_height="wrap_content"
  375. android:paddingBottom="@dimen/clone_voice_padding"
  376. app:layout_constraintTop_toBottomOf="@+id/space4"
  377. tools:visibility="visible">
  378. <View
  379. android:id="@+id/v_clone_success_preview"
  380. android:layout_width="match_parent"
  381. android:layout_height="0dp"
  382. android:layout_marginHorizontal="@dimen/clone_voice_padding"
  383. android:background="@drawable/bg_clone_card"
  384. app:layout_constraintDimensionRatio="312:154"
  385. app:layout_constraintTop_toTopOf="parent" />
  386. <ImageView
  387. android:id="@+id/iv_clone_success"
  388. android:layout_width="0dp"
  389. android:layout_height="0dp"
  390. android:src="@drawable/icon_clone_success"
  391. app:layout_constraintBottom_toBottomOf="@+id/v_clone_success_preview"
  392. app:layout_constraintDimensionRatio="1:1"
  393. app:layout_constraintEnd_toEndOf="@id/v_clone_success_preview"
  394. app:layout_constraintHorizontal_bias="0.072463768115942"
  395. app:layout_constraintStart_toStartOf="@+id/v_clone_success_preview"
  396. app:layout_constraintTop_toTopOf="@+id/v_clone_success_preview"
  397. app:layout_constraintVertical_bias="0.2542372881355932"
  398. app:layout_constraintWidth_percent="0.1" />
  399. <TextView
  400. android:id="@+id/tv_clone_success_title"
  401. android:layout_width="wrap_content"
  402. android:layout_height="wrap_content"
  403. android:layout_marginStart="12dp"
  404. android:text="@string/clone_voice_success_title"
  405. android:textColor="@color/white"
  406. android:textSize="17sp"
  407. android:textStyle="bold"
  408. app:layout_constraintBottom_toTopOf="@+id/tv_clone_success_hint"
  409. app:layout_constraintStart_toEndOf="@+id/iv_clone_success"
  410. app:layout_constraintTop_toTopOf="@+id/iv_clone_success"
  411. app:layout_constraintVertical_chainStyle="packed" />
  412. <TextView
  413. android:id="@+id/tv_clone_success_hint"
  414. android:layout_width="0dp"
  415. android:layout_height="wrap_content"
  416. android:layout_marginEnd="20dp"
  417. android:text="@string/clone_voice_success_desc"
  418. android:textColor="@color/white80"
  419. android:textSize="12sp"
  420. app:layout_constraintBottom_toBottomOf="@id/iv_clone_success"
  421. app:layout_constraintEnd_toEndOf="@+id/v_clone_success_preview"
  422. app:layout_constraintStart_toStartOf="@+id/tv_clone_success_title"
  423. app:layout_constraintTop_toBottomOf="@+id/tv_clone_success_title" />
  424. <TextView
  425. android:id="@+id/tv_clone_used"
  426. android:layout_width="0dp"
  427. android:layout_height="0dp"
  428. android:background="@drawable/bg_use_clone_voice"
  429. android:gravity="center"
  430. android:onClick="@{()->cloneVoiceViewModel.useCloneVoiceClick()}"
  431. android:text="@string/clone_voice_used_txt"
  432. android:textColor="@color/white"
  433. android:textSize="15sp"
  434. android:textStyle="bold"
  435. app:layout_constraintBottom_toBottomOf="@+id/v_clone_success_preview"
  436. app:layout_constraintDimensionRatio="162:36"
  437. app:layout_constraintHorizontal_chainStyle="packed"
  438. app:layout_constraintLeft_toLeftOf="@+id/v_clone_success_preview"
  439. app:layout_constraintRight_toLeftOf="@+id/tv_clone_delete"
  440. app:layout_constraintTop_toTopOf="@+id/v_clone_success_preview"
  441. app:layout_constraintVertical_bias="0.8305084745762712"
  442. app:layout_constraintWidth_percent="0.45" />
  443. <TextView
  444. android:id="@+id/tv_clone_delete"
  445. android:layout_width="0dp"
  446. android:layout_height="0dp"
  447. android:layout_marginStart="12dp"
  448. android:background="@drawable/bg_clone_voice_delete"
  449. android:gravity="center"
  450. android:onClick="@{()-> cloneVoiceViewModel.onDeleteClick()}"
  451. android:text="@string/clone_voice_delete_txt"
  452. android:textColor="@color/colorPrimary"
  453. android:textSize="15sp"
  454. android:textStyle="bold"
  455. app:layout_constraintBottom_toBottomOf="@+id/tv_clone_used"
  456. app:layout_constraintDimensionRatio="98:36"
  457. app:layout_constraintLeft_toRightOf="@+id/tv_clone_used"
  458. app:layout_constraintRight_toRightOf="@+id/v_clone_success_preview"
  459. app:layout_constraintTop_toTopOf="@+id/tv_clone_used"
  460. app:layout_constraintWidth_percent="0.2722222222222222" />
  461. </androidx.constraintlayout.widget.ConstraintLayout>
  462. <androidx.constraintlayout.widget.ConstraintLayout
  463. android:id="@+id/clone_voice_record_layout"
  464. isGone="@{cloneVoiceViewModel.cloneState != CloneState.RECORDING_VOICE}"
  465. android:layout_width="match_parent"
  466. android:layout_height="wrap_content"
  467. android:paddingBottom="@dimen/clone_voice_padding"
  468. app:layout_constraintTop_toBottomOf="@+id/space4"
  469. tools:visibility="gone">
  470. <View
  471. android:id="@+id/v_record_audio_preview"
  472. android:layout_width="match_parent"
  473. android:layout_height="0dp"
  474. android:layout_marginHorizontal="@dimen/clone_voice_padding"
  475. android:background="@drawable/bg_clone_card"
  476. app:layout_constraintDimensionRatio="312:309"
  477. app:layout_constraintTop_toTopOf="parent" />
  478. <ImageView
  479. android:id="@+id/iv_record_audio"
  480. android:layout_width="0dp"
  481. android:layout_height="0dp"
  482. android:layout_marginStart="12dp"
  483. android:layout_marginTop="10dp"
  484. android:src="@drawable/icon_clone_voice_record"
  485. app:layout_constraintDimensionRatio="1:1"
  486. app:layout_constraintStart_toStartOf="@+id/v_record_audio_preview"
  487. app:layout_constraintTop_toTopOf="@+id/v_record_audio_preview"
  488. app:layout_constraintWidth_percent="0.05" />
  489. <TextView
  490. android:layout_width="wrap_content"
  491. android:layout_height="wrap_content"
  492. android:layout_marginStart="3dp"
  493. android:text="@string/record_title"
  494. android:textColor="@color/white80"
  495. android:textSize="12sp"
  496. app:layout_constraintBottom_toBottomOf="@+id/iv_record_audio"
  497. app:layout_constraintStart_toEndOf="@+id/iv_record_audio"
  498. app:layout_constraintTop_toTopOf="@+id/iv_record_audio" />
  499. <Space
  500. android:id="@+id/space6"
  501. android:layout_width="match_parent"
  502. android:layout_height="0dp"
  503. app:layout_constraintDimensionRatio="360:8"
  504. app:layout_constraintTop_toBottomOf="@+id/iv_record_audio" />
  505. <View
  506. android:id="@+id/v_divider"
  507. android:layout_width="0dp"
  508. android:layout_height="1dp"
  509. android:layout_marginHorizontal="12dp"
  510. android:background="@color/white20"
  511. app:layout_constraintEnd_toEndOf="@+id/v_record_audio_preview"
  512. app:layout_constraintStart_toStartOf="@+id/v_record_audio_preview"
  513. app:layout_constraintTop_toBottomOf="@+id/space6" />
  514. <com.atmob.voiceai.widget.AutoScrollTextView
  515. android:id="@+id/tv_record_example"
  516. android:layout_width="0dp"
  517. android:layout_height="0dp"
  518. android:layout_marginHorizontal="12dp"
  519. android:layout_marginTop="6dp"
  520. android:scrollbarSize="0dp"
  521. android:scrollbars="vertical"
  522. android:text="@string/record_example_txt"
  523. android:textColor="@color/white"
  524. android:textSize="16sp"
  525. app:layout_constraintDimensionRatio="288:122"
  526. app:layout_constraintEnd_toEndOf="@+id/v_record_audio_preview"
  527. app:layout_constraintStart_toStartOf="@+id/v_record_audio_preview"
  528. app:layout_constraintTop_toBottomOf="@+id/v_divider" />
  529. <View
  530. android:layout_width="0dp"
  531. android:layout_height="0dp"
  532. android:background="@drawable/bg_record_bottom_shadow"
  533. app:layout_constraintBottom_toBottomOf="@+id/tv_record_example"
  534. app:layout_constraintDimensionRatio="288:40"
  535. app:layout_constraintEnd_toEndOf="@+id/tv_record_example"
  536. app:layout_constraintStart_toStartOf="@+id/tv_record_example" />
  537. <TextView
  538. android:id="@+id/tv_record_time"
  539. android:layout_width="0dp"
  540. android:layout_height="wrap_content"
  541. android:gravity="center"
  542. android:textColor="@color/white"
  543. android:textSize="25sp"
  544. android:text="@{cloneVoiceViewModel.recordTimeTxt}"
  545. android:textStyle="bold"
  546. app:layout_constraintBottom_toBottomOf="@+id/v_record_audio_preview"
  547. app:layout_constraintEnd_toEndOf="@+id/v_record_audio_preview"
  548. app:layout_constraintStart_toStartOf="@+id/v_record_audio_preview"
  549. app:layout_constraintTop_toTopOf="@+id/v_record_audio_preview"
  550. app:layout_constraintVertical_bias="0.6928571428571429"
  551. tools:text="00:05.62" />
  552. <TextView
  553. android:text="@{cloneVoiceViewModel.recordStateDesc}"
  554. android:id="@+id/tv_record_state_desc"
  555. android:layout_width="0dp"
  556. android:layout_height="wrap_content"
  557. android:gravity="center"
  558. android:textSize="12sp"
  559. app:layout_constraintEnd_toEndOf="@+id/v_record_audio_preview"
  560. app:layout_constraintStart_toStartOf="@+id/v_record_audio_preview"
  561. app:layout_constraintTop_toBottomOf="@+id/tv_record_time"
  562. tools:text="Can't clone yet, Keep speaking loud and clear"
  563. tools:textColor="#FF5656" />
  564. <Space
  565. android:id="@+id/space7"
  566. android:layout_width="match_parent"
  567. android:layout_height="0dp"
  568. app:layout_constraintDimensionRatio="360:25.5"
  569. app:layout_constraintTop_toBottomOf="@+id/tv_record_state_desc" />
  570. <View
  571. app:layout_constraintHorizontal_bias="0.5714285714285714"
  572. android:id="@+id/v_record_audio_20sec"
  573. android:layout_width="3dp"
  574. android:layout_height="14dp"
  575. android:background="#7C7D88"
  576. app:layout_constraintBottom_toBottomOf="@+id/progress_record_bar"
  577. app:layout_constraintEnd_toEndOf="@+id/progress_record_bar"
  578. app:layout_constraintStart_toStartOf="@+id/progress_record_bar"
  579. app:layout_constraintTop_toTopOf="@+id/progress_record_bar" />
  580. <TextView
  581. android:text="@string/record_20_sec"
  582. android:layout_marginTop="4dp"
  583. android:textColor="@color/white50"
  584. android:textSize="12sp"
  585. app:layout_constraintStart_toStartOf="@+id/v_record_audio_20sec"
  586. app:layout_constraintEnd_toEndOf="@+id/v_record_audio_20sec"
  587. app:layout_constraintTop_toBottomOf="@+id/v_record_audio_20sec"
  588. android:layout_width="wrap_content"
  589. android:layout_height="wrap_content" />
  590. <View
  591. app:layout_constraintHorizontal_bias="0.8571428571428571"
  592. android:id="@+id/v_record_audio_30sec"
  593. android:layout_width="3dp"
  594. android:layout_height="14dp"
  595. android:background="#7C7D88"
  596. app:layout_constraintBottom_toBottomOf="@+id/progress_record_bar"
  597. app:layout_constraintEnd_toEndOf="@+id/progress_record_bar"
  598. app:layout_constraintStart_toStartOf="@+id/progress_record_bar"
  599. app:layout_constraintTop_toTopOf="@+id/progress_record_bar" />
  600. <TextView
  601. android:text="@string/record_30_sec"
  602. android:layout_marginTop="4dp"
  603. android:textColor="@color/white50"
  604. android:textSize="12sp"
  605. app:layout_constraintStart_toStartOf="@+id/v_record_audio_30sec"
  606. app:layout_constraintEnd_toEndOf="@+id/v_record_audio_30sec"
  607. app:layout_constraintTop_toBottomOf="@+id/v_record_audio_30sec"
  608. android:layout_width="wrap_content"
  609. android:layout_height="wrap_content" />
  610. <com.atmob.voiceai.widget.AudioProgressBar
  611. android:id="@+id/progress_record_bar"
  612. android:layout_width="0dp"
  613. app:startColor="@color/voice_record_0_20"
  614. android:layout_height="4dp"
  615. progressColor="@{cloneVoiceViewModel.recordProgressColor}"
  616. progress="@{cloneVoiceViewModel.recordProgress}"
  617. android:layout_marginHorizontal="16dp"
  618. android:background="#7C7D88"
  619. max="@{(int)cloneVoiceViewModel.recordMaxTime}"
  620. app:layout_constraintEnd_toEndOf="@+id/v_record_audio_preview"
  621. app:layout_constraintStart_toStartOf="@+id/v_record_audio_preview"
  622. app:layout_constraintTop_toBottomOf="@+id/space7" />
  623. <Space
  624. android:id="@+id/space5"
  625. android:layout_width="match_parent"
  626. android:layout_height="0dp"
  627. app:layout_constraintDimensionRatio="360:25"
  628. app:layout_constraintTop_toBottomOf="@+id/v_record_audio_preview" />
  629. <View
  630. android:id="@+id/v_record_audio"
  631. android:layout_width="match_parent"
  632. android:layout_height="0dp"
  633. android:layout_marginHorizontal="@dimen/clone_voice_padding"
  634. android:background="@drawable/bg_recording_btn"
  635. android:onClick="@{()-> cloneVoiceViewModel.onRecordingClick(cloneVoiceViewModel.showStopRecord,cloneVoiceViewModel.recordProgress)}"
  636. app:layout_constraintDimensionRatio="312:48"
  637. app:layout_constraintTop_toBottomOf="@+id/space5" />
  638. <ImageView
  639. android:id="@+id/iv_stop"
  640. android:layout_width="0dp"
  641. android:layout_height="0dp"
  642. android:src="@{cloneVoiceViewModel.showStopRecord ? @drawable/icon_record_stop: @drawable/icon_record_reset}"
  643. app:layout_constraintBottom_toBottomOf="@+id/v_record_audio"
  644. app:layout_constraintDimensionRatio="1:1"
  645. app:layout_constraintHorizontal_chainStyle="packed"
  646. app:layout_constraintLeft_toLeftOf="@+id/v_record_audio"
  647. app:layout_constraintRight_toLeftOf="@+id/tv_stop"
  648. app:layout_constraintTop_toTopOf="@+id/v_record_audio"
  649. app:layout_constraintWidth_percent="0.0666666666666667" />
  650. <TextView
  651. android:id="@+id/tv_stop"
  652. android:layout_width="wrap_content"
  653. android:layout_height="wrap_content"
  654. android:layout_marginStart="6dp"
  655. android:text="@{cloneVoiceViewModel.showStopRecord ? @string/record_stop: @string/record_reset}"
  656. android:textColor="@color/white"
  657. android:textSize="17sp"
  658. android:textStyle="bold"
  659. app:layout_constraintBottom_toBottomOf="@+id/iv_stop"
  660. app:layout_constraintLeft_toRightOf="@+id/iv_stop"
  661. app:layout_constraintRight_toRightOf="@+id/v_record_audio"
  662. app:layout_constraintTop_toTopOf="@+id/iv_stop" />
  663. </androidx.constraintlayout.widget.ConstraintLayout>
  664. </androidx.constraintlayout.widget.ConstraintLayout>
  665. </androidx.core.widget.NestedScrollView>
  666. <View
  667. android:id="@+id/v_status_bar"
  668. android:layout_width="match_parent"
  669. android:layout_height="@{SizeUtil.getStatusBarHeight(), default=@dimen/app_status_bar_height}"
  670. android:alpha="0"
  671. android:background="@color/colorPrimary"
  672. app:layout_constraintTop_toTopOf="parent" />
  673. <View
  674. android:id="@+id/v_menu"
  675. android:layout_width="match_parent"
  676. android:layout_height="0dp"
  677. android:alpha="0"
  678. android:background="@color/colorPrimary"
  679. app:layout_constraintDimensionRatio="360:65"
  680. app:layout_constraintTop_toBottomOf="@+id/v_status_bar" />
  681. <View
  682. android:id="@+id/v_vip_bg"
  683. android:layout_width="0dp"
  684. android:layout_height="0dp"
  685. android:layout_marginStart="@dimen/app_common_page_horizontal_padding"
  686. android:background="@drawable/bg_voice_ai_vip"
  687. android:onClick="@{()-> cloneVoiceViewModel.onGoGetIntegralClick()}"
  688. app:layout_constraintBottom_toBottomOf="@+id/v_menu"
  689. app:layout_constraintDimensionRatio="80:28"
  690. app:layout_constraintStart_toStartOf="@+id/v_menu"
  691. app:layout_constraintTop_toTopOf="@+id/v_menu"
  692. app:layout_constraintWidth_percent="0.2222222222222222" />
  693. <ImageView
  694. android:id="@+id/iv_vip"
  695. android:layout_width="0dp"
  696. android:layout_height="0dp"
  697. android:src="@drawable/icon_total_integration"
  698. app:layout_constraintBottom_toBottomOf="@+id/v_vip_bg"
  699. app:layout_constraintDimensionRatio="39:42"
  700. app:layout_constraintHorizontal_chainStyle="packed"
  701. app:layout_constraintLeft_toLeftOf="@+id/v_vip_bg"
  702. app:layout_constraintRight_toLeftOf="@+id/tv_vip_title"
  703. app:layout_constraintTop_toTopOf="@+id/v_vip_bg"
  704. app:layout_constraintWidth_percent="0.0344444444444444" />
  705. <TextView
  706. android:id="@+id/tv_vip_title"
  707. android:layout_width="wrap_content"
  708. android:layout_height="wrap_content"
  709. android:layout_marginStart="4dp"
  710. android:text="@{String.valueOf(cloneVoiceViewModel.credit)}"
  711. android:textColor="@color/colorPrimaryVariant"
  712. android:textSize="14dp"
  713. app:layout_constraintBottom_toBottomOf="@+id/v_vip_bg"
  714. app:layout_constraintLeft_toRightOf="@+id/iv_vip"
  715. app:layout_constraintRight_toRightOf="@+id/v_vip_bg"
  716. app:layout_constraintTop_toTopOf="@+id/v_vip_bg"
  717. tools:text="200" />
  718. <ImageView
  719. android:id="@+id/iv_setting"
  720. android:layout_width="0dp"
  721. android:layout_height="0dp"
  722. android:layout_marginEnd="16dp"
  723. android:onClick="@{()->cloneVoiceViewModel.onSettingClick()}"
  724. android:src="@drawable/icon_clone_setting"
  725. app:layout_constraintBottom_toBottomOf="@+id/v_menu"
  726. app:layout_constraintDimensionRatio="1:1"
  727. app:layout_constraintEnd_toEndOf="@+id/v_menu"
  728. app:layout_constraintTop_toTopOf="@+id/v_menu"
  729. app:layout_constraintWidth_percent="0.0888888888888889" />
  730. </androidx.constraintlayout.widget.ConstraintLayout>
  731. </layout>