@@ -1,198 +1,86 @@
package com.cheheihome.supercalendar
package supercalendar

import android.app.Activity
import android.content.Context
import android.os.Bundle
import android.os.StrictMode
import android.support.v7.app.AppCompatActivity
import android.util.Log
import android.view.*
import android.widget.BaseAdapter
import android.widget.AbsListView
import android.widget.Toast
import com.cheheihome.InterceptGridView
import kotlinx.android.synthetic.activity_main.dayView
import kotlinx.android.synthetic.activity_main.gridView
import kotlinx.android.synthetic.activity_main.toolbar
import lecalendar.model.DayModel
import lecalendar.views.DayView
import com.cheheihome.LeCalendar
import kotlinx.android.synthetic.activity_main.*
import com.cheheihome.supercalendar.R

import java.util.ArrayList
import java.util.Calendar
import java.util.Date
import java.util.Date

public class MainActivity : AppCompatActivity(), InterceptGridView.SuperCallBack {
import lecalendar.model.DayModel
import lecalendar.views.DayView

var mContext: Context = this;
override fun onCreate(savedInstanceState: Bundle?) {
super<AppCompatActivity>.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//gridView = findViewById(R.id.gridView) as GridView
/**
* Created by chanlevel on 15/9/8.
*/
public class MainActivity : AppCompatActivity(), AbsListView.OnScrollListener {

toolbar.setTitle(11.toString())
setGridView()
setDayView()
}
var flag: Boolean = false
var type: DayView.SElECTTYPE = DayView.SElECTTYPE.STATUS

override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu)
return true
}
override fun onCreate(savedInstanceState: Bundle?) {
StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.Builder().penaltyFlashScreen().penaltyLog().build())

override fun onOptionsItemSelected(item: MenuItem): Boolean {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
val id = item.getItemId()

// //noinspection SimplifiableIfStatement
// if (id == R.id.action_settings) {
//
// return true
// }

when (id) {
R.id.action_settings -> {
setDayView() ;return true
}
}
super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

return super<AppCompatActivity>.onOptionsItemSelected(item)
}

fun setDayView() {
var dayModel: DayModel = DayModel(false, false, null, 0, 0, null, Date(), false, false, false, false,false);
val b = Calendar.getInstance()
b.add(Calendar.DATE, -1)
// b.set(Calendar.DAY_OF_WEEK, 1)
val e = Calendar.getInstance()
e.add(Calendar.YEAR, 1)
e.set(Calendar.DAY_OF_WEEK, 7)
getDates(b, e)
calendar.setDays(days)
calendar.setSelectListener(object : LeCalendar.LeSelectListener {
override fun onSelectPosition(status: Boolean, start: Int, end: Int) {

dayModel.isFestival = true
dayModel.festival = "lala"
dayModel.isFirstWeekinMonth = true;
dayModel.isFirstDayofMonth = true
dayModel.room_num = 200
dayModel.price = 2000
dayModel.init();
dayView.setDayModel(dayModel)
}

override fun OnTotalSelected(dates: List<Date>) {
Toast.makeText(this@MainActivity, dates.size().toString(), Toast.LENGTH_SHORT).show()
}
})

}


