final commit

master
Mind 2 years ago
parent f0b65f0b86
commit c97c958d4c

@ -0,0 +1,2 @@
#Wed May 31 02:42:33 CST 2023
gradle.version=7.5

Binary file not shown.

@ -0,0 +1,414 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DBNavigator.Project.DataEditorManager">
<record-view-column-sorting-type value="BY_INDEX" />
<value-preview-text-wrapping value="true" />
<value-preview-pinned value="false" />
</component>
<component name="DBNavigator.Project.DatabaseEditorStateManager">
<last-used-providers />
</component>
<component name="DBNavigator.Project.DatabaseFileManager">
<open-files />
</component>
<component name="DBNavigator.Project.Settings">
<connections />
<browser-settings>
<general>
<display-mode value="TABBED" />
<navigation-history-size value="100" />
<show-object-details value="false" />
</general>
<filters>
<object-type-filter>
<object-type name="SCHEMA" enabled="true" />
<object-type name="USER" enabled="true" />
<object-type name="ROLE" enabled="true" />
<object-type name="PRIVILEGE" enabled="true" />
<object-type name="CHARSET" enabled="true" />
<object-type name="TABLE" enabled="true" />
<object-type name="VIEW" enabled="true" />
<object-type name="MATERIALIZED_VIEW" enabled="true" />
<object-type name="NESTED_TABLE" enabled="true" />
<object-type name="COLUMN" enabled="true" />
<object-type name="INDEX" enabled="true" />
<object-type name="CONSTRAINT" enabled="true" />
<object-type name="DATASET_TRIGGER" enabled="true" />
<object-type name="DATABASE_TRIGGER" enabled="true" />
<object-type name="SYNONYM" enabled="true" />
<object-type name="SEQUENCE" enabled="true" />
<object-type name="PROCEDURE" enabled="true" />
<object-type name="FUNCTION" enabled="true" />
<object-type name="PACKAGE" enabled="true" />
<object-type name="TYPE" enabled="true" />
<object-type name="TYPE_ATTRIBUTE" enabled="true" />
<object-type name="ARGUMENT" enabled="true" />
<object-type name="DIMENSION" enabled="true" />
<object-type name="CLUSTER" enabled="true" />
<object-type name="DBLINK" enabled="true" />
</object-type-filter>
</filters>
<sorting>
<object-type name="COLUMN" sorting-type="NAME" />
<object-type name="FUNCTION" sorting-type="NAME" />
<object-type name="PROCEDURE" sorting-type="NAME" />
<object-type name="ARGUMENT" sorting-type="POSITION" />
<object-type name="TYPE ATTRIBUTE" sorting-type="POSITION" />
</sorting>
<default-editors>
<object-type name="VIEW" editor-type="SELECTION" />
<object-type name="PACKAGE" editor-type="SELECTION" />
<object-type name="TYPE" editor-type="SELECTION" />
</default-editors>
</browser-settings>
<navigation-settings>
<lookup-filters>
<lookup-objects>
<object-type name="SCHEMA" enabled="true" />
<object-type name="USER" enabled="false" />
<object-type name="ROLE" enabled="false" />
<object-type name="PRIVILEGE" enabled="false" />
<object-type name="CHARSET" enabled="false" />
<object-type name="TABLE" enabled="true" />
<object-type name="VIEW" enabled="true" />
<object-type name="MATERIALIZED VIEW" enabled="true" />
<object-type name="INDEX" enabled="true" />
<object-type name="CONSTRAINT" enabled="true" />
<object-type name="DATASET TRIGGER" enabled="true" />
<object-type name="DATABASE TRIGGER" enabled="true" />
<object-type name="SYNONYM" enabled="false" />
<object-type name="SEQUENCE" enabled="true" />
<object-type name="PROCEDURE" enabled="true" />
<object-type name="FUNCTION" enabled="true" />
<object-type name="PACKAGE" enabled="true" />
<object-type name="TYPE" enabled="true" />
<object-type name="DIMENSION" enabled="false" />
<object-type name="CLUSTER" enabled="false" />
<object-type name="DBLINK" enabled="true" />
</lookup-objects>
<force-database-load value="false" />
<prompt-connection-selection value="true" />
<prompt-schema-selection value="true" />
</lookup-filters>
</navigation-settings>
<dataset-grid-settings>
<general>
<enable-zooming value="true" />
<enable-column-tooltip value="true" />
</general>
<sorting>
<nulls-first value="true" />
<max-sorting-columns value="4" />
</sorting>
<audit-columns>
<column-names value="" />
<visible value="true" />
<editable value="false" />
</audit-columns>
</dataset-grid-settings>
<dataset-editor-settings>
<text-editor-popup>
<active value="false" />
<active-if-empty value="false" />
<data-length-threshold value="100" />
<popup-delay value="1000" />
</text-editor-popup>
<values-actions-popup>
<show-popup-button value="true" />
<element-count-threshold value="1000" />
<data-length-threshold value="250" />
</values-actions-popup>
<general>
<fetch-block-size value="100" />
<fetch-timeout value="30" />
<trim-whitespaces value="true" />
<convert-empty-strings-to-null value="true" />
<select-content-on-cell-edit value="true" />
<large-value-preview-active value="true" />
</general>
<filters>
<prompt-filter-dialog value="true" />
<default-filter-type value="BASIC" />
</filters>
<qualified-text-editor text-length-threshold="300">
<content-types>
<content-type name="Text" enabled="true" />
<content-type name="Properties" enabled="true" />
<content-type name="XML" enabled="true" />
<content-type name="DTD" enabled="true" />
<content-type name="HTML" enabled="true" />
<content-type name="XHTML" enabled="true" />
<content-type name="Java" enabled="true" />
<content-type name="SQL" enabled="true" />
<content-type name="PL/SQL" enabled="true" />
<content-type name="JSON" enabled="true" />
<content-type name="JSON5" enabled="true" />
<content-type name="Groovy" enabled="true" />
<content-type name="AIDL" enabled="true" />
<content-type name="YAML" enabled="true" />
<content-type name="Manifest" enabled="true" />
</content-types>
</qualified-text-editor>
<record-navigation>
<navigation-target value="VIEWER" />
</record-navigation>
</dataset-editor-settings>
<code-editor-settings>
<general>
<show-object-navigation-gutter value="false" />
<show-spec-declaration-navigation-gutter value="true" />
<enable-spellchecking value="true" />
<enable-reference-spellchecking value="false" />
</general>
<confirmations>
<save-changes value="false" />
<revert-changes value="true" />
</confirmations>
</code-editor-settings>
<code-completion-settings>
<filters>
<basic-filter>
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
<filter-element type="RESERVED_WORD" id="function" selected="true" />
<filter-element type="RESERVED_WORD" id="parameter" selected="true" />
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
<filter-element type="RESERVED_WORD" id="exception" selected="true" />
<filter-element type="OBJECT" id="schema" selected="true" />
<filter-element type="OBJECT" id="role" selected="true" />
<filter-element type="OBJECT" id="user" selected="true" />
<filter-element type="OBJECT" id="privilege" selected="true" />
<user-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="false" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</user-schema>
<public-schema>
<filter-element type="OBJECT" id="table" selected="false" />
<filter-element type="OBJECT" id="view" selected="false" />
<filter-element type="OBJECT" id="materialized view" selected="false" />
<filter-element type="OBJECT" id="index" selected="false" />
<filter-element type="OBJECT" id="constraint" selected="false" />
<filter-element type="OBJECT" id="trigger" selected="false" />
<filter-element type="OBJECT" id="synonym" selected="false" />
<filter-element type="OBJECT" id="sequence" selected="false" />
<filter-element type="OBJECT" id="procedure" selected="false" />
<filter-element type="OBJECT" id="function" selected="false" />
<filter-element type="OBJECT" id="package" selected="false" />
<filter-element type="OBJECT" id="type" selected="false" />
<filter-element type="OBJECT" id="dimension" selected="false" />
<filter-element type="OBJECT" id="cluster" selected="false" />
<filter-element type="OBJECT" id="dblink" selected="false" />
</public-schema>
<any-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="true" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</any-schema>
</basic-filter>
<extended-filter>
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
<filter-element type="RESERVED_WORD" id="function" selected="true" />
<filter-element type="RESERVED_WORD" id="parameter" selected="true" />
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
<filter-element type="RESERVED_WORD" id="exception" selected="true" />
<filter-element type="OBJECT" id="schema" selected="true" />
<filter-element type="OBJECT" id="user" selected="true" />
<filter-element type="OBJECT" id="role" selected="true" />
<filter-element type="OBJECT" id="privilege" selected="true" />
<user-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="true" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</user-schema>
<public-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="true" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</public-schema>
<any-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="true" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</any-schema>
</extended-filter>
</filters>
<sorting enabled="true">
<sorting-element type="RESERVED_WORD" id="keyword" />
<sorting-element type="RESERVED_WORD" id="datatype" />
<sorting-element type="OBJECT" id="column" />
<sorting-element type="OBJECT" id="table" />
<sorting-element type="OBJECT" id="view" />
<sorting-element type="OBJECT" id="materialized view" />
<sorting-element type="OBJECT" id="index" />
<sorting-element type="OBJECT" id="constraint" />
<sorting-element type="OBJECT" id="trigger" />
<sorting-element type="OBJECT" id="synonym" />
<sorting-element type="OBJECT" id="sequence" />
<sorting-element type="OBJECT" id="procedure" />
<sorting-element type="OBJECT" id="function" />
<sorting-element type="OBJECT" id="package" />
<sorting-element type="OBJECT" id="type" />
<sorting-element type="OBJECT" id="dimension" />
<sorting-element type="OBJECT" id="cluster" />
<sorting-element type="OBJECT" id="dblink" />
<sorting-element type="OBJECT" id="schema" />
<sorting-element type="OBJECT" id="role" />
<sorting-element type="OBJECT" id="user" />
<sorting-element type="RESERVED_WORD" id="function" />
<sorting-element type="RESERVED_WORD" id="parameter" />
</sorting>
<format>
<enforce-code-style-case value="true" />
</format>
</code-completion-settings>
<execution-engine-settings>
<statement-execution>
<fetch-block-size value="100" />
<execution-timeout value="20" />
<debug-execution-timeout value="600" />
<focus-result value="false" />
<prompt-execution value="false" />
</statement-execution>
<script-execution>
<command-line-interfaces />
<execution-timeout value="300" />
</script-execution>
<method-execution>
<execution-timeout value="30" />
<debug-execution-timeout value="600" />
<parameter-history-size value="10" />
</method-execution>
</execution-engine-settings>
<operation-settings>
<transactions>
<uncommitted-changes>
<on-project-close value="ASK" />
<on-disconnect value="ASK" />
<on-autocommit-toggle value="ASK" />
</uncommitted-changes>
<multiple-uncommitted-changes>
<on-commit value="ASK" />
<on-rollback value="ASK" />
</multiple-uncommitted-changes>
</transactions>
<session-browser>
<disconnect-session value="ASK" />
<kill-session value="ASK" />
<reload-on-filter-change value="false" />
</session-browser>
<compiler>
<compile-type value="KEEP" />
<compile-dependencies value="ASK" />
<always-show-controls value="false" />
</compiler>
<debugger>
<debugger-type value="ASK" />
<use-generic-runners value="true" />
</debugger>
</operation-settings>
<ddl-file-settings>
<extensions>
<mapping file-type-id="VIEW" extensions="vw" />
<mapping file-type-id="TRIGGER" extensions="trg" />
<mapping file-type-id="PROCEDURE" extensions="prc" />
<mapping file-type-id="FUNCTION" extensions="fnc" />
<mapping file-type-id="PACKAGE" extensions="pkg" />
<mapping file-type-id="PACKAGE_SPEC" extensions="pks" />
<mapping file-type-id="PACKAGE_BODY" extensions="pkb" />
<mapping file-type-id="TYPE" extensions="tpe" />
<mapping file-type-id="TYPE_SPEC" extensions="tps" />
<mapping file-type-id="TYPE_BODY" extensions="tpb" />
</extensions>
<general>
<lookup-ddl-files value="true" />
<create-ddl-files value="false" />
<synchronize-ddl-files value="true" />
<use-qualified-names value="false" />
<make-scripts-rerunnable value="true" />
</general>
</ddl-file-settings>
<general-settings>
<regional-settings>
<date-format value="MEDIUM" />
<number-format value="UNGROUPED" />
<locale value="SYSTEM_DEFAULT" />
<use-custom-formats value="false" />
</regional-settings>
<environment>
<environment-types>
<environment-type id="development" name="Development" description="Development environment" color="-2430209/-12296320" readonly-code="false" readonly-data="false" />
<environment-type id="integration" name="Integration" description="Integration environment" color="-2621494/-12163514" readonly-code="true" readonly-data="false" />
<environment-type id="production" name="Production" description="Productive environment" color="-11574/-10271420" readonly-code="true" readonly-data="true" />
<environment-type id="other" name="Other" description="" color="-1576/-10724543" readonly-code="false" readonly-data="false" />
</environment-types>
<visibility-settings>
<connection-tabs value="true" />
<dialog-headers value="true" />
<object-editor-tabs value="true" />
<script-editor-tabs value="false" />
<execution-result-tabs value="true" />
</visibility-settings>
</environment>
</general-settings>
</component>
</project>

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="GRADLE" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="BintrayJCenter" />
<option name="name" value="BintrayJCenter" />
<option name="url" value="https://jcenter.bintray.com/" />
</remote-repository>
<remote-repository>
<option name="id" value="Google" />
<option name="name" value="Google" />
<option name="url" value="https://dl.google.com/dl/android/maven2/" />
</remote-repository>
</component>
</project>

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="NullableNotNullManager">
<option name="myDefaultNullable" value="android.support.annotation.Nullable" />
<option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
<option name="myNullables">
<value>
<list size="4">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
</list>
</value>
</option>
<option name="myNotNulls">
<value>
<list size="4">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
</list>
</value>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

