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