var days: ArrayList<DayModel> = ArrayList<DayModel>();
var temp = Calendar.getInstance();
fun getDates(begin: Calendar, end: Calendar): ArrayList<DayModel>? {
temp = begin;
fun getDates(begin: Calendar, end: Calendar) {
val temp = begin
// if (this.days == null) this.days = ArrayList<DayModel>();
while (temp.before(end)) {
var dayModel: DayModel = DayModel(false, false, null, 0, 0, null, temp.getTime(), false, false, false, false,false);
dayModel.init();
dayModel.price=(Math.random()*1000f).toInt();
val dayModel = DayModel(false, false, null, 0, 0, null, temp.time, false, false, false, false, false)
dayModel.room_num = (Math.random() * 5).toInt()
dayModel.isFestival = if ((Math.random() * 5).toInt()> 3) true else false
dayModel.price = dayModel.room_num * 10
dayModel.init()
this.days.add(dayModel)

temp.add(Calendar.DATE, 1)
}
return days;

}


var i = 0

private fun setGridView() {
var b: Calendar = Calendar.getInstance();
b.add(Calendar.MONTH, -1);
b.set(Calendar.DAY_OF_WEEK, 1);
var e: Calendar = Calendar.getInstance();
e.add(Calendar.YEAR, 1);
e.set(Calendar.DAY_OF_WEEK, 7)
getDates(b, e)
gridView.setAdapter(MyAdapter(mContext))

//gridView.setOnItemClickListener { view, parent, i, l ->System.out.print(i.toString()) }

}

public fun click(v: View?) {
showToast("click")
}
override fun onDown(postion: Int) {
Log.d("Super-onDown",postion.toString())
throw UnsupportedOperationException()
}

override fun onMove(startpostion: Int, endpostion: Int) {
Log.d("Super-MOVE-start",startpostion.toString())
Log.d("Super-MOVE-end",endpostion.toString())
throw UnsupportedOperationException()
}

override fun onUp(startpostion: Int, endpostion: Int) {
throw UnsupportedOperationException()
}

var days = ArrayList<DayModel>()

private inner class MyAdapter : BaseAdapter {
var context: Context;

constructor(context: Context) {
this.context :Context = context;
}

override fun getCount(): Int {
return days.size()
}
override fun onScrollStateChanged(view: AbsListView, scrollState: Int) {

override fun getItem(position: Int): Any {
return position
}

override fun getItemId(position: Int): Long {
return position.toLong()
}

override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
// var tv = TextView(context)
// tv.setHeight(150)
// tv.setText(position.toString())
// // tv.setText("21");
// tv.setGravity(Gravity.CENTER)
// // tv.setOnClickListener { (context as Activity).showToast(position.toString()) }
// tv.setOnClickListener(View.OnClickListener() {
//
// Toast.makeText(context, position.toString(), Toast.LENGTH_SHORT).show()
// // (context as Activity).showToast(position.toString())
// //System.out.print(position.toString())
// })
// var dayView: DayView = DayView(context);
// dayView.setHeight(150)
// dayView.setDayModel(days.get(position));
var holder: ViewHolder;
if (convertView == null) {
var view: View = LayoutInflater.from(context).inflate(R.layout.item_day, null)


holder = ViewHolder();
holder.dayView = view.findViewById(R.id.dayView) as DayView;
view.setMinimumHeight(150)
view.setTag(holder)
holder.dayView?.setDayModel(days.get(position))
return view;
} else {
holder = convertView.getTag() as ViewHolder ;
holder.dayView?.setDayModel(days.get(position))
convertView.setMinimumHeight(150)
return convertView;
};




return dayView;
}
}

private class ViewHolder {
var dayView: DayView? = null;
override fun onScroll(view: AbsListView, firstVisibleItem: Int, visibleItemCount: Int, totalItemCount: Int) {
this.visiblecount = visibleItemCount
}

fun Activity.showToast(str: String) {
Toast.makeText(getBaseContext(), str, Toast.LENGTH_SHORT).show()
}
var visiblecount: Int = 0


}
@@ -17,15 +17,11 @@



<lecalendar.views.DayView android:layout_gravity="center"
android:padding="2dp"
android:layout_width="50dp"
android:layout_height="50dp" android:id="@+id/dayView"/>

<com.cheheihome.LeCalendarPlus
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="match_parent" android:id="@+id/gridView"
android:layout_height="match_parent" android:id="@+id/calendar"
android:numColumns="7"

></com.cheheihome.LeCalendarPlus>
@@ -15,7 +15,7 @@ buildscript {
}
}

ext.kotlin_version = '0.12.613'
ext.kotlin_version = '0.14.449'
allprojects {
repositories {
jcenter()
@@ -32,8 +32,8 @@ dependencies {

}
buildscript {
ext.kotlin_version = '0.13.1513'
ext.kotlin_version = '0.12.613'
ext.kotlin_version = '0.14.449'
// ext.kotlin_version = '0.12.613'
repositories {
mavenCentral()
}
@@ -92,10 +92,10 @@
</content>
<orderEntry type="jdk" jdkName="Android API 23 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="kotlin-runtime-0.12.613" level="project" />
<orderEntry type="library" exported="" name="appcompat-v7-23.0.0" level="project" />
<orderEntry type="library" exported="" name="kotlin-stdlib-0.12.613" level="project" />
<orderEntry type="library" exported="" name="kotlin-stdlib-0.14.449" level="project" />
<orderEntry type="library" exported="" name="support-v4-23.0.0" level="project" />
<orderEntry type="library" exported="" name="kotlin-runtime-0.14.449" level="project" />
<orderEntry type="library" exported="" name="design-23.0.0" level="project" />
<orderEntry type="library" exported="" name="support-annotations-23.0.0" level="project" />
</component>
@@ -109,8 +109,9 @@ public void setDays(ArrayList<DayModel> days) {
f.setTime(first);
while (f.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) {
f.add(Calendar.DATE, -1);
DayModel dayModel = new DayModel(false, false, null, 0, 0, null, f.getTime(), false, false, false, false, false);
DayModel dayModel = new DayModel(false, false, null, 0, 0, null, f.getTime(), false, false, false, false, true);
dayModel.init();
Log.d("daymodel--:",dayModel.toString());
days.add(0, dayModel);
}
this.days = days;
@@ -29,7 +29,6 @@
public class LeCalendarPlus extends LinearLayout {
LinearLayout weekHeader;
LeCalendar mCalendar;
TextView txt_friday;
DisplayMetrics displayMetrics;
CheckBox[] week = new CheckBox[7];

@@ -54,11 +53,13 @@ private void init() {
setOrientation(VERTICAL);
View dividerView = new View(getContext());
dividerView.setBackgroundColor(Color.GRAY);
addView(dividerView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 2));
// weekHeader = (LinearLayout) LayoutInflater.from(getContext()).inflate(R.layout.calendar_header, null);
addView(dividerView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 1));

weekHeader = week();
addView(weekHeader, new ViewGroup.LayoutParams(headWidth(), headHeight()));
// addView(dividerView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 2));
View dividerView2 = new View(getContext());
dividerView.setBackgroundColor(Color.GRAY);
addView(dividerView2, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 1));
mCalendar = new LeCalendar(getContext());
ViewGroup.LayoutParams clp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
mCalendar.setGravity(Gravity.FILL_HORIZONTAL);
@@ -78,7 +79,7 @@ private LinearLayout week() {
week[i].setButtonDrawable(new ColorDrawable(Color.TRANSPARENT));

String s = c.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.getDefault());
final Calendar t = c;

week[i].setText(s);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, 1.0f);
if (i == 5 || i == 6) {
@@ -140,6 +141,8 @@ public void chooseDays(int dayOfWeek) {
}

public void cleanSelection() {
for (CheckBox c : week)
c.setChecked(false);
mCalendar.cleanSelection();
}
}
@@ -29,11 +29,11 @@ data class DayModel(
public fun init() {

var c: Calendar = Calendar.getInstance();
var today: Calendar = Calendar.getInstance();
val today = Calendar.getInstance();
c.setTime(date);

isToday = dateUtils.sameDay(c, today);
beforeToday=dateUtils.beforeToaday(c)
beforeToday=dateUtils.beforeToday(c)
isFirstDayofMonth = c.get(Calendar.DAY_OF_MONTH) == 1
isFirstWeekinMonth = c.get(Calendar.DAY_OF_WEEK_IN_MONTH) ==1
// isLastWeekinMonth = dateUtils.isLast7dayOfMonth(c)
@@ -14,15 +14,19 @@ public class DateUtils {
return (a.get(Calendar.YEAR) == b.get(Calendar.YEAR) && a.get(Calendar.MONTH) == b.get(Calendar.MONTH) && a.get(Calendar.DATE) == b.get(Calendar.DATE))
}

public fun aBeforeb(a: Calendar, b: Calendar): Boolean {
if (a.get(Calendar.YEAR) > b.get(Calendar.YEAR)) return false;
if (a.get(Calendar.MONTH) > b.get(Calendar.MONTH)) return false;
if (a.get(Calendar.DAY_OF_MONTH) >= b.get(Calendar.DAY_OF_MONTH)) return false;
return true;
}

public fun beforeToaday(a: Calendar): Boolean {
var today = Calendar.getInstance();

public fun aBeforeb(a: Calendar, b: Calendar):Boolean {
if (a.get(Calendar.YEAR) != b.get(Calendar.YEAR))
return a.get(Calendar.YEAR) < b.get(Calendar.YEAR);
if (a.get(Calendar.MONTH) != b.get(Calendar.MONTH))
return a.get(Calendar.MONTH) < b.get(Calendar.MONTH);
return a.get(Calendar.DAY_OF_MONTH) < b.get(Calendar.DAY_OF_MONTH);
}


public fun beforeToday(a: Calendar): Boolean {
val today = Calendar.getInstance();
return aBeforeb(a, today)
}

@@ -134,7 +134,7 @@ public class DayView : View {

var festPosY = (getPaddingTop() + festTextHeight - textPaint.descent() / 2)
// Log.d("super-posY","as:"+textPaint.ascent().toString()+"-ds;"+textPaint.descent().toString())

if(!daymodel.beforeToday)
canvas.drawText(up, getPaddingLeft().toFloat() + testWidth.toFloat() / 2f, festPosY, textPaint);