@ -0,0 +1,161 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AndroidLayouts">
<shared>
<config />
</shared>
</component>
<component name="AutoImportSettings">
<option name="autoReloadType" value="NONE" />
</component>
<component name="ChangeListManager">
<list default="true" id="57ed9978-ea83-410f-9497-7ab3f4f731f0" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/modules.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/runConfigurations.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/app/build.gradle" beforeDir="false" afterPath="$PROJECT_DIR$/app/build.gradle" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/yzbkaka/things/ActivityCollector.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/yzbkaka/things/ActivityCollector.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/yzbkaka/things/Adapter/HistoryAdapter.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/yzbkaka/things/Adapter/HistoryAdapter.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/yzbkaka/things/Adapter/LogAdapter.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/yzbkaka/things/Adapter/LogAdapter.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/yzbkaka/things/Adapter/ScheduleAdapter.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/yzbkaka/things/Adapter/ScheduleAdapter.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/yzbkaka/things/Adapter/TodayAdapter.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/yzbkaka/things/Adapter/TodayAdapter.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/yzbkaka/things/DoubleClickListener.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/yzbkaka/things/DoubleClickListener.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/yzbkaka/things/db/Log.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/yzbkaka/things/db/Log.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/yzbkaka/things/db/Plan.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/yzbkaka/things/db/Plan.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/res/layout/activity_main.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/res/layout/activity_main.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/build.gradle" beforeDir="false" afterPath="$PROJECT_DIR$/build.gradle" afterDir="false" />
<change beforePath="$PROJECT_DIR$/gradle/wrapper/gradle-wrapper.properties" beforeDir="false" afterPath="$PROJECT_DIR$/gradle/wrapper/gradle-wrapper.properties" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ExecutionTargetManager" SELECTED_TARGET="device_and_snapshot_combo_box_target[C:\Users\Mind\.android\avd\Pixel_5_API_31.avd]" />
<component name="ExternalProjectsData">
<projectState path="$PROJECT_DIR$">
<ProjectState />
</projectState>
</component>
<component name="ExternalProjectsManager">
<system id="GRADLE">
<state>
<projects_view>
<tree_state>
<expand />
<select />
</tree_state>
</projects_view>
</state>
</system>
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
<component name="ProblemsViewState">
<option name="selectedTabId" value="CurrentFile" />
</component>
<component name="ProjectId" id="2QWb3DyqpAZR4Oyh5SS2vxUQxvo" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"RunOnceActivity.cidr.known.project.marker": "true",
"cidr.known.project.marker": "true",
"last_opened_file_path": "C:/Users/Mind/Desktop",
"project.structure.last.edited": "Modules",
"project.structure.proportion": "0.17",
"project.structure.side.proportion": "0.2",
"settings.editor.selected.configurable": "preferences.pluginManager"
}
}]]></component>
<component name="RunManager">
<configuration name="app" type="AndroidRunConfigurationType" factoryName="Android App">
<module name="Schedule.app.main" />
<option name="DEPLOY" value="true" />
<option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
<option name="DEPLOY_AS_INSTANT" value="false" />
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="CLEAR_APP_STORAGE" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="false" />
<option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" />
<option name="INSPECTION_WITHOUT_ACTIVITY_RESTART" value="false" />
<option name="TARGET_SELECTION_MODE" value="DEVICE_AND_SNAPSHOT_COMBO_BOX" />
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
<option name="DEBUGGER_TYPE" value="Auto" />
<Auto>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Auto>
<Hybrid>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Hybrid>
<Java />
<Native>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" />
<option name="STARTUP_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Java/Kotlin Method Sample (legacy)" />
<option name="STARTUP_NATIVE_MEMORY_PROFILING_ENABLED" value="false" />
<option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" />
</Profilers>
<option name="DEEP_LINK" value="" />
<option name="ACTIVITY_CLASS" value="" />
<option name="SEARCH_ACTIVITY_IN_GLOBAL_SCOPE" value="false" />
<option name="SKIP_ACTIVITY_VALIDATION" value="false" />
<method v="2">
<option name="Android.Gradle.BeforeRunTask" enabled="true" />
</method>
</configuration>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="57ed9978-ea83-410f-9497-7ab3f4f731f0" name="Changes" comment="" />
<created>1685472083366</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1685472083366</updated>
</task>
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State />
</value>
</entry>
</map>
</option>
</component>
</project>

