diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index da6ad36..6680f58 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -97,6 +97,7 @@ dependencies {
implementation(libs.com.google.android.flexbox.flexbox)
implementation(libs.play.services.ads.identifier)
implementation("com.github.getActivity:ShapeView:9.8")
+ implementation("com.google.code.gson:gson:2.8.6")
// implementation(libs.android.billing)
// implementation(platform(libs.google.firebase.bom))
// implementation(libs.google.firebase.messaging.ktx)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 7ebc1bb..0721561 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -53,6 +53,7 @@
+
diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/basics/Constants.kt b/app/src/main/java/com/jia/er/nebuluxe/app/basics/Constants.kt
index a3e54c7..28448cb 100644
--- a/app/src/main/java/com/jia/er/nebuluxe/app/basics/Constants.kt
+++ b/app/src/main/java/com/jia/er/nebuluxe/app/basics/Constants.kt
@@ -1,8 +1,10 @@
package com.jia.er.nebuluxe.app.basics
+import com.jia.er.nebuluxe.app.BuildConfig.DEBUG
+
object Constants {
- var isUat = false
+ var isUat = DEBUG
const val Constants_BASE_URL_RES = "https://api-nebuluxetv.nebuluxetv.com/xe/"
const val CONSTANTS_AuthorizationExample = "Authorization"
const val CONSTANTS_device_id = "device-id"
diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeFragment.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeFragment.kt
index 5498b1a..4c8ecd3 100644
--- a/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeFragment.kt
+++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeFragment.kt
@@ -8,14 +8,17 @@ import com.blankj.utilcode.util.NetworkUtils
import com.bumptech.glide.Glide
import com.google.gson.Gson
import com.jia.er.nebuluxe.app.R
+import com.jia.er.nebuluxe.app.basics.BaseActivity
import com.jia.er.nebuluxe.app.basics.BaseFragment
import com.jia.er.nebuluxe.app.basics.Constants
import com.jia.er.nebuluxe.app.data.HomeBannerAndNineSquarepRes
import com.jia.er.nebuluxe.app.data.HomeBannerBean
+import com.jia.er.nebuluxe.app.data.HomeModuleBean
import com.jia.er.nebuluxe.app.data.HomeTopWeekRes
import com.jia.er.nebuluxe.app.databinding.FragmentHomeBinding
import com.jia.er.nebuluxe.app.net.MainViewModel
import com.jia.er.nebuluxe.app.ui.RotateDownPageTransformer
+import com.jia.er.nebuluxe.app.utils.LOG
import com.jia.er.nebuluxe.app.utils.singleClick
import com.jia.er.nebuluxe.app.utils.toast
import com.jia.er.nebuluxe.app.video.PlayerDetailActivity
@@ -38,54 +41,27 @@ class HomeFragment : BaseFragment() {
mViewModel.allModules()
}
binding.tvHot.setOnClickListener {
- singleClick {
- startActivity(
- Intent(
- context,
- HotActivity::class.java
- )
- )
- }
+ skip2Activity(HotActivity::class.java)
}
binding.tvTop.setOnClickListener {
- singleClick {
- startActivity(
- Intent(
- context,
- RankActivity::class.java
- )
- )
- }
+ skip2Activity(RankActivity::class.java)
}
binding.tvFresh.setOnClickListener {
- singleClick {
- startActivity(
- Intent(
- context,
- FreshActivity::class.java
- )
- )
- }
+ skip2Activity(FreshActivity::class.java)
}
binding.tvFresh.setOnClickListener {
- singleClick {
- startActivity(
- Intent(
- context,
- GenresActivity::class.java
- )
- )
- }
+ skip2Activity(GenresActivity::class.java)
}
binding.rlTop.setOnClickListener {
- singleClick {
- startActivity(
- Intent(
- context,
- SearchActivity::class.java
- )
- )
- }
+ skip2Activity(SearchActivity::class.java)
+ }
+ }
+
+ private fun skip2Activity(clazz: Class>) {
+ singleClick {
+ startActivity(
+ Intent(context, clazz)
+ )
}
}
@@ -95,157 +71,13 @@ class HomeFragment : BaseFragment() {
mViewModel.allModulesData.observe(this) {
if (it != null) {
if (it?.data?.list?.isNotEmpty() == true) {
+ LOG.bean("HomeFragment", it)
for (item in it.data.list) {
when (item.module_key) {
- "marquee" -> {
- binding.root.postDelayed({
- dataList.clear()
- val marqueeList =
- gson.fromJson(item.data, Array::class.java)
- .toList()
- marqueeList?.forEach { it1 ->
- dataList.add(it1.name)
- }
- if (dataList.isNotEmpty()) {
- binding?.tvText?.setData(dataList)
- }
- }, 1000)
- }
-
- "home_banner" -> {
- val bannerList =
- gson.fromJson(item.data, Array::class.java)
- .toList()
- if (bannerList?.isNotEmpty() == true) {
- binding?.clFs?.visibility = View.VISIBLE
- val exampleDominantCeoAdapter = HomeMostAdapter()
- val layoutManager =
- LinearLayoutManager(
- context,
- LinearLayoutManager.HORIZONTAL,
- false
- )
- binding?.rvFs?.layoutManager = layoutManager
- binding?.rvFs?.adapter = exampleDominantCeoAdapter
- binding?.rvFs?.isNestedScrollingEnabled = false
- exampleDominantCeoAdapter.submitList(bannerList)
- val video = bannerList[0]
- Glide.with(requireContext()).load(video?.horizontally_img)
- .placeholder(R.drawable.iv_placeholder_h)
- .into(binding.ivFs)
- binding.tvName.text = video.name
- if (video.category.isNotEmpty()) {
- binding.tvTag.visibility = View.VISIBLE
- binding.tvTag.text = video.category[0]
- } else {
- binding.tvTag.visibility = View.INVISIBLE
- }
- binding.ivFs.setOnClickListener {
- startActivity(
- Intent(
- context,
- PlayerDetailActivity::class.java
- ).apply {
- putExtra(
- Constants.CONSTANTS_short_play_id,
- video.short_play_id
- )
- })
- }
- exampleDominantCeoAdapter.setOnItemClickListener { adapter, view, position ->
- exampleDominantCeoAdapter.currentPosition = position
- val video =
- adapter.getItem(position) as HomeBannerBean
- Glide.with(requireContext()).load(video?.horizontally_img)
- .placeholder(R.drawable.iv_placeholder_h)
- .into(binding.ivFs)
- binding.tvName.text = video.name
- if (video.category.isNotEmpty()) {
- binding.tvTag.visibility = View.VISIBLE
- binding.tvTag.text = video.category[0]
- } else {
- binding.tvTag.visibility = View.INVISIBLE
- }
- binding.ivFs.setOnClickListener {
- startActivity(
- Intent(
- context,
- PlayerDetailActivity::class.java
- ).apply {
- putExtra(
- Constants.CONSTANTS_short_play_id,
- video.short_play_id
- )
- })
- }
- exampleDominantCeoAdapter.notifyDataSetChanged()
- }
-
- } else {
- binding?.clFs?.visibility = View.GONE
- }
- }
-
- "home_v3_recommand" -> {
- val homeBannerAndNineSquarepRes =
- gson.fromJson(
- item.data,
- HomeBannerAndNineSquarepRes::class.java
- )
- if (homeBannerAndNineSquarepRes?.list?.isNotEmpty() == true) {
- binding?.clBanner?.visibility = View.VISIBLE
- val exampleHomeBannerAdapter =
- HomeBannerAdapter(homeBannerAndNineSquarepRes?.list)
- binding?.bannerHome?.apply {
- setAdapter(exampleHomeBannerAdapter)
- setBannerGalleryEffect(65, 10, 1f)
- setPageTransformer(RotateDownPageTransformer(10.5f))
- }
- exampleHomeBannerAdapter.setOnBannerListener { data, position ->
- startActivity(
- Intent(
- context,
- PlayerDetailActivity::class.java
- ).apply {
- putExtra(
- Constants.CONSTANTS_short_play_id,
- data?.short_play_id
- )
- })
- }
- } else {
- binding?.clBanner?.visibility = View.GONE
- }
- }
-
- "new_recommand" -> {
- val cagetoryBean =
- gson.fromJson(item.data, HomeTopWeekRes::class.java)
- if (cagetoryBean.list.isNotEmpty()) {
- binding?.clBannerB?.visibility = View.VISIBLE
- val exampleHomeBannerAdapter =
- HomeBannerBottomAdapter(cagetoryBean.list)
- binding?.bannerHomeB?.setBannerGalleryEffect(24, 10, 1f)
- binding?.bannerHomeB?.setAdapter(
- exampleHomeBannerAdapter
- )?.addBannerLifecycleObserver(this)
- ?.setIndicator(binding.indicatorHome, false)
- exampleHomeBannerAdapter.setOnBannerListener { data, position ->
- startActivity(
- Intent(
- context,
- PlayerDetailActivity::class.java
- ).apply {
- putExtra(
- Constants.CONSTANTS_short_play_id,
- data?.short_play_id
- )
- })
- }
- } else {
- binding?.clBannerB?.visibility = View.GONE
- }
- }
+ "marquee" -> setMarqueeData(item)
+ "home_banner" -> setBannerData(item)
+ "home_v3_recommand" -> setRecommendData(item)
+ "new_recommand" -> setNewRecommend(item)
}
}
hideLoading()
@@ -262,6 +94,156 @@ class HomeFragment : BaseFragment() {
}
}
+ private fun setMarqueeData(item: HomeModuleBean.RecommandDataBean) {
+ binding.root.postDelayed({
+ dataList.clear()
+ val marqueeList =
+ gson.fromJson(item.data, Array::class.java)
+ .toList()
+ marqueeList?.forEach { it1 ->
+ dataList.add(it1.name)
+ }
+ if (dataList.isNotEmpty()) {
+ binding?.tvText?.setData(dataList)
+ }
+ }, 1000)
+ }
+
+ private fun setNewRecommend(item: HomeModuleBean.RecommandDataBean) {
+ val cagetoryBean =
+ gson.fromJson(item.data, HomeTopWeekRes::class.java)
+ if (cagetoryBean.list.isNotEmpty()) {
+ binding?.clBannerB?.visibility = View.VISIBLE
+ val exampleHomeBannerAdapter =
+ HomeBannerBottomAdapter(cagetoryBean.list)
+ binding?.bannerHomeB?.setBannerGalleryEffect(24, 10, 1f)
+ binding?.bannerHomeB?.setAdapter(
+ exampleHomeBannerAdapter
+ )?.addBannerLifecycleObserver(this)
+ ?.setIndicator(binding.indicatorHome, false)
+ exampleHomeBannerAdapter.setOnBannerListener { data, position ->
+ startActivity(
+ Intent(
+ context,
+ PlayerDetailActivity::class.java
+ ).apply {
+ putExtra(
+ Constants.CONSTANTS_short_play_id,
+ data?.short_play_id
+ )
+ })
+ }
+ } else {
+ binding?.clBannerB?.visibility = View.GONE
+ }
+ }
+
+ private fun setRecommendData(item: HomeModuleBean.RecommandDataBean) {
+ val homeBannerAndNineSquarepRes =
+ gson.fromJson(
+ item.data,
+ HomeBannerAndNineSquarepRes::class.java
+ )
+ if (homeBannerAndNineSquarepRes?.list?.isNotEmpty() == true) {
+ binding?.clBanner?.visibility = View.VISIBLE
+ val exampleHomeBannerAdapter =
+ HomeBannerAdapter(homeBannerAndNineSquarepRes?.list)
+ binding?.bannerHome?.apply {
+ setAdapter(exampleHomeBannerAdapter)
+ setBannerGalleryEffect(65, 10, 1f)
+ setPageTransformer(RotateDownPageTransformer(10.5f))
+ }
+ exampleHomeBannerAdapter.setOnBannerListener { data, position ->
+ startActivity(
+ Intent(
+ context,
+ PlayerDetailActivity::class.java
+ ).apply {
+ putExtra(
+ Constants.CONSTANTS_short_play_id,
+ data?.short_play_id
+ )
+ })
+ }
+ } else {
+ binding?.clBanner?.visibility = View.GONE
+ }
+ }
+
+ private fun setBannerData(item: HomeModuleBean.RecommandDataBean) {
+ val bannerList =
+ gson.fromJson(item.data, Array::class.java)
+ .toList()
+ if (bannerList?.isNotEmpty() == true) {
+ binding?.clFs?.visibility = View.VISIBLE
+ val exampleDominantCeoAdapter = HomeMostAdapter()
+ val layoutManager =
+ LinearLayoutManager(
+ context,
+ LinearLayoutManager.HORIZONTAL,
+ false
+ )
+ binding?.rvFs?.layoutManager = layoutManager
+ binding?.rvFs?.adapter = exampleDominantCeoAdapter
+ binding?.rvFs?.isNestedScrollingEnabled = false
+ exampleDominantCeoAdapter.submitList(bannerList)
+ val video = bannerList[0]
+ Glide.with(requireContext()).load(video?.horizontally_img)
+ .placeholder(R.drawable.iv_placeholder_h)
+ .into(binding.ivFs)
+ binding.tvName.text = video.name
+ if (video.category.isNotEmpty()) {
+ binding.tvTag.visibility = View.VISIBLE
+ binding.tvTag.text = video.category[0]
+ } else {
+ binding.tvTag.visibility = View.INVISIBLE
+ }
+ binding.ivFs.setOnClickListener {
+ startActivity(
+ Intent(
+ context,
+ PlayerDetailActivity::class.java
+ ).apply {
+ putExtra(
+ Constants.CONSTANTS_short_play_id,
+ video.short_play_id
+ )
+ })
+ }
+ exampleDominantCeoAdapter.setOnItemClickListener { adapter, view, position ->
+ exampleDominantCeoAdapter.currentPosition = position
+ val video =
+ adapter.getItem(position) as HomeBannerBean
+ Glide.with(requireContext()).load(video?.horizontally_img)
+ .placeholder(R.drawable.iv_placeholder_h)
+ .into(binding.ivFs)
+ binding.tvName.text = video.name
+ if (video.category.isNotEmpty()) {
+ binding.tvTag.visibility = View.VISIBLE
+ binding.tvTag.text = video.category[0]
+ } else {
+ binding.tvTag.visibility = View.INVISIBLE
+ }
+ binding.ivFs.setOnClickListener {
+ startActivity(
+ Intent(
+ context,
+ PlayerDetailActivity::class.java
+ ).apply {
+ putExtra(
+ Constants.CONSTANTS_short_play_id,
+ video.short_play_id
+ )
+ })
+ }
+ exampleDominantCeoAdapter.notifyDataSetChanged()
+ }
+
+ } else {
+ binding?.clFs?.visibility = View.GONE
+ }
+ }
+
override fun getViewBinding(): FragmentHomeBinding {
return FragmentHomeBinding.inflate(layoutInflater)
}
diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/InputHistoryAdapter.java b/app/src/main/java/com/jia/er/nebuluxe/app/home/InputHistoryAdapter.java
new file mode 100644
index 0000000..8bfb18f
--- /dev/null
+++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/InputHistoryAdapter.java
@@ -0,0 +1,24 @@
+package com.jia.er.nebuluxe.app.home;
+
+import android.content.Context;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.chad.library.adapter4.BaseQuickAdapter;
+import com.chad.library.adapter4.viewholder.QuickViewHolder;
+import com.jia.er.nebuluxe.app.R;
+
+public class InputHistoryAdapter extends BaseQuickAdapter {
+ @Override
+ protected void onBindViewHolder(@NonNull QuickViewHolder quickAdapterHelper, int i, @Nullable String s) {
+ quickAdapterHelper.setText(R.id.tv_con, s);
+ }
+
+ @NonNull
+ @Override
+ protected QuickViewHolder onCreateViewHolder(@NonNull Context context, @NonNull ViewGroup viewGroup, int i) {
+ return new QuickViewHolder(R.layout.item_input_history, viewGroup);
+ }
+}
diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/InputResultAdapter.java b/app/src/main/java/com/jia/er/nebuluxe/app/home/InputResultAdapter.java
new file mode 100644
index 0000000..be0f3d8
--- /dev/null
+++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/InputResultAdapter.java
@@ -0,0 +1,33 @@
+package com.jia.er.nebuluxe.app.home;
+
+import android.content.Context;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.chad.library.adapter4.BaseQuickAdapter;
+import com.chad.library.adapter4.viewholder.QuickViewHolder;
+import com.jia.er.nebuluxe.app.R;
+import com.jia.er.nebuluxe.app.utils.TextViewUtil;
+
+public class InputResultAdapter extends BaseQuickAdapter {
+ String keyword;
+
+ @Override
+ protected void onBindViewHolder(@NonNull QuickViewHolder quickAdapterHelper, int i, @Nullable String s) {
+ quickAdapterHelper.setText(R.id.tv_con, s);
+ quickAdapterHelper.setText(R.id.tv_title, TextViewUtil.getTextColor(s, keyword, R.color.text_color_pink_dark));
+
+ }
+
+ @NonNull
+ @Override
+ protected QuickViewHolder onCreateViewHolder(@NonNull Context context, @NonNull ViewGroup viewGroup, int i) {
+ return new QuickViewHolder(R.layout.item_search_result, viewGroup);
+ }
+
+ public void setKeyword(String input) {
+ keyword = input;
+ }
+}
diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/SaveFavoritesAdapter.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/SaveFavoritesAdapter.kt
new file mode 100644
index 0000000..a9f939f
--- /dev/null
+++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/SaveFavoritesAdapter.kt
@@ -0,0 +1,61 @@
+package com.jia.er.nebuluxe.app.home
+
+import android.content.Context
+import android.content.res.ColorStateList
+import android.graphics.Color
+import android.graphics.Outline
+import android.view.View
+import android.view.ViewGroup
+import android.view.ViewOutlineProvider
+import android.widget.ImageView
+import android.widget.SeekBar
+import androidx.appcompat.widget.AppCompatSeekBar
+import com.bumptech.glide.Glide
+import com.chad.library.adapter4.BaseQuickAdapter
+import com.chad.library.adapter4.viewholder.QuickViewHolder
+import com.google.android.material.imageview.ShapeableImageView
+import com.google.android.material.shape.RelativeCornerSize
+import com.jia.er.nebuluxe.app.R
+import com.jia.er.nebuluxe.app.data.HomeBannerBean
+
+class SaveFavoritesAdapter :
+ BaseQuickAdapter() {
+ var currentPosition = 0
+ override fun onBindViewHolder(
+ holder: QuickViewHolder,
+ position: Int,
+ item: String?
+ ) {
+ holder.getView(R.id.progress_bar).setProgress(position * 13)
+// val view = holder.getView(R.id.example_iv_icon_ceo)
+// Glide.with(context).load(item?.image_url).placeholder(R.drawable.iv_placeholder_v)
+// .into(view)
+// view.scaleType = ImageView.ScaleType.CENTER_CROP
+// view.shapeAppearanceModel = view.shapeAppearanceModel
+// .toBuilder()
+// .setAllCornerSizes(RelativeCornerSize(0.5f))
+// .build()
+// view.elevation = 0f
+// view.clipToOutline = true
+// view.outlineProvider = object : ViewOutlineProvider() {
+// override fun getOutline(view: View, outline: Outline) {
+// val size = minOf(view.width, view.height)
+// outline.setOval(0, 0, size, size)
+// }
+// }
+//
+// if (currentPosition == position) {
+// holder.setVisible(R.id.view, false)
+// } else {
+// holder.setVisible(R.id.view, true)
+// }
+ }
+
+ override fun onCreateViewHolder(
+ context: Context,
+ parent: ViewGroup,
+ viewType: Int
+ ): QuickViewHolder {
+ return QuickViewHolder(R.layout.item_saved_favory, parent)
+ }
+}
diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/SaveHistoryAdapter.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/SaveHistoryAdapter.kt
new file mode 100644
index 0000000..712153e
--- /dev/null
+++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/SaveHistoryAdapter.kt
@@ -0,0 +1,68 @@
+package com.jia.er.nebuluxe.app.home
+
+import android.content.Context
+import android.content.res.ColorStateList
+import android.graphics.Color
+import android.graphics.Outline
+import android.view.View
+import android.view.ViewGroup
+import android.view.ViewOutlineProvider
+import android.widget.ImageView
+import android.widget.SeekBar
+import com.bumptech.glide.Glide
+import com.chad.library.adapter4.BaseQuickAdapter
+import com.chad.library.adapter4.viewholder.QuickViewHolder
+import com.google.android.material.imageview.ShapeableImageView
+import com.google.android.material.shape.RelativeCornerSize
+import com.jia.er.nebuluxe.app.R
+import com.jia.er.nebuluxe.app.data.HomeBannerBean
+
+class SaveHistoryAdapter :
+ BaseQuickAdapter() {
+ var currentPosition = 0
+ override fun onBindViewHolder(
+ holder: QuickViewHolder,
+ position: Int,
+ item: String?
+ ) {
+ holder.getView(R.id.line).visibility = if (position == 0) View.GONE else View.VISIBLE
+ holder.getView(R.id.progress_bar).setProgress(position * 10)
+ holder.setSelected(R.id.iv_star, position % 2 == 0)
+ holder.setText(R.id.tv_name, "Name " + position)
+ holder.setText(R.id.tv_con, "Content " + position)
+ holder.setText(
+ R.id.tv_viewed,
+ String.format(context.getString(R.string.viewed_format), position.toString())
+ )
+// val view = holder.getView(R.id.example_iv_icon_ceo)
+// Glide.with(context).load(item?.image_url).placeholder(R.drawable.iv_placeholder_v)
+// .into(view)
+// view.scaleType = ImageView.ScaleType.CENTER_CROP
+// view.shapeAppearanceModel = view.shapeAppearanceModel
+// .toBuilder()
+// .setAllCornerSizes(RelativeCornerSize(0.5f))
+// .build()
+// view.elevation = 0f
+// view.clipToOutline = true
+// view.outlineProvider = object : ViewOutlineProvider() {
+// override fun getOutline(view: View, outline: Outline) {
+// val size = minOf(view.width, view.height)
+// outline.setOval(0, 0, size, size)
+// }
+// }
+//
+// if (currentPosition == position) {
+// holder.setVisible(R.id.view, false)
+// } else {
+// holder.setVisible(R.id.view, true)
+// }
+ }
+
+ override fun onCreateViewHolder(
+ context: Context,
+ parent: ViewGroup,
+ viewType: Int
+ ): QuickViewHolder {
+ return QuickViewHolder(R.layout.item_saved_history, parent)
+ }
+}
diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/SavedFragment.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/SavedFragment.kt
index 02db783..9f87f4d 100644
--- a/app/src/main/java/com/jia/er/nebuluxe/app/home/SavedFragment.kt
+++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/SavedFragment.kt
@@ -1,7 +1,10 @@
package com.jia.er.nebuluxe.app.home
import android.content.Intent
+import android.graphics.Color
+import android.view.View
import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.LinearLayoutManager
import com.jia.er.nebuluxe.app.data.CollectionRes
import com.blankj.utilcode.util.NetworkUtils
import com.chad.library.adapter4.layoutmanager.QuickGridLayoutManager
@@ -9,16 +12,67 @@ import com.jia.er.nebuluxe.app.R
import com.jia.er.nebuluxe.app.basics.BaseFragment
import com.jia.er.nebuluxe.app.databinding.FragmentSavedBinding
import com.jia.er.nebuluxe.app.net.MainViewModel
+import com.jia.er.nebuluxe.app.utils.DialogUtils
import com.jia.er.nebuluxe.app.utils.singleClick
import com.jia.er.nebuluxe.app.utils.toast
class SavedFragment : BaseFragment() {
private var page: Int = 1
-// private var myListAdapter: MyListAdapter? = null
+
+ // private var myListAdapter: MyListAdapter? = null
private var edit = false
private var current: Int = 0
private val mViewModel by lazy { ViewModelProvider(this)[MainViewModel::class.java] }
override fun top() {
+ binding.btnFavor.isSelected = true
+ binding.btnFavor.setOnClickListener {
+ binding.btnFavor.isSelected = true
+ binding.btnHistory.isSelected = false
+ binding.rvFavor.visibility = View.VISIBLE
+ binding.rvHistory.visibility = View.GONE
+ }
+ binding.btnHistory.setOnClickListener {
+ binding.btnFavor.isSelected = false
+ binding.btnHistory.isSelected = true
+ binding.rvFavor.visibility = View.GONE
+ binding.rvHistory.visibility = View.VISIBLE
+ }
+ val layoutManager = QuickGridLayoutManager(requireContext(), 3)
+ binding.rvFavor.layoutManager = layoutManager
+ val adapter = SaveFavoritesAdapter()
+ binding.rvFavor.adapter = adapter
+ val debug = listOf(
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ )
+ adapter.items = debug
+ val layoutManager1 = LinearLayoutManager(requireContext())
+ binding.rvHistory.layoutManager = layoutManager1
+ val adapter1 = SaveHistoryAdapter()
+ binding.rvHistory.adapter = adapter1
+ adapter1.items = debug
+ adapter.addOnItemChildClickListener(R.id.iv_favorites_delete, { adapter, view, position ->
+ DialogUtils.showDoubleBtnDialog(
+ requireContext(),
+ "Remove from Favorites?",
+ "This drama will be removed from your favorites.",
+ "Remove",
+ "Cancel",
+ R.drawable.ic_star_remove,
+ object : DialogUtils.DialogOnClickListener {
+
+ override fun onConfirmClick() {
+ toast("确认移除接口")
+ }
+
+ override fun onCancelClick() {
+ }
+ })
+ })
// if (NetworkUtils.isConnected()) {
// showLoading()
// mViewModel.getCollections(page)
diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/SearchActivity.java b/app/src/main/java/com/jia/er/nebuluxe/app/home/SearchActivity.java
new file mode 100644
index 0000000..6564637
--- /dev/null
+++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/SearchActivity.java
@@ -0,0 +1,85 @@
+package com.jia.er.nebuluxe.app.home;
+
+import static com.blankj.utilcode.util.KeyboardUtils.hideSoftInput;
+
+import android.text.TextUtils;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.inputmethod.EditorInfo;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.viewbinding.ViewBinding;
+
+import com.jia.er.nebuluxe.app.basics.BaseActivity;
+import com.jia.er.nebuluxe.app.databinding.ActivityMainBinding;
+import com.jia.er.nebuluxe.app.databinding.ActivitySearchBinding;
+import com.jia.er.nebuluxe.app.utils.AppUtil;
+import com.jia.er.nebuluxe.app.utils.LOG;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SearchActivity extends BaseActivity {
+ InputResultAdapter adapter2;
+
+ @Override
+ protected void top() {
+ InputHistoryAdapter adapter = new InputHistoryAdapter();
+ LinearLayoutManager manager = new LinearLayoutManager(this);
+ manager.setOrientation(LinearLayoutManager.HORIZONTAL);
+ binding.rvInputHistory.setLayoutManager(manager);
+ binding.rvInputHistory.setAdapter(adapter);
+
+ LinearLayoutManager manager2 = new LinearLayoutManager(this);
+ manager2.setOrientation(LinearLayoutManager.VERTICAL);
+ adapter2 = new InputResultAdapter();
+ binding.rvResult.setLayoutManager(manager2);
+ binding.rvResult.setAdapter(adapter2);
+ List debug = new ArrayList<>();
+ debug.add("Love");
+ debug.add("CEO");
+ debug.add("Recersal Of Fate");
+ adapter.setItems(debug);
+ binding.tvInput.setOnEditorActionListener((textView, actionId, keyEvent) -> {
+ String input = binding.tvInput.getText() == null ? "" : binding.tvInput.getText().toString();
+ LOG.d("SearchActivity.actionId", String.valueOf(actionId));
+ LOG.d("SearchActivity.input", input);
+ if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_SEND) {
+ if (TextUtils.isEmpty(input)) {
+ binding.emptyPan.setVisibility(View.VISIBLE);
+ binding.resultPan.setVisibility(View.GONE);
+ } else {
+ binding.emptyPan.setVisibility(View.GONE);
+ binding.resultPan.setVisibility(View.VISIBLE);
+ onSearch(input);
+ }
+ return true;
+ }
+ return false;
+ });
+ }
+
+ private void onSearch(String input) {
+ adapter2.setKeyword(input);
+ List debug = new ArrayList<>();
+ for (int i = 0; i < input.length(); i++) {
+ debug.add(input + " : DEBUG " + i);
+ }
+ adapter2.setItems(debug);
+ adapter2.notifyDataSetChanged();
+ hideSoftInput(this);
+ }
+
+ @Override
+ protected void center() {
+
+ }
+
+ @NonNull
+ @Override
+ protected ActivitySearchBinding getViewBinding() {
+ return ActivitySearchBinding.inflate(getLayoutInflater());
+ }
+}
diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/me/MeFragment.kt b/app/src/main/java/com/jia/er/nebuluxe/app/me/MeFragment.kt
index bc2af36..e7a2dfa 100644
--- a/app/src/main/java/com/jia/er/nebuluxe/app/me/MeFragment.kt
+++ b/app/src/main/java/com/jia/er/nebuluxe/app/me/MeFragment.kt
@@ -63,7 +63,7 @@ class MeFragment : BaseFragment() {
getString(R.string.dialog_content_logout),
getString(R.string.dialog_confirm_btn_logout),
getString(R.string.dialog_cancel_btn_logout),
- R.mipmap.ic_logout,
+ R.drawable.ic_logout,
object : DialogOnClickListener {
override fun onConfirmClick() {
diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/net/MainRequest.kt b/app/src/main/java/com/jia/er/nebuluxe/app/net/MainRequest.kt
index eb4291e..c93e6fa 100644
--- a/app/src/main/java/com/jia/er/nebuluxe/app/net/MainRequest.kt
+++ b/app/src/main/java/com/jia/er/nebuluxe/app/net/MainRequest.kt
@@ -50,8 +50,7 @@ object MainRequest {
fun homeTop(): LiveData>> = handleData {
- appService.homeTop()
- .response()
+ appService.homeTop().response()
}
diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/net/Retrofit.kt b/app/src/main/java/com/jia/er/nebuluxe/app/net/Retrofit.kt
index dab04f2..f8d5a2e 100644
--- a/app/src/main/java/com/jia/er/nebuluxe/app/net/Retrofit.kt
+++ b/app/src/main/java/com/jia/er/nebuluxe/app/net/Retrofit.kt
@@ -100,6 +100,7 @@ object Retrofit {
Constants.CONSTANTS_system_version,
Build.VERSION.RELEASE
)
+ .addHeader("security","false")
.build()
if (Constants.isUat) {
for (headerName in request.headers.names()) {
diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/utils/AppUtil.kt b/app/src/main/java/com/jia/er/nebuluxe/app/utils/AppUtil.kt
index a4521e9..4622e49 100644
--- a/app/src/main/java/com/jia/er/nebuluxe/app/utils/AppUtil.kt
+++ b/app/src/main/java/com/jia/er/nebuluxe/app/utils/AppUtil.kt
@@ -1,9 +1,14 @@
package com.jia.er.nebuluxe.app.utils
+import android.app.Activity
import android.content.Context
import android.content.Intent
-import android.net.Uri
+import android.view.inputmethod.InputMethodManager
+import android.view.inputmethod.InputMethodManager.HIDE_IMPLICIT_ONLY
+import android.widget.EditText
import androidx.core.net.toUri
+import com.jia.er.nebuluxe.app.basics.MyApplication
+
object AppUtil {
@@ -13,4 +18,45 @@ object AppUtil {
fun openWeb(context: Context, webUrl: String?) {
context.startActivity(Intent(Intent.ACTION_VIEW, webUrl?.toUri()))
}
+
+
+ fun hideInput(context: Context?) {
+ if (context is Activity) {
+ val activity = context
+ LOG.e("AppUtils", "hideInput:activity-> " + activity)
+ if (activity.getWindow().getCurrentFocus() != null) {
+ if (activity.getWindow().getCurrentFocus() is EditText) {
+ hideInput((activity.getWindow().getCurrentFocus() as EditText?)!!)
+ } else {
+ LOG.e("AppUtils", "hideInput:View-> " + activity.getWindow().getCurrentFocus())
+ val inputManager = activity.getWindow().getContext()
+ .getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
+ inputManager.hideSoftInputFromWindow(
+ activity.getWindow().getCurrentFocus()!!
+ .getWindowToken(), HIDE_IMPLICIT_ONLY
+ )
+ }
+ }
+ }
+ }
+
+ fun showInput(editText: EditText) {
+ val imm = MyApplication.context
+ .getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager?
+ if (imm != null) {
+ editText.requestFocus()
+ imm.showSoftInput(editText, 0)
+ }
+ }
+
+ fun hideInput(editText: EditText) {
+ val imm = MyApplication.context
+ .getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
+ //隐藏软键盘 //
+ imm.hideSoftInputFromWindow(editText.getWindowToken(), 0)
+ //显示软键盘
+ // imm.showSoftInputFromInputMethod(tv.getWindowToken(), 0);
+ // //切换软键盘的显示与隐藏
+ // imm.toggleSoftInputFromWindow(tv.getWindowToken(), 0, InputMethodManager.HIDE_NOT_ALWAYS);
+ }
}
diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/utils/DialogUtils.kt b/app/src/main/java/com/jia/er/nebuluxe/app/utils/DialogUtils.kt
index c8e3300..ccf5fcb 100644
--- a/app/src/main/java/com/jia/er/nebuluxe/app/utils/DialogUtils.kt
+++ b/app/src/main/java/com/jia/er/nebuluxe/app/utils/DialogUtils.kt
@@ -58,6 +58,7 @@ object DialogUtils {
.addString(R.id.dialog_confirm, confirmStr)
.addString(R.id.dialog_cancel, cancelStr)
.addOnClick({ commonDialog, vId ->
+ commonDialog.dismiss()
if (vId == R.id.dialog_confirm) {
listener.onConfirmClick();
} else if (vId == R.id.dialog_cancel) {
diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/utils/LOG.java b/app/src/main/java/com/jia/er/nebuluxe/app/utils/LOG.java
index ba0fe7a..22672b7 100644
--- a/app/src/main/java/com/jia/er/nebuluxe/app/utils/LOG.java
+++ b/app/src/main/java/com/jia/er/nebuluxe/app/utils/LOG.java
@@ -294,7 +294,10 @@ public class LOG {
if ("com.rq.base.util.LOG".equals(s.getClassName())) {
continue;
}
- if (s.getClassName().startsWith("android.")) {
+ if (!s.getClassName().startsWith("com.jia.er.nebuluxe.app.")) {
+ continue;
+ }
+ if (s.getClassName().startsWith("com.jia.er.nebuluxe.app.utils")) {
continue;
}
String[] arrs = s.getClassName().split("\\.");
diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/utils/TextViewUtil.java b/app/src/main/java/com/jia/er/nebuluxe/app/utils/TextViewUtil.java
new file mode 100644
index 0000000..adc68bb
--- /dev/null
+++ b/app/src/main/java/com/jia/er/nebuluxe/app/utils/TextViewUtil.java
@@ -0,0 +1,254 @@
+package com.jia.er.nebuluxe.app.utils;
+
+import android.graphics.Typeface;
+import android.text.SpannableString;
+import android.text.Spanned;
+import android.text.TextPaint;
+import android.text.TextUtils;
+import android.text.method.LinkMovementMethod;
+import android.text.style.ClickableSpan;
+import android.text.style.ForegroundColorSpan;
+import android.text.style.RelativeSizeSpan;
+import android.text.style.StyleSpan;
+import android.text.style.UnderlineSpan;
+import android.view.View;
+import android.widget.TextView;
+
+import com.jia.er.nebuluxe.app.basics.MyApplication;
+
+public class TextViewUtil {
+ /**
+ * @param tv 控件
+ * @param con 所有内容
+ * @param light 有颜色的内容
+ * @param colorPrimary 颜色ID
+ */
+ public static void setText(TextView tv, String con, String light, int colorPrimary,
+ float colorSizeRate) {
+ if (TextUtils.isEmpty(con) || TextUtils.isEmpty(light) || tv == null) {
+ LOG.utilLog("DATA ERROR");
+ LOG.e("TextViewUtil", " tv = " + tv + "con = " + con + " \nlight = " + light);
+ return;
+ }
+ SpannableString spannableString = new SpannableString(con);
+ ForegroundColorSpan colorSpan = new ForegroundColorSpan(tv.getContext().getResources()
+ .getColor(colorPrimary));
+ int start = con.indexOf(light);
+ int end = start + light.length();
+ RelativeSizeSpan sizeSpan = new RelativeSizeSpan(colorSizeRate);
+ spannableString.setSpan(sizeSpan, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
+ spannableString.setSpan(colorSpan, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
+ tv.setText(spannableString);
+ }
+
+ public static void setText(TextView tv, int conRes, String light, int colorPrimary,
+ float colorSizeRate) {
+ if (conRes <= 0 || TextUtils.isEmpty(light) || tv == null) {
+ LOG.utilLog("DATA ERROR");
+ return;
+ }
+ String realContent = String.format(tv.getResources().getString(conRes), light);
+ setText(tv, realContent, light, colorPrimary, colorSizeRate);
+ }
+
+ /**
+ * 文字变大
+ */
+ public static void setTextBigger(TextView tv, String con, String light, int colorSizeRate) {
+ if (TextUtils.isEmpty(con) || TextUtils.isEmpty(light) || tv == null) {
+ LOG.utilLog("DATA ERROR");
+ LOG.e("TextViewUtil", " tv = " + tv + "con = " + con + " \nlight = " + light);
+ return;
+ }
+ SpannableString spannableString = new SpannableString(con);
+ int start = con.indexOf(light);
+ int end = start + light.length();
+ start = Math.max(0, start);
+ RelativeSizeSpan sizeSpan = new RelativeSizeSpan(colorSizeRate);
+ spannableString.setSpan(sizeSpan, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
+ tv.setText(spannableString);
+ }
+
+ public static CharSequence getTextBigger(String con, String light, float colorSizeRate) {
+ if (TextUtils.isEmpty(con) || TextUtils.isEmpty(light)) {
+ LOG.utilLog("DATA ERROR");
+ LOG.e("TextViewUtil", "con = " + con + " \nlight = " + light);
+ return "";
+ }
+ SpannableString spannableString = new SpannableString(con);
+ int start = con.indexOf(light);
+ int end = start + light.length();
+ start = Math.max(0, start);
+ RelativeSizeSpan sizeSpan = new RelativeSizeSpan(colorSizeRate);
+ spannableString.setSpan(sizeSpan, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
+ return spannableString;
+ }
+
+ /**
+ * 文字变大
+ */
+ public static CharSequence getTextColor(String con, String light, int color) {
+ if (TextUtils.isEmpty(con) || TextUtils.isEmpty(light)) {
+ LOG.utilLog("DATA ERROR");
+ LOG.e("TextViewUtil", " tv = " + con + " \nlight = " + light);
+ return "";
+ }
+ SpannableString spannableString = new SpannableString(con);
+ ForegroundColorSpan colorSpan = new ForegroundColorSpan(MyApplication.context.getResources()
+ .getColor(color));
+ int start = con.indexOf(light);
+ int end = start + light.length();
+ spannableString.setSpan(colorSpan, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
+ return spannableString;
+ }
+
+ /**
+ * 添加下划线(light 下)
+ */
+ public static CharSequence getTextLine(String con, String light) {
+ if (TextUtils.isEmpty(con) || TextUtils.isEmpty(light)) {
+ LOG.utilLog("DATA ERROR");
+ LOG.e("TextViewUtil", " tv = " + con + " \nlight = " + light);
+ return "";
+ }
+ SpannableString spannableString = new SpannableString(con);
+ UnderlineSpan line = new UnderlineSpan();
+ int start = con.indexOf(light);
+ int end = start + light.length();
+ spannableString.setSpan(line, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
+ return spannableString;
+ }
+
+ /**
+ * 前两个变黑 第一个尺寸变大
+ */
+// public static CharSequence get123(String bigAndColor, String color, String normal) {
+// return getTextColorSize(bigAndColor + color + normal, bigAndColor + color, bigAndColor, R.color.text_color_black, 1.6F);
+// }
+
+ public static CharSequence getTextColorSize(String con, String change, int color,
+ float colorSizeRate) {
+ return getTextColorSize(con, change, change, color, colorSizeRate);
+ }
+
+ public static CharSequence getTextColorSize(String con, String colorChange, String sizeChange, int color,
+ float colorSizeRate) {
+ return getTextColorSize(con, colorChange, sizeChange, color, colorSizeRate, false);
+ }
+
+ public static CharSequence getTextColorSize(String con, String colorChange, String sizeChange, int color,
+ float colorSizeRate, boolean isBold) {
+ if (TextUtils.isEmpty(con) || TextUtils.isEmpty(colorChange) || TextUtils.isEmpty(sizeChange)) {
+ LOG.utilLog("DATA ERROR");
+ LOG.e("TextViewUtil", " tv = " + con + " \nlight = " + colorChange);
+ return "";
+ }
+ SpannableString spannableString = new SpannableString(con);
+ ForegroundColorSpan colorSpan = null;
+ try {
+ colorSpan = new ForegroundColorSpan(MyApplication.context.getResources().getColor(color));
+ } catch (Exception e) {
+ colorSpan = new ForegroundColorSpan(color);
+ }
+ int colorStart = con.indexOf(colorChange);
+ int sizeStart = con.indexOf(sizeChange);
+ int colorEnd = colorStart + colorChange.length();
+ int sizeEnd = colorStart + sizeChange.length();
+ spannableString.setSpan(colorSpan, colorStart, colorEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
+ if (isBold) {
+ StyleSpan styleSpan = new StyleSpan(Typeface.BOLD);
+ spannableString.setSpan(styleSpan, sizeStart, sizeEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
+ }
+ RelativeSizeSpan sizeSpan = new RelativeSizeSpan(colorSizeRate);
+ spannableString.setSpan(sizeSpan, sizeStart, sizeEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
+ return spannableString;
+ }
+
+ public static void setTextBigger(TextView tv, int conRes, String light, float colorSizeRate) {
+ if (conRes <= 0 || TextUtils.isEmpty(light) || tv == null) {
+ LOG.utilLog("DATA ERROR");
+ return;
+ }
+ String realContent = String.format(MyApplication.context.getResources().getString(conRes), light);
+ setTextBigger(tv, realContent, light, colorSizeRate);
+ }
+
+ /**
+ * 文字变大
+ */
+ public static void setTextBigger(TextView tv, String con, String light, float colorSizeRate) {
+ if (TextUtils.isEmpty(con) || TextUtils.isEmpty(light) || tv == null) {
+ LOG.utilLog("DATA ERROR");
+ LOG.e("TextViewUtil", " tv = " + tv + "con = " + con + " \nlight = " + light);
+ return;
+ }
+ SpannableString spannableString = new SpannableString(con);
+ int start = con.indexOf(light);
+ int end = start + light.length();
+ start = Math.max(0, start);
+ RelativeSizeSpan sizeSpan = new RelativeSizeSpan(colorSizeRate);
+ spannableString.setSpan(sizeSpan, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
+ tv.setText(spannableString);
+ }
+
+ /**
+ * @param con 全部内容
+ * @param light 变化内容
+ * @param colorSizeRate 变化部分相对基础尺寸比例
+ * @param colorClick 变化部分颜色
+ * @param listener 变化部分点击事件
+ */
+ public static void setColorAndClick(TextView tv, String con, String light, float colorSizeRate,
+ int colorClick, final View.OnClickListener listener) {
+ if (tv == null || TextUtils.isEmpty(con) || TextUtils.isEmpty(light)) {
+ return;
+ }
+ int start = Math.max(0, con.indexOf(light));
+ int end = Math.min(start + light.length(), con.length());
+ SpannableString spannableString = new SpannableString(con);
+ if (colorSizeRate > 0) {
+ RelativeSizeSpan sizeSpan = new RelativeSizeSpan(colorSizeRate);
+ spannableString.setSpan(sizeSpan, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
+ }
+ if (listener != null) {
+ spannableString
+ .setSpan(new ClickSpan(listener), start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
+ tv.setMovementMethod(LinkMovementMethod.getInstance());
+ }
+ if (colorClick > 0) {
+ ForegroundColorSpan colorSpan = new ForegroundColorSpan(tv.getResources()
+ .getColor(colorClick));
+ spannableString.setSpan(colorSpan, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
+ }
+ tv.setText(spannableString);
+ }
+
+ private static class ClickSpan extends ClickableSpan {
+ private View.OnClickListener mOnClickListener;
+
+ ClickSpan(View.OnClickListener clickListener) {
+ this.mOnClickListener = clickListener;
+ }
+
+ @Override
+ public void onClick(View widget) {
+ mOnClickListener.onClick(widget);
+ }
+
+ @Override
+ public void updateDrawState(TextPaint tp) {
+ tp.setColor(tp.linkColor);
+ tp.setUnderlineText(false);
+ }
+ }
+
+
+ // public static void setRichText(TextView tv, String con) {
+ // if (tv != null && !TextUtils.isEmpty(con)) {
+ // if (con.contains(".gif")) {//显示Gif图需关闭硬件加速
+ // tv.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
+ // }
+ // RichText.from(con).into(tv);
+ // }
+ // }
+}
diff --git a/app/src/main/res/drawable-xhdpi/ic_search.png b/app/src/main/res/drawable-xhdpi/ic_search.png
new file mode 100644
index 0000000..40b86fc
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_search.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_arrow_right.png b/app/src/main/res/drawable-xxhdpi/ic_arrow_right.png
new file mode 100644
index 0000000..ce6e702
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_arrow_right.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_btn_me_about.png b/app/src/main/res/drawable-xxhdpi/ic_btn_me_about.png
similarity index 100%
rename from app/src/main/res/mipmap-xxhdpi/ic_btn_me_about.png
rename to app/src/main/res/drawable-xxhdpi/ic_btn_me_about.png
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_btn_me_delete_account.png b/app/src/main/res/drawable-xxhdpi/ic_btn_me_delete_account.png
similarity index 100%
rename from app/src/main/res/mipmap-xxhdpi/ic_btn_me_delete_account.png
rename to app/src/main/res/drawable-xxhdpi/ic_btn_me_delete_account.png
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_btn_me_help_center.png b/app/src/main/res/drawable-xxhdpi/ic_btn_me_help_center.png
similarity index 100%
rename from app/src/main/res/mipmap-xxhdpi/ic_btn_me_help_center.png
rename to app/src/main/res/drawable-xxhdpi/ic_btn_me_help_center.png
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_btn_me_language.png b/app/src/main/res/drawable-xxhdpi/ic_btn_me_language.png
similarity index 100%
rename from app/src/main/res/mipmap-xxhdpi/ic_btn_me_language.png
rename to app/src/main/res/drawable-xxhdpi/ic_btn_me_language.png
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_btn_me_privacy_policy.png b/app/src/main/res/drawable-xxhdpi/ic_btn_me_privacy_policy.png
similarity index 100%
rename from app/src/main/res/mipmap-xxhdpi/ic_btn_me_privacy_policy.png
rename to app/src/main/res/drawable-xxhdpi/ic_btn_me_privacy_policy.png
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_btn_me_user_agreement.png b/app/src/main/res/drawable-xxhdpi/ic_btn_me_user_agreement.png
similarity index 100%
rename from app/src/main/res/mipmap-xxhdpi/ic_btn_me_user_agreement.png
rename to app/src/main/res/drawable-xxhdpi/ic_btn_me_user_agreement.png
diff --git a/app/src/main/res/drawable-xxhdpi/ic_delete_gray.png b/app/src/main/res/drawable-xxhdpi/ic_delete_gray.png
new file mode 100644
index 0000000..3cf011e
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_delete_gray.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_dialog_bg.png b/app/src/main/res/drawable-xxhdpi/ic_dialog_bg.png
similarity index 100%
rename from app/src/main/res/mipmap-xxhdpi/ic_dialog_bg.png
rename to app/src/main/res/drawable-xxhdpi/ic_dialog_bg.png
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_logout.png b/app/src/main/res/drawable-xxhdpi/ic_logout.png
similarity index 100%
rename from app/src/main/res/mipmap-xxhdpi/ic_logout.png
rename to app/src/main/res/drawable-xxhdpi/ic_logout.png
diff --git a/app/src/main/res/drawable-xxhdpi/ic_save_select_bg.png b/app/src/main/res/drawable-xxhdpi/ic_save_select_bg.png
new file mode 100644
index 0000000..d3cbe36
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_save_select_bg.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_save_top_bg.png b/app/src/main/res/drawable-xxhdpi/ic_save_top_bg.png
new file mode 100644
index 0000000..4c8f70a
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_save_top_bg.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_star_remove.png b/app/src/main/res/drawable-xxhdpi/ic_star_remove.png
new file mode 100644
index 0000000..1b0a0ba
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_star_remove.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_star_select.png b/app/src/main/res/drawable-xxhdpi/ic_star_select.png
new file mode 100644
index 0000000..f53d73a
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_star_select.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_star_unselect.png b/app/src/main/res/drawable-xxhdpi/ic_star_unselect.png
new file mode 100644
index 0000000..74c1b49
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_star_unselect.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/iv_home_bg.png b/app/src/main/res/drawable-xxhdpi/iv_bg.png
similarity index 100%
rename from app/src/main/res/drawable-xxhdpi/iv_home_bg.png
rename to app/src/main/res/drawable-xxhdpi/iv_bg.png
diff --git a/app/src/main/res/drawable/baseline_delete_forever_24.xml b/app/src/main/res/drawable/baseline_delete_forever_24.xml
new file mode 100644
index 0000000..9b0f051
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_delete_forever_24.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/bg_conner_10px_black_light.xml b/app/src/main/res/drawable/bg_conner_10px_black_light.xml
new file mode 100644
index 0000000..24a8732
--- /dev/null
+++ b/app/src/main/res/drawable/bg_conner_10px_black_light.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_conner_20px_black_light.xml b/app/src/main/res/drawable/bg_conner_20px_black_light.xml
new file mode 100644
index 0000000..d120988
--- /dev/null
+++ b/app/src/main/res/drawable/bg_conner_20px_black_light.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-mdpi/ic_btn_dialog_confirm.png b/app/src/main/res/drawable/ic_btn_dialog_confirm.png
similarity index 100%
rename from app/src/main/res/mipmap-mdpi/ic_btn_dialog_confirm.png
rename to app/src/main/res/drawable/ic_btn_dialog_confirm.png
diff --git a/app/src/main/res/drawable/ic_default_iv_hor.png b/app/src/main/res/drawable/ic_default_iv_hor.png
new file mode 100644
index 0000000..ee12aac
Binary files /dev/null and b/app/src/main/res/drawable/ic_default_iv_hor.png differ
diff --git a/app/src/main/res/drawable/ic_default_iv_ver.png b/app/src/main/res/drawable/ic_default_iv_ver.png
new file mode 100644
index 0000000..5dd1ea2
Binary files /dev/null and b/app/src/main/res/drawable/ic_default_iv_ver.png differ
diff --git a/app/src/main/res/drawable/seek_save_favorites.xml b/app/src/main/res/drawable/seek_save_favorites.xml
new file mode 100644
index 0000000..8fc4bbb
--- /dev/null
+++ b/app/src/main/res/drawable/seek_save_favorites.xml
@@ -0,0 +1,17 @@
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/sel_save_click_bg.xml b/app/src/main/res/drawable/sel_save_click_bg.xml
new file mode 100644
index 0000000..11b9611
--- /dev/null
+++ b/app/src/main/res/drawable/sel_save_click_bg.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/sel_save_click_color.xml b/app/src/main/res/drawable/sel_save_click_color.xml
new file mode 100644
index 0000000..1af8ad6
--- /dev/null
+++ b/app/src/main/res/drawable/sel_save_click_color.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/sel_star.xml b/app/src/main/res/drawable/sel_star.xml
new file mode 100644
index 0000000..d0b5cc6
--- /dev/null
+++ b/app/src/main/res/drawable/sel_star.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml
index 8f5d373..2daff04 100644
--- a/app/src/main/res/layout/activity_about.xml
+++ b/app/src/main/res/layout/activity_about.xml
@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@drawable/iv_home_bg"
+ android:background="@drawable/iv_bg"
android:paddingTop="@dimen/padding_55px">
diff --git a/app/src/main/res/layout/activity_genres.xml b/app/src/main/res/layout/activity_genres.xml
index 08ac8c5..44ee840 100644
--- a/app/src/main/res/layout/activity_genres.xml
+++ b/app/src/main/res/layout/activity_genres.xml
@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@drawable/iv_home_bg"
+ android:background="@drawable/iv_bg"
android:paddingTop="@dimen/padding_55px">
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index b503325..5a51d58 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -2,12 +2,14 @@
+ android:layout_height="match_parent"
+ android:layout_marginBottom="@dimen/padding_84px" />
+ android:layout_height="match_parent"
+ android:background="@drawable/iv_bg"
+ android:paddingTop="@dimen/padding_55px">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml
index a860780..d922f7c 100644
--- a/app/src/main/res/layout/activity_setting.xml
+++ b/app/src/main/res/layout/activity_setting.xml
@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@drawable/iv_home_bg"
+ android:background="@drawable/iv_bg"
android:paddingTop="@dimen/padding_55px">
+ android:background="@drawable/n9_dialog_bg">
diff --git a/app/src/main/res/layout/fragment_hot.xml b/app/src/main/res/layout/fragment_hot.xml
index ce60d94..8ce234b 100644
--- a/app/src/main/res/layout/fragment_hot.xml
+++ b/app/src/main/res/layout/fragment_hot.xml
@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@drawable/iv_home_bg"
+ android:background="@drawable/iv_bg"
android:paddingTop="@dimen/padding_55px">
+ android:src="@drawable/ic_btn_me_language" />
+ android:src="@drawable/ic_btn_me_privacy_policy" />
+ android:src="@drawable/ic_btn_me_delete_account" />
+ android:src="@drawable/ic_btn_me_help_center" />
+ android:src="@drawable/ic_btn_me_user_agreement" />
+ android:src="@drawable/ic_btn_me_about" />
-
+ android:layout_height="match_parent"
+ android:background="@drawable/iv_bg"
+ android:orientation="vertical"
+ android:padding="@dimen/padding_15px">
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_input_history.xml b/app/src/main/res/layout/item_input_history.xml
new file mode 100644
index 0000000..7e50647
--- /dev/null
+++ b/app/src/main/res/layout/item_input_history.xml
@@ -0,0 +1,14 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_saved_favory.xml b/app/src/main/res/layout/item_saved_favory.xml
new file mode 100644
index 0000000..6a06051
--- /dev/null
+++ b/app/src/main/res/layout/item_saved_favory.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_saved_history.xml b/app/src/main/res/layout/item_saved_history.xml
new file mode 100644
index 0000000..1114e98
--- /dev/null
+++ b/app/src/main/res/layout/item_saved_history.xml
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_search_result.xml b/app/src/main/res/layout/item_search_result.xml
new file mode 100644
index 0000000..28ead2b
--- /dev/null
+++ b/app/src/main/res/layout/item_search_result.xml
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-xhdpi/n9_dialog_bg.9.png b/app/src/main/res/mipmap-xhdpi/n9_dialog_bg.9.png
deleted file mode 100644
index e007916..0000000
Binary files a/app/src/main/res/mipmap-xhdpi/n9_dialog_bg.9.png and /dev/null differ
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index aed0142..19f013d 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -11,10 +11,16 @@
#BDF5E2
#FFFA80
#F0C2E1
+ #00000000
+ #F0C2E1
#D4D4D4
#0F0F0F
- #0F0F0F
+ #F0C2E1
+ #E593CA
+ #FFF
+ #B7B7B7
+ #DFDFDF
#111111
#1D1D1D
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ddcbbd1..5ea0c14 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -24,4 +24,12 @@
You’ll need to sign in again. Unsaved history will be lost.
Log Out
Cancel
+ Favorites
+ History
+ Viewed %s %%
+ Search
+ What’s Your Mood Today?
+ What Everyone’s Watching
+ Join the trend
+ Search Results
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index fb3f553..a453868 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -10,4 +10,15 @@
- center
- vertical
+
+
+
+
\ No newline at end of file