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