@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

@ -0,0 +1,31 @@
@startuml
title __SCHEDULE's Component Diagram__\n
component "Schedule.app.unitTest" {
[Schedule.app.main]
component "Schedule.app.main" {
[Schedule.app.androidTest]
component "Schedule.app.androidTest" {
[Schedule.app]
}
}
}
[Schedule.app.androidTest] --> [Schedule.app.main]
[Schedule.app.unitTest] --> [Schedule.app.main]
right footer
PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
For more information about this tool, please contact philippe.mesmeur@gmail.com
endfooter
@enduml

1
app/.gitignore vendored

@ -0,0 +1 @@
/build

@ -0,0 +1,33 @@
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.example.yzbkaka.things"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.0.0-beta1'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:0.5'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:2.2.2'
implementation 'com.android.support:design:26.1.0'
implementation 'com.android.support:recyclerview-v7:26.1.0'
implementation 'com.android.support:cardview-v7:26.1.0'
implementation 'org.litepal.android:java:3.0.0'
implementation 'com.prolificinteractive:material-calendarview:1.4.3'
}

@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

@ -0,0 +1 @@
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1},"path":"app-release.apk","properties":{"packageId":"com.example.yzbkaka.things","split":"","minSdkVersion":"15"}}]

@ -0,0 +1,26 @@
package com.example.yzbkaka.things;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("com.example.yzbkaka.things", appContext.getPackageName());
}
}

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yzbkaka.things">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
<application
android:name="org.litepal.LitePalApplication"
android:allowBackup="true"
android:icon="@drawable/logo144"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" />
<activity android:name=".Today.NoteActivity" />
<activity
android:name=".Today.TodayCreateActivitty"
android:theme="@style/MyTheme1"
android:windowSoftInputMode="stateVisible|adjustPan" />
<activity
android:name=".Today.AlterTodayActivity"
android:theme="@style/MyTheme1"
android:windowSoftInputMode="stateVisible|adjustPan" />
<activity android:name=".Log.LogActivity" />
<activity
android:name=".Log.LogCreateActivity"
android:windowSoftInputMode="stateVisible|adjustPan" />
<activity android:name=".Log.AlterLogActivity" />
<activity android:name=".History.HistoryActivity" />
<activity android:name=".Schedule.ScheduleActivity" />
<activity android:name=".Schedule.ScheduleViewActivity" />
<activity
android:name=".Schedule.ScheduleCreateActivity"
android:theme="@style/MyTheme1"
android:windowSoftInputMode="stateVisible|adjustPan" />
<activity android:name=".StartActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Setting.SettingActivity" />
<service
android:name=".Service.SendMessage"
android:enabled="true"
android:exported="true" />
<activity android:name=".Setting.ExplainActivity" />
<activity
android:name=".Schedule.AlterScheduleActivity"
android:theme="@style/MyTheme1"
android:windowSoftInputMode="stateVisible|adjustPan" />
<activity android:name=".Setting.AboutActivity"></activity>
</application>
</manifest>

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8" ?>
<litepal>
<dbname value="Store"></dbname>
<version value="1"></version>
<list>
<mapping class="com.example.yzbkaka.things.db.Plan"></mapping>
<mapping class="com.example.yzbkaka.things.db.Log"></mapping>
</list>
</litepal>

@ -0,0 +1,26 @@
package com.example.yzbkaka.things;
import android.app.Activity;
import java.util.ArrayList;
import java.util.List;
public class ActivityCollector {
public static List<Activity> activities = new ArrayList<>();
public static void addActivity(Activity activity){
activities.add(activity);
}
public static void removeActivity(Activity activity){
activities.remove(activity);
}
public static void finishAll(){
for(Activity activity : activities){
if(!activity.isFinishing()){
activity.finish();
}
}
}
}

@ -0,0 +1,58 @@
package com.example.yzbkaka.things.Adapter;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.yzbkaka.things.R;
import com.example.yzbkaka.things.db.Plan;
import java.util.List;
public class HistoryAdapter extends RecyclerView.Adapter<HistoryAdapter.ViewHolder> {
private List<Plan> mDataList;
static class ViewHolder extends RecyclerView.ViewHolder{
TextView history;
ImageView right;
TextView time;
public ViewHolder(View view){
super(view);
history = (TextView)view.findViewById(R.id.history_plan);
right = (ImageView)view.findViewById(R.id.right_kuang);
time = (TextView)view.findViewById(R.id.time);
}
}
public HistoryAdapter(List<Plan> dataList){
mDataList = dataList;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.history_item,parent,false); //加载子项布局
final ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(ViewHolder holder , final int position){
Plan plan = mDataList.get(position);
holder.time.setText(plan.getMonth() + "月" + plan.getDay() + "日");
holder.history.setText(plan.getWritePlan());
}
@Override
public int getItemCount(){
return mDataList.size();
}
}

@ -0,0 +1,100 @@
package com.example.yzbkaka.things.Adapter;
import android.content.Intent;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.yzbkaka.things.Log.AlterLogActivity;
import com.example.yzbkaka.things.R;
import com.example.yzbkaka.things.db.Log;
import org.litepal.LitePal;
import java.util.List;
import static com.example.yzbkaka.things.Log.LogActivity.logAdapter;
public class LogAdapter extends RecyclerView.Adapter<LogAdapter.ViewHolder> {
private List<String> mLogList;
static class ViewHolder extends RecyclerView.ViewHolder{
View logView;
CardView cardView;
TextView logText;
ImageView imageView;
Button deleteLog;
public ViewHolder(View view){
super(view);
logView = view;
cardView = (CardView)view;
logText = (TextView)view.findViewById(R.id.log);
imageView = (ImageView)view.findViewById(R.id.image_view);
deleteLog = (Button)view.findViewById(R.id.delete_log);
}
}
public LogAdapter(List<String> logList){
mLogList = logList;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.log_item,parent,false); //加载子项布局
final ViewHolder holder = new ViewHolder(view);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position){
String writeLog = mLogList.get(position);
holder.logText.setText(writeLog);
holder.logView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String writeLog = mLogList.get(position);
Intent intent = new Intent(view.getContext(),AlterLogActivity.class); //自动获取上下文
intent.putExtra("log",writeLog); //传输log内容
view.getContext().startActivity(intent); //自动获取上下文后才能够启动活动
}
});
holder.logView.setOnLongClickListener(new View.OnLongClickListener() { //设置长按按钮功能
@Override
public boolean onLongClick(View view) {
holder.deleteLog.setVisibility(View.VISIBLE); //将该按钮显示出来
return true;
}
});
holder.deleteLog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int deleteLogPosition = holder.getAdapterPosition();
String deleteLogWrite = mLogList.get(deleteLogPosition); //获得到该位置的内容
mLogList.remove(deleteLogPosition);
holder.deleteLog.setVisibility(View.INVISIBLE); //再次隐藏按钮
logAdapter.notifyDataSetChanged(); //更新适配器
LitePal.deleteAll(Log.class,"logWrite = ?",deleteLogWrite); //从数据库中删除
}
});
}
@Override
public int getItemCount(){
return mLogList.size();
}
}

