diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 9c99d4c..3509c3c 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -4,29 +4,18 @@ - - - - - - - - - - - - + - + diff --git a/app/src/main/java/com/timber/soft/mylivewallpaper/data/AppDatabase.kt b/app/src/main/java/com/timber/soft/mylivewallpaper/data/AppDatabase.kt new file mode 100644 index 0000000..f53db87 --- /dev/null +++ b/app/src/main/java/com/timber/soft/mylivewallpaper/data/AppDatabase.kt @@ -0,0 +1,25 @@ +package com.timber.soft.mylivewallpaper.data + +import androidx.room.Database +import androidx.room.Room +import androidx.room.RoomDatabase +import com.timber.soft.mylivewallpaper.tools.AppFinalString +import com.timber.soft.mylivewallpaper.tools.MyApplication + +@Database( + entities = [WallpaperData::class], version = AppFinalString.DB_VERSION, exportSchema = false +) +abstract class AppDatabase : RoomDatabase() { + companion object { + val dataBase: AppDatabase by lazy { + getInstance() + } + + private fun getInstance(): AppDatabase { + return Room.databaseBuilder( + MyApplication.appContext, AppDatabase::class.java, AppFinalString.DB_NAME + ).build() + } + } + abstract fun getWallpaperDao(): WallpaperDao +} \ No newline at end of file diff --git a/app/src/main/java/com/timber/soft/mylivewallpaper/data/WallpaperDao.kt b/app/src/main/java/com/timber/soft/mylivewallpaper/data/WallpaperDao.kt index c3d9fb6..98b5ae8 100644 --- a/app/src/main/java/com/timber/soft/mylivewallpaper/data/WallpaperDao.kt +++ b/app/src/main/java/com/timber/soft/mylivewallpaper/data/WallpaperDao.kt @@ -8,7 +8,7 @@ import androidx.room.Update @Dao interface WallpaperDao { - @Query("select * from wallpaper where isCollect = :collect ") + @Query("select * from t_wallpaper where isCollect = :collect ") suspend fun getCollectData(collect: Boolean = true): List @Update diff --git a/app/src/main/java/com/timber/soft/mylivewallpaper/tools/AppFinalString.kt b/app/src/main/java/com/timber/soft/mylivewallpaper/tools/AppFinalString.kt index 16d610e..8208084 100644 --- a/app/src/main/java/com/timber/soft/mylivewallpaper/tools/AppFinalString.kt +++ b/app/src/main/java/com/timber/soft/mylivewallpaper/tools/AppFinalString.kt @@ -1,6 +1,10 @@ package com.timber.soft.mylivewallpaper.tools object AppFinalString { - const val TABLE_NAME_WALLPAPER = "wallpaper" + + const val DB_NAME = "wallpaper_db" + const val DB_VERSION = 1 + const val TABLE_NAME_WALLPAPER = "t_wallpaper" const val KEY_EXTRA = "KEY_EXTRA" + } \ No newline at end of file diff --git a/app/src/main/java/com/timber/soft/mylivewallpaper/ui/activity/DetailActivity.kt b/app/src/main/java/com/timber/soft/mylivewallpaper/ui/activity/DetailActivity.kt index da5537c..655894d 100644 --- a/app/src/main/java/com/timber/soft/mylivewallpaper/ui/activity/DetailActivity.kt +++ b/app/src/main/java/com/timber/soft/mylivewallpaper/ui/activity/DetailActivity.kt @@ -1,6 +1,8 @@ package com.timber.soft.mylivewallpaper.ui.activity +import android.graphics.Color import android.graphics.drawable.Drawable +import android.os.Build import android.util.Log import android.view.View import android.widget.Toast @@ -11,11 +13,15 @@ import com.bumptech.glide.load.engine.GlideException import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.target.Target +import com.timber.soft.mylivewallpaper.data.AppDatabase import com.timber.soft.mylivewallpaper.data.WallpaperData import com.timber.soft.mylivewallpaper.databinding.ActivityDetailsBinding import com.timber.soft.mylivewallpaper.tools.AppFinalString import com.timber.soft.mylivewallpaper.tools.AppTools.isExist import com.timber.soft.mylivewallpaper.ui.customerView.DownLoadDialog +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch class DetailActivity : BaseActivity(), View.OnClickListener { @@ -28,8 +34,15 @@ class DetailActivity : BaseActivity(), View.OnClickListener { } override fun initViews() { - super.initViews() + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + window.decorView.systemUiVisibility = + (View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_STABLE) + window.statusBarColor = Color.TRANSPARENT + } + wallpaperData = intent.getSerializableExtra(AppFinalString.KEY_EXTRA) as WallpaperData + initButton() initPreImg() @@ -38,8 +51,7 @@ class DetailActivity : BaseActivity(), View.OnClickListener { private fun initPreImg() { Glide.with(this).load(wallpaperData.thumbnail) .transition(DrawableTransitionOptions.withCrossFade()) - .diskCacheStrategy(DiskCacheStrategy.ALL) - .listener(object : RequestListener { + .diskCacheStrategy(DiskCacheStrategy.ALL).listener(object : RequestListener { override fun onLoadFailed( e: GlideException?, model: Any?, @@ -75,6 +87,7 @@ class DetailActivity : BaseActivity(), View.OnClickListener { binding.detailsCollect.setOnClickListener(this) binding.detailsSet.setOnClickListener(this) binding.detailsPlayButton.setOnClickListener(this) + binding.detailsCollect.isSelected = wallpaperData.isCollect } override fun onClick(v: View?) { @@ -88,7 +101,7 @@ class DetailActivity : BaseActivity(), View.OnClickListener { } binding.detailsCollect -> { - Log.e("onclick", "detailsCollect has been click!") + setCollect() } binding.detailsPlayButton -> { @@ -101,12 +114,37 @@ class DetailActivity : BaseActivity(), View.OnClickListener { } } - private fun showDownloadDialog() { + private fun setCollect() { + if (!binding.detailsCollect.isSelected) { + binding.detailsCollect.isSelected = !binding.detailsCollect.isSelected + Toast.makeText( + this@DetailActivity, "You have collected this sound.", Toast.LENGTH_SHORT + ).show() + CoroutineScope(Dispatchers.IO).launch { + AppDatabase.dataBase.getWallpaperDao().insertData(wallpaperData.apply { + isCollect = binding.detailsCollect.isSelected + }) + } + } else { + binding.detailsCollect.isSelected = !binding.detailsCollect.isSelected + Toast.makeText( + this@DetailActivity, "You have unfavorite this sound.", Toast.LENGTH_SHORT + ).show() + CoroutineScope(Dispatchers.IO).launch { + AppDatabase.dataBase.getWallpaperDao().deleteData(wallpaperData.apply { + isCollect = binding.detailsCollect.isSelected + }) + } + } + } + + private fun showDownloadDialog() { + Log.e("file_play", "file is null!") } private fun playVideo() { - + Log.e("file_play", "file is exist!") } private fun isExist(): Boolean { diff --git a/app/src/main/java/com/timber/soft/mylivewallpaper/ui/adapter/RateStartAdapter.kt b/app/src/main/java/com/timber/soft/mylivewallpaper/ui/adapter/RateStartAdapter.kt index 1b785c1..a553bc1 100644 --- a/app/src/main/java/com/timber/soft/mylivewallpaper/ui/adapter/RateStartAdapter.kt +++ b/app/src/main/java/com/timber/soft/mylivewallpaper/ui/adapter/RateStartAdapter.kt @@ -1,4 +1,59 @@ package com.timber.soft.mylivewallpaper.ui.adapter -class RateStartAdapter { +import android.annotation.SuppressLint +import android.content.Context +import android.service.autofill.OnClickAction +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.timber.soft.mylivewallpaper.databinding.FragmentRateBinding +import com.timber.soft.mylivewallpaper.databinding.ItemRateStartBinding + +class RateStartAdapter( + private val context: Context, + private var clickAction: (Int) -> Unit +) : RecyclerView.Adapter() { + + private var clickPos: Int? = null + fun getRate(): Int? = clickPos + + @SuppressLint("NotifyDataSetChanged") + inner class RateViewHolder(private val binding: ItemRateStartBinding) : + RecyclerView.ViewHolder(binding.root) { + init { +// binding.root.setOnClickListener { +// val position = bindingAdapterPosition +// if (position != RecyclerView.NO_POSITION) { +// clickAction.invoke(position) +// } +// } + } + + fun bind(position: Int) { + clickPos?.let { + binding.itemStart.isSelected = position <= it + } + binding.consStart.setOnClickListener { + clickAction.invoke(position) + clickPos = position + notifyDataSetChanged() + } + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RateViewHolder = + RateViewHolder( + ItemRateStartBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + ) + + + override fun getItemCount(): Int = 5 + + override fun onBindViewHolder(holder: RateViewHolder, position: Int) { + holder.bind(position) + } } \ No newline at end of file diff --git a/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/BaseFragment.kt b/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/BaseFragment.kt index a00d232..6face8d 100644 --- a/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/BaseFragment.kt +++ b/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/BaseFragment.kt @@ -21,6 +21,7 @@ abstract class BaseFragment : Fragment() { } open fun initViews() { + } abstract fun getFragmentContentView(): View diff --git a/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/RateFragment.kt b/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/RateFragment.kt index b86a68d..2d761bb 100644 --- a/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/RateFragment.kt +++ b/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/RateFragment.kt @@ -1,7 +1,9 @@ package com.timber.soft.mylivewallpaper.ui.fragment +import android.content.Intent import android.graphics.Color import android.graphics.drawable.ColorDrawable +import android.net.Uri import android.os.Bundle import android.view.Gravity import android.view.LayoutInflater @@ -10,6 +12,7 @@ import android.view.ViewGroup import android.view.WindowManager import androidx.fragment.app.DialogFragment import androidx.recyclerview.widget.LinearLayoutManager +import com.timber.soft.mylivewallpaper.R import com.timber.soft.mylivewallpaper.databinding.FragmentRateBinding import com.timber.soft.mylivewallpaper.ui.adapter.RateStartAdapter @@ -31,9 +34,7 @@ class RateFragment : DialogFragment() { } override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { binding = FragmentRateBinding.inflate(layoutInflater) return binding.root @@ -60,8 +61,40 @@ class RateFragment : DialogFragment() { private fun initDialog() { binding.run { - + rateStartAdapter = RateStartAdapter(requireContext()) { + tvRateIt.run { + isSelected = true + isClickable = true + } + } + recyclerStart.apply { + adapter = rateStartAdapter + layoutManager = LinearLayoutManager(requireContext()).apply { + orientation = LinearLayoutManager.HORIZONTAL + } + } + tvRateIt.run { + isSelected = false + isClickable = false + } + rateCancel.setOnClickListener() { dismiss() } + tvRateIt.setOnClickListener { + rateStartAdapter.getRate()?.let { + if (it >= 3) { + goRate() + dismiss() + } else { + dismiss() + } + } + } } } + private fun goRate() { + val intent = Intent("android.intent.action.VIEW") + val stringBuilder = getString(R.string.set_shop_link) + (requireContext().packageName) + intent.data = Uri.parse(stringBuilder) + startActivity(intent) + } } \ No newline at end of file diff --git a/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/SettingFragment.kt b/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/SettingFragment.kt index fa24116..4fada93 100644 --- a/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/SettingFragment.kt +++ b/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/SettingFragment.kt @@ -20,7 +20,7 @@ class SettingFragment : BaseFragment() { override fun initViews() { super.initViews() binding.setLayoutRating.setOnClickListener { - //TODO:no implement + RateFragment.newInstance(0, 0).show(childFragmentManager, "") } binding.setLayoutShare.setOnClickListener { val url = getString(R.string.set_shop_link) + (activity?.packageName ?: "") diff --git a/app/src/main/res/layout/fragment_collect.xml b/app/src/main/res/layout/fragment_collect.xml index 77d9ef6..0ef716c 100644 --- a/app/src/main/res/layout/fragment_collect.xml +++ b/app/src/main/res/layout/fragment_collect.xml @@ -1,6 +1,31 @@ - + android:layout_height="match_parent" + android:background="@color/theme_color_light" + android:orientation="vertical" + tools:context=".ui.fragment.CollectFragment"> - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_rate.xml b/app/src/main/res/layout/fragment_rate.xml index f58ba9d..8017911 100644 --- a/app/src/main/res/layout/fragment_rate.xml +++ b/app/src/main/res/layout/fragment_rate.xml @@ -10,7 +10,7 @@ tools:context=".ui.fragment.RateFragment"> + app:layout_constraintTop_toBottomOf="@id/rate_title" /> + app:layout_constraintTop_toBottomOf="@id/rate_content" /> + app:layout_constraintTop_toTopOf="@id/rate_cancel" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_rate_start.xml b/app/src/main/res/layout/item_rate_start.xml new file mode 100644 index 0000000..b2c60b0 --- /dev/null +++ b/app/src/main/res/layout/item_rate_start.xml @@ -0,0 +1,17 @@ + + + + + + \ 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 f9b3c85..286e044 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -13,6 +13,8 @@ CANCEL RATE IT + My Collection + Set Wallpaper Loading video...