DayCount/main/java/com/hty/daycount/MainActivity.java

356 lines
17 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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作者海天鹰\nQQ84429027\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;
}
}