356 lines
17 KiB
Java
356 lines
17 KiB
Java
package com.hty.daycount;
|
||
|
||
import android.app.Activity;
|
||
import android.app.AlertDialog;
|
||
import android.app.SearchManager;
|
||
import android.content.ContentValues;
|
||
import android.content.Context;
|
||
import android.content.DialogInterface;
|
||
import android.content.Intent;
|
||
import android.database.Cursor;
|
||
import android.database.sqlite.SQLiteDatabase;
|
||
import android.os.Bundle;
|
||
import android.util.Log;
|
||
import android.view.ContextMenu;
|
||
import android.view.LayoutInflater;
|
||
import android.view.Menu;
|
||
import android.view.MenuItem;
|
||
import android.view.View;
|
||
import android.view.inputmethod.InputMethodManager;
|
||
import android.widget.AdapterView;
|
||
import android.widget.DatePicker;
|
||
import android.widget.EditText;
|
||
import android.widget.ListView;
|
||
import android.widget.SimpleCursorAdapter;
|
||
import android.widget.TextView;
|
||
import android.widget.Toast;
|
||
|
||
import java.lang.reflect.Field;
|
||
import java.text.SimpleDateFormat;
|
||
import java.util.Date;
|
||
import java.util.List;
|
||
import java.util.Locale;
|
||
|
||
public class MainActivity extends Activity {
|
||
|
||
TextView textView_event1, textView_date, textView_count1, textView_day1;
|
||
ListView listView;
|
||
SimpleCursorAdapter adapter;
|
||
InputMethodManager IMM;
|
||
SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd E", Locale.getDefault());
|
||
int position1 = 0;
|
||
|
||
@Override
|
||
protected void onCreate(Bundle savedInstanceState) {
|
||
super.onCreate(savedInstanceState);
|
||
setContentView(R.layout.activity_main);
|
||
IMM = (InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
|
||
textView_event1 = (TextView) findViewById(R.id.textView_event1);
|
||
textView_date = (TextView) findViewById(R.id.textView_date);
|
||
textView_count1 = (TextView) findViewById(R.id.textView_count1);
|
||
textView_day1 = (TextView) findViewById(R.id.textView_day1);
|
||
Date date = new Date();
|
||
textView_date.setText(SDF.format(date));
|
||
listView = (ListView) findViewById(R.id.listView);
|
||
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
|
||
search("");
|
||
}
|
||
|
||
@Override
|
||
public boolean onCreateOptionsMenu(Menu menu) {
|
||
String[] sm = { "刷新", "添加", "更新日志", "关于", "退出" };
|
||
for (int i=0; i<sm.length; i++) {
|
||
menu.add(0, i, i, sm[i]);
|
||
}
|
||
return true;
|
||
}
|
||
|
||
@Override
|
||
public boolean onOptionsItemSelected(MenuItem item) {
|
||
int item_id = item.getItemId();
|
||
switch (item_id) {
|
||
case 0:
|
||
search("");
|
||
textView_event1.setText("今天");
|
||
Date date = new Date();
|
||
textView_date.setText(SDF.format(date));
|
||
textView_count1.setText("0");
|
||
textView_count1.setTextColor(0xff000000);
|
||
textView_day1.setBackgroundColor(0x00ff0000);
|
||
break;
|
||
case 1:
|
||
LayoutInflater layoutInflater = LayoutInflater.from(this);
|
||
View view = layoutInflater.inflate(R.layout.event_edit, null);
|
||
final EditText editText_event = (EditText) view.findViewById(R.id.editText_event);
|
||
final DatePicker datePicker = (DatePicker) view.findViewById(R.id.datePicker);
|
||
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
|
||
builder.setIcon(android.R.drawable.ic_menu_add);
|
||
builder.setTitle("添加事件");
|
||
builder.setView(view);
|
||
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
|
||
@Override
|
||
public void onClick(DialogInterface dialog, int which) {
|
||
int year = datePicker.getYear();
|
||
int month = datePicker.getMonth();
|
||
int day = datePicker.getDayOfMonth();
|
||
Date date = new Date(year - 1900, month, day);
|
||
String sdate = SDF.format(date);
|
||
//Log.e(Thread.currentThread().getStackTrace()[2] + "", sdate);
|
||
String event = editText_event.getText().toString();
|
||
Field field = null;
|
||
try {
|
||
//通过反射获取dialog中的私有属性mShowing
|
||
field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
|
||
field.setAccessible(true);//设置该属性可以访问
|
||
} catch (Exception ex) {
|
||
}
|
||
if (!event.equals("")) {
|
||
DBHelper dbHelper = new DBHelper(getApplicationContext());
|
||
ContentValues values = new ContentValues();
|
||
values.put("time", date.getTime());
|
||
values.put("event", event);
|
||
dbHelper.insert(values);
|
||
search("");
|
||
try {
|
||
//关闭
|
||
field.set(dialog, true);
|
||
dialog.dismiss();
|
||
} catch (Exception ex) {
|
||
}
|
||
} else {
|
||
if (event.equals("")){
|
||
editText_event.setError("事件不能为空!");
|
||
}
|
||
try {
|
||
//设置dialog不可关闭
|
||
field.set(dialog, false);
|
||
dialog.dismiss();
|
||
} catch (Exception ex) {
|
||
}
|
||
}
|
||
}
|
||
});
|
||
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
|
||
@Override
|
||
public void onClick(DialogInterface dialog, int which) {
|
||
IMM.hideSoftInputFromWindow(editText_event.getWindowToken(), 0);
|
||
Field field = null;
|
||
try {
|
||
//通过反射获取dialog中的私有属性mShowing
|
||
field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
|
||
field.setAccessible(true);//设置该属性可以访问
|
||
} catch (Exception ex) {
|
||
}
|
||
try {
|
||
field.set(dialog, true);
|
||
dialog.dismiss();
|
||
} catch (Exception ex) {
|
||
}
|
||
}
|
||
});
|
||
builder.create().show();
|
||
break;
|
||
case 2:
|
||
new AlertDialog.Builder(this)
|
||
.setIcon(R.mipmap.ic_launcher)
|
||
.setTitle("更新日志")
|
||
.setMessage("V1.0 (2023-05)\n显示事件倒数日期。")
|
||
.setPositiveButton("确定", null).show();
|
||
break;
|
||
case 3:
|
||
new AlertDialog.Builder(this).setIcon(R.mipmap.ic_launcher).setTitle("倒数日 V1.0")
|
||
.setMessage("显示事件倒数日期。\n作者:海天鹰\nQQ:84429027\n参考:Days Matter")
|
||
.setPositiveButton("确定", null).show();
|
||
break;
|
||
case 4:
|
||
finish();
|
||
break;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
void search(String s) {
|
||
DBHelper helper = new DBHelper(this);
|
||
Cursor cursor1 = helper.query(s);
|
||
int count = cursor1.getCount();
|
||
setTitle("倒数日" + count);
|
||
String[] from = { "_id", "time", "event", "time", "time" };
|
||
int[] to = { R.id.textView_id, R.id.textView_time, R.id.textView_event, R.id.textView_count, R.id.textView_day };
|
||
adapter = new SimpleCursorAdapter(this, R.layout.item_event, cursor1, from, to, 0);
|
||
adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder(){
|
||
public boolean setViewValue(View view, Cursor cursor, int columnIndex){
|
||
//Log.e(Thread.currentThread().getStackTrace()[2] + "", view.toString() + columnIndex);
|
||
if (view.getId() == R.id.textView_count) {
|
||
Date date = new Date(cursor.getLong(columnIndex));
|
||
Date date1 = new Date();
|
||
long ms = date.getTime() - date1.getTime();
|
||
long d = ms / 1000 / 60 / 60 / 24;
|
||
if (ms >= 0)
|
||
view.setBackgroundResource(R.drawable.count_bg);
|
||
else
|
||
view.setBackgroundResource(R.drawable.count_bg1);
|
||
((TextView)view).setText(Math.abs(d) + "");
|
||
return true;
|
||
} else if (view.getId() == R.id.textView_day) {
|
||
Date date = new Date(cursor.getLong(columnIndex));
|
||
Date date1 = new Date();
|
||
long ms = date.getTime() - date1.getTime();
|
||
if (ms >= 0)
|
||
view.setBackgroundResource(R.drawable.day_bg);
|
||
else
|
||
view.setBackgroundResource(R.drawable.day_bg1);
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
});
|
||
listView.setAdapter(adapter);
|
||
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||
@Override
|
||
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
|
||
String event = ((TextView) view.findViewById(R.id.textView_event)).getText().toString();
|
||
String stime = ((TextView) view.findViewById(R.id.textView_time)).getText().toString();
|
||
String count = ((TextView) view.findViewById(R.id.textView_count)).getText().toString();
|
||
Date date = new Date(Long.parseLong(stime));
|
||
Date date1 = new Date();
|
||
long ms = date.getTime() - date1.getTime();
|
||
long d = ms / 1000 / 60 / 60 / 24;
|
||
if (ms >= 0)
|
||
textView_count1.setTextColor(0xff00bfff);
|
||
else
|
||
textView_count1.setTextColor(0xffffa500);
|
||
if (ms >= 0 && d <= 5)
|
||
textView_day1.setBackgroundColor(0xffff0000);
|
||
else
|
||
textView_day1.setBackgroundColor(0x00ff0000);
|
||
textView_event1.setText(event);
|
||
textView_date.setText(SDF.format(date));
|
||
textView_count1.setText(count);
|
||
}
|
||
});
|
||
listView.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
|
||
@Override
|
||
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) {
|
||
//AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
|
||
//String title = ((TextView) info.targetView.findViewById(R.id.title)).getText().toString();
|
||
//menu.setHeaderTitle(title);
|
||
String[] sm = { "搜索", "修改", "删除" };
|
||
for (int i=0; i<sm.length; i++) {
|
||
menu.add(0, i, i, sm[i]);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
@Override
|
||
public boolean onContextItemSelected(MenuItem item) {
|
||
AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
|
||
final String sid = ((TextView) menuInfo.targetView.findViewById(R.id.textView_id)).getText().toString();
|
||
String time = ((TextView) menuInfo.targetView.findViewById(R.id.textView_time)).getText().toString();
|
||
Date date = new Date(Long.parseLong(time));
|
||
String event = ((TextView) menuInfo.targetView.findViewById(R.id.textView_event)).getText().toString();
|
||
position1 = menuInfo.position;
|
||
switch (item.getItemId()) {
|
||
case 0:
|
||
Intent intent = new Intent();
|
||
intent.setAction(Intent.ACTION_WEB_SEARCH);
|
||
intent.putExtra(SearchManager.QUERY, event);
|
||
startActivity(intent);
|
||
break;
|
||
case 1:
|
||
LayoutInflater layoutInflater = LayoutInflater.from(this);
|
||
View view = layoutInflater.inflate(R.layout.event_edit, null);
|
||
final EditText editText_event = (EditText) view.findViewById(R.id.editText_event);
|
||
final DatePicker datePicker = (DatePicker) view.findViewById(R.id.datePicker);
|
||
datePicker.init(date.getYear() + 1900, date.getMonth(), date.getDate(), null);
|
||
editText_event.setText(event);
|
||
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
|
||
builder.setIcon(android.R.drawable.ic_menu_edit);
|
||
builder.setTitle("修改事件");
|
||
builder.setView(view);
|
||
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
|
||
@Override
|
||
public void onClick(DialogInterface dialog, int which) {
|
||
String event = editText_event.getText().toString();
|
||
Field field = null;
|
||
try {
|
||
//通过反射获取dialog中的私有属性mShowing
|
||
field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
|
||
field.setAccessible(true);//设置该属性可以访问
|
||
} catch (Exception ex) {
|
||
|
||
}
|
||
if (!event.equals("")) {
|
||
int year = datePicker.getYear();
|
||
int month = datePicker.getMonth();
|
||
int day = datePicker.getDayOfMonth();
|
||
Date date = new Date(year - 1900, month, day);
|
||
DBHelper dbHelper = new DBHelper(getApplicationContext());
|
||
SQLiteDatabase db = dbHelper.getWritableDatabase();
|
||
ContentValues values = new ContentValues();
|
||
values.put("time", date.getTime());
|
||
values.put("event", event);
|
||
db.update(DBHelper.TableName, values, "_id = " + sid, null);
|
||
search("");
|
||
listView.setSelection(position1);
|
||
IMM.hideSoftInputFromWindow(editText_event.getWindowToken(), 0);
|
||
try {
|
||
//关闭
|
||
field.set(dialog, true);
|
||
dialog.dismiss();
|
||
} catch (Exception ex) {
|
||
}
|
||
} else {
|
||
if (event.equals("")){
|
||
editText_event.setError("事件不能为空!");
|
||
}
|
||
try {
|
||
//设置dialog不可关闭
|
||
field.set(dialog, false);
|
||
dialog.dismiss();
|
||
} catch (Exception ex) {
|
||
}
|
||
}
|
||
}
|
||
});
|
||
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
|
||
@Override
|
||
public void onClick(DialogInterface dialog, int which) {
|
||
Field field = null;
|
||
try {
|
||
//通过反射获取dialog中的私有属性mShowing
|
||
field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
|
||
field.setAccessible(true);//设置该属性可以访问
|
||
} catch (Exception ex) {
|
||
}
|
||
try {
|
||
field.set(dialog, true);
|
||
dialog.dismiss();
|
||
} catch (Exception ex) {
|
||
}
|
||
}
|
||
});
|
||
builder.create().show();
|
||
break;
|
||
case 2:
|
||
new AlertDialog.Builder(MainActivity.this)
|
||
.setIcon(android.R.drawable.stat_sys_warning)
|
||
.setTitle("删除操作")
|
||
.setMessage("此步骤不可还原,确定删除" + sid + "?\n" + SDF.format(date) + "\n" + event)
|
||
.setPositiveButton("是", new DialogInterface.OnClickListener() {
|
||
@Override
|
||
public void onClick(DialogInterface dialog, int which) {
|
||
DBHelper dbHelper = new DBHelper(getApplicationContext());
|
||
dbHelper.del(sid);
|
||
search("");
|
||
listView.setSelection(position1);
|
||
}
|
||
})
|
||
.setNegativeButton("否", null)
|
||
.show();
|
||
break;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
} |