diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7ab0b4b..75cd35f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="com.csc.malinovsky239"> @@ -10,7 +10,7 @@ android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> - + @@ -19,8 +19,8 @@ diff --git a/app/src/main/ic_launcher-web.png b/app/src/main/ic_launcher-web.png new file mode 100644 index 0000000..1e44f61 Binary files /dev/null and b/app/src/main/ic_launcher-web.png differ diff --git a/app/src/main/java/com/csc/lesson6/FeedsTable.java b/app/src/main/java/com/csc/lesson6/FeedsTable.java deleted file mode 100644 index be48cec..0000000 --- a/app/src/main/java/com/csc/lesson6/FeedsTable.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.csc.lesson6; - -import android.provider.BaseColumns; - -interface FeedsTable extends BaseColumns { - String TABLE_NAME = "feeds"; - - String COLUMN_TITLE = "title"; - String COLUMN_DATE = "date"; - String COLUMN_CONTENT = "content"; -} diff --git a/app/src/main/java/com/csc/lesson6/MainActivity.java b/app/src/main/java/com/csc/lesson6/MainActivity.java deleted file mode 100644 index 9161aac..0000000 --- a/app/src/main/java/com/csc/lesson6/MainActivity.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.csc.lesson6; - -import android.content.ContentValues; -import android.net.Uri; -import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; - -public class MainActivity extends AppCompatActivity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - ContentValues values = new ContentValues(); - values.put(FeedsTable.COLUMN_TITLE, "СМИ узнали дату выхода более мощной PlayStation 4"); - values.put(FeedsTable.COLUMN_CONTENT, ""); - values.put(FeedsTable.COLUMN_DATE, "Mon, 28 Mar 2016 19:04:05 +0300"); - getContentResolver().insert(Uri.withAppendedPath(ReaderContentProvider.CONTENT_URI, "entries"), values); - } -} diff --git a/app/src/main/java/com/csc/malinovsky239/todoList/FeedsTable.java b/app/src/main/java/com/csc/malinovsky239/todoList/FeedsTable.java new file mode 100644 index 0000000..16c6e52 --- /dev/null +++ b/app/src/main/java/com/csc/malinovsky239/todoList/FeedsTable.java @@ -0,0 +1,11 @@ +package com.csc.malinovsky239.todoList; + +import android.provider.BaseColumns; + +interface FeedsTable extends BaseColumns { + String TABLE_NAME = "tasks"; + String COLUMN_NAME = "name"; + String COLUMN_IS_DONE = "is_done"; + String COLUMN_DATETIME = "datetime"; + String COLUMN_ID = "_id"; +} diff --git a/app/src/main/java/com/csc/malinovsky239/todoList/MainActivity.java b/app/src/main/java/com/csc/malinovsky239/todoList/MainActivity.java new file mode 100644 index 0000000..094c2f6 --- /dev/null +++ b/app/src/main/java/com/csc/malinovsky239/todoList/MainActivity.java @@ -0,0 +1,93 @@ +package com.csc.malinovsky239.todoList; + +import android.app.AlertDialog; +import android.content.ContentValues; +import android.content.DialogInterface; +import android.database.Cursor; +import android.graphics.Paint; +import android.net.Uri; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.AdapterView; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.TextView; + +import com.csc.malinovsky239.R; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +public class MainActivity extends AppCompatActivity { + + final String order = FeedsTable.COLUMN_IS_DONE + ", " + FeedsTable.COLUMN_DATETIME; + TodoListCursorAdapter todoListAdapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.main_activity); + Cursor cursor = getContentResolver().query(Uri.withAppendedPath(ReaderContentProvider.CONTENT_URI, "entries"), new String[]{}, null, new String[]{}, order); + ListView taskList = (ListView) findViewById(R.id.taskList); + todoListAdapter = new TodoListCursorAdapter(this, cursor); + taskList.setAdapter(todoListAdapter); + + taskList.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + TextView text = (TextView) view.findViewById(R.id.task); + showChangeTaskDialog(String.valueOf(text.getText()), (text.getPaintFlags() & Paint.STRIKE_THRU_TEXT_FLAG) != 0, + (int) view.getTag()); + } + }); + + Button add = (Button) findViewById(R.id.add); + add.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ContentValues values = new ContentValues(); + values.put(FeedsTable.COLUMN_NAME, String.valueOf(((EditText) findViewById(R.id.taskname)).getText())); + SimpleDateFormat format = new SimpleDateFormat(getString(R.string.datetimeFormat), Locale.getDefault()); + values.put(FeedsTable.COLUMN_DATETIME, format.format(new Date())); + values.put(FeedsTable.COLUMN_IS_DONE, getString(R.string.FALSE)); + getContentResolver().insert(Uri.withAppendedPath(ReaderContentProvider.CONTENT_URI, "entries"), values); + Cursor cursor = getContentResolver().query(Uri.withAppendedPath(ReaderContentProvider.CONTENT_URI, "entries"), new String[]{}, null, new String[]{}, order); + todoListAdapter.changeCursor(cursor); + } + }); + } + + public void showChangeTaskDialog(String taskname, boolean isDone, final int id) { + AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); + LayoutInflater inflater = this.getLayoutInflater(); + final View dialogView = inflater.inflate(R.layout.change_task_dialog, null); + dialogBuilder.setView(dialogView); + EditText edit_taskname = (EditText) dialogView.findViewById(R.id.edit_taskname); + edit_taskname.setText(taskname); + CheckBox is_done = (CheckBox) dialogView.findViewById(R.id.is_done); + is_done.setChecked(isDone); + + dialogBuilder.setTitle(R.string.ChangeTaskButton); + + dialogBuilder.setPositiveButton(R.string.DoneButton, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + ContentValues values = new ContentValues(); + int is_done = ((CheckBox) dialogView.findViewById(R.id.is_done)).isChecked() ? R.string.TRUE : R.string.FALSE; + values.put(FeedsTable.COLUMN_IS_DONE, getString(is_done)); + String name = String.valueOf(((EditText) dialogView.findViewById(R.id.edit_taskname)).getText()); + values.put(FeedsTable.COLUMN_NAME, name); + getContentResolver().update(Uri.withAppendedPath(ReaderContentProvider.CONTENT_URI, "entries"), values, "_id = " + id, null); + Cursor cursor = getContentResolver().query(Uri.withAppendedPath(ReaderContentProvider.CONTENT_URI, "entries"), new String[]{}, null, new String[]{}, order); + todoListAdapter.changeCursor(cursor); + } + }); + AlertDialog b = dialogBuilder.create(); + b.show(); + } + +} diff --git a/app/src/main/java/com/csc/lesson6/ReaderContentProvider.java b/app/src/main/java/com/csc/malinovsky239/todoList/ReaderContentProvider.java similarity index 84% rename from app/src/main/java/com/csc/lesson6/ReaderContentProvider.java rename to app/src/main/java/com/csc/malinovsky239/todoList/ReaderContentProvider.java index 55f9753..b4f5a7d 100644 --- a/app/src/main/java/com/csc/lesson6/ReaderContentProvider.java +++ b/app/src/main/java/com/csc/malinovsky239/todoList/ReaderContentProvider.java @@ -1,4 +1,4 @@ -package com.csc.lesson6; +package com.csc.malinovsky239.todoList; import android.content.ContentProvider; import android.content.ContentValues; @@ -9,7 +9,7 @@ import android.net.Uri; public class ReaderContentProvider extends ContentProvider { - public static final String AUTHORITY = "com.csc.lesson6"; + public static final String AUTHORITY = "com.csc.malinovsky239.todoList.ReaderContentProvider"; public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY); public static final int ENTRIES = 1; @@ -83,7 +83,15 @@ public Cursor query(Uri uri, String[] projection, String selection, @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { - // TODO: Implement this to handle requests to update one or more rows. - throw new UnsupportedOperationException("Not yet implemented"); + int match = uriMatcher.match(uri); + String tableName; + switch (match) { + case ENTRIES: + tableName = FeedsTable.TABLE_NAME; + break; + default: + throw new UnsupportedOperationException("Not yet implemented"); + } + return helper.getWritableDatabase().update(tableName, values, selection, null); } } diff --git a/app/src/main/java/com/csc/lesson6/ReaderOpenHelper.java b/app/src/main/java/com/csc/malinovsky239/todoList/ReaderOpenHelper.java similarity index 58% rename from app/src/main/java/com/csc/lesson6/ReaderOpenHelper.java rename to app/src/main/java/com/csc/malinovsky239/todoList/ReaderOpenHelper.java index 91faef8..869ec19 100644 --- a/app/src/main/java/com/csc/lesson6/ReaderOpenHelper.java +++ b/app/src/main/java/com/csc/malinovsky239/todoList/ReaderOpenHelper.java @@ -1,4 +1,4 @@ -package com.csc.lesson6; +package com.csc.malinovsky239.todoList; import android.content.Context; import android.database.sqlite.SQLiteDatabase; @@ -6,9 +6,15 @@ public class ReaderOpenHelper extends SQLiteOpenHelper { public static final int DATABASE_VERSION = 1; - public static final String DATABASE_NAME = "reader.db"; + public static final String DATABASE_NAME = "ToDoList"; + static final String TASKS_TABLE_NAME = "tasks"; - private static final String SQL_CREATE_ENTRIES_TABLE = ""; + public static final String SQL_CREATE_ENTRIES_TABLE = + " CREATE TABLE " + TASKS_TABLE_NAME + + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " + + " name TEXT NOT NULL, " + + " is_done BOOLEAN NOT NULL, " + + " datetime DATETIME NOT NULL);"; private static final String SQL_DELETE_ENTRIES = ""; diff --git a/app/src/main/java/com/csc/malinovsky239/todoList/TodoListCursorAdapter.java b/app/src/main/java/com/csc/malinovsky239/todoList/TodoListCursorAdapter.java new file mode 100644 index 0000000..946ba0b --- /dev/null +++ b/app/src/main/java/com/csc/malinovsky239/todoList/TodoListCursorAdapter.java @@ -0,0 +1,43 @@ +package com.csc.malinovsky239.todoList; + +import android.content.Context; +import android.database.Cursor; +import android.graphics.Paint; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CursorAdapter; +import android.widget.TextView; + +import com.csc.malinovsky239.R; + +public class TodoListCursorAdapter extends CursorAdapter { + public TodoListCursorAdapter(Context context, Cursor cursor) { + super(context, cursor, 0); + } + + @Override + public View newView(Context context, Cursor cursor, ViewGroup parent) { + return LayoutInflater.from(context).inflate(R.layout.item_todo, parent, false); + } + + @Override + public void bindView(View view, Context context, Cursor cursor) { + TextView tvTask = (TextView) view.findViewById(R.id.task); + TextView tvDatetime = (TextView) view.findViewById(R.id.datetime); + String task = cursor.getString(cursor.getColumnIndexOrThrow(FeedsTable.COLUMN_NAME)); + String datetime = cursor.getString(cursor.getColumnIndexOrThrow(FeedsTable.COLUMN_DATETIME)); + tvTask.setText(task); + tvDatetime.setText(datetime); + String isDone = cursor.getString(cursor.getColumnIndexOrThrow(FeedsTable.COLUMN_IS_DONE)); + int id = cursor.getInt(cursor.getColumnIndexOrThrow(FeedsTable.COLUMN_ID)); + view.setTag(id); + if (isDone.equals("TRUE")) { + tvTask.setPaintFlags(tvTask.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); + tvDatetime.setPaintFlags(tvDatetime.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); + } else { + tvTask.setPaintFlags(tvTask.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG)); + tvDatetime.setPaintFlags(tvDatetime.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG)); + } + } +} diff --git a/app/src/main/res/layout/change_task_dialog.xml b/app/src/main/res/layout/change_task_dialog.xml new file mode 100644 index 0000000..709fa92 --- /dev/null +++ b/app/src/main/res/layout/change_task_dialog.xml @@ -0,0 +1,18 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_todo.xml b/app/src/main/res/layout/item_todo.xml new file mode 100644 index 0000000..23e1355 --- /dev/null +++ b/app/src/main/res/layout/item_todo.xml @@ -0,0 +1,20 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/main_activity.xml b/app/src/main/res/layout/main_activity.xml new file mode 100644 index 0000000..adfc86e --- /dev/null +++ b/app/src/main/res/layout/main_activity.xml @@ -0,0 +1,32 @@ + + + + + + + +