@ -0,0 +1,105 @@
package com.example.yzbkaka.things.Adapter;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.yzbkaka.things.R;
import com.example.yzbkaka.things.Schedule.AlterScheduleActivity;
import com.example.yzbkaka.things.Today.AlterTodayActivity;
import com.example.yzbkaka.things.db.Plan;
import org.litepal.LitePal;
import java.util.List;
import static com.example.yzbkaka.things.Schedule.ScheduleViewActivity.scheduleAdapter;
public class ScheduleAdapter extends RecyclerView.Adapter<ScheduleAdapter.ViewHolder> {
private List<Plan> mDataList;
static class ViewHolder extends RecyclerView.ViewHolder{
View scheduleView;
TextView schedule;
ImageView kuang;
TextView time;
Button delete;
public ViewHolder(View view){
super(view);
scheduleView = view;
schedule = (TextView)view.findViewById(R.id.schedule_plan);
kuang = (ImageView)view.findViewById(R.id.kuang);
time = (TextView)view.findViewById(R.id.schedule_time);
delete = (Button)view.findViewById(R.id.delete_schedule);
}
}
public ScheduleAdapter(List<Plan> dataList){
mDataList = dataList;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.schedule_item,parent,false); //加载子项布局
final ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(final ViewHolder holder , final int position){
Plan plan = mDataList.get(position);
holder.time.setText(plan.getMonth() + "月" + plan.getDay() + "日");
holder.schedule.setText(plan.getWritePlan());
holder.scheduleView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int writePosition = holder.getAdapterPosition();
Plan viewPlan = mDataList.get(writePosition);
String writeToday = viewPlan.getWritePlan();
Intent intent = new Intent(view.getContext(),AlterScheduleActivity.class);
intent.putExtra("write",writeToday);
view.getContext().startActivity(intent);
}
});
holder.scheduleView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
holder.delete.setVisibility(View.VISIBLE);
return true;
}
});
holder.delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int scheduleDeletePosition = holder.getAdapterPosition();
Plan scheduleDeletePlan = mDataList.get(scheduleDeletePosition);
String scheduleDeletePlanWrite = scheduleDeletePlan.getWritePlan();
mDataList.remove(scheduleDeletePosition);
scheduleAdapter.notifyDataSetChanged();
LitePal.deleteAll(Plan.class,"writePlan = ?",scheduleDeletePlanWrite);
holder.delete.setVisibility(View.INVISIBLE);
}
});
}
@Override
public int getItemCount(){
return mDataList.size();
}
}

@ -0,0 +1,176 @@
package com.example.yzbkaka.things.Adapter;
import android.content.Intent;
import android.os.Message;
import android.provider.AlarmClock;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.yzbkaka.things.DoubleClickListener;
import com.example.yzbkaka.things.MainActivity;
import com.example.yzbkaka.things.R;
import com.example.yzbkaka.things.Today.AlterTodayActivity;
import com.example.yzbkaka.things.Today.NoteActivity;
import com.example.yzbkaka.things.db.Plan;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Handler;
import org.litepal.LitePal;
import static com.example.yzbkaka.things.MainActivity.todayCount;
import static com.example.yzbkaka.things.Today.NoteActivity.todayAdapter;
public class TodayAdapter extends RecyclerView.Adapter<TodayAdapter.ViewHolder> {
private List<Plan> mDataList;
private static int imagePosition; //将点击前面框框顺序的位置设置为静态变量
static class ViewHolder extends RecyclerView.ViewHolder{
View todayView;
ImageView imageView;
TextView todayText;
Button delete;
public ViewHolder(View view){
super(view);
todayView = view;
imageView = (ImageView)view.findViewById(R.id.no_finish);
todayText = (TextView)view.findViewById(R.id.today_plan);
delete = (Button)view.findViewById(R.id.delete);
}
}
public TodayAdapter(List<Plan> dataList){
mDataList = dataList;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.today_item,parent,false); //加载子项布局
final ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(final ViewHolder holder , final int i){
final Plan plan = mDataList.get(i);
holder.todayText.setText(plan.getWritePlan());
final Handler handler = new Handler() { //异步消息处理机制来在非主线程中来修改UI
public void handleMessage(Message msg){
switch (msg.what){
case 1:
mDataList.remove(imagePosition); //将该Plan从列表中移除此时数据库中的没有移除
todayAdapter.notifyDataSetChanged(); //更新适配器以达到更新列表的效果
holder.imageView.setImageResource(R.drawable.no); //将前面的框框换回成灰色
break;
default:
break;
}
}
};
holder.todayView.setOnClickListener(new View.OnClickListener() { //当点击文字时会进入修改activity
@Override
public void onClick(View view) {
int writePosition = holder.getAdapterPosition();
Plan viewPlan = mDataList.get(writePosition);
String writeToday = viewPlan.getWritePlan();
Intent intent = new Intent(view.getContext(),AlterTodayActivity.class);
intent.putExtra("write",writeToday);
view.getContext().startActivity(intent);
}
});
holder.imageView.setOnClickListener(new View.OnClickListener() { //当点击前面的勾选框时会改变勾选框的图片
@Override
public void onClick(View view) {
imagePosition = holder.getAdapterPosition();
Plan ImagePlan = mDataList.get(imagePosition);
holder.imageView.setImageResource(R.drawable.yes); //切换图片
ImagePlan.setStatus(true); //状态设置为完成
ImagePlan.save(); //保存该状态
todayCount--; //移除之后数量减1
TimerTask task1 = new TimerTask() { //设置定时任务
public void run() {
Message message = new Message();
message.what = 1;
handler.sendMessage(message); //发送异步Message
}
};
Timer timer = new Timer();
timer.schedule(task1, 800); //设置延时的时间,单位是毫秒
Animation animation = AnimationUtils.loadAnimation(view.getContext(),R.anim.today_anim); //设置动画
holder.todayView.startAnimation(animation);
}
});
holder.todayView.setOnLongClickListener(new View.OnLongClickListener() { //长按机制
@Override
public boolean onLongClick(View view) { //长按效果
holder.delete.setVisibility(View.VISIBLE); //将删除按钮显示出来
return true;
}
});
holder.todayView.setOnClickListener(new DoubleClickListener() { //双击事件
@Override
public void onDoubleClick(View view) {
Intent alarmsIntent = new Intent(AlarmClock.ACTION_SET_ALARM); //调用系统闹钟
view.getContext().startActivity(alarmsIntent);
}
});
holder.delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int deletePosition = holder.getAdapterPosition(); //得到点击的顺序
Plan deletePlan = mDataList.get(deletePosition);
String deletePlanWrite = deletePlan.getWritePlan();
mDataList.remove(deletePosition);
todayCount--; //数量减少
todayAdapter.notifyDataSetChanged(); //更新适配器
LitePal.deleteAll(Plan.class,"writePlan = ?",deletePlanWrite); //将该条today删除
TimerTask deleteTask = new TimerTask() {
@Override
public void run() {
holder.delete.setVisibility(View.INVISIBLE);
}
};
Timer deleteTimer = new Timer();
deleteTimer.schedule(deleteTask,0); //一秒钟之后自动隐藏删除按钮
}
});
}
@Override
public int getItemCount(){
return mDataList.size();
}
}

@ -0,0 +1,21 @@
package com.example.yzbkaka.things;
import android.view.View;
public abstract class DoubleClickListener implements View.OnClickListener {
private static final long DOUBLE_TIME = 1000;
private static long lastClickTime = 0;
@Override
public void onClick(View v) {
long currentTimeMillis = System.currentTimeMillis();
if (currentTimeMillis - lastClickTime < DOUBLE_TIME) {
onDoubleClick(v);
}
lastClickTime = currentTimeMillis;
}
public abstract void onDoubleClick(View v);
}

@ -0,0 +1,77 @@
package com.example.yzbkaka.things.History;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.example.yzbkaka.things.Adapter.HistoryAdapter;
import com.example.yzbkaka.things.R;
import com.example.yzbkaka.things.db.Plan;
import org.litepal.LitePal;
import java.util.ArrayList;
import java.util.List;
public class HistoryActivity extends AppCompatActivity {
private Button back;
private RecyclerView historyView;
private Button clear;
private List<Plan> historyList = new ArrayList<>();
private List<Plan> dataList = new ArrayList<>();
private HistoryAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_history);
back = (Button)findViewById(R.id.back);
historyView = (RecyclerView)findViewById(R.id.history_view);
clear = (Button)findViewById(R.id.clear);
dataList = LitePal.findAll(Plan.class);
LinearLayoutManager manager = new LinearLayoutManager(this);
historyView.setLayoutManager(manager);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
clear.setOnClickListener(new View.OnClickListener() { //点击之后会清空列表
@Override
public void onClick(View view) {
Toast.makeText(HistoryActivity.this, "清空!", Toast.LENGTH_SHORT).show();
historyList.clear();
myAdapter.notifyDataSetChanged(); //适配器在每一次list更新的时候都需要进行一次更新
LitePal.deleteAll(Plan.class,"status = ?","1"); //删除所有status为true的plan
}
});
if(dataList.size() > 0){
historyList.clear();
for(Plan plan : dataList){
if(plan.getStatus() == true){ //如果状态是完成,则加入到历史列表当中
historyList.add(plan);
}
}
}
myAdapter = new HistoryAdapter(historyList);
historyView.setAdapter(myAdapter);
setLightMode();
}
private void setLightMode(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
}

@ -0,0 +1,68 @@
package com.example.yzbkaka.things.Log;
import android.content.Intent;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.yzbkaka.things.R;
import com.example.yzbkaka.things.db.Log;
import org.litepal.LitePal;
public class AlterLogActivity extends AppCompatActivity {
private Button back;
private Button save;
private EditText editText;
private String oldLog;
Log log = new Log();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_alter_log);
back = (Button)findViewById(R.id.back);
save = (Button)findViewById(R.id.save);
editText = (EditText)findViewById(R.id.edit_text);
Intent intent = getIntent();
oldLog = intent.getStringExtra("log"); //获得之前的log内容
editText.setText(oldLog);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String newLog = editText.getText().toString();
if(newLog.isEmpty()){
LitePal.deleteAll(Log.class,"logWrite = ?",oldLog);
}
else{
log.setLogWrite(newLog);
log.updateAll("logWrite = ?",oldLog); //不能使用save的方法
Toast.makeText(AlterLogActivity.this, "修改成功", Toast.LENGTH_SHORT).show();
}
finish();
}
});
setLightMode();
}
private void setLightMode(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
}

@ -0,0 +1,87 @@
package com.example.yzbkaka.things.Log;
import android.content.Intent;
import android.os.Build;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.View;
import android.widget.Button;
import com.example.yzbkaka.things.Adapter.LogAdapter;
import com.example.yzbkaka.things.R;
import com.example.yzbkaka.things.db.Log;
import org.litepal.LitePal;
import java.util.ArrayList;
import java.util.List;
public class LogActivity extends AppCompatActivity {
private Button back; //返回
private RecyclerView logView; //显示日志的View
private List<String> logList = new ArrayList<>(); //log的列表
private List<Log> dataList = new ArrayList<>(); //获得数据库中的Log
private FloatingActionButton create; //创建按钮
public static LogAdapter logAdapter; //适配器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_log);
back = (Button)findViewById(R.id.back);
logView = (RecyclerView) findViewById(R.id.log_list);
create = (FloatingActionButton)findViewById(R.id.create);
logView.setAdapter(logAdapter);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
create.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(LogActivity.this,LogCreateActivity.class);
startActivity(intent);
}
});
setLightMode();
}
@Override
public void onStart(){
super.onStart();
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL); //设置为瀑布式布局
logView.setLayoutManager(layoutManager);
logAdapter = new LogAdapter(logList);
dataList = LitePal.findAll(Log.class);
if(dataList.size() > 0){
logList.clear();
for(Log log : dataList){
logList.add(log.getLogWrite());
}
}
else{
logList.clear();
}
logView.setAdapter(logAdapter);
}
private void setLightMode(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
}

@ -0,0 +1,57 @@
package com.example.yzbkaka.things.Log;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.example.yzbkaka.things.R;
import com.example.yzbkaka.things.db.Log;
public class LogCreateActivity extends AppCompatActivity {
private Button back;
private EditText editText;
private Button save;
private String write;
Log log = new Log();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_log_create);
back = (Button)findViewById(R.id.back);
editText = (EditText)findViewById(R.id.edit_text);
save = (Button)findViewById(R.id.save);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
write = editText.getText().toString();
if(!write.isEmpty()){
log.setLogWrite(write);
log.save();
}
finish();
}
});
setLightMode();
}
private void setLightMode(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
}

@ -0,0 +1,109 @@
package com.example.yzbkaka.things;
import android.content.Intent;
import android.os.Build;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.example.yzbkaka.things.History.HistoryActivity;
import com.example.yzbkaka.things.Log.LogActivity;
import com.example.yzbkaka.things.Schedule.ScheduleViewActivity;
import com.example.yzbkaka.things.Setting.SettingActivity;
import com.example.yzbkaka.things.Today.NoteActivity;
public class MainActivity extends AppCompatActivity {
private Button today;
private Button schedule;
private Button log;
private Button history;
private Button openDrawer;
private Button setting;
DrawerLayout mDrawerLayout;
public static int todayCount = 0; //全局变量统计today中显示的数量
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActivityCollector.addActivity(this);
today = (Button)findViewById(R.id.select_today);
schedule = (Button)findViewById(R.id.select_plan);
log = (Button)findViewById(R.id.select_log);
history = (Button)findViewById(R.id.select_history);
openDrawer = (Button)findViewById(R.id.open_drawer);
setting = (Button)findViewById(R.id.setting);
mDrawerLayout = (DrawerLayout)findViewById(R.id.draw_layout);
today.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,NoteActivity.class);
startActivity(intent);
}
});
schedule.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, ScheduleViewActivity.class);
startActivity(intent);
}
});
log.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,LogActivity.class);
startActivity(intent);
}
});
history.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,HistoryActivity.class);
startActivity(intent);
}
});
openDrawer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mDrawerLayout.openDrawer(GravityCompat.START);
}
});
setting.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, SettingActivity.class);
startActivity(intent);
}
});
setLightMode();
}
@Override
protected void onDestroy(){
super.onDestroy();
ActivityCollector.removeActivity(this);
}
private void setLightMode(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
}

@ -0,0 +1,64 @@
package com.example.yzbkaka.things.Schedule;
import android.content.Intent;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.yzbkaka.things.R;
import com.example.yzbkaka.things.Today.AlterTodayActivity;
import com.example.yzbkaka.things.db.Plan;
import org.litepal.LitePal;
import static com.example.yzbkaka.things.MainActivity.todayCount;
public class AlterScheduleActivity extends AppCompatActivity {
private EditText editText;
private Button finish;
Plan plan = new Plan();
String oldWrite;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_alter_schedule);
editText = (EditText) findViewById(R.id.old_text);
finish = (Button)findViewById(R.id.finish);
Intent intent = getIntent();
oldWrite = intent.getStringExtra("write"); //得到之前的数据
editText.setText(oldWrite); //将之前的数据显示在EditText上
finish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String newWrite = editText.getText().toString(); //得到用户修改之后的新数据
if(newWrite.isEmpty()){
LitePal.deleteAll(Plan.class,"writePlan = ?",oldWrite); //如果修改之后为空则自动删除
}
else{
plan.setWritePlan(newWrite); //LitePal语法先设置新的内容再寻找条件更新
plan.updateAll("writePlan = ?",oldWrite);
Toast.makeText(AlterScheduleActivity.this, "修改成功", Toast.LENGTH_SHORT).show();
}
finish();
}
});
setLightMode();
}
private void setLightMode(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
}

@ -0,0 +1,77 @@
package com.example.yzbkaka.things.Schedule;
import android.content.Intent;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.example.yzbkaka.things.R;
import com.example.yzbkaka.things.Today.TodayCreateActivitty;
import com.prolificinteractive.materialcalendarview.CalendarDay;
import com.prolificinteractive.materialcalendarview.MaterialCalendarView;
import com.prolificinteractive.materialcalendarview.OnDateSelectedListener;
import java.util.Calendar;
import java.util.TimeZone;
public class ScheduleActivity extends AppCompatActivity {
private Button back;
private MaterialCalendarView calendarView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_schedule);
back = (Button)findViewById(R.id.back);
calendarView = (MaterialCalendarView)findViewById(R.id.calendarView);
Calendar calendar = Calendar.getInstance(); //得到今天的时间
calendar.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
final String todayYear = String.valueOf(calendar.get(Calendar.YEAR));
final String todayMonth = String.valueOf(calendar.get(Calendar.MONTH)+1);
final String todayDay = String.valueOf(calendar.get(Calendar.DATE));
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
calendarView.setOnDateChangedListener(new OnDateSelectedListener() {
@Override
public void onDateSelected(@NonNull MaterialCalendarView widget, @NonNull CalendarDay date, boolean selected) {
String year = String.valueOf(date.getYear()); //得到选中的时间
String month = String.valueOf(date.getMonth()+1);
String day = String.valueOf(date.getDay());
if(((year.equals(todayYear) && month.equals(todayMonth) && Integer.parseInt(day) < Integer.parseInt(todayDay))) || (year.equals(todayYear) && Integer.parseInt(month) < Integer.parseInt(todayMonth)) || (Integer.parseInt(year) < Integer.parseInt(todayYear))){ //如果选中的是今天,则会创建失败
Toast.makeText(ScheduleActivity.this, "请选择未来的时间点哦", Toast.LENGTH_SHORT).show();
}
else {
Intent intent = new Intent(ScheduleActivity.this, ScheduleCreateActivity.class);
intent.putExtra("year",year);
intent.putExtra("month",month);
intent.putExtra("day",day);
startActivity(intent);
}
}
});
setLightMode();
}
private void setLightMode(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
}

@ -0,0 +1,57 @@
package com.example.yzbkaka.things.Schedule;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.yzbkaka.things.R;
import com.example.yzbkaka.things.db.Plan;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class ScheduleCreateActivity extends AppCompatActivity {
private Button finish;
private EditText editText;
String write;
Plan plan = new Plan();
Date date;
Calendar calendar = Calendar.getInstance();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_schedule_create);
finish = (Button)findViewById(R.id.finish);
editText = (EditText)findViewById(R.id.edit_text);
calendar.setTimeZone(TimeZone.getTimeZone("GMT+8:00")); //设置为中国区的时间
Intent intent = getIntent();
final String scheduleYear = intent.getStringExtra("year");
final String scheduleMonth = intent.getStringExtra("month");
final String scheduleDay = intent.getStringExtra("day");
finish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
write = editText.getText().toString();
if(!write.isEmpty()){
plan.setWritePlan(write);
plan.setYear(scheduleYear);
plan.setMonth(scheduleMonth);
plan.setDay(scheduleDay);
date = new Date(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH)+1,calendar.get(Calendar.DATE));
plan.save();
Toast.makeText(ScheduleCreateActivity.this, "创建成功,记得要完成哦", Toast.LENGTH_SHORT).show();
}
finish();
}
});
}
}

@ -0,0 +1,100 @@
package com.example.yzbkaka.things.Schedule;
import android.content.Intent;
import android.os.Build;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import com.example.yzbkaka.things.Adapter.ScheduleAdapter;
import com.example.yzbkaka.things.R;
import com.example.yzbkaka.things.db.Plan;
import org.litepal.LitePal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.TimeZone;
public class ScheduleViewActivity extends AppCompatActivity {
private Button back;
private RecyclerView scheduleView;
private List<Plan> dataList = new ArrayList<>();
private List<Plan> scheduleList = new ArrayList<>();
public static ScheduleAdapter scheduleAdapter;
private FloatingActionButton create;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_schedule_view);
back = (Button)findViewById(R.id.back);
scheduleView = (RecyclerView)findViewById(R.id.schedule_view);
create = (FloatingActionButton)findViewById(R.id.create);
LinearLayoutManager manager = new LinearLayoutManager(this);
scheduleView.setLayoutManager(manager);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
create.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(ScheduleViewActivity.this,ScheduleActivity.class);
startActivity(intent);
}
});
setLightMode();
}
@Override
public void onResume(){
super.onResume();
dataList = LitePal.findAll(Plan.class);
create.setVisibility(View.VISIBLE);
Calendar calendar = Calendar.getInstance(); //获取到今天的时间
calendar.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
String year = String.valueOf(calendar.get(Calendar.YEAR));
String month = String.valueOf(calendar.get(Calendar.MONTH)+1);
String day = String.valueOf(calendar.get(Calendar.DATE));
if (dataList.size() > 0){
scheduleList.clear();
for(Plan plan : dataList){
if((plan.getYear().equals(year) && plan.getMonth().equals(month) && Integer.parseInt(plan.getDay()) > Integer.parseInt(day) ) || ( plan.getYear().equals(year) && Integer.parseInt(plan.getMonth()) > Integer.parseInt(month) ) || (Integer.parseInt(plan.getYear()) > Integer.parseInt(year)) ){ //只要不是今天的就会显示在计划列表当中
scheduleList.add(plan);
//排序
}
}
}
scheduleAdapter = new ScheduleAdapter(scheduleList);
scheduleView.setAdapter(scheduleAdapter);
}
@Override
public void onPause(){
super.onPause();
create.setVisibility(View.GONE);
}
private void setLightMode(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
}

@ -0,0 +1,88 @@
package com.example.yzbkaka.things.Service;
import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.os.IBinder;
import android.os.SystemClock;
import android.support.v4.app.NotificationCompat;
import com.example.yzbkaka.things.R;
import com.example.yzbkaka.things.Today.NoteActivity;
import static com.example.yzbkaka.things.MainActivity.todayCount;
import static com.example.yzbkaka.things.Setting.SettingActivity.count;
public class SendMessage extends Service {
public SendMessage() {
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent,int flags,int startId){
new Thread(new Runnable() {
@Override
public void run() {
if(count%2 == 0){ //根据次数来切换图片
Intent notificationIntent = new Intent(SendMessage.this,NoteActivity.class); //开始设置通知效果
PendingIntent pendingIntent = PendingIntent.getActivity(SendMessage.this,0, notificationIntent,0); //设置PendingIntent
NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){ //判断系统是否大于8.0
NotificationChannel notificationChannel = new NotificationChannel("channel","channel",NotificationManager.IMPORTANCE_HIGH);
manager.createNotificationChannel(notificationChannel);
Notification notification = new NotificationCompat.Builder(SendMessage.this,"channel")
.setContentTitle("任务清单已送达")
.setContentText("小主,今天还有" + todayCount + "件任务要完成哦!")
.setWhen(System.currentTimeMillis()) //发送通知的时间
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.logo144)) //设置大图标
.setContentIntent(pendingIntent) //设置通知的点击效果
.setAutoCancel(true) //设置点击之后自动关闭通知
.build();
if(todayCount > 0){
manager.notify(1,notification); //显示通知
}
}
else{
Notification notification = new NotificationCompat.Builder(SendMessage.this)
.setContentTitle("今天的任务清单")
.setContentText("小主今天还有" + todayCount + "件计划要完成哦!")
.setWhen(System.currentTimeMillis()) //发送通知的时间
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.logo144)) //设置大图标
.setContentIntent(pendingIntent) //设置通知的点击效果
.setAutoCancel(true) //设置点击之后自动关闭通知
.build();
if(todayCount > 0){
manager.notify(1,notification); //显示通知
}
}
}
else{
}
}
}).start();
AlarmManager manager = (AlarmManager)getSystemService(ALARM_SERVICE); //设置定时服务
int fourHour = 4*60*60*1000; //单位是毫秒4小时
long time = SystemClock.elapsedRealtime() + fourHour;
Intent i = new Intent(this,SendMessage.class);
PendingIntent pi = PendingIntent.getService(this,0,i,0);
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,time,pi);
return super.onStartCommand(intent,flags,startId);
}
}

@ -0,0 +1,31 @@
package com.example.yzbkaka.things.Setting;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.example.yzbkaka.things.R;
public class AboutActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about);
webView = (WebView)findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("https://github.com/yzbkaka/Schedule");
setLightMode();
}
private void setLightMode(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
}

@ -0,0 +1,183 @@
package com.example.yzbkaka.things.Setting;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.example.yzbkaka.things.R;
import java.util.Timer;
import java.util.TimerTask;
public class ExplainActivity extends AppCompatActivity {
private Button back;
private LinearLayout explain1;
private LinearLayout explain2;
private LinearLayout explain3;
private LinearLayout explain4;
private LinearLayout explain5;
private ImageView img1;
private ImageView img2;
private ImageView img3;
private ImageView img4;
private ImageView img5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_explain);
back = (Button)findViewById(R.id.back);
explain1 = (LinearLayout)findViewById(R.id.explain_one);
explain2 = (LinearLayout)findViewById(R.id.explain_two);
explain3 = (LinearLayout)findViewById(R.id.explain_three);
explain4 = (LinearLayout)findViewById(R.id.explain_four);
explain5 = (LinearLayout)findViewById(R.id.explain_five);
img1 = (ImageView)findViewById(R.id.explain_button_one);
img2 = (ImageView)findViewById(R.id.explain_button_two);
img3 = (ImageView)findViewById(R.id.explain_button_three);
img4 = (ImageView)findViewById(R.id.explain_button_four);
img5 = (ImageView)findViewById(R.id.explain_button_five);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
img1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
img1.setImageResource(R.drawable.yes);
final Animation animation = AnimationUtils.loadAnimation(ExplainActivity.this,R.anim.today_anim); //设置动画
explain1.startAnimation(animation);
TimerTask task = new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
explain1.setVisibility(View.GONE);
}
});
}
};
Timer timer = new Timer();
timer.schedule(task, 800);
}
});
img2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
img2.setImageResource(R.drawable.yes);
Animation animation = AnimationUtils.loadAnimation(ExplainActivity.this,R.anim.today_anim); //设置动画
explain2.startAnimation(animation);
TimerTask task = new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
explain2.setVisibility(View.GONE);
}
});
}
};
Timer timer = new Timer();
timer.schedule(task,800);
}
});
img3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
img3.setImageResource(R.drawable.yes);
Animation animation = AnimationUtils.loadAnimation(ExplainActivity.this,R.anim.today_anim); //设置动画
explain3.startAnimation(animation);
TimerTask task = new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
explain3.setVisibility(View.GONE);
}
});
}
};
Timer timer = new Timer();
timer.schedule(task,800);
}
});
img4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
img4.setImageResource(R.drawable.yes);
Animation animation = AnimationUtils.loadAnimation(ExplainActivity.this,R.anim.today_anim); //设置动画
explain4.startAnimation(animation);
TimerTask task = new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
explain4.setVisibility(View.GONE);
}
});
}
};
Timer timer = new Timer();
timer.schedule(task,800);
}
});
img5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
img5.setImageResource(R.drawable.yes);
Animation animation = AnimationUtils.loadAnimation(ExplainActivity.this,R.anim.today_anim); //设置动画
explain5.startAnimation(animation);
TimerTask task = new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
explain5.setVisibility(View.GONE);
}
});
}
};
Timer timer = new Timer();
timer.schedule(task,800);
}
});
setLightMode();
}
private void setLightMode(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
}

@ -0,0 +1,106 @@
package com.example.yzbkaka.things.Setting;
import android.content.Intent;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import com.example.yzbkaka.things.ActivityCollector;
import com.example.yzbkaka.things.R;
import com.example.yzbkaka.things.Service.SendMessage;
import com.prolificinteractive.materialcalendarview.WeekView;
public class SettingActivity extends AppCompatActivity {
private Button checkSendMessage;
private Button back;
private LinearLayout explain;
private LinearLayout about;
private LinearLayout exit;
public static int count = 0;
private Button dark;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setting);
ActivityCollector.addActivity(this);
checkSendMessage = (Button) findViewById(R.id.check_send);
back = (Button)findViewById(R.id.back);
explain = (LinearLayout)findViewById(R.id.how_to_use);
about = (LinearLayout)findViewById(R.id.about);
exit = (LinearLayout)findViewById(R.id.exit);
if(count%2 == 0){
checkSendMessage.setBackgroundResource(R.drawable.checkno);
}
else{
checkSendMessage.setBackgroundResource(R.drawable.checkyes);
}
checkSendMessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(count%2 == 0){ //同意开启发送通知
count++;
checkSendMessage.setBackgroundResource(R.drawable.checkyes);
Intent intent = new Intent(SettingActivity.this, SendMessage.class);
startService(intent); //启动服务
}
else{ //拒绝发送通知
count++;
checkSendMessage.setBackgroundResource(R.drawable.checkno);
}
}
});
explain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent explainIntent = new Intent(SettingActivity.this,ExplainActivity.class);
startActivity(explainIntent);
}
});
about.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent aboutIntent = new Intent(SettingActivity.this,AboutActivity.class);
startActivity(aboutIntent);
}
});
exit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ActivityCollector.finishAll();
}
});
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
setLightMode();
}
@Override
protected void onDestroy(){
super.onDestroy();
ActivityCollector.removeActivity(this);
}
private void setLightMode(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
}

@ -0,0 +1,31 @@
package com.example.yzbkaka.things;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import java.util.Timer;
import java.util.TimerTask;
public class StartActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
TimerTask task = new TimerTask() { //设置开启app的动画
@Override
public void run() {
Intent intent = new Intent(StartActivity.this,MainActivity.class);
startActivity(intent);
finish();
}
};
Timer timer = new Timer();
timer.schedule(task,1000);
}
}

@ -0,0 +1,66 @@
package com.example.yzbkaka.things.Today;
import android.content.Intent;
import android.os.Build;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.yzbkaka.things.R;
import com.example.yzbkaka.things.db.Plan;
import org.litepal.LitePal;
import static com.example.yzbkaka.things.MainActivity.todayCount;
public class AlterTodayActivity extends AppCompatActivity {
private EditText editText;
private Button finish;
Plan plan = new Plan();
String oldWrite;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_alter_today);
editText = (EditText) findViewById(R.id.old_text);
finish = (Button)findViewById(R.id.finish);
Intent intent = getIntent();
oldWrite = intent.getStringExtra("write"); //得到之前的数据
editText.setText(oldWrite); //将之前的数据显示在EditText上
finish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String newWrite = editText.getText().toString(); //得到用户修改之后的新数据
if(newWrite.isEmpty()){
LitePal.deleteAll(Plan.class,"writePlan = ?",oldWrite); //如果修改之后为空则自动删除
todayCount--; //删除之后则统计数量减1
}
else{
plan.setWritePlan(newWrite); //LitePal语法先设置新的内容再寻找条件更新
plan.updateAll("writePlan = ?",oldWrite);
Toast.makeText(AlterTodayActivity.this, "修改成功", Toast.LENGTH_SHORT).show();
}
finish();
}
});
setLightMode();
}
private void setLightMode(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
}

@ -0,0 +1,118 @@
package com.example.yzbkaka.things.Today;
import android.content.Intent;
import android.os.Build;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import com.example.yzbkaka.things.Adapter.TodayAdapter;
import com.example.yzbkaka.things.R;
import com.example.yzbkaka.things.db.Plan;
import org.litepal.LitePal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.TimeZone;
import static com.example.yzbkaka.things.MainActivity.todayCount;
public class NoteActivity extends AppCompatActivity {
private Button back; //后退键
private RecyclerView todayView; //显示今天所有任务的ListView
private List<Plan> todayList = new ArrayList<>(); //今天任务的列表
private List<Plan> dataList = new ArrayList<>(); //获得Plan数据库的列表
private FloatingActionButton create; //创建新任务的按钮
public static TodayAdapter todayAdapter; //适配器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_note);
back = (Button)findViewById(R.id.back);
todayView = (RecyclerView) findViewById(R.id.today_list);
create = (FloatingActionButton) findViewById(R.id.create);
LinearLayoutManager layoutManager = new LinearLayoutManager(this); //一定要为RecyclerView设置布局管理器
todayView.setLayoutManager(layoutManager);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
create.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(NoteActivity.this, TodayCreateActivitty.class);
create.setVisibility(View.GONE);
startActivity(intent);
}
});
todayAdapter = new TodayAdapter(todayList);
todayView.setAdapter(todayAdapter);
setLightMode();
}
@Override
public void onResume() {
super.onResume();
create.setVisibility(View.VISIBLE); //右下角的创建按钮显示出来
dataList = LitePal.findAll(Plan.class);
Calendar calendar = Calendar.getInstance(); //获得今天的时间
calendar.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
String year = String.valueOf(calendar.get(Calendar.YEAR));
String month = String.valueOf(calendar.get(Calendar.MONTH)+1);
String day = String.valueOf(calendar.get(Calendar.DATE));
if(dataList.size() > 0){
todayList.clear();
for(Plan plan:dataList){
if(plan.getYear().equals(year) && plan.getMonth().equals(month) && plan.getDay().equals(day) && plan.getStatus()== false){
todayList.add(plan);
//todayCount++; //today统计数量加1
}
}
}
else{
todayList.clear();
}
}
@Override
public void onPause(){
super.onPause();
create.setVisibility(View.GONE);
}
private void setLightMode(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
}

@ -0,0 +1,66 @@
package com.example.yzbkaka.things.Today;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.example.yzbkaka.things.R;
import com.example.yzbkaka.things.db.Plan;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import static com.example.yzbkaka.things.MainActivity.todayCount;
public class TodayCreateActivitty extends AppCompatActivity {
private EditText editText; //写下的计划
private Button finish; //完成后的按钮
private String write; //输入的内容
private Calendar calendar; //获得时间
Date date;
Plan plan = new Plan();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_today_create_activitty);
editText = (EditText)findViewById(R.id.edit_text);
finish = (Button)findViewById(R.id.finish);
calendar = Calendar.getInstance(); //获得实例
calendar.setTimeZone(TimeZone.getTimeZone("GMT+8:00")); //设置为中国区的时间
finish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
write = String.valueOf(editText.getText()); //获得输入的内容
if(!write.isEmpty()){
plan.setWritePlan(write);
plan.setYear(String.valueOf(calendar.get(Calendar.YEAR))); //设置写下的时间,年
plan.setMonth(String.valueOf(calendar.get(Calendar.MONTH)+1)); //设置月份(系统中是从0开始的)
plan.setDay(String.valueOf(calendar.get(Calendar.DATE))); //设置日期
date = new Date(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH)+1,calendar.get(Calendar.DATE)); //设置plan中的date
plan.setCreateTime(date);
todayCount++; //today统计数量加1
plan.save();
}
finish();
}
});
setLightMode();
}
private void setLightMode(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
}

@ -0,0 +1,27 @@
package com.example.yzbkaka.things.db;
import org.litepal.crud.LitePalSupport;
public class Log extends LitePalSupport {
int id;
String logWrite;
public void setId(int id) {
this.id = id;
}
public void setLogWrite(String logWrite) {
this.logWrite = logWrite;
}
public int getId() {
return id;
}
public String getLogWrite() {
return logWrite;
}
}

@ -0,0 +1,74 @@
package com.example.yzbkaka.things.db;
import org.litepal.crud.LitePalSupport;
import java.util.Date;
public class Plan extends LitePalSupport {
int id;
String writePlan;
String year;
String month;
String day;
boolean status; //默认值为false
Date createTime; //创建的时间
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getWritePlan() {
return writePlan;
}
public void setWritePlan(String writePlan) {
this.writePlan = writePlan;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public String getMonth() {
return month;
}
public void setMonth(String month) {
this.month = month;
}
public String getDay() {
return day;
}
public void setDay(String day) {
this.day = day;
}
public boolean getStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true"
android:duration="850">
<translate
android:fromXDelta="0"
android:toXDelta="1200"/>
</set>

@ -0,0 +1,34 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportHeight="108"
android:viewportWidth="108">
<path
android:fillType="evenOdd"
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
android:strokeColor="#00000000"
android:strokeWidth="1">
<aapt:attr name="android:fillColor">
<gradient
android:endX="78.5885"
android:endY="90.9159"
android:startX="48.7653"
android:startY="61.0927"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
android:strokeColor="#00000000"
android:strokeWidth="1" />
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 515 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 569 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

@ -0,0 +1,170 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportHeight="108"
android:viewportWidth="108">
<path
android:fillColor="#26A69A"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 365 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 595 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 527 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 709 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 854 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"></WebView>
</LinearLayout>

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize">
<Button
android:id="@+id/back"
android:layout_width="30sp"
android:layout_height="30sp"
android:layout_centerVertical="true"
android:layout_marginLeft="16dp"
android:background="@drawable/back"/>
<Button
android:id="@+id/save"
android:layout_width="25sp"
android:layout_height="25sp"
android:layout_centerVertical="true"
android:layout_alignParentEnd="true"
android:layout_marginTop="2dp"
android:layout_marginRight="16dp"
android:layout_alignParentRight="true"
android:background="@drawable/right"/>
</RelativeLayout>
<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="来记录一下吧!"
android:layout_marginLeft="19sp"
android:textColor="#000"
android:textSize="20dp"
android:textCursorDrawable="@null"/>
</LinearLayout>

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="300dp"
android:background="@drawable/blank">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"
android:background="@drawable/yes2"/>
<EditText
android:id="@+id/old_text"
android:layout_width="290dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="5dp"
android:textSize="20dp"
android:hint="写下今天的计划吧!"
android:singleLine="true"/>
<Button
android:id="@+id/finish"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="center_vertical"
android:background="@drawable/enter"/>
</LinearLayout>
</LinearLayout>

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="300dp"
android:background="@drawable/blank">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"
android:background="@drawable/yes2"/>
<EditText
android:id="@+id/old_text"
android:layout_width="290dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="5dp"
android:textSize="20dp"
android:hint="写下今天的计划吧!"
android:singleLine="true"/>
<Button
android:id="@+id/finish"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="center_vertical"
android:background="@drawable/enter"/>
</LinearLayout>
</LinearLayout>

@ -0,0 +1,171 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="#fff">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:text="Schedule"
android:textColor="#000"
android:layout_centerInParent="true"/>
<Button
android:id="@+id/back"
android:layout_width="30sp"
android:layout_height="30sp"
android:layout_marginLeft="16sp"
android:layout_centerVertical="true"
android:background="@drawable/back" />
</RelativeLayout>
<LinearLayout
android:id="@+id/explain_layout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/explain_one"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp">
<ImageView
android:id="@+id/explain_button_one"
android:layout_width="27dp"
android:layout_height="27dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="16dp"
android:background="@drawable/no" />
<TextView
android:layout_width="290dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="7dp"
android:textSize="16dp"
android:textColor="#000"
android:text="1.在“今天”中点击右下角按钮即可开始创建当日任务"/>
</LinearLayout>
<LinearLayout
android:id="@+id/explain_two"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp">
<ImageView
android:id="@+id/explain_button_two"
android:layout_width="27dp"
android:layout_height="27dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="16dp"
android:background="@drawable/no" />
<TextView
android:layout_width="290dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="7dp"
android:textSize="16dp"
android:textColor="#000"
android:text="2.在“计划”中可以设定未来想要做的任务,当那一天到来时会自动显示到当天的任务列表中"/>
</LinearLayout>
<LinearLayout
android:id="@+id/explain_three"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp">
<ImageView
android:id="@+id/explain_button_three"
android:layout_width="27dp"
android:layout_height="27dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="16dp"
android:background="@drawable/no" />
<TextView
android:layout_width="290dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="7dp"
android:textSize="16dp"
android:textColor="#000"
android:text="3.如果想要记下一些重要事项,可以使用“便签”功能"/>
</LinearLayout>
<LinearLayout
android:id="@+id/explain_four"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp">
<ImageView
android:id="@+id/explain_button_four"
android:layout_width="27dp"
android:layout_height="27dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="16dp"
android:background="@drawable/no" />
<TextView
android:layout_width="290dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="7dp"
android:textSize="16dp"
android:textColor="#000"
android:text="4.如果想要查询已经完成的任务,可以在“历史”中查看"/>
</LinearLayout>
<LinearLayout
android:id="@+id/explain_five"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp">
<ImageView
android:id="@+id/explain_button_five"
android:layout_width="27dp"
android:layout_height="27dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="16dp"
android:background="@drawable/no" />
<TextView
android:layout_width="290dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="7dp"
android:textSize="16dp"
android:textColor="#000"
android:text="5.如果完成了上述任务就可以点击前面的对勾进行消除"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="#fff">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_centerVertical="true"
android:layout_marginLeft="127dp"
android:background="@drawable/history"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="22sp"
android:textColor="#000"
android:text="历史" />
<Button
android:id="@+id/back"
android:layout_width="30sp"
android:layout_height="30sp"
android:layout_centerVertical="true"
android:layout_marginLeft="16dp"
android:background="@drawable/back"/>
<Button
android:id="@+id/clear"
android:layout_width="23sp"
android:layout_height="23sp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="16dp"
android:background="@drawable/clear" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#e6e6e6"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/history_view"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
</RelativeLayout>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save