From 0a77bd69d7ae686f761c82b1177382d4b62f4104 Mon Sep 17 00:00:00 2001
From: lunaticbum <>
Date: Thu, 7 Nov 2024 16:35:47 +0900
Subject: [PATCH] ...
---
app/src/main/AndroidManifest.xml | 10 +
.../lunatic/launcher/behavior/Behavior.kt | 143 +++++++++++++
.../launcher/behavior/SampleAdapter.kt | 31 +++
.../behavior/behaviorimpl/BehaviorBlackJin.kt | 82 +++++++
.../behavior/behaviorimpl/BehaviorTistory.kt | 84 ++++++++
.../behavior/behaviorimpl/BehaviorTopBall.kt | 91 ++++++++
.../behavior/calendar/CalendarAdapter.kt | 10 +
.../behavior/calendar/CalendarBean.java | 54 +++++
.../behavior/calendar/CalendarBean.kt | 29 +++
.../behavior/calendar/CalendarDateView.kt | 152 +++++++++++++
.../behavior/calendar/CalendarFactory.kt | 66 ++++++
.../behavior/calendar/CalendarTopView.kt | 9 +
.../calendar/CalendarTopViewChangeListener.kt | 7 +
.../behavior/calendar/CalendarUtil.kt | 37 ++++
.../behavior/calendar/CalendarView.kt | 201 ++++++++++++++++++
.../bums/lunatic/launcher/feeds/Feeds.kt | 4 +-
.../lunatic/launcher/home/LauncherHome.kt | 34 ++-
.../launcher/home/adapters/RssItemAdapter.kt | 2 -
.../home/adapters/SwipeToDeleteCallback.kt | 2 +-
.../lunatic/launcher/view/DateTimeView.kt | 5 +-
app/src/main/res/anim/fade_in.xml | 6 +
app/src/main/res/anim/fade_out.xml | 6 +
app/src/main/res/drawable/bg_list_main.xml | 9 +
app/src/main/res/drawable/drawable_ball.xml | 11 +
app/src/main/res/layout/app_drawer.xml | 4 +-
app/src/main/res/layout/behavior.xml | 117 ++++++++++
app/src/main/res/layout/feeds.xml | 6 +-
app/src/main/res/layout/item_calendar.xml | 54 +++++
.../main/res/layout/item_hourly_weather.xml | 44 ++--
.../main/res/layout/item_rec_hourly_dress.xml | 13 +-
app/src/main/res/layout/item_sample.xml | 15 ++
app/src/main/res/layout/launcher_activity.xml | 2 +-
app/src/main/res/layout/launcher_home.xml | 81 +++----
app/src/main/res/layout/list_item_with.xml | 9 +-
app/src/main/res/layout/weather_book.xml | 96 ++++-----
app/src/main/res/values/attrs.xml | 22 +-
app/src/main/res/values/colors.xml | 10 +
app/src/main/res/values/dimens.xml | 15 ++
app/src/main/res/values/styles.xml | 17 ++
39 files changed, 1438 insertions(+), 152 deletions(-)
create mode 100644 app/src/main/kotlin/bums/lunatic/launcher/behavior/Behavior.kt
create mode 100644 app/src/main/kotlin/bums/lunatic/launcher/behavior/SampleAdapter.kt
create mode 100644 app/src/main/kotlin/bums/lunatic/launcher/behavior/behaviorimpl/BehaviorBlackJin.kt
create mode 100644 app/src/main/kotlin/bums/lunatic/launcher/behavior/behaviorimpl/BehaviorTistory.kt
create mode 100644 app/src/main/kotlin/bums/lunatic/launcher/behavior/behaviorimpl/BehaviorTopBall.kt
create mode 100644 app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarAdapter.kt
create mode 100644 app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarBean.java
create mode 100644 app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarBean.kt
create mode 100644 app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarDateView.kt
create mode 100644 app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarFactory.kt
create mode 100644 app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarTopView.kt
create mode 100644 app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarTopViewChangeListener.kt
create mode 100644 app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarUtil.kt
create mode 100644 app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarView.kt
create mode 100644 app/src/main/res/anim/fade_in.xml
create mode 100644 app/src/main/res/anim/fade_out.xml
create mode 100644 app/src/main/res/drawable/bg_list_main.xml
create mode 100644 app/src/main/res/drawable/drawable_ball.xml
create mode 100644 app/src/main/res/layout/behavior.xml
create mode 100644 app/src/main/res/layout/item_calendar.xml
create mode 100644 app/src/main/res/layout/item_sample.xml
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5a36bc4c..93110aa8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -109,6 +109,16 @@
+
+
+
+
+
(R.id.app_bar_layout)
+
+ val back = findViewById(R.id.iv_back)
+ val del = findViewById(R.id.iv_del)
+ val share = findViewById(R.id.iv_share)
+ val cal = findViewById(R.id.calendarDateView)
+ appBarLayout.addOnOffsetChangedListener(
+ AppBarLayout.OnOffsetChangedListener { _, verticalOffset ->
+ if (abs(verticalOffset) >= getYMax / 2) {
+ if (back.visibility != View.GONE) {
+ back.startAnimation(fadeOut)
+ del.startAnimation(fadeOut)
+ share.startAnimation(fadeOut)
+
+ back.visibility = View.GONE
+ del.visibility = View.GONE
+ share.visibility = View.GONE
+ var lp = cal.layoutParams
+ lp.height = resources.getDimension(R.dimen.toolbar_height).toInt()
+ cal.layoutParams = lp
+ }
+ } else {
+ if (back.visibility != View.VISIBLE) {
+ back.startAnimation(fadeIn)
+ del.startAnimation(fadeIn)
+ share.startAnimation(fadeIn)
+
+ back.visibility = View.VISIBLE
+ del.visibility = View.VISIBLE
+ share.visibility = View.VISIBLE
+ var lp = cal.layoutParams
+ lp.height = resources.getDimension(R.dimen.appbar_height).toInt()
+ cal.layoutParams = lp
+ }
+ }
+
+ }
+ )
+ }
+
+ private fun initRecyclerView() {
+ with(findViewById(R.id.rv_main)) {
+ adapter = sampleAdapter
+ }
+ with(findViewById(R.id.calendarDateView)) {
+ adapter = CalAdapter().apply {
+ items.clear()
+ items.addAll(getMonthOfDayList(
+ dateArr[0],
+ dateArr[1]
+ ))
+ }
+ }
+ }
+
+ private fun loadSample() {
+ sampleAdapter.notifySample()
+ }
+}
+
+class CalAdapter : RecyclerView.Adapter() {
+
+ val items = mutableListOf()
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = CalViewHolder(ItemCalendarBinding.inflate(LayoutInflater.from(parent.context)))
+
+ override fun onBindViewHolder(holder: CalViewHolder, position: Int) {
+ holder.bind.day.apply {
+ val bean = items[position]
+ this.text = bean?.day.toString()
+ if (bean?.monthFlag != 0) {
+ this.setTextColor(Color.WHITE)
+ } else {
+ this.setTextColor(Color.BLACK)
+ }
+ }
+ }
+
+ override fun getItemCount() = items.size
+
+// fun notifySample() {
+// items.clear()
+// (1..10).forEach {
+// items.add(it)
+// }
+// notifyDataSetChanged()
+// }
+
+ class CalViewHolder(val bind: ItemCalendarBinding) : RecyclerView.ViewHolder(bind.root)
+}
\ No newline at end of file
diff --git a/app/src/main/kotlin/bums/lunatic/launcher/behavior/SampleAdapter.kt b/app/src/main/kotlin/bums/lunatic/launcher/behavior/SampleAdapter.kt
new file mode 100644
index 00000000..d4fb732d
--- /dev/null
+++ b/app/src/main/kotlin/bums/lunatic/launcher/behavior/SampleAdapter.kt
@@ -0,0 +1,31 @@
+package bums.lunatic.launcher.behavior
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.recyclerview.widget.RecyclerView
+import bums.lunatic.launcher.R
+
+class SampleAdapter : RecyclerView.Adapter() {
+
+ private val items = mutableListOf()
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = SampleViewHolder(parent)
+
+ override fun onBindViewHolder(holder: SampleViewHolder, position: Int) {
+ //..
+ }
+
+ override fun getItemCount() = items.size
+
+ fun notifySample() {
+ items.clear()
+ (1..10).forEach {
+ items.add(it)
+ }
+ notifyDataSetChanged()
+ }
+
+ class SampleViewHolder(parent: ViewGroup) : RecyclerView.ViewHolder(
+ LayoutInflater.from(parent.context).inflate(R.layout.item_sample, parent, false),
+ )
+}
\ No newline at end of file
diff --git a/app/src/main/kotlin/bums/lunatic/launcher/behavior/behaviorimpl/BehaviorBlackJin.kt b/app/src/main/kotlin/bums/lunatic/launcher/behavior/behaviorimpl/BehaviorBlackJin.kt
new file mode 100644
index 00000000..9728fbaa
--- /dev/null
+++ b/app/src/main/kotlin/bums/lunatic/launcher/behavior/behaviorimpl/BehaviorBlackJin.kt
@@ -0,0 +1,82 @@
+package bums.lunatic.launcher.behavior.behaviorimpl
+
+import android.content.Context
+import android.util.AttributeSet
+import android.util.DisplayMetrics
+import android.util.TypedValue
+import android.view.View
+import android.widget.TextView
+import androidx.annotation.NonNull
+import androidx.coordinatorlayout.widget.CoordinatorLayout
+import bums.lunatic.launcher.R
+import com.google.android.material.appbar.AppBarLayout
+import kotlin.math.abs
+
+
+class BehaviorBlackJin(context: Context, attrs: AttributeSet?) :
+ CoordinatorLayout.Behavior(context, attrs) {
+ private val mContext: Context = context
+
+ private val marginTop: Float
+ private val marginTopAfter: Float
+
+ private val getYMax: Float =
+ context.getResources().getDimension(R.dimen.appbar_height) - context.getResources()
+ .getDimension(R.dimen.toolbar_height)
+
+ init {
+ marginTop = dpToPx(getYMax / 4)
+ marginTopAfter = dpToPx(getYMax / 8)
+ }
+
+ override fun layoutDependsOn(
+ @NonNull parent: CoordinatorLayout,
+ @NonNull child: TextView,
+ @NonNull dependency: View
+ ): Boolean {
+ return dependency is AppBarLayout
+ }
+
+ /**
+ * dependency 의 View 의 변화가 있을때 이벤트가 들어옵니다.
+ */
+ override fun onDependentViewChanged(
+ @NonNull parent: CoordinatorLayout,
+ @NonNull child: TextView,
+ @NonNull dependency: View
+ ): Boolean {
+ child.alpha = getRatioValue(
+ 1f, 0f,
+ abs(dependency.y.toDouble()).toFloat(), getYMax
+ )
+ child.alpha = getRatioValue(
+ 1f, 0f,
+ abs(dependency.y.toDouble()).toFloat(), getYMax
+ )
+
+ child.x = (dependency.width / 2 - (child.width / 2)).toFloat()
+
+ child.y = getRatioValue(
+ marginTop, marginTopAfter,
+ abs(dependency.y.toDouble()).toFloat(), getYMax
+ )
+
+ return false
+ }
+
+ private fun dpToPx(dp: Float): Float {
+ val dm: DisplayMetrics = mContext.getResources().getDisplayMetrics()
+ return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, dm).toInt()
+ .toFloat()
+ }
+
+ private fun getRatioValue(
+ firstValue: Float,
+ lastValue: Float,
+ getY: Float,
+ getYMax: Float
+ ): Float {
+ val temp = -(firstValue - lastValue) * getY / getYMax
+ return firstValue + temp
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/kotlin/bums/lunatic/launcher/behavior/behaviorimpl/BehaviorTistory.kt b/app/src/main/kotlin/bums/lunatic/launcher/behavior/behaviorimpl/BehaviorTistory.kt
new file mode 100644
index 00000000..7c85fd55
--- /dev/null
+++ b/app/src/main/kotlin/bums/lunatic/launcher/behavior/behaviorimpl/BehaviorTistory.kt
@@ -0,0 +1,84 @@
+package bums.lunatic.launcher.behavior.behaviorimpl
+
+
+import android.content.Context
+import android.util.AttributeSet
+import android.util.DisplayMetrics
+import android.util.TypedValue
+import android.view.View
+import android.widget.TextView
+import androidx.annotation.NonNull
+import androidx.coordinatorlayout.widget.CoordinatorLayout
+import bums.lunatic.launcher.R
+import com.google.android.material.appbar.AppBarLayout
+import kotlin.math.abs
+
+
+class BehaviorTistory(context: Context, attrs: AttributeSet?) :
+ CoordinatorLayout.Behavior(context, attrs) {
+ private val mContext: Context = context
+
+ private val marginLeft: Float
+ private val marginTop: Float
+ private val marginTopAfter: Float
+
+ private val getYMax: Float =
+ context.getResources().getDimension(R.dimen.appbar_height) - context.getResources()
+ .getDimension(R.dimen.toolbar_height)
+
+ init {
+ marginLeft = dpToPx(70f)
+ marginTop = dpToPx(70f)
+ marginTopAfter = dpToPx(53f)
+ }
+
+ override fun layoutDependsOn(
+ @NonNull parent: CoordinatorLayout,
+ @NonNull child: TextView,
+ @NonNull dependency: View
+ ): Boolean {
+ return dependency is AppBarLayout
+ }
+
+ /**
+ * dependency 의 View 의 변화가 있을때 이벤트가 들어옵니다.
+ */
+ override fun onDependentViewChanged(
+ @NonNull parent: CoordinatorLayout,
+ @NonNull child: TextView,
+ @NonNull dependency: View
+ ): Boolean {
+ child.scaleX = getRatioValue(
+ 1f, 0.8f,
+ abs(dependency.y.toDouble()).toFloat(), getYMax
+ )
+
+ child.x = getRatioValue(
+ marginLeft, ((dependency.width - child.width) / 2).toFloat(),
+ abs(dependency.y.toDouble()).toFloat(), getYMax
+ )
+
+ child.y = getRatioValue(
+ marginTop, marginTopAfter,
+ abs(dependency.y.toDouble()).toFloat(), getYMax
+ )
+
+ return false
+ }
+
+ private fun dpToPx(dp: Float): Float {
+ val dm: DisplayMetrics = mContext.getResources().getDisplayMetrics()
+ return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, dm).toInt()
+ .toFloat()
+ }
+
+ private fun getRatioValue(
+ firstValue: Float,
+ lastValue: Float,
+ getY: Float,
+ getYMax: Float
+ ): Float {
+ val temp = -(firstValue - lastValue) * getY / getYMax
+ return firstValue + temp
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/kotlin/bums/lunatic/launcher/behavior/behaviorimpl/BehaviorTopBall.kt b/app/src/main/kotlin/bums/lunatic/launcher/behavior/behaviorimpl/BehaviorTopBall.kt
new file mode 100644
index 00000000..d152115b
--- /dev/null
+++ b/app/src/main/kotlin/bums/lunatic/launcher/behavior/behaviorimpl/BehaviorTopBall.kt
@@ -0,0 +1,91 @@
+package bums.lunatic.launcher.behavior.behaviorimpl
+
+import android.content.Context
+import android.util.AttributeSet
+import android.util.DisplayMetrics
+import android.util.TypedValue
+import android.view.View
+import android.widget.ImageView
+import androidx.annotation.NonNull
+import androidx.coordinatorlayout.widget.CoordinatorLayout
+import bums.lunatic.launcher.R
+import com.google.android.material.appbar.AppBarLayout
+import kotlin.math.abs
+
+
+class BehaviorTopBall(context: Context, attrs: AttributeSet?) :
+ CoordinatorLayout.Behavior(context, attrs) {
+ private val mContext: Context = context
+
+ private val iconMarginLeft: Float
+ private val iconMarginTop: Float
+ private val iconMarginTopAfter: Float
+
+ private val getYMax: Float =
+ context.getResources().getDimension(R.dimen.appbar_height) - context.getResources()
+ .getDimension(R.dimen.toolbar_height)
+
+ init {
+ iconMarginLeft = dpToPx(30f)
+ iconMarginTop = dpToPx(72f)
+ iconMarginTopAfter = dpToPx(20f)
+ }
+
+ override fun layoutDependsOn(
+ @NonNull parent: CoordinatorLayout,
+ @NonNull child: ImageView,
+ @NonNull dependency: View
+ ): Boolean {
+ return dependency is AppBarLayout
+ }
+
+ /**
+ * dependency 의 View 의 변화가 있을때 이벤트가 들어옵니다.
+ */
+ override fun onDependentViewChanged(
+ @NonNull parent: CoordinatorLayout,
+ @NonNull child: ImageView,
+ @NonNull dependency: View
+ ): Boolean {
+ // child icon scale [1 , 0.8]
+
+ child.scaleX = getRatioValue(
+ 1f, 0.8f,
+ abs(dependency.y.toDouble()).toFloat(), getYMax
+ )
+ child.scaleY = getRatioValue(
+ 1f, 0.8f,
+ abs(dependency.y.toDouble()).toFloat(), getYMax
+ )
+
+ // child icon set x [iconMarginLeft , (dependency.getWidth() - child.getWidth())/2]
+ child.x = getRatioValue(
+ iconMarginLeft, ((dependency.width - child.width) / 2).toFloat(),
+ abs(dependency.y.toDouble()).toFloat(), getYMax
+ )
+
+ // child icon set y [iconMarginTop, iconMarginTopAfter]
+ child.y = getRatioValue(
+ iconMarginTop, iconMarginTopAfter,
+ abs(dependency.y.toDouble()).toFloat(), getYMax
+ )
+
+ return false
+ }
+
+ private fun dpToPx(dp: Float): Float {
+ val dm: DisplayMetrics = mContext.getResources().getDisplayMetrics()
+ return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, dm).toInt()
+ .toFloat()
+ }
+
+ private fun getRatioValue(
+ firstValue: Float,
+ lastValue: Float,
+ getY: Float,
+ getYMax: Float
+ ): Float {
+ val temp = -(firstValue - lastValue) * getY / getYMax
+ return firstValue + temp
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarAdapter.kt b/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarAdapter.kt
new file mode 100644
index 00000000..efbe78fe
--- /dev/null
+++ b/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarAdapter.kt
@@ -0,0 +1,10 @@
+package bums.lunatic.launcher.behavior.calendar
+
+import android.view.View
+import android.view.ViewGroup
+
+
+interface CalendarAdapter {
+ fun getView(convertView: View?, parentView: ViewGroup?, bean: CalendarBean?): View
+// fun hasChildView() : Boolean
+}
\ No newline at end of file
diff --git a/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarBean.java b/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarBean.java
new file mode 100644
index 00000000..9f353444
--- /dev/null
+++ b/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarBean.java
@@ -0,0 +1,54 @@
+//package bums.lunatic.launcher.behavior.calendar;
+//
+//public class CalendarBean {
+// public int year;
+// public int month;
+// public int day;
+// public int week;
+//
+// //-1,0,1
+// public int monthFlag;
+//
+// //显示
+//
+// public CalendarBean(int year, int month, int day) {
+// this.year = year;
+// this.month = month;
+// this.day = day;
+// }
+//
+// public String getDisplayWeek(){
+// String s="";
+// switch(week){
+// case 1:
+// s="星期日";
+// break;
+// case 2:
+// s="星期一";
+// break;
+// case 3:
+// s="星期二";
+// break;
+// case 4:
+// s="星期三";
+// break;
+// case 5:
+// s="星期四";
+// break;
+// case 6:
+// s="星期五";
+// break;
+// case 7:
+// s="星期六";
+// break;
+//
+// }
+// return s ;
+// }
+//
+// @Override
+// public String toString() {
+// String s=year+"/"+month+"/"+day;
+// return s;
+// }
+//}
diff --git a/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarBean.kt b/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarBean.kt
new file mode 100644
index 00000000..9b097c31
--- /dev/null
+++ b/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarBean.kt
@@ -0,0 +1,29 @@
+package bums.lunatic.launcher.behavior.calendar
+
+class CalendarBean //显示
+ (var year: Int, var month: Int, var day: Int) {
+ var week: Int = 0
+
+ //-1,0,1
+ var monthFlag: Int = 0
+
+ val displayWeek: String
+ get() {
+ var s = ""
+ when (week) {
+ 1 -> s = "星期日"
+ 2 -> s = "星期一"
+ 3 -> s = "星期二"
+ 4 -> s = "星期三"
+ 5 -> s = "星期四"
+ 6 -> s = "星期五"
+ 7 -> s = "星期六"
+ }
+ return s
+ }
+
+ override fun toString(): String {
+ val s = "$year/$month/$day"
+ return s
+ }
+}
diff --git a/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarDateView.kt b/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarDateView.kt
new file mode 100644
index 00000000..8a13a4ac
--- /dev/null
+++ b/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarDateView.kt
@@ -0,0 +1,152 @@
+package bums.lunatic.launcher.behavior.calendar
+
+import android.content.Context
+import android.util.AttributeSet
+import android.util.Log
+import android.view.View
+import android.view.ViewGroup
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import bums.lunatic.launcher.R
+import bums.lunatic.launcher.behavior.calendar.CalendarFactory.getMonthOfDayList
+import com.example.accountbook.calendar.CalendarTopView
+import com.example.accountbook.calendar.CalendarTopViewChangeListener
+import java.util.Date
+import java.util.LinkedList
+
+
+class CalendarDateView(context: Context, attrs: AttributeSet?):
+ ViewPager(context, attrs), CalendarTopView {
+ var views = HashMap()
+ private var mCaledarLayoutChangeListener: CalendarTopViewChangeListener? = null
+ private var onItemClickListener: CalendarView.OnItemClickListener? = null
+ private val cache: LinkedList = LinkedList()
+ private val MAXCOUNT = 6
+ private var row = 6
+
+ fun setCalrow(row : Int) {
+ this.row = row
+ }
+ private var mAdapter: CalendarAdapter? = null
+ override var itemHeight = 0
+ private set
+
+
+ fun setAdapter(adapter: CalendarAdapter?) {
+ mAdapter = adapter
+ initialize()
+ initData()
+ }
+
+
+ fun reload() {
+ Log.i(this@CalendarDateView.javaClass.simpleName , "reload()")
+ sss.notifyDataSetChanged()
+ }
+
+ fun setOnItemClickListener(onItemClickListener: CalendarView.OnItemClickListener?) {
+ this.onItemClickListener = onItemClickListener
+ }
+
+ init {
+ val a = context.obtainStyledAttributes(attrs, R.styleable.CalendarDateView)
+ row = a.getInteger(R.styleable.CalendarDateView_cbd_calendar_row, 6)
+ a.recycle()
+
+ }
+
+ override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec)
+// var calendarHeight = 0
+ if (adapter != null) {
+ (getChildAt(0) as CalendarView)?.let {
+// calendarHeight = it.measuredHeight
+ itemHeight = it.itemHeight
+ }
+ }
+ setMeasuredDimension(
+ widthMeasureSpec,
+ MeasureSpec.makeMeasureSpec(heightMeasureSpec, MeasureSpec.EXACTLY)
+ )
+ }
+ val dateArr: IntArray = CalendarUtil.getYMD(Date())
+ var sss = object : PagerAdapter() {
+ override fun getCount(): Int {
+// Log.i(this@CalendarDateView::class.java.simpleName, "container >>> setAdapter getCount")
+ return Int.MAX_VALUE
+ }
+
+ override fun isViewFromObject(view: View, `object`: Any): Boolean {
+ return view === `object`
+ }
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+
+ Log.i(this@CalendarDateView::class.java.simpleName, "container >>> ${container} position >> ${position}")
+ val view: CalendarView = if (!cache.isEmpty()) {
+ cache.removeFirst()!!
+ } else {
+ CalendarView(container.context, row)
+ }
+ view.setOnItemClickListener(onItemClickListener)
+ view.setAdapter(mAdapter)
+
+ container.addView(view)
+ views[position] = view
+ view.apply {
+ setData(
+ getMonthOfDayList(
+ dateArr[0],
+ dateArr[1] + position - Int.MAX_VALUE / 2
+ ), position == Int.MAX_VALUE / 2
+ )
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
+ Log.i(this@CalendarDateView.javaClass.simpleName , "destroyItem >>> position ${position}")
+ container.removeView(`object` as View)
+ cache.addLast(`object` as CalendarView)
+ views.remove(position)
+ }
+ }
+
+ private fun initialize() {
+ setAdapter(sss)
+ addOnPageChangeListener(object: SimpleOnPageChangeListener() {
+ override fun onPageSelected(position: Int) {
+ super.onPageSelected(position)
+ onItemClickListener?.let{
+ views[position]?.let {v ->
+ val obs: Array = v.select
+ it.onItemClick(
+ obs[0] as View,
+ obs[1] as Int,
+ obs[2] as CalendarBean
+ )
+ }
+ }
+ mCaledarLayoutChangeListener?.onLayoutChange(this@CalendarDateView)
+ }
+ })
+ }
+
+ private fun initData() {
+ setCurrentItem(Int.MAX_VALUE / 2, false)
+ adapter!!.notifyDataSetChanged()
+ }
+
+ override val currentSelectPositon: IntArray
+ get() {
+ var view = views[currentItem]
+ if (view == null) {
+ view = getChildAt(0) as? CalendarView
+ }
+ return view?.getSelectPosition() ?: IntArray(4)
+ }
+
+ override fun setCalendarTopViewChangeListener(listener: CalendarTopViewChangeListener?) {
+ mCaledarLayoutChangeListener = listener
+ }
+}
diff --git a/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarFactory.kt b/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarFactory.kt
new file mode 100644
index 00000000..ba2212a2
--- /dev/null
+++ b/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarFactory.kt
@@ -0,0 +1,66 @@
+package bums.lunatic.launcher.behavior.calendar
+
+import android.util.Log
+import bums.lunatic.launcher.behavior.calendar.CalendarUtil.getDayOfWeek
+import java.util.Calendar
+
+
+object CalendarFactory {
+ private val cache = HashMap>()
+
+ fun getMonthOfDayList(y: Int, m: Int): List {
+ Log.e("TIME CHECK" , "fun getMonthOfDayList Start")
+ val key = y.toString() + "" + m
+ if (cache.containsKey(key)) {
+ val list = cache[key]
+ if (list == null) {
+ cache.remove(key)
+ } else {
+ return list
+ }
+ }
+ val list: MutableList = ArrayList()
+ cache[key] = list
+
+ val fweek: Int = getDayOfWeek(y, m, 1)
+ val total: Int = CalendarUtil.getDayOfMaonth(y, m)
+
+ for (i in fweek - 1 downTo 1) {
+ val bean = getCalendarBean(y, m, 1 - i)
+ bean.monthFlag = -1
+ list.add(bean)
+ }
+
+ for (i in 0 until total) {
+ val bean = getCalendarBean(y, m, i + 1)
+ list.add(bean)
+ }
+
+ for (i in 0 until 42 - (fweek - 1) - total) {
+ val bean = getCalendarBean(y, m, total + i + 1)
+ bean.monthFlag = 1
+ list.add(bean)
+ }
+ Log.e("TIME CHECK" , "fun getMonthOfDayList END")
+ return list
+ }
+
+ fun getCalendarBean(year: Int, month: Int, day: Int): CalendarBean {
+
+ val calendar: Calendar = Calendar.getInstance()
+ .apply { this.set(year, month - 1, day) }
+ val year = calendar.get(Calendar.YEAR)
+ val month = calendar.get(Calendar.MONTH) + 1
+ val day = calendar.get(Calendar.DATE)
+ val bean = CalendarBean(year, month, day)
+ bean.week = CalendarUtil.getDayOfWeek(year, month, day)
+// val chinaDate: Array = ChinaDate.getChinaDate(year, month, day)
+// bean.chinaMonth = chinaDate[0]
+// bean.chinaDay = chinaDate[1]
+ return bean
+ }
+
+ @JvmStatic
+ fun main(args: Array) {
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarTopView.kt b/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarTopView.kt
new file mode 100644
index 00000000..f525a907
--- /dev/null
+++ b/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarTopView.kt
@@ -0,0 +1,9 @@
+package com.example.accountbook.calendar
+
+
+interface CalendarTopView {
+ val currentSelectPositon: IntArray?
+ val itemHeight: Int
+
+ fun setCalendarTopViewChangeListener(listener: CalendarTopViewChangeListener?)
+}
\ No newline at end of file
diff --git a/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarTopViewChangeListener.kt b/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarTopViewChangeListener.kt
new file mode 100644
index 00000000..3a8ae600
--- /dev/null
+++ b/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarTopViewChangeListener.kt
@@ -0,0 +1,7 @@
+package com.example.accountbook.calendar
+
+interface CalendarTopViewChangeListener {
+ fun onLayoutChange(topView: CalendarTopView) {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarUtil.kt b/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarUtil.kt
new file mode 100644
index 00000000..44d7945b
--- /dev/null
+++ b/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarUtil.kt
@@ -0,0 +1,37 @@
+package bums.lunatic.launcher.behavior.calendar
+
+import java.util.Calendar
+import java.util.Date
+
+
+object CalendarUtil {
+ fun getDayOfWeek(y: Int, m: Int, day: Int): Int {
+ val calendar: Calendar = Calendar.getInstance()
+ calendar.set(y, m - 1, day)
+ return calendar.get(Calendar.DAY_OF_WEEK)
+ }
+
+ //获取一月最大天数
+ fun getDayOfMaonth(y: Int, m: Int): Int {
+ val cal: Calendar = Calendar.getInstance()
+ cal.set(y, m - 1, 1)
+ return cal.getActualMaximum(Calendar.DATE)
+ }
+
+ fun getMothOfMonth(y: Int, m: Int): Int {
+ val cal: Calendar = Calendar.getInstance()
+ cal.set(y, m - 1, 1)
+ val dateOfMonth: Int = cal.get(Calendar.MONTH)
+ return dateOfMonth + 1
+ }
+
+ fun getYMD(date: Date?): IntArray {
+ val cal: Calendar = Calendar.getInstance()
+ date?.let { cal.setTime(it) }
+ return intArrayOf(
+ cal.get(Calendar.YEAR),
+ cal.get(Calendar.MONTH) + 1,
+ cal.get(Calendar.DATE)
+ )
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarView.kt b/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarView.kt
new file mode 100644
index 00000000..6b381642
--- /dev/null
+++ b/app/src/main/kotlin/bums/lunatic/launcher/behavior/calendar/CalendarView.kt
@@ -0,0 +1,201 @@
+package bums.lunatic.launcher.behavior.calendar
+
+import android.content.Context
+import android.graphics.Rect
+import android.util.AttributeSet
+import android.util.Log
+import android.view.View
+import android.view.ViewGroup
+import bums.lunatic.launcher.behavior.calendar.CalendarUtil.getYMD
+
+import java.util.Date
+
+
+class CalendarView : ViewGroup {
+ private var selectPosition = -1
+ private var adapter: CalendarAdapter? = null
+ private var data: List? = null
+ private var onItemClickListener: OnItemClickListener? = null
+ private var row = 6
+ private val column = 7
+ private var itemWidth = 0
+ var itemHeight = 0
+ private set
+ private var isToday = false
+
+ interface OnItemClickListener {
+ fun onItemClick(view: View?, position: Int, bean: CalendarBean?)
+ }
+
+ constructor(context: Context?, row: Int) : super(context) {
+ this.row = row
+ }
+
+ fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) {
+ this.onItemClickListener = onItemClickListener
+ }
+
+ constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
+ setWillNotDraw(false)
+ }
+
+ fun setAdapter(adapter: CalendarAdapter?) {
+ this.adapter = adapter
+ }
+ fun setCalrow(row : Int) {
+ if (this.row != row) {
+ this.row = row
+ removeAllViews()
+ }
+ }
+ fun setData(data: List?, isToday: Boolean) {
+ this.data = data
+ this.isToday = isToday
+ setItem()
+ requestLayout()
+ }
+
+ private fun setItem() {
+ selectPosition = -1
+ if (adapter == null) {
+ throw RuntimeException("adapter is null,please setadapter")
+ }
+ Log.i("data >>> ","data ${data}")
+ for (i in data!!.indices) {
+ val bean = data!![i]
+ val chidView: View? = adapter?.getView(
+ getChildAt(i).also { v -> Log.i("data >>> ", "view $v") },
+ this,
+ bean
+ ).also { v -> Log.i("data >>> ", "chidView $v") }
+ if (chidView != null && chidView != getChildAt(i)) {
+ addViewInLayout(chidView, i, chidView.layoutParams, true)
+ }
+ if (isToday && selectPosition == -1) {
+ val date = getYMD(Date())
+ if (bean.year == date[0] && bean.month == date[1] && bean.day == date[2]) {
+ selectPosition = i
+ }
+ } else {
+ if (selectPosition == -1 && bean.day == 1) {
+ selectPosition = i
+ }
+ }
+ chidView?.isSelected = selectPosition == i
+ setItemClick(chidView, i, bean)
+ }
+ }
+
+ val select: Array
+ get() = arrayOf(
+ getChildAt(selectPosition), selectPosition,
+ data!![selectPosition]
+ )
+
+ fun setItemClick(view: View?, potsion: Int, bean: CalendarBean?) {
+ view?.setOnClickListener {
+ if (selectPosition != -1) {
+ getChildAt(selectPosition).isSelected = false
+ getChildAt(potsion).isSelected = true
+ }
+ selectPosition = potsion
+ if (onItemClickListener != null) {
+ onItemClickListener!!.onItemClick(view, potsion, bean)
+ }
+ }
+ }
+
+ fun getSelectPosition(): IntArray {
+ val rect = Rect()
+ try {
+ getChildAt(selectPosition).getHitRect(rect)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ return intArrayOf(rect.left, rect.top, rect.right, rect.top)
+ }
+
+
+ var lastwidthMeasureSpec = 0
+ var lastheightMeasureSpec = 0
+ override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec)
+ Log.e(this.javaClass::class.java.simpleName , "this count check ${this}")
+ if (widthMeasureSpec != lastwidthMeasureSpec || heightMeasureSpec != lastheightMeasureSpec) {
+ val parentWidth =
+ MeasureSpec.getSize(
+ MeasureSpec.makeMeasureSpec(
+ widthMeasureSpec,
+ MeasureSpec.EXACTLY
+ )
+ )
+ val parentH =
+ MeasureSpec.getSize(
+ MeasureSpec.makeMeasureSpec(
+ heightMeasureSpec,
+ MeasureSpec.EXACTLY
+ )
+ )
+ itemWidth = parentWidth / column
+ itemHeight = parentH / row
+// itemWidth
+ val view = getChildAt(0) ?: return
+ val params = view.layoutParams
+ if (params != null && params.height > 0) {
+ itemHeight = params.height
+ }
+ setMeasuredDimension(parentWidth, itemHeight * row)
+ if (childCount.equals(row*column))
+ for (i in 0 until childCount) {
+ val childView = getChildAt(i)
+ childView.measure(
+ MeasureSpec.makeMeasureSpec(itemWidth, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(itemHeight, MeasureSpec.EXACTLY)
+ )
+ }
+ }
+ Log.i(
+ TAG,
+ "onMeasure() called with: itemHeight = [$itemHeight], itemWidth = [$itemWidth]"
+ )
+ lastwidthMeasureSpec = widthMeasureSpec
+ lastheightMeasureSpec = heightMeasureSpec
+ }
+
+ override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
+ if (changed && childCount.equals(row*column))
+ for (i in 0 until childCount) {
+ layoutChild(getChildAt(i), i, l, t, r, b)
+ }
+ }
+
+ override fun addViewInLayout(
+ child: View?,
+ index: Int,
+ params: LayoutParams?,
+ preventRequestLayout: Boolean
+ ): Boolean {
+ Log.d("CalendarView, time","time")
+ return super.addViewInLayout(child, index, params, preventRequestLayout)
+ }
+
+ private fun layoutChild(view: View, position: Int, l: Int, t: Int, r: Int, b: Int) {
+ var l = l
+ var t = t
+ var r = r
+ var b = b
+ val cc = position % column
+ val cr = position / column
+ val itemWidth = view.measuredWidth
+ val itemHeight = view.measuredHeight
+ l = cc * itemWidth
+ t = cr * itemHeight
+ r = l + itemWidth
+ b = t + itemHeight
+ view.layout(l, t, r, b)
+ }
+
+ companion object {
+ private const val TAG = "CalendarView"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/kotlin/bums/lunatic/launcher/feeds/Feeds.kt b/app/src/main/kotlin/bums/lunatic/launcher/feeds/Feeds.kt
index 5b9767d0..88c5d6e5 100644
--- a/app/src/main/kotlin/bums/lunatic/launcher/feeds/Feeds.kt
+++ b/app/src/main/kotlin/bums/lunatic/launcher/feeds/Feeds.kt
@@ -267,10 +267,10 @@ internal class Feeds : Fragment() , CommadCallabck {
// consoleLog("${cmd[0]} END ${cmd[1]}")
// }
CoroutineScope(Dispatchers.IO).launch {
- consoleLog("on Cmd JF with SO")
+ consoleLog("on Cmd JF with MOST")
consoleLog("${cmd[0]} Start ${cmd[1]}")
String.format(String(Base64.getMimeDecoder().decode("aHR0cHM6Ly9rcjcwLnNvZ2lybC5zby8/cz0lcw==".toByteArray())),cmd[1]).getJ().let { doc -> FeedParseManager.parse(doc){consoleLog(it)} }
- consoleLog("current j req() ${WorkersDb.getRealm().query("category == $0", RssDataType.GURU.name).find().size}")
+ consoleLog("current j req() ${WorkersDb.getRealm().query("category == $0", RssDataType.MOST.name).find().size}")
consoleLog("${cmd[0]} END ${cmd[1]}")
}
}
diff --git a/app/src/main/kotlin/bums/lunatic/launcher/home/LauncherHome.kt b/app/src/main/kotlin/bums/lunatic/launcher/home/LauncherHome.kt
index b92a95ea..e71ad3b3 100644
--- a/app/src/main/kotlin/bums/lunatic/launcher/home/LauncherHome.kt
+++ b/app/src/main/kotlin/bums/lunatic/launcher/home/LauncherHome.kt
@@ -56,6 +56,7 @@ import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2
import bums.lunatic.launcher.LauncherActivity.Companion.lActivity
import bums.lunatic.launcher.R
+import bums.lunatic.launcher.behavior.Behavior
import bums.lunatic.launcher.databinding.LauncherHomeBinding
import bums.lunatic.launcher.helpers.Constants.Companion.BOTTOM_SHEET_TAG
import bums.lunatic.launcher.helpers.Constants.Companion.KEY_LOCK_METHOD
@@ -162,7 +163,6 @@ internal class LauncherHome : Fragment() {
val infoUpdate = Runnable {
- BLog.LOGE("swipeToDeleteCallback data called infoUpdate ")
chooseAdpater()
}
@@ -198,11 +198,8 @@ internal class LauncherHome : Fragment() {
var weatherPages = arrayListOf()
var weatherAdapter = arrayListOf?>()
- PrefBoolean.weatherDress.get(false).letTrue {
- weatherPages.add(R.layout.hourly_weather)
- weatherAdapter.add(weatherDressAdapter!!)}
- PrefBoolean.weatherState.get(false).letTrue { weatherPages.add(R.layout.recommended_hourly_dress)
- weatherAdapter.add(weatherHourlyAdapter!!)}
+ PrefBoolean.weatherDress.get(false).letTrue { weatherPages.add(R.layout.hourly_weather); weatherAdapter.add(weatherDressAdapter!!)}
+ PrefBoolean.weatherState.get(false).letTrue { weatherPages.add(R.layout.recommended_hourly_dress); weatherAdapter.add(weatherHourlyAdapter!!)}
if (weatherPages.size > 0) {
mWeatherAdapter = WeatherAdapter(
weatherPages,
@@ -213,11 +210,6 @@ internal class LauncherHome : Fragment() {
} else {
binding.noticeSummary.root.visibility = View.GONE
}
-// mWeatherAdapter = WeatherAdapter(arrayListOf(),binding.noticeSummary)
-// WorkersDb.getRealm().query().first().find()?.forecast?.let {
-// mWeatherAdapter?.update(it.forecastday)
-// BLog.LOGE("saved weatherForcast >>> ${it.forecastday}")
-// }
val decoration = DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
@@ -543,11 +535,12 @@ internal class LauncherHome : Fragment() {
}
infosJob?.start()
}
-
+ var rssStateVote = false
fun queryVotes() {
beforeQuery()
var rQ = WorkersDb.getRealm().query().query("vote == $0",true)
updateQuery(rQ)
+ rssStateVote = true
}
fun queryInfos(filter: Collection? = arrayListOf(RssDataType.GURU,RssDataType.MOST,RssDataType.REDDIT_NSFW), noLimit : Boolean = false) {
@@ -559,6 +552,7 @@ internal class LauncherHome : Fragment() {
}
updateQuery(rQ)
+ rssStateVote = false
}
fun queryInfos(keyword : String, category : ArrayList = arrayListOf(), noLimit : Boolean = false) {
@@ -600,6 +594,7 @@ internal class LauncherHome : Fragment() {
rQ = rQ.query(queryString)
}
updateQuery(rQ)
+ rssStateVote = false
}
var infosJob : Job? = null
@@ -676,8 +671,11 @@ internal class LauncherHome : Fragment() {
}
binding.otherCheck -> {
if (binding.otherCheck.isSelected ) {
- binding.otherCheck.isSelected = false
-
+ if (rssStateVote) {
+ queryInfos()
+ } else {
+ binding.otherCheck.isSelected = false
+ }
} else {
queryInfos()
binding.otherCheck.isSelected = true
@@ -850,22 +848,19 @@ internal class LauncherHome : Fragment() {
private fun enableSwipeToDeleteAndUndo() {
val swipeToDeleteCallback: SwipeToDeleteCallback = object : SwipeToDeleteCallback(requireContext()) {
override fun onSwiped(@NonNull viewHolder: RecyclerView.ViewHolder, i: Int) {
- BLog.LOGE("swipeToDeleteCallback start")
(viewHolder.itemView.getTag() as? RssData)?.let { rss ->
WorkersDb.getRealm().apply {
writeBlocking {
- if (rss.vote) {
+ if (rssStateVote && rss.vote) {
rss.vote = false
rss.read = 0
} else {
rss.read += nomoreShowCount
}
copyToRealm(rss, UpdatePolicy.ALL)
- BLog.LOGE("swipeToDeleteCallback data update ")
}
}
}
- BLog.LOGE("swipeToDeleteCallback endEvent")
}
}
@@ -916,6 +911,9 @@ internal class LauncherHome : Fragment() {
gestureDistance: Double
): Boolean {
when(fingers) {
+ 4->{
+ lActivity!!.startActivity(Intent(requireContext(), Behavior::class.java))
+ }
3 -> QuickAccess().show(fragManager, BOTTOM_SHEET_TAG)
2->{
var startIntene = Intent(Intent.ACTION_MAIN)
diff --git a/app/src/main/kotlin/bums/lunatic/launcher/home/adapters/RssItemAdapter.kt b/app/src/main/kotlin/bums/lunatic/launcher/home/adapters/RssItemAdapter.kt
index e31ca066..e22a6ae6 100644
--- a/app/src/main/kotlin/bums/lunatic/launcher/home/adapters/RssItemAdapter.kt
+++ b/app/src/main/kotlin/bums/lunatic/launcher/home/adapters/RssItemAdapter.kt
@@ -158,8 +158,6 @@ internal class RssItemAdapter (
fun updateData(newList: List) {
try {
- BLog.LOGE("swipeToDeleteCallback data called updateData ${newList} ")
-// BLog.LOGE("newList >> ${newList}")
DiffUtil.calculateDiff(RssItemDiffUtil(rssDataItemLis, newList)).apply {
}.dispatchUpdatesTo(this).apply {
diff --git a/app/src/main/kotlin/bums/lunatic/launcher/home/adapters/SwipeToDeleteCallback.kt b/app/src/main/kotlin/bums/lunatic/launcher/home/adapters/SwipeToDeleteCallback.kt
index e1e6dac6..2aa7c717 100644
--- a/app/src/main/kotlin/bums/lunatic/launcher/home/adapters/SwipeToDeleteCallback.kt
+++ b/app/src/main/kotlin/bums/lunatic/launcher/home/adapters/SwipeToDeleteCallback.kt
@@ -27,7 +27,7 @@ abstract class SwipeToDeleteCallback internal constructor(context: Context) :
init {
- mClearPaint.setXfermode(PorterDuffXfermode(PorterDuff.Mode.CLEAR))
+ mClearPaint.setXfermode(PorterDuffXfermode(PorterDuff.Mode.DARKEN))
deleteDrawable = ContextCompat.getDrawable(mContext, R.drawable.ic_delete)
intrinsicWidth = deleteDrawable!!.intrinsicWidth
intrinsicHeight = deleteDrawable.intrinsicHeight
diff --git a/app/src/main/kotlin/bums/lunatic/launcher/view/DateTimeView.kt b/app/src/main/kotlin/bums/lunatic/launcher/view/DateTimeView.kt
index e69d1d3b..f699809b 100644
--- a/app/src/main/kotlin/bums/lunatic/launcher/view/DateTimeView.kt
+++ b/app/src/main/kotlin/bums/lunatic/launcher/view/DateTimeView.kt
@@ -16,6 +16,7 @@ import android.text.style.ClickableSpan
import android.util.AttributeSet
import android.view.View
import androidx.appcompat.widget.AppCompatTextView
+import bums.lunatic.launcher.R
import java.text.SimpleDateFormat
import java.util.Date
@@ -77,12 +78,12 @@ class DateTimeView : AppCompatTextView {
}
spannableBuilder.append(time)
- spannableBuilder.setSpan(AbsoluteSizeSpan(48,true), 0, time.length , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
+ spannableBuilder.setSpan(AbsoluteSizeSpan(resources.getDimensionPixelSize(R.dimen._26sp),false), 0, time.length , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
spannableBuilder.setSpan(mClickableSpan, 0, time.length , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
spannableBuilder.append("\n")
spannableBuilder.append(date)
var start = time.length + "\n".length
- spannableBuilder.setSpan(AbsoluteSizeSpan(30,true), start , start+date.length , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
+ spannableBuilder.setSpan(AbsoluteSizeSpan(resources.getDimensionPixelSize(R.dimen._20sp),false), start , start+date.length , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
spannableBuilder.setSpan(mClickableSpan2, start , start+date.length , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
mHandler.removeCallbacks(runable)
setText(spannableBuilder)
diff --git a/app/src/main/res/anim/fade_in.xml b/app/src/main/res/anim/fade_in.xml
new file mode 100644
index 00000000..5436d31f
--- /dev/null
+++ b/app/src/main/res/anim/fade_in.xml
@@ -0,0 +1,6 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/anim/fade_out.xml b/app/src/main/res/anim/fade_out.xml
new file mode 100644
index 00000000..420ad6d2
--- /dev/null
+++ b/app/src/main/res/anim/fade_out.xml
@@ -0,0 +1,6 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_list_main.xml b/app/src/main/res/drawable/bg_list_main.xml
new file mode 100644
index 00000000..f7fe0d10
--- /dev/null
+++ b/app/src/main/res/drawable/bg_list_main.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/drawable_ball.xml b/app/src/main/res/drawable/drawable_ball.xml
new file mode 100644
index 00000000..46c9578a
--- /dev/null
+++ b/app/src/main/res/drawable/drawable_ball.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/app_drawer.xml b/app/src/main/res/layout/app_drawer.xml
index 6d3fcd32..beed4109 100644
--- a/app/src/main/res/layout/app_drawer.xml
+++ b/app/src/main/res/layout/app_drawer.xml
@@ -14,7 +14,7 @@
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_width="0dp"
- android:layout_margin="10dp"
+ android:layout_margin="@dimen/default_layout_margin"
android:layout_height="0dp">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/feeds.xml b/app/src/main/res/layout/feeds.xml
index 6b0eb86f..ff9779bf 100644
--- a/app/src/main/res/layout/feeds.xml
+++ b/app/src/main/res/layout/feeds.xml
@@ -12,7 +12,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:singleSelection="true"
- android:layout_margin="10dp"
+ android:layout_margin="@dimen/default_layout_margin"
>
+ android:layout_margin="@dimen/default_layout_margin">
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_hourly_weather.xml b/app/src/main/res/layout/item_hourly_weather.xml
index b6a944a4..c29c511f 100644
--- a/app/src/main/res/layout/item_hourly_weather.xml
+++ b/app/src/main/res/layout/item_hourly_weather.xml
@@ -3,55 +3,75 @@
-
+ />
+
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_rec_hourly_dress.xml b/app/src/main/res/layout/item_rec_hourly_dress.xml
index 02dfcf64..3fda7465 100644
--- a/app/src/main/res/layout/item_rec_hourly_dress.xml
+++ b/app/src/main/res/layout/item_rec_hourly_dress.xml
@@ -12,21 +12,24 @@
android:id="@+id/weather_item">
+
+ />
diff --git a/app/src/main/res/layout/item_sample.xml b/app/src/main/res/layout/item_sample.xml
new file mode 100644
index 00000000..eaaecb84
--- /dev/null
+++ b/app/src/main/res/layout/item_sample.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/launcher_activity.xml b/app/src/main/res/layout/launcher_activity.xml
index f4970348..a7c0d4f8 100644
--- a/app/src/main/res/layout/launcher_activity.xml
+++ b/app/src/main/res/layout/launcher_activity.xml
@@ -8,7 +8,7 @@
android:fitsSystemWindows="true">
-
+
+
+
+
+
+
+
+
+
+
+
+
+ app:layout_constraintBottom_toBottomOf="parent" >
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/list_item_with.xml b/app/src/main/res/layout/list_item_with.xml
index 7efc49bb..905034aa 100644
--- a/app/src/main/res/layout/list_item_with.xml
+++ b/app/src/main/res/layout/list_item_with.xml
@@ -21,10 +21,9 @@
android:id="@+id/title"
android:layout_width="@dimen/zero"
android:layout_height="wrap_content"
- android:textSize="24sp"
+ style="@style/normal"
android:maxLines="2"
android:gravity="center_vertical|right"
- android:includeFontPadding="false"
android:ellipsize="middle"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/circle_preview"
@@ -34,9 +33,8 @@
android:id="@+id/desc"
android:layout_width="@dimen/zero"
android:layout_height="wrap_content"
- android:textSize="16sp"
+ style="@style/small"
android:maxLines="2"
- android:includeFontPadding="false"
android:gravity="center_vertical|right"
android:ellipsize="middle"
app:layout_constraintTop_toBottomOf="@id/title"
@@ -48,10 +46,9 @@
android:id="@+id/date"
android:layout_width="@dimen/zero"
android:layout_height="wrap_content"
- android:textSize="16sp"
+ style="@style/small"
android:lines="1"
android:gravity="center_vertical|right"
- android:includeFontPadding="false"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@id/circle_preview"
app:layout_constraintRight_toRightOf="parent"/>
diff --git a/app/src/main/res/layout/weather_book.xml b/app/src/main/res/layout/weather_book.xml
index d79b6419..a732cc57 100644
--- a/app/src/main/res/layout/weather_book.xml
+++ b/app/src/main/res/layout/weather_book.xml
@@ -6,60 +6,56 @@
-
+
-
-
-
-
+ android:contentDescription="시계 아이콘"
+ app:srcCompat="@drawable/ico_time"
+ tools:ignore="ImageContrastCheck"
+ android:layout_marginStart="@dimen/default_layout_margin"
+ app:tint="@android:color/white"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+
+
+
+
+ android:layout_height="wrap_content"
+ app:layout_constraintTop_toBottomOf="@+id/imageView" />
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index 040fc626..86c58a0f 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -1,11 +1,17 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 7796124f..a8df5e73 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -7,4 +7,14 @@
#FFFF0000
#FF00FF00
#FF0000FF
+
+
+
+ #FFBB86FC
+ #FF6200EE
+ #FF3700B3
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index f814810c..80d5cc95 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -20,4 +20,19 @@
16sp
48sp
216sp
+
+ 7dp
+ 5dp
+ 28sp
+ 23sp
+ 17sp
+ 14sp
+
+
+
+ 100dp
+
+
+ 329dp
+
\ 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 022e059b..72cda250 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -70,5 +70,22 @@
- 1
+
+
+
+
+
\ No newline at end of file