+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/app.iml b/src/app/app.iml
new file mode 100644
index 0000000..4a842d2
--- /dev/null
+++ b/src/app/app.iml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ generateDebugSources
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/build.gradle b/src/app/build.gradle
new file mode 100644
index 0000000..c1bfe6b
--- /dev/null
+++ b/src/app/build.gradle
@@ -0,0 +1,24 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 23
+ buildToolsVersion "29.0.2"
+ useLibrary 'org.apache.http.legacy'
+
+ defaultConfig {
+ applicationId "net.micode.notes"
+ minSdkVersion 17
+ targetSdkVersion 17
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
+ }
+ }
+
+ dependencies {
+ implementation 'com.astuetz:pagerslidingtabstrip:1.0.1'
+ }
+}
diff --git a/src/app/build/generated/not_namespaced_r_class_sources/debug/r/net/micode/notes/R.java b/src/app/build/generated/not_namespaced_r_class_sources/debug/r/net/micode/notes/R.java
new file mode 100644
index 0000000..8fbbd69
--- /dev/null
+++ b/src/app/build/generated/not_namespaced_r_class_sources/debug/r/net/micode/notes/R.java
@@ -0,0 +1,584 @@
+/* AUTO-GENERATED FILE. DO NOT MODIFY.
+ *
+ * This class was automatically generated by the
+ * aapt tool from the resource data it found. It
+ * should not be modified by hand.
+ */
+
+package net.micode.notes;
+
+public final class R {
+ public static final class array {
+ public static final int format_for_exported_note=0x7f010000;
+ public static final int menu_share_ways=0x7f010001;
+ }
+ public static final class attr {
+ /**
+ *
May be a color value, in the form of "#rgb",
+ * "#argb", "#rrggbb", or
+ * "#aarrggbb".
+ */
+ public static final int pstsDividerColor=0x7f020000;
+ /**
+ *
May be a dimension value, which is a floating point number appended with a
+ * unit such as "14.5sp".
+ * Available units are: px (pixels), dp (density-independent pixels),
+ * sp (scaled pixels based on preferred font size), in (inches), and
+ * mm (millimeters).
+ */
+ public static final int pstsDividerPadding=0x7f020001;
+ /**
+ *
May be a color value, in the form of "#rgb",
+ * "#argb", "#rrggbb", or
+ * "#aarrggbb".
+ */
+ public static final int pstsIndicatorColor=0x7f020002;
+ /**
+ *
May be a dimension value, which is a floating point number appended with a
+ * unit such as "14.5sp".
+ * Available units are: px (pixels), dp (density-independent pixels),
+ * sp (scaled pixels based on preferred font size), in (inches), and
+ * mm (millimeters).
+ */
+ public static final int pstsIndicatorHeight=0x7f020003;
+ /**
+ *
May be a dimension value, which is a floating point number appended with a
+ * unit such as "14.5sp".
+ * Available units are: px (pixels), dp (density-independent pixels),
+ * sp (scaled pixels based on preferred font size), in (inches), and
+ * mm (millimeters).
+ */
+ public static final int pstsScrollOffset=0x7f020004;
+ /**
+ *
May be a boolean value, such as "true" or
+ * "false".
+ */
+ public static final int pstsShouldExpand=0x7f020005;
+ /**
+ *
May be a reference to another resource, in the form
+ * "@[+][package:]type/name" or a theme
+ * attribute in the form
+ * "?[package:]type/name".
+ */
+ public static final int pstsTabBackground=0x7f020006;
+ /**
+ *
May be a dimension value, which is a floating point number appended with a
+ * unit such as "14.5sp".
+ * Available units are: px (pixels), dp (density-independent pixels),
+ * sp (scaled pixels based on preferred font size), in (inches), and
+ * mm (millimeters).
+ */
+ public static final int pstsTabPaddingLeftRight=0x7f020007;
+ /**
+ *
May be a boolean value, such as "true" or
+ * "false".
+ */
+ public static final int pstsTextAllCaps=0x7f020008;
+ /**
+ *
May be a color value, in the form of "#rgb",
+ * "#argb", "#rrggbb", or
+ * "#aarrggbb".
+ */
+ public static final int pstsUnderlineColor=0x7f020009;
+ /**
+ *
May be a dimension value, which is a floating point number appended with a
+ * unit such as "14.5sp".
+ * Available units are: px (pixels), dp (density-independent pixels),
+ * sp (scaled pixels based on preferred font size), in (inches), and
+ * mm (millimeters).
+ */
+ public static final int pstsUnderlineHeight=0x7f02000a;
+ }
+ public static final class color {
+ public static final int background_tab_pressed=0x7f030000;
+ public static final int primary_text_dark=0x7f030001;
+ public static final int secondary_text_dark=0x7f030002;
+ public static final int user_query_highlight=0x7f030003;
+ }
+ public static final class dimen {
+ public static final int text_font_size_large=0x7f040000;
+ public static final int text_font_size_medium=0x7f040001;
+ public static final int text_font_size_normal=0x7f040002;
+ public static final int text_font_size_small=0x7f040003;
+ public static final int text_font_size_super=0x7f040004;
+ }
+ public static final class drawable {
+ public static final int background_tab=0x7f050000;
+ public static final int bg_btn_set_color=0x7f050001;
+ public static final int bg_color_btn_mask=0x7f050002;
+ public static final int call_record=0x7f050003;
+ public static final int clock=0x7f050004;
+ public static final int delete=0x7f050005;
+ public static final int dropdown_icon=0x7f050006;
+ public static final int edit_blue=0x7f050007;
+ public static final int edit_green=0x7f050008;
+ public static final int edit_red=0x7f050009;
+ public static final int edit_title_blue=0x7f05000a;
+ public static final int edit_title_green=0x7f05000b;
+ public static final int edit_title_red=0x7f05000c;
+ public static final int edit_title_white=0x7f05000d;
+ public static final int edit_title_yellow=0x7f05000e;
+ public static final int edit_white=0x7f05000f;
+ public static final int edit_yellow=0x7f050010;
+ public static final int font_large=0x7f050011;
+ public static final int font_normal=0x7f050012;
+ public static final int font_size_selector_bg=0x7f050013;
+ public static final int font_small=0x7f050014;
+ public static final int font_super=0x7f050015;
+ public static final int icon_actionbar=0x7f050016;
+ public static final int icon_app=0x7f050017;
+ public static final int list_background=0x7f050018;
+ public static final int list_blue_down=0x7f050019;
+ public static final int list_blue_middle=0x7f05001a;
+ public static final int list_blue_single=0x7f05001b;
+ public static final int list_blue_up=0x7f05001c;
+ public static final int list_folder=0x7f05001d;
+ public static final int list_footer_bg=0x7f05001e;
+ public static final int list_green_down=0x7f05001f;
+ public static final int list_green_middle=0x7f050020;
+ public static final int list_green_single=0x7f050021;
+ public static final int list_green_up=0x7f050022;
+ public static final int list_red_down=0x7f050023;
+ public static final int list_red_middle=0x7f050024;
+ public static final int list_red_single=0x7f050025;
+ public static final int list_red_up=0x7f050026;
+ public static final int list_white_down=0x7f050027;
+ public static final int list_white_middle=0x7f050028;
+ public static final int list_white_single=0x7f050029;
+ public static final int list_white_up=0x7f05002a;
+ public static final int list_yellow_down=0x7f05002b;
+ public static final int list_yellow_middle=0x7f05002c;
+ public static final int list_yellow_single=0x7f05002d;
+ public static final int list_yellow_up=0x7f05002e;
+ public static final int menu_delete=0x7f05002f;
+ public static final int menu_move=0x7f050030;
+ public static final int new_folder=0x7f050031;
+ public static final int new_note=0x7f050032;
+ public static final int new_note_normal=0x7f050033;
+ public static final int new_note_pressed=0x7f050034;
+ public static final int new_todo=0x7f050035;
+ public static final int note_edit_color_selector_panel=0x7f050036;
+ public static final int notification=0x7f050037;
+ public static final int search_result=0x7f050038;
+ public static final int selected=0x7f050039;
+ public static final int title_alert=0x7f05003a;
+ public static final int title_bar_bg=0x7f05003b;
+ public static final int widget_2x_blue=0x7f05003c;
+ public static final int widget_2x_green=0x7f05003d;
+ public static final int widget_2x_red=0x7f05003e;
+ public static final int widget_2x_white=0x7f05003f;
+ public static final int widget_2x_yellow=0x7f050040;
+ public static final int widget_4x_blue=0x7f050041;
+ public static final int widget_4x_green=0x7f050042;
+ public static final int widget_4x_red=0x7f050043;
+ public static final int widget_4x_white=0x7f050044;
+ public static final int widget_4x_yellow=0x7f050045;
+ }
+ public static final class id {
+ public static final int account_dialog_subtitle=0x7f060000;
+ public static final int account_dialog_title=0x7f060001;
+ public static final int action_select_all=0x7f060002;
+ public static final int amPm=0x7f060003;
+ public static final int bg_color_list_view=0x7f060004;
+ public static final int btn=0x7f060005;
+ public static final int btn_new_note=0x7f060006;
+ public static final int btn_new_todo=0x7f060007;
+ public static final int btn_set_bg_color=0x7f060008;
+ public static final int cb_edit_item=0x7f060009;
+ public static final int cb_todo=0x7f06000a;
+ public static final int date=0x7f06000b;
+ public static final int delete=0x7f06000c;
+ public static final int draw=0x7f06000d;
+ public static final int et_edit_text=0x7f06000e;
+ public static final int et_foler_name=0x7f06000f;
+ public static final int et_todo_text=0x7f060010;
+ public static final int font_size_selector=0x7f060011;
+ public static final int hour=0x7f060012;
+ public static final int iv_alert_icon=0x7f060013;
+ public static final int iv_bg_blue=0x7f060014;
+ public static final int iv_bg_blue_select=0x7f060015;
+ public static final int iv_bg_green=0x7f060016;
+ public static final int iv_bg_green_select=0x7f060017;
+ public static final int iv_bg_red=0x7f060018;
+ public static final int iv_bg_red_select=0x7f060019;
+ public static final int iv_bg_white=0x7f06001a;
+ public static final int iv_bg_white_select=0x7f06001b;
+ public static final int iv_bg_yellow=0x7f06001c;
+ public static final int iv_bg_yellow_select=0x7f06001d;
+ public static final int iv_large_select=0x7f06001e;
+ public static final int iv_medium_select=0x7f06001f;
+ public static final int iv_small_select=0x7f060020;
+ public static final int iv_super_select=0x7f060021;
+ public static final int ll_font_large=0x7f060022;
+ public static final int ll_font_normal=0x7f060023;
+ public static final int ll_font_small=0x7f060024;
+ public static final int ll_font_super=0x7f060025;
+ public static final int menu_alert=0x7f060026;
+ public static final int menu_delete=0x7f060027;
+ public static final int menu_delete_remind=0x7f060028;
+ public static final int menu_export_text=0x7f060029;
+ public static final int menu_font_size=0x7f06002a;
+ public static final int menu_list_mode=0x7f06002b;
+ public static final int menu_new_folder=0x7f06002c;
+ public static final int menu_new_note=0x7f06002d;
+ public static final int menu_search=0x7f06002e;
+ public static final int menu_send_to_desktop=0x7f06002f;
+ public static final int menu_setting=0x7f060030;
+ public static final int menu_share=0x7f060031;
+ public static final int menu_sync=0x7f060032;
+ public static final int minute=0x7f060033;
+ public static final int move=0x7f060034;
+ public static final int navigation_bar=0x7f060035;
+ public static final int note_bg_color_selector=0x7f060036;
+ public static final int note_edit_list=0x7f060037;
+ public static final int note_edit_view=0x7f060038;
+ public static final int note_item=0x7f060039;
+ public static final int note_title=0x7f06003a;
+ public static final int notes_list=0x7f06003b;
+ public static final int prefenerece_sync_status_textview=0x7f06003c;
+ public static final int preference_sync_button=0x7f06003d;
+ public static final int selection_menu=0x7f06003e;
+ public static final int sv_note_edit=0x7f06003f;
+ public static final int todo_list=0x7f060040;
+ public static final int tv_alert_date=0x7f060041;
+ public static final int tv_folder_name=0x7f060042;
+ public static final int tv_modified_date=0x7f060043;
+ public static final int tv_name=0x7f060044;
+ public static final int tv_time=0x7f060045;
+ public static final int tv_title=0x7f060046;
+ public static final int tv_title_bar=0x7f060047;
+ public static final int tv_todo_text=0x7f060048;
+ public static final int widget_bg_image=0x7f060049;
+ public static final int widget_text=0x7f06004a;
+ }
+ public static final class layout {
+ public static final int account_dialog_title=0x7f070000;
+ public static final int add_account_text=0x7f070001;
+ public static final int datetime_picker=0x7f070002;
+ public static final int dialog_edit_text=0x7f070003;
+ public static final int dialog_edit_todo=0x7f070004;
+ public static final int folder_list_item=0x7f070005;
+ public static final int note_edit=0x7f070006;
+ public static final int note_edit_list_item=0x7f070007;
+ public static final int note_item=0x7f070008;
+ public static final int note_list=0x7f070009;
+ public static final int note_list_dropdown_menu=0x7f07000a;
+ public static final int note_list_footer=0x7f07000b;
+ public static final int settings_header=0x7f07000c;
+ public static final int todo_list=0x7f07000d;
+ public static final int todo_list_item=0x7f07000e;
+ public static final int white_board=0x7f07000f;
+ public static final int widget_2x=0x7f070010;
+ public static final int widget_4x=0x7f070011;
+ }
+ public static final class menu {
+ public static final int call_note_edit=0x7f080000;
+ public static final int call_record_folder=0x7f080001;
+ public static final int note_edit=0x7f080002;
+ public static final int note_list=0x7f080003;
+ public static final int note_list_dropdown=0x7f080004;
+ public static final int note_list_options=0x7f080005;
+ public static final int sub_folder=0x7f080006;
+ }
+ public static final class plurals {
+ public static final int search_results_title=0x7f090000;
+ }
+ public static final class raw {
+ public static final int introduction=0x7f0a0000;
+ }
+ public static final class string {
+ public static final int alert_message_delete_folder=0x7f0b0000;
+ public static final int alert_message_delete_note=0x7f0b0001;
+ public static final int alert_message_delete_notes=0x7f0b0002;
+ public static final int alert_title_delete=0x7f0b0003;
+ public static final int app_name=0x7f0b0004;
+ public static final int app_widget2x2=0x7f0b0005;
+ public static final int app_widget4x4=0x7f0b0006;
+ public static final int button_delete=0x7f0b0007;
+ public static final int call_record_folder_name=0x7f0b0008;
+ public static final int create_new_todo=0x7f0b0009;
+ public static final int datetime_dialog_cancel=0x7f0b000a;
+ public static final int datetime_dialog_ok=0x7f0b000b;
+ public static final int delete_remind_time_message=0x7f0b000c;
+ public static final int error_note_empty_for_clock=0x7f0b000d;
+ public static final int error_note_empty_for_send_to_desktop=0x7f0b000e;
+ public static final int error_note_not_exist=0x7f0b000f;
+ public static final int error_sdcard_export=0x7f0b0010;
+ public static final int error_sdcard_unmounted=0x7f0b0011;
+ public static final int error_sync_cancelled=0x7f0b0012;
+ public static final int error_sync_internal=0x7f0b0013;
+ public static final int error_sync_network=0x7f0b0014;
+ public static final int failed_sdcard_export=0x7f0b0015;
+ public static final int file_name_txt_format=0x7f0b0016;
+ public static final int file_path=0x7f0b0017;
+ public static final int folder_exist=0x7f0b0018;
+ public static final int format_date_ymd=0x7f0b0019;
+ public static final int format_datetime_mdhm=0x7f0b001a;
+ public static final int format_exported_file_location=0x7f0b001b;
+ public static final int format_folder_files_count=0x7f0b001c;
+ public static final int format_move_notes_to_folder=0x7f0b001d;
+ public static final int hint_foler_name=0x7f0b001e;
+ public static final int hint_todo_text=0x7f0b001f;
+ public static final int info_note_enter_desktop=0x7f0b0020;
+ public static final int menu_alert=0x7f0b0021;
+ public static final int menu_create_folder=0x7f0b0022;
+ public static final int menu_delete=0x7f0b0023;
+ public static final int menu_deselect_all=0x7f0b0024;
+ public static final int menu_export_text=0x7f0b0025;
+ public static final int menu_folder_change_name=0x7f0b0026;
+ public static final int menu_folder_delete=0x7f0b0027;
+ public static final int menu_folder_view=0x7f0b0028;
+ public static final int menu_font_large=0x7f0b0029;
+ public static final int menu_font_normal=0x7f0b002a;
+ public static final int menu_font_size=0x7f0b002b;
+ public static final int menu_font_small=0x7f0b002c;
+ public static final int menu_font_super=0x7f0b002d;
+ public static final int menu_list_mode=0x7f0b002e;
+ public static final int menu_move=0x7f0b002f;
+ public static final int menu_move_parent_folder=0x7f0b0030;
+ public static final int menu_normal_mode=0x7f0b0031;
+ public static final int menu_remove_remind=0x7f0b0032;
+ public static final int menu_search=0x7f0b0033;
+ public static final int menu_select_all=0x7f0b0034;
+ public static final int menu_select_none=0x7f0b0035;
+ public static final int menu_select_title=0x7f0b0036;
+ public static final int menu_send_to_desktop=0x7f0b0037;
+ public static final int menu_setting=0x7f0b0038;
+ public static final int menu_share=0x7f0b0039;
+ public static final int menu_sync=0x7f0b003a;
+ public static final int menu_sync_cancel=0x7f0b003b;
+ public static final int menu_title_select_folder=0x7f0b003c;
+ public static final int note_alert_expired=0x7f0b003d;
+ public static final int note_length=0x7f0b003e;
+ public static final int note_link_email=0x7f0b003f;
+ public static final int note_link_other=0x7f0b0040;
+ public static final int note_link_tel=0x7f0b0041;
+ public static final int note_link_web=0x7f0b0042;
+ public static final int notealert_enter=0x7f0b0043;
+ public static final int notealert_ok=0x7f0b0044;
+ public static final int notelist_menu_new=0x7f0b0045;
+ public static final int notelist_string_info=0x7f0b0046;
+ public static final int preferences_account_summary=0x7f0b0047;
+ public static final int preferences_account_title=0x7f0b0048;
+ public static final int preferences_add_account=0x7f0b0049;
+ public static final int preferences_bg_random_appear_title=0x7f0b004a;
+ public static final int preferences_button_sync_cancel=0x7f0b004b;
+ public static final int preferences_button_sync_immediately=0x7f0b004c;
+ public static final int preferences_dialog_change_account_title=0x7f0b004d;
+ public static final int preferences_dialog_change_account_warn_msg=0x7f0b004e;
+ public static final int preferences_dialog_select_account_tips=0x7f0b004f;
+ public static final int preferences_dialog_select_account_title=0x7f0b0050;
+ public static final int preferences_last_sync_time=0x7f0b0051;
+ public static final int preferences_last_sync_time_format=0x7f0b0052;
+ public static final int preferences_menu_cancel=0x7f0b0053;
+ public static final int preferences_menu_change_account=0x7f0b0054;
+ public static final int preferences_menu_remove_account=0x7f0b0055;
+ public static final int preferences_title=0x7f0b0056;
+ public static final int preferences_toast_cannot_change_account=0x7f0b0057;
+ public static final int preferences_toast_success_set_accout=0x7f0b0058;
+ public static final int search=0x7f0b0059;
+ public static final int search_hint=0x7f0b005a;
+ public static final int search_label=0x7f0b005b;
+ public static final int search_setting_description=0x7f0b005c;
+ public static final int set_remind_time_message=0x7f0b005d;
+ public static final int success_sdcard_export=0x7f0b005e;
+ public static final int success_sync_account=0x7f0b005f;
+ public static final int sync_progress_init_list=0x7f0b0060;
+ public static final int sync_progress_login=0x7f0b0061;
+ public static final int sync_progress_syncing=0x7f0b0062;
+ public static final int ticker_cancel=0x7f0b0063;
+ public static final int ticker_fail=0x7f0b0064;
+ public static final int ticker_success=0x7f0b0065;
+ public static final int ticker_syncing=0x7f0b0066;
+ public static final int todo_welcome=0x7f0b0067;
+ public static final int widget_havenot_content=0x7f0b0068;
+ public static final int widget_under_visit_mode=0x7f0b0069;
+ }
+ public static final class style {
+ public static final int HighlightTextAppearancePrimary=0x7f0c0000;
+ public static final int HighlightTextAppearanceSecondary=0x7f0c0001;
+ public static final int NoteActionBarStyle=0x7f0c0002;
+ public static final int NoteTheme=0x7f0c0003;
+ public static final int TextAppearanceLarge=0x7f0c0004;
+ public static final int TextAppearanceMedium=0x7f0c0005;
+ public static final int TextAppearanceNormal=0x7f0c0006;
+ public static final int TextAppearancePrimaryItem=0x7f0c0007;
+ public static final int TextAppearanceSecondaryItem=0x7f0c0008;
+ public static final int TextAppearanceSuper=0x7f0c0009;
+ public static final int TextAppearanceUnderMenuIcon=0x7f0c000a;
+ }
+ public static final class styleable {
+ /**
+ * Attributes that can be used with a PagerSlidingTabStrip.
+ *
This symbol is the offset where the {@link net.micode.notes.R.attr#pstsDividerColor}
+ * attribute's value can be found in the {@link #PagerSlidingTabStrip} array.
+ *
+ *
May be a color value, in the form of "#rgb",
+ * "#argb", "#rrggbb", or
+ * "#aarrggbb".
+ *
+ * @attr name net.micode.notes:pstsDividerColor
+ */
+ public static final int PagerSlidingTabStrip_pstsDividerColor=0;
+ /**
+ *
This symbol is the offset where the {@link net.micode.notes.R.attr#pstsDividerPadding}
+ * attribute's value can be found in the {@link #PagerSlidingTabStrip} array.
+ *
+ *
May be a dimension value, which is a floating point number appended with a
+ * unit such as "14.5sp".
+ * Available units are: px (pixels), dp (density-independent pixels),
+ * sp (scaled pixels based on preferred font size), in (inches), and
+ * mm (millimeters).
+ *
+ * @attr name net.micode.notes:pstsDividerPadding
+ */
+ public static final int PagerSlidingTabStrip_pstsDividerPadding=1;
+ /**
+ *
This symbol is the offset where the {@link net.micode.notes.R.attr#pstsIndicatorColor}
+ * attribute's value can be found in the {@link #PagerSlidingTabStrip} array.
+ *
+ *
May be a color value, in the form of "#rgb",
+ * "#argb", "#rrggbb", or
+ * "#aarrggbb".
+ *
+ * @attr name net.micode.notes:pstsIndicatorColor
+ */
+ public static final int PagerSlidingTabStrip_pstsIndicatorColor=2;
+ /**
+ *
This symbol is the offset where the {@link net.micode.notes.R.attr#pstsIndicatorHeight}
+ * attribute's value can be found in the {@link #PagerSlidingTabStrip} array.
+ *
+ *
May be a dimension value, which is a floating point number appended with a
+ * unit such as "14.5sp".
+ * Available units are: px (pixels), dp (density-independent pixels),
+ * sp (scaled pixels based on preferred font size), in (inches), and
+ * mm (millimeters).
+ *
+ * @attr name net.micode.notes:pstsIndicatorHeight
+ */
+ public static final int PagerSlidingTabStrip_pstsIndicatorHeight=3;
+ /**
+ *
This symbol is the offset where the {@link net.micode.notes.R.attr#pstsScrollOffset}
+ * attribute's value can be found in the {@link #PagerSlidingTabStrip} array.
+ *
+ *
May be a dimension value, which is a floating point number appended with a
+ * unit such as "14.5sp".
+ * Available units are: px (pixels), dp (density-independent pixels),
+ * sp (scaled pixels based on preferred font size), in (inches), and
+ * mm (millimeters).
+ *
+ * @attr name net.micode.notes:pstsScrollOffset
+ */
+ public static final int PagerSlidingTabStrip_pstsScrollOffset=4;
+ /**
+ *
This symbol is the offset where the {@link net.micode.notes.R.attr#pstsShouldExpand}
+ * attribute's value can be found in the {@link #PagerSlidingTabStrip} array.
+ *
+ *
May be a boolean value, such as "true" or
+ * "false".
+ *
+ * @attr name net.micode.notes:pstsShouldExpand
+ */
+ public static final int PagerSlidingTabStrip_pstsShouldExpand=5;
+ /**
+ *
This symbol is the offset where the {@link net.micode.notes.R.attr#pstsTabBackground}
+ * attribute's value can be found in the {@link #PagerSlidingTabStrip} array.
+ *
+ *
May be a reference to another resource, in the form
+ * "@[+][package:]type/name" or a theme
+ * attribute in the form
+ * "?[package:]type/name".
+ *
+ * @attr name net.micode.notes:pstsTabBackground
+ */
+ public static final int PagerSlidingTabStrip_pstsTabBackground=6;
+ /**
+ *
This symbol is the offset where the {@link net.micode.notes.R.attr#pstsTabPaddingLeftRight}
+ * attribute's value can be found in the {@link #PagerSlidingTabStrip} array.
+ *
+ *
May be a dimension value, which is a floating point number appended with a
+ * unit such as "14.5sp".
+ * Available units are: px (pixels), dp (density-independent pixels),
+ * sp (scaled pixels based on preferred font size), in (inches), and
+ * mm (millimeters).
+ *
+ * @attr name net.micode.notes:pstsTabPaddingLeftRight
+ */
+ public static final int PagerSlidingTabStrip_pstsTabPaddingLeftRight=7;
+ /**
+ *
This symbol is the offset where the {@link net.micode.notes.R.attr#pstsTextAllCaps}
+ * attribute's value can be found in the {@link #PagerSlidingTabStrip} array.
+ *
+ *
May be a boolean value, such as "true" or
+ * "false".
+ *
+ * @attr name net.micode.notes:pstsTextAllCaps
+ */
+ public static final int PagerSlidingTabStrip_pstsTextAllCaps=8;
+ /**
+ *
This symbol is the offset where the {@link net.micode.notes.R.attr#pstsUnderlineColor}
+ * attribute's value can be found in the {@link #PagerSlidingTabStrip} array.
+ *
+ *
May be a color value, in the form of "#rgb",
+ * "#argb", "#rrggbb", or
+ * "#aarrggbb".
+ *
+ * @attr name net.micode.notes:pstsUnderlineColor
+ */
+ public static final int PagerSlidingTabStrip_pstsUnderlineColor=9;
+ /**
+ *
This symbol is the offset where the {@link net.micode.notes.R.attr#pstsUnderlineHeight}
+ * attribute's value can be found in the {@link #PagerSlidingTabStrip} array.
+ *
+ *
May be a dimension value, which is a floating point number appended with a
+ * unit such as "14.5sp".
+ * Available units are: px (pixels), dp (density-independent pixels),
+ * sp (scaled pixels based on preferred font size), in (inches), and
+ * mm (millimeters).
+ *
+ * @attr name net.micode.notes:pstsUnderlineHeight
+ */
+ public static final int PagerSlidingTabStrip_pstsUnderlineHeight=10;
+ }
+ public static final class xml {
+ public static final int preferences=0x7f0e0000;
+ public static final int searchable=0x7f0e0001;
+ public static final int widget_2x_info=0x7f0e0002;
+ public static final int widget_4x_info=0x7f0e0003;
+ }
+}
\ No newline at end of file
diff --git a/src/app/build/intermediates/blame/res/debug/multi-v2/debug.json b/src/app/build/intermediates/blame/res/debug/multi-v2/debug.json
new file mode 100644
index 0000000..137ae35
--- /dev/null
+++ b/src/app/build/intermediates/blame/res/debug/multi-v2/debug.json
@@ -0,0 +1,205 @@
+{
+ "logs": [
+ {
+ "outputFile": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\values-zh-rCN_values-zh-rCN.arsc.flat",
+ "map": [
+ {
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\values-zh-rCN\\strings.xml",
+ "from": {
+ "startLines": "122,72,71,70,69,19,20,21,113,114,125,121,120,26,78,79,77,76,75,91,90,89,81,61,29,30,82,73,115,126,68,64,39,45,50,40,60,59,58,54,53,51,52,55,56,46,67,57,65,44,49,48,47,63,43,62,41,42,66,28,38,34,36,33,35,32,31,25,24,98,97,100,112,105,104,106,107,109,108,99,103,101,102,96,110,111,119,117,116,118,27,80,88,93,92,94,87,86,85,84,127,22,23",
+ "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
+ "startOffsets": "6699,3612,3545,3471,3420,846,889,938,6241,6287,6879,6644,6593,1227,3984,4053,3924,3858,3794,4728,4667,4603,4187,2983,1400,1454,4242,3686,6345,6929,3360,3143,1882,2169,2420,1936,2922,2868,2816,2617,2568,2472,2521,2664,2712,2213,3300,2763,3187,2125,2372,2315,2259,3087,2080,3044,1987,2029,3240,1348,1838,1659,1757,1611,1709,1563,1517,1175,1121,5110,5050,5253,6166,5569,5499,5634,5713,5898,5824,5186,5443,5311,5377,5000,6003,6087,6554,6445,6396,6491,1290,4131,4543,4843,4784,4911,4494,4448,4399,4347,6981,987,1054",
+ "endLines": "124,72,71,70,69,19,20,21,113,114,125,121,120,26,78,79,77,76,75,91,90,89,81,61,29,30,82,73,115,126,68,64,39,45,50,40,60,59,58,54,53,51,52,55,56,46,67,57,65,44,49,48,47,63,43,62,41,42,66,28,38,34,36,33,35,32,31,25,24,98,97,100,112,105,104,106,107,109,108,99,103,101,102,96,110,111,119,117,116,118,27,80,88,93,92,94,87,86,85,84,127,22,23",
+ "endColumns": "14,72,65,72,49,41,47,47,44,56,48,53,49,61,67,76,58,64,62,54,59,62,53,59,52,61,84,80,49,50,58,42,52,42,50,49,59,52,50,45,47,47,45,46,49,44,58,51,51,42,46,55,54,54,43,41,40,49,58,50,42,48,48,46,46,46,44,50,52,74,58,56,73,63,68,77,109,103,72,65,54,64,64,48,82,77,37,44,47,61,56,54,58,66,57,61,47,44,47,50,53,65,65",
+ "endOffsets": "6873,3680,3606,3539,3465,883,932,981,6281,6339,6923,6693,6638,1284,4047,4125,3978,3918,3852,4778,4722,4661,4236,3038,1448,1511,4322,3762,6390,6975,3414,3181,1930,2207,2466,1981,2977,2916,2862,2658,2611,2515,2562,2706,2757,2253,3354,2810,3234,2163,2414,2366,2309,3137,2119,3081,2023,2074,3294,1394,1876,1703,1801,1653,1751,1605,1557,1221,1169,5180,5104,5305,6235,5628,5563,5707,5818,5997,5892,5247,5493,5371,5437,5044,6081,6160,6587,6485,6439,6548,1342,4181,4597,4905,4837,4968,4537,4488,4442,4393,7030,1048,1115"
+ },
+ "to": {
+ "startLines": "6,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110",
+ "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
+ "startOffsets": "215,384,457,523,596,646,688,736,784,829,886,935,989,1039,1101,1169,1246,1305,1370,1433,1488,1548,1611,1665,1725,1778,1840,1925,2006,2056,2107,2166,2209,2262,2305,2356,2406,2466,2519,2570,2616,2664,2712,2758,2805,2855,2900,2959,3011,3063,3106,3153,3209,3264,3319,3363,3405,3446,3496,3555,3606,3649,3698,3747,3794,3841,3888,3933,3984,4037,4112,4171,4228,4302,4366,4435,4513,4623,4727,4800,4866,4921,4986,5051,5100,5183,5261,5299,5344,5392,5454,5511,5566,5625,5692,5750,5812,5860,5905,5953,6004,6058,6124",
+ "endLines": "8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110",
+ "endColumns": "14,72,65,72,49,41,47,47,44,56,48,53,49,61,67,76,58,64,62,54,59,62,53,59,52,61,84,80,49,50,58,42,52,42,50,49,59,52,50,45,47,47,45,46,49,44,58,51,51,42,46,55,54,54,43,41,40,49,58,50,42,48,48,46,46,46,44,50,52,74,58,56,73,63,68,77,109,103,72,65,54,64,64,48,82,77,37,44,47,61,56,54,58,66,57,61,47,44,47,50,53,65,65",
+ "endOffsets": "379,452,518,591,641,683,731,779,824,881,930,984,1034,1096,1164,1241,1300,1365,1428,1483,1543,1606,1660,1720,1773,1835,1920,2001,2051,2102,2161,2204,2257,2300,2351,2401,2461,2514,2565,2611,2659,2707,2753,2800,2850,2895,2954,3006,3058,3101,3148,3204,3259,3314,3358,3400,3441,3491,3550,3601,3644,3693,3742,3789,3836,3883,3928,3979,4032,4107,4166,4223,4297,4361,4430,4508,4618,4722,4795,4861,4916,4981,5046,5095,5178,5256,5294,5339,5387,5449,5506,5561,5620,5687,5745,5807,5855,5900,5948,5999,6053,6119,6185"
+ }
+ },
+ {
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\values-zh-rCN\\arrays.xml",
+ "from": {
+ "startLines": "18",
+ "startColumns": "4",
+ "startOffsets": "730",
+ "endLines": "21",
+ "endColumns": "19",
+ "endOffsets": "838"
+ },
+ "to": {
+ "startLines": "2",
+ "startColumns": "4",
+ "startOffsets": "105",
+ "endLines": "5",
+ "endColumns": "19",
+ "endOffsets": "210"
+ }
+ }
+ ]
+ },
+ {
+ "outputFile": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\values_values.arsc.flat",
+ "map": [
+ {
+ "source": "C:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e1d9da03002cb11f79e842a285800b3f\\pagerslidingtabstrip-1.0.1\\res\\values\\values.xml",
+ "from": {
+ "startLines": "6,10",
+ "startColumns": "4,4",
+ "startOffsets": "185,371",
+ "endLines": "6,22",
+ "endColumns": "58,24",
+ "endOffsets": "239,1118"
+ },
+ "to": {
+ "startLines": "12,172",
+ "startColumns": "4,4",
+ "startOffsets": "532,10645",
+ "endLines": "12,184",
+ "endColumns": "58,24",
+ "endOffsets": "586,11369"
+ }
+ },
+ {
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\values\\dimens.xml",
+ "from": {
+ "startLines": "19,20,21,22,18",
+ "startColumns": "4,4,4,4,4",
+ "startOffsets": "783,836,890,944,730",
+ "endColumns": "51,52,52,51,51",
+ "endOffsets": "830,884,938,991,777"
+ },
+ "to": {
+ "startLines": "14,15,16,17,18",
+ "startColumns": "4,4,4,4,4",
+ "startOffsets": "648,700,753,806,858",
+ "endColumns": "51,52,52,51,51",
+ "endOffsets": "695,748,801,853,905"
+ }
+ },
+ {
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\values\\strings.xml",
+ "from": {
+ "startLines": "128,72,75,74,73,19,20,21,118,119,134,127,126,26,81,82,80,79,78,94,93,92,84,39,38,64,29,30,85,41,76,120,135,71,67,42,48,53,43,63,62,61,57,56,54,55,58,59,49,70,60,68,47,52,51,50,66,46,65,44,45,69,28,133,34,36,33,35,32,31,25,24,101,100,104,116,109,108,110,111,113,112,102,103,107,105,106,99,114,115,125,123,122,124,27,83,91,96,95,97,90,89,88,87,136,22,23",
+ "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
+ "startOffsets": "8139,3973,4237,4140,4070,846,893,946,7627,7677,8601,8080,8028,1311,4697,4792,4625,4540,4456,5671,5587,5484,4970,2046,1994,3464,1518,1572,5032,2141,4321,7741,8662,3901,3652,2201,2522,2828,2260,3392,3330,3272,3046,2993,2888,2942,3097,3148,2570,3834,3209,3702,2474,2772,2683,2624,3589,2423,3543,2318,2362,3766,1462,8553,1787,1897,1739,1843,1682,1633,1255,1201,6134,6066,6378,7528,6747,6665,6822,6912,7156,7076,6219,6295,6605,6443,6524,6010,7301,7424,7986,7857,7799,7911,1396,4901,5397,5808,5738,5889,5337,5281,5218,5157,8717,999,1110",
+ "endLines": "132,72,75,74,73,19,20,21,118,119,134,127,126,26,81,82,80,79,78,94,93,92,84,39,38,64,29,30,85,41,76,120,135,71,67,42,48,53,43,63,62,61,57,56,54,55,58,59,49,70,60,68,47,52,51,50,66,46,65,44,45,69,28,133,34,36,33,35,32,31,25,24,101,100,104,116,109,108,110,111,113,112,102,103,107,105,106,99,114,115,125,123,122,124,27,83,91,96,95,97,90,89,88,87,136,22,23",
+ "endColumns": "14,95,82,95,68,45,51,51,48,62,59,57,50,83,93,107,70,83,82,65,82,101,60,61,50,77,52,59,104,58,101,54,53,70,48,57,46,58,56,70,60,56,49,51,52,49,49,59,52,65,61,62,46,54,87,57,61,49,44,42,59,66,54,46,54,52,46,52,55,47,54,52,83,66,63,95,73,80,88,162,143,78,74,81,58,79,79,54,121,102,40,52,56,73,64,67,85,79,68,93,58,54,61,59,65,109,89",
+ "endOffsets": "8547,4064,4315,4231,4134,887,940,993,7671,7735,8656,8133,8074,1390,4786,4895,4691,4619,4534,5732,5665,5581,5026,2103,2040,3537,1566,1627,5132,2195,4418,7791,8711,3967,3696,2254,2564,2882,2312,3458,3386,3324,3091,3040,2936,2987,3142,3203,2618,3895,3266,3760,2516,2822,2766,2677,3646,2468,3583,2356,2417,3828,1512,8595,1837,1945,1781,1891,1733,1676,1305,1249,6213,6128,6437,7619,6816,6741,6906,7070,7295,7150,6289,6372,6659,6518,6599,6060,7418,7522,8022,7905,7851,7980,1456,4964,5478,5883,5802,5978,5391,5331,5275,5212,8778,1104,1195"
+ },
+ "to": {
+ "startLines": "19,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129",
+ "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
+ "startOffsets": "910,1303,1399,1482,1578,1647,1693,1745,1797,1846,1909,1969,2027,2078,2162,2256,2364,2435,2519,2602,2668,2751,2853,2914,2976,3027,3105,3158,3218,3323,3382,3484,3539,3593,3664,3713,3771,3818,3877,3934,4005,4066,4123,4173,4225,4278,4328,4378,4438,4491,4557,4619,4682,4729,4784,4872,4930,4992,5042,5087,5130,5190,5257,5312,5359,5414,5467,5514,5567,5623,5671,5726,5779,5863,5930,5994,6090,6164,6245,6334,6497,6641,6720,6795,6877,6936,7016,7096,7151,7273,7376,7417,7470,7527,7601,7666,7734,7820,7900,7969,8063,8122,8177,8239,8299,8365,8475",
+ "endLines": "23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129",
+ "endColumns": "14,95,82,95,68,45,51,51,48,62,59,57,50,83,93,107,70,83,82,65,82,101,60,61,50,77,52,59,104,58,101,54,53,70,48,57,46,58,56,70,60,56,49,51,52,49,49,59,52,65,61,62,46,54,87,57,61,49,44,42,59,66,54,46,54,52,46,52,55,47,54,52,83,66,63,95,73,80,88,162,143,78,74,81,58,79,79,54,121,102,40,52,56,73,64,67,85,79,68,93,58,54,61,59,65,109,89",
+ "endOffsets": "1298,1394,1477,1573,1642,1688,1740,1792,1841,1904,1964,2022,2073,2157,2251,2359,2430,2514,2597,2663,2746,2848,2909,2971,3022,3100,3153,3213,3318,3377,3479,3534,3588,3659,3708,3766,3813,3872,3929,4000,4061,4118,4168,4220,4273,4323,4373,4433,4486,4552,4614,4677,4724,4779,4867,4925,4987,5037,5082,5125,5185,5252,5307,5354,5409,5462,5509,5562,5618,5666,5721,5774,5858,5925,5989,6085,6159,6240,6329,6492,6636,6715,6790,6872,6931,7011,7091,7146,7268,7371,7412,7465,7522,7596,7661,7729,7815,7895,7964,8058,8117,8172,8234,8294,8360,8470,8560"
+ }
+ },
+ {
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\values\\styles.xml",
+ "from": {
+ "startLines": "50,55,64,60,22,26,30,35,40,18,45",
+ "startColumns": "4,4,4,4,4,4,4,4,4,4,4",
+ "startOffsets": "2112,2322,2704,2539,917,1104,1293,1484,1693,730,1905",
+ "endLines": "53,58,66,62,25,29,33,38,43,21,48",
+ "endColumns": "12,12,12,12,12,12,12,12,12,12,12",
+ "endOffsets": "2314,2531,2860,2696,1098,1287,1476,1685,1897,911,2104"
+ },
+ "to": {
+ "startLines": "130,134,138,141,144,148,152,156,160,164,168",
+ "startColumns": "4,4,4,4,4,4,4,4,4,4,4",
+ "startOffsets": "8565,8769,8980,9139,9299,9482,9667,9852,10055,10261,10444",
+ "endLines": "133,137,140,143,147,151,155,159,163,167,171",
+ "endColumns": "12,12,12,12,12,12,12,12,12,12,12",
+ "endOffsets": "8764,8975,9134,9294,9477,9662,9847,10050,10256,10439,10640"
+ }
+ },
+ {
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\values\\arrays.xml",
+ "from": {
+ "startLines": "19,26",
+ "startColumns": "4,4",
+ "startOffsets": "758,1073",
+ "endLines": "24,29",
+ "endColumns": "19,19",
+ "endOffsets": "1065,1191"
+ },
+ "to": {
+ "startLines": "2,8",
+ "startColumns": "4,4",
+ "startOffsets": "105,412",
+ "endLines": "7,11",
+ "endColumns": "19,19",
+ "endOffsets": "407,527"
+ }
+ },
+ {
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\values\\colors.xml",
+ "from": {
+ "startLines": "18",
+ "startColumns": "4",
+ "startOffsets": "730",
+ "endColumns": "56",
+ "endOffsets": "782"
+ },
+ "to": {
+ "startLines": "13",
+ "startColumns": "4",
+ "startOffsets": "591",
+ "endColumns": "56",
+ "endOffsets": "643"
+ }
+ }
+ ]
+ },
+ {
+ "outputFile": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\values-zh-rTW_values-zh-rTW.arsc.flat",
+ "map": [
+ {
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\values-zh-rTW\\arrays.xml",
+ "from": {
+ "startLines": "18",
+ "startColumns": "4",
+ "startOffsets": "730",
+ "endLines": "21",
+ "endColumns": "19",
+ "endOffsets": "838"
+ },
+ "to": {
+ "startLines": "2",
+ "startColumns": "4",
+ "startOffsets": "105",
+ "endLines": "5",
+ "endColumns": "19",
+ "endOffsets": "210"
+ }
+ },
+ {
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\values-zh-rTW\\strings.xml",
+ "from": {
+ "startLines": "122,72,71,70,69,19,20,21,112,113,126,121,120,26,76,77,75,74,73,89,88,87,79,61,29,30,80,37,114,127,68,64,39,45,50,40,60,59,58,54,53,51,52,55,56,46,67,57,65,44,49,48,47,63,43,62,41,42,66,28,125,34,36,33,35,32,31,25,24,96,95,98,110,103,102,104,105,107,106,97,101,99,100,94,108,109,119,117,116,118,27,78,86,91,90,92,85,84,83,82,128,22,23",
+ "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
+ "startOffsets": "6631,3649,3582,3508,3457,846,889,938,6171,6217,6855,6576,6525,1227,3913,3982,3853,3786,3722,4656,4595,4531,4116,3020,1400,1454,4171,1807,6275,6905,3397,3180,1919,2206,2457,1973,2959,2905,2853,2654,2605,2509,2558,2701,2749,2250,3337,2800,3224,2162,2409,2352,2296,3124,2117,3081,2024,2066,3277,1348,6811,1659,1757,1611,1709,1563,1517,1175,1121,5038,4978,5181,6094,5497,5427,5562,5641,5826,5752,5114,5371,5239,5305,4928,5931,6015,6486,6377,6328,6423,1290,4060,4471,4771,4712,4839,4422,4376,4327,4275,6957,987,1054",
+ "endLines": "124,72,71,70,69,19,20,21,112,113,126,121,120,26,76,77,75,74,73,89,88,87,79,61,29,30,80,37,114,127,68,64,39,45,50,40,60,59,58,54,53,51,52,55,56,46,67,57,65,44,49,48,47,63,43,62,41,42,66,28,125,34,36,33,35,32,31,25,24,96,95,98,110,103,102,104,105,107,106,97,101,99,100,94,108,109,119,117,116,118,27,78,86,91,90,92,85,84,83,82,128,22,23",
+ "endColumns": "14,71,65,72,49,41,47,47,44,56,48,53,49,61,67,76,58,65,62,54,59,62,53,59,52,61,83,79,49,50,58,42,52,42,50,49,59,52,50,45,47,47,45,46,49,44,58,51,51,42,46,55,54,54,43,41,40,49,58,50,42,48,48,46,46,46,44,50,52,74,58,56,73,63,68,77,109,103,72,65,54,64,64,48,82,77,37,44,47,61,56,54,58,66,57,61,47,44,47,50,53,65,65",
+ "endOffsets": "6805,3716,3643,3576,3502,883,932,981,6211,6269,6899,6625,6570,1284,3976,4054,3907,3847,3780,4706,4650,4589,4165,3075,1448,1511,4250,1882,6320,6951,3451,3218,1967,2244,2503,2018,3014,2953,2899,2695,2648,2552,2599,2743,2794,2290,3391,2847,3271,2200,2451,2403,2346,3174,2156,3118,2060,2111,3331,1394,6849,1703,1801,1653,1751,1605,1557,1221,1169,5108,5032,5233,6163,5556,5491,5635,5746,5925,5820,5175,5421,5299,5365,4972,6009,6088,6519,6417,6371,6480,1342,4110,4525,4833,4765,4896,4465,4416,4370,4321,7006,1048,1115"
+ },
+ "to": {
+ "startLines": "6,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110",
+ "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
+ "startOffsets": "215,384,456,522,595,645,687,735,783,828,885,934,988,1038,1100,1168,1245,1304,1370,1433,1488,1548,1611,1665,1725,1778,1840,1924,2004,2054,2105,2164,2207,2260,2303,2354,2404,2464,2517,2568,2614,2662,2710,2756,2803,2853,2898,2957,3009,3061,3104,3151,3207,3262,3317,3361,3403,3444,3494,3553,3604,3647,3696,3745,3792,3839,3886,3931,3982,4035,4110,4169,4226,4300,4364,4433,4511,4621,4725,4798,4864,4919,4984,5049,5098,5181,5259,5297,5342,5390,5452,5509,5564,5623,5690,5748,5810,5858,5903,5951,6002,6056,6122",
+ "endLines": "8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110",
+ "endColumns": "14,71,65,72,49,41,47,47,44,56,48,53,49,61,67,76,58,65,62,54,59,62,53,59,52,61,83,79,49,50,58,42,52,42,50,49,59,52,50,45,47,47,45,46,49,44,58,51,51,42,46,55,54,54,43,41,40,49,58,50,42,48,48,46,46,46,44,50,52,74,58,56,73,63,68,77,109,103,72,65,54,64,64,48,82,77,37,44,47,61,56,54,58,66,57,61,47,44,47,50,53,65,65",
+ "endOffsets": "379,451,517,590,640,682,730,778,823,880,929,983,1033,1095,1163,1240,1299,1365,1428,1483,1543,1606,1660,1720,1773,1835,1919,1999,2049,2100,2159,2202,2255,2298,2349,2399,2459,2512,2563,2609,2657,2705,2751,2798,2848,2893,2952,3004,3056,3099,3146,3202,3257,3312,3356,3398,3439,3489,3548,3599,3642,3691,3740,3787,3834,3881,3926,3977,4030,4105,4164,4221,4295,4359,4428,4506,4616,4720,4793,4859,4914,4979,5044,5093,5176,5254,5292,5337,5385,5447,5504,5559,5618,5685,5743,5805,5853,5898,5946,5997,6051,6117,6183"
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/app/build/intermediates/blame/res/debug/multi-v2/values-zh-rCN.json b/src/app/build/intermediates/blame/res/debug/multi-v2/values-zh-rCN.json
new file mode 100644
index 0000000..9d4da33
--- /dev/null
+++ b/src/app/build/intermediates/blame/res/debug/multi-v2/values-zh-rCN.json
@@ -0,0 +1,47 @@
+{
+ "logs": [
+ {
+ "outputFile": "C:\\Project\\minote\\src\\app\\build\\intermediates\\incremental\\mergeDebugResources\\merged.dir\\values-zh-rCN\\values-zh-rCN.xml",
+ "map": [
+ {
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\values-zh-rCN\\strings.xml",
+ "from": {
+ "startLines": "122,72,71,70,69,19,20,21,113,114,125,121,120,26,78,79,77,76,75,91,90,89,81,61,29,30,82,73,115,126,68,64,39,45,50,40,60,59,58,54,53,51,52,55,56,46,67,57,65,44,49,48,47,63,43,62,41,42,66,28,38,34,36,33,35,32,31,25,24,98,97,100,112,105,104,106,107,109,108,99,103,101,102,96,110,111,119,117,116,118,27,80,88,93,92,94,87,86,85,84,127,22,23",
+ "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
+ "startOffsets": "6699,3612,3545,3471,3420,846,889,938,6241,6287,6879,6644,6593,1227,3984,4053,3924,3858,3794,4728,4667,4603,4187,2983,1400,1454,4242,3686,6345,6929,3360,3143,1882,2169,2420,1936,2922,2868,2816,2617,2568,2472,2521,2664,2712,2213,3300,2763,3187,2125,2372,2315,2259,3087,2080,3044,1987,2029,3240,1348,1838,1659,1757,1611,1709,1563,1517,1175,1121,5110,5050,5253,6166,5569,5499,5634,5713,5898,5824,5186,5443,5311,5377,5000,6003,6087,6554,6445,6396,6491,1290,4131,4543,4843,4784,4911,4494,4448,4399,4347,6981,987,1054",
+ "endLines": "124,72,71,70,69,19,20,21,113,114,125,121,120,26,78,79,77,76,75,91,90,89,81,61,29,30,82,73,115,126,68,64,39,45,50,40,60,59,58,54,53,51,52,55,56,46,67,57,65,44,49,48,47,63,43,62,41,42,66,28,38,34,36,33,35,32,31,25,24,98,97,100,112,105,104,106,107,109,108,99,103,101,102,96,110,111,119,117,116,118,27,80,88,93,92,94,87,86,85,84,127,22,23",
+ "endColumns": "14,72,65,72,49,41,47,47,44,56,48,53,49,61,67,76,58,64,62,54,59,62,53,59,52,61,84,80,49,50,58,42,52,42,50,49,59,52,50,45,47,47,45,46,49,44,58,51,51,42,46,55,54,54,43,41,40,49,58,50,42,48,48,46,46,46,44,50,52,74,58,56,73,63,68,77,109,103,72,65,54,64,64,48,82,77,37,44,47,61,56,54,58,66,57,61,47,44,47,50,53,65,65",
+ "endOffsets": "6873,3680,3606,3539,3465,883,932,981,6281,6339,6923,6693,6638,1284,4047,4125,3978,3918,3852,4778,4722,4661,4236,3038,1448,1511,4322,3762,6390,6975,3414,3181,1930,2207,2466,1981,2977,2916,2862,2658,2611,2515,2562,2706,2757,2253,3354,2810,3234,2163,2414,2366,2309,3137,2119,3081,2023,2074,3294,1394,1876,1703,1801,1653,1751,1605,1557,1221,1169,5180,5104,5305,6235,5628,5563,5707,5818,5997,5892,5247,5493,5371,5437,5044,6081,6160,6587,6485,6439,6548,1342,4181,4597,4905,4837,4968,4537,4488,4442,4393,7030,1048,1115"
+ },
+ "to": {
+ "startLines": "6,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110",
+ "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
+ "startOffsets": "215,384,457,523,596,646,688,736,784,829,886,935,989,1039,1101,1169,1246,1305,1370,1433,1488,1548,1611,1665,1725,1778,1840,1925,2006,2056,2107,2166,2209,2262,2305,2356,2406,2466,2519,2570,2616,2664,2712,2758,2805,2855,2900,2959,3011,3063,3106,3153,3209,3264,3319,3363,3405,3446,3496,3555,3606,3649,3698,3747,3794,3841,3888,3933,3984,4037,4112,4171,4228,4302,4366,4435,4513,4623,4727,4800,4866,4921,4986,5051,5100,5183,5261,5299,5344,5392,5454,5511,5566,5625,5692,5750,5812,5860,5905,5953,6004,6058,6124",
+ "endLines": "8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110",
+ "endColumns": "14,72,65,72,49,41,47,47,44,56,48,53,49,61,67,76,58,64,62,54,59,62,53,59,52,61,84,80,49,50,58,42,52,42,50,49,59,52,50,45,47,47,45,46,49,44,58,51,51,42,46,55,54,54,43,41,40,49,58,50,42,48,48,46,46,46,44,50,52,74,58,56,73,63,68,77,109,103,72,65,54,64,64,48,82,77,37,44,47,61,56,54,58,66,57,61,47,44,47,50,53,65,65",
+ "endOffsets": "379,452,518,591,641,683,731,779,824,881,930,984,1034,1096,1164,1241,1300,1365,1428,1483,1543,1606,1660,1720,1773,1835,1920,2001,2051,2102,2161,2204,2257,2300,2351,2401,2461,2514,2565,2611,2659,2707,2753,2800,2850,2895,2954,3006,3058,3101,3148,3204,3259,3314,3358,3400,3441,3491,3550,3601,3644,3693,3742,3789,3836,3883,3928,3979,4032,4107,4166,4223,4297,4361,4430,4508,4618,4722,4795,4861,4916,4981,5046,5095,5178,5256,5294,5339,5387,5449,5506,5561,5620,5687,5745,5807,5855,5900,5948,5999,6053,6119,6185"
+ }
+ },
+ {
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\values-zh-rCN\\arrays.xml",
+ "from": {
+ "startLines": "18",
+ "startColumns": "4",
+ "startOffsets": "730",
+ "endLines": "21",
+ "endColumns": "19",
+ "endOffsets": "838"
+ },
+ "to": {
+ "startLines": "2",
+ "startColumns": "4",
+ "startOffsets": "105",
+ "endLines": "5",
+ "endColumns": "19",
+ "endOffsets": "210"
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/app/build/intermediates/blame/res/debug/multi-v2/values-zh-rTW.json b/src/app/build/intermediates/blame/res/debug/multi-v2/values-zh-rTW.json
new file mode 100644
index 0000000..eba3d51
--- /dev/null
+++ b/src/app/build/intermediates/blame/res/debug/multi-v2/values-zh-rTW.json
@@ -0,0 +1,47 @@
+{
+ "logs": [
+ {
+ "outputFile": "C:\\Project\\minote\\src\\app\\build\\intermediates\\incremental\\mergeDebugResources\\merged.dir\\values-zh-rTW\\values-zh-rTW.xml",
+ "map": [
+ {
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\values-zh-rTW\\arrays.xml",
+ "from": {
+ "startLines": "18",
+ "startColumns": "4",
+ "startOffsets": "730",
+ "endLines": "21",
+ "endColumns": "19",
+ "endOffsets": "838"
+ },
+ "to": {
+ "startLines": "2",
+ "startColumns": "4",
+ "startOffsets": "105",
+ "endLines": "5",
+ "endColumns": "19",
+ "endOffsets": "210"
+ }
+ },
+ {
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\values-zh-rTW\\strings.xml",
+ "from": {
+ "startLines": "122,72,71,70,69,19,20,21,112,113,126,121,120,26,76,77,75,74,73,89,88,87,79,61,29,30,80,37,114,127,68,64,39,45,50,40,60,59,58,54,53,51,52,55,56,46,67,57,65,44,49,48,47,63,43,62,41,42,66,28,125,34,36,33,35,32,31,25,24,96,95,98,110,103,102,104,105,107,106,97,101,99,100,94,108,109,119,117,116,118,27,78,86,91,90,92,85,84,83,82,128,22,23",
+ "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
+ "startOffsets": "6631,3649,3582,3508,3457,846,889,938,6171,6217,6855,6576,6525,1227,3913,3982,3853,3786,3722,4656,4595,4531,4116,3020,1400,1454,4171,1807,6275,6905,3397,3180,1919,2206,2457,1973,2959,2905,2853,2654,2605,2509,2558,2701,2749,2250,3337,2800,3224,2162,2409,2352,2296,3124,2117,3081,2024,2066,3277,1348,6811,1659,1757,1611,1709,1563,1517,1175,1121,5038,4978,5181,6094,5497,5427,5562,5641,5826,5752,5114,5371,5239,5305,4928,5931,6015,6486,6377,6328,6423,1290,4060,4471,4771,4712,4839,4422,4376,4327,4275,6957,987,1054",
+ "endLines": "124,72,71,70,69,19,20,21,112,113,126,121,120,26,76,77,75,74,73,89,88,87,79,61,29,30,80,37,114,127,68,64,39,45,50,40,60,59,58,54,53,51,52,55,56,46,67,57,65,44,49,48,47,63,43,62,41,42,66,28,125,34,36,33,35,32,31,25,24,96,95,98,110,103,102,104,105,107,106,97,101,99,100,94,108,109,119,117,116,118,27,78,86,91,90,92,85,84,83,82,128,22,23",
+ "endColumns": "14,71,65,72,49,41,47,47,44,56,48,53,49,61,67,76,58,65,62,54,59,62,53,59,52,61,83,79,49,50,58,42,52,42,50,49,59,52,50,45,47,47,45,46,49,44,58,51,51,42,46,55,54,54,43,41,40,49,58,50,42,48,48,46,46,46,44,50,52,74,58,56,73,63,68,77,109,103,72,65,54,64,64,48,82,77,37,44,47,61,56,54,58,66,57,61,47,44,47,50,53,65,65",
+ "endOffsets": "6805,3716,3643,3576,3502,883,932,981,6211,6269,6899,6625,6570,1284,3976,4054,3907,3847,3780,4706,4650,4589,4165,3075,1448,1511,4250,1882,6320,6951,3451,3218,1967,2244,2503,2018,3014,2953,2899,2695,2648,2552,2599,2743,2794,2290,3391,2847,3271,2200,2451,2403,2346,3174,2156,3118,2060,2111,3331,1394,6849,1703,1801,1653,1751,1605,1557,1221,1169,5108,5032,5233,6163,5556,5491,5635,5746,5925,5820,5175,5421,5299,5365,4972,6009,6088,6519,6417,6371,6480,1342,4110,4525,4833,4765,4896,4465,4416,4370,4321,7006,1048,1115"
+ },
+ "to": {
+ "startLines": "6,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110",
+ "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
+ "startOffsets": "215,384,456,522,595,645,687,735,783,828,885,934,988,1038,1100,1168,1245,1304,1370,1433,1488,1548,1611,1665,1725,1778,1840,1924,2004,2054,2105,2164,2207,2260,2303,2354,2404,2464,2517,2568,2614,2662,2710,2756,2803,2853,2898,2957,3009,3061,3104,3151,3207,3262,3317,3361,3403,3444,3494,3553,3604,3647,3696,3745,3792,3839,3886,3931,3982,4035,4110,4169,4226,4300,4364,4433,4511,4621,4725,4798,4864,4919,4984,5049,5098,5181,5259,5297,5342,5390,5452,5509,5564,5623,5690,5748,5810,5858,5903,5951,6002,6056,6122",
+ "endLines": "8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110",
+ "endColumns": "14,71,65,72,49,41,47,47,44,56,48,53,49,61,67,76,58,65,62,54,59,62,53,59,52,61,83,79,49,50,58,42,52,42,50,49,59,52,50,45,47,47,45,46,49,44,58,51,51,42,46,55,54,54,43,41,40,49,58,50,42,48,48,46,46,46,44,50,52,74,58,56,73,63,68,77,109,103,72,65,54,64,64,48,82,77,37,44,47,61,56,54,58,66,57,61,47,44,47,50,53,65,65",
+ "endOffsets": "379,451,517,590,640,682,730,778,823,880,929,983,1033,1095,1163,1240,1299,1365,1428,1483,1543,1606,1660,1720,1773,1835,1919,1999,2049,2100,2159,2202,2255,2298,2349,2399,2459,2512,2563,2609,2657,2705,2751,2798,2848,2893,2952,3004,3056,3099,3146,3202,3257,3312,3356,3398,3439,3489,3548,3599,3642,3691,3740,3787,3834,3881,3926,3977,4030,4105,4164,4221,4295,4359,4428,4506,4616,4720,4793,4859,4914,4979,5044,5093,5176,5254,5292,5337,5385,5447,5504,5559,5618,5685,5743,5805,5853,5898,5946,5997,6051,6117,6183"
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/app/build/intermediates/blame/res/debug/multi-v2/values.json b/src/app/build/intermediates/blame/res/debug/multi-v2/values.json
new file mode 100644
index 0000000..b4e27f9
--- /dev/null
+++ b/src/app/build/intermediates/blame/res/debug/multi-v2/values.json
@@ -0,0 +1,119 @@
+{
+ "logs": [
+ {
+ "outputFile": "C:\\Project\\minote\\src\\app\\build\\intermediates\\incremental\\mergeDebugResources\\merged.dir\\values\\values.xml",
+ "map": [
+ {
+ "source": "C:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e1d9da03002cb11f79e842a285800b3f\\pagerslidingtabstrip-1.0.1\\res\\values\\values.xml",
+ "from": {
+ "startLines": "6,10",
+ "startColumns": "4,4",
+ "startOffsets": "185,371",
+ "endLines": "6,22",
+ "endColumns": "58,24",
+ "endOffsets": "239,1118"
+ },
+ "to": {
+ "startLines": "12,172",
+ "startColumns": "4,4",
+ "startOffsets": "532,10645",
+ "endLines": "12,184",
+ "endColumns": "58,24",
+ "endOffsets": "586,11369"
+ }
+ },
+ {
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\values\\dimens.xml",
+ "from": {
+ "startLines": "19,20,21,22,18",
+ "startColumns": "4,4,4,4,4",
+ "startOffsets": "783,836,890,944,730",
+ "endColumns": "51,52,52,51,51",
+ "endOffsets": "830,884,938,991,777"
+ },
+ "to": {
+ "startLines": "14,15,16,17,18",
+ "startColumns": "4,4,4,4,4",
+ "startOffsets": "648,700,753,806,858",
+ "endColumns": "51,52,52,51,51",
+ "endOffsets": "695,748,801,853,905"
+ }
+ },
+ {
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\values\\strings.xml",
+ "from": {
+ "startLines": "128,72,75,74,73,19,20,21,118,119,134,127,126,26,81,82,80,79,78,94,93,92,84,39,38,64,29,30,85,41,76,120,135,71,67,42,48,53,43,63,62,61,57,56,54,55,58,59,49,70,60,68,47,52,51,50,66,46,65,44,45,69,28,133,34,36,33,35,32,31,25,24,101,100,104,116,109,108,110,111,113,112,102,103,107,105,106,99,114,115,125,123,122,124,27,83,91,96,95,97,90,89,88,87,136,22,23",
+ "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
+ "startOffsets": "8139,3973,4237,4140,4070,846,893,946,7627,7677,8601,8080,8028,1311,4697,4792,4625,4540,4456,5671,5587,5484,4970,2046,1994,3464,1518,1572,5032,2141,4321,7741,8662,3901,3652,2201,2522,2828,2260,3392,3330,3272,3046,2993,2888,2942,3097,3148,2570,3834,3209,3702,2474,2772,2683,2624,3589,2423,3543,2318,2362,3766,1462,8553,1787,1897,1739,1843,1682,1633,1255,1201,6134,6066,6378,7528,6747,6665,6822,6912,7156,7076,6219,6295,6605,6443,6524,6010,7301,7424,7986,7857,7799,7911,1396,4901,5397,5808,5738,5889,5337,5281,5218,5157,8717,999,1110",
+ "endLines": "132,72,75,74,73,19,20,21,118,119,134,127,126,26,81,82,80,79,78,94,93,92,84,39,38,64,29,30,85,41,76,120,135,71,67,42,48,53,43,63,62,61,57,56,54,55,58,59,49,70,60,68,47,52,51,50,66,46,65,44,45,69,28,133,34,36,33,35,32,31,25,24,101,100,104,116,109,108,110,111,113,112,102,103,107,105,106,99,114,115,125,123,122,124,27,83,91,96,95,97,90,89,88,87,136,22,23",
+ "endColumns": "14,95,82,95,68,45,51,51,48,62,59,57,50,83,93,107,70,83,82,65,82,101,60,61,50,77,52,59,104,58,101,54,53,70,48,57,46,58,56,70,60,56,49,51,52,49,49,59,52,65,61,62,46,54,87,57,61,49,44,42,59,66,54,46,54,52,46,52,55,47,54,52,83,66,63,95,73,80,88,162,143,78,74,81,58,79,79,54,121,102,40,52,56,73,64,67,85,79,68,93,58,54,61,59,65,109,89",
+ "endOffsets": "8547,4064,4315,4231,4134,887,940,993,7671,7735,8656,8133,8074,1390,4786,4895,4691,4619,4534,5732,5665,5581,5026,2103,2040,3537,1566,1627,5132,2195,4418,7791,8711,3967,3696,2254,2564,2882,2312,3458,3386,3324,3091,3040,2936,2987,3142,3203,2618,3895,3266,3760,2516,2822,2766,2677,3646,2468,3583,2356,2417,3828,1512,8595,1837,1945,1781,1891,1733,1676,1305,1249,6213,6128,6437,7619,6816,6741,6906,7070,7295,7150,6289,6372,6659,6518,6599,6060,7418,7522,8022,7905,7851,7980,1456,4964,5478,5883,5802,5978,5391,5331,5275,5212,8778,1104,1195"
+ },
+ "to": {
+ "startLines": "19,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129",
+ "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
+ "startOffsets": "910,1303,1399,1482,1578,1647,1693,1745,1797,1846,1909,1969,2027,2078,2162,2256,2364,2435,2519,2602,2668,2751,2853,2914,2976,3027,3105,3158,3218,3323,3382,3484,3539,3593,3664,3713,3771,3818,3877,3934,4005,4066,4123,4173,4225,4278,4328,4378,4438,4491,4557,4619,4682,4729,4784,4872,4930,4992,5042,5087,5130,5190,5257,5312,5359,5414,5467,5514,5567,5623,5671,5726,5779,5863,5930,5994,6090,6164,6245,6334,6497,6641,6720,6795,6877,6936,7016,7096,7151,7273,7376,7417,7470,7527,7601,7666,7734,7820,7900,7969,8063,8122,8177,8239,8299,8365,8475",
+ "endLines": "23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129",
+ "endColumns": "14,95,82,95,68,45,51,51,48,62,59,57,50,83,93,107,70,83,82,65,82,101,60,61,50,77,52,59,104,58,101,54,53,70,48,57,46,58,56,70,60,56,49,51,52,49,49,59,52,65,61,62,46,54,87,57,61,49,44,42,59,66,54,46,54,52,46,52,55,47,54,52,83,66,63,95,73,80,88,162,143,78,74,81,58,79,79,54,121,102,40,52,56,73,64,67,85,79,68,93,58,54,61,59,65,109,89",
+ "endOffsets": "1298,1394,1477,1573,1642,1688,1740,1792,1841,1904,1964,2022,2073,2157,2251,2359,2430,2514,2597,2663,2746,2848,2909,2971,3022,3100,3153,3213,3318,3377,3479,3534,3588,3659,3708,3766,3813,3872,3929,4000,4061,4118,4168,4220,4273,4323,4373,4433,4486,4552,4614,4677,4724,4779,4867,4925,4987,5037,5082,5125,5185,5252,5307,5354,5409,5462,5509,5562,5618,5666,5721,5774,5858,5925,5989,6085,6159,6240,6329,6492,6636,6715,6790,6872,6931,7011,7091,7146,7268,7371,7412,7465,7522,7596,7661,7729,7815,7895,7964,8058,8117,8172,8234,8294,8360,8470,8560"
+ }
+ },
+ {
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\values\\styles.xml",
+ "from": {
+ "startLines": "50,55,64,60,22,26,30,35,40,18,45",
+ "startColumns": "4,4,4,4,4,4,4,4,4,4,4",
+ "startOffsets": "2112,2322,2704,2539,917,1104,1293,1484,1693,730,1905",
+ "endLines": "53,58,66,62,25,29,33,38,43,21,48",
+ "endColumns": "12,12,12,12,12,12,12,12,12,12,12",
+ "endOffsets": "2314,2531,2860,2696,1098,1287,1476,1685,1897,911,2104"
+ },
+ "to": {
+ "startLines": "130,134,138,141,144,148,152,156,160,164,168",
+ "startColumns": "4,4,4,4,4,4,4,4,4,4,4",
+ "startOffsets": "8565,8769,8980,9139,9299,9482,9667,9852,10055,10261,10444",
+ "endLines": "133,137,140,143,147,151,155,159,163,167,171",
+ "endColumns": "12,12,12,12,12,12,12,12,12,12,12",
+ "endOffsets": "8764,8975,9134,9294,9477,9662,9847,10050,10256,10439,10640"
+ }
+ },
+ {
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\values\\arrays.xml",
+ "from": {
+ "startLines": "19,26",
+ "startColumns": "4,4",
+ "startOffsets": "758,1073",
+ "endLines": "24,29",
+ "endColumns": "19,19",
+ "endOffsets": "1065,1191"
+ },
+ "to": {
+ "startLines": "2,8",
+ "startColumns": "4,4",
+ "startOffsets": "105,412",
+ "endLines": "7,11",
+ "endColumns": "19,19",
+ "endOffsets": "407,527"
+ }
+ },
+ {
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\values\\colors.xml",
+ "from": {
+ "startLines": "18",
+ "startColumns": "4",
+ "startOffsets": "730",
+ "endColumns": "56",
+ "endOffsets": "782"
+ },
+ "to": {
+ "startLines": "13",
+ "startColumns": "4",
+ "startOffsets": "591",
+ "endColumns": "56",
+ "endOffsets": "643"
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/app/build/intermediates/blame/res/debug/single/debug.json b/src/app/build/intermediates/blame/res/debug/single/debug.json
new file mode 100644
index 0000000..c507813
--- /dev/null
+++ b/src/app/build/intermediates/blame/res/debug/single/debug.json
@@ -0,0 +1,414 @@
+[
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_background_tab.xml.flat",
+ "source": "C:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e1d9da03002cb11f79e842a285800b3f\\pagerslidingtabstrip-1.0.1\\res\\drawable\\background_tab.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_menu_delete.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\menu_delete.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_call_record.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\call_record.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\xml_preferences.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\xml\\preferences.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_datetime_picker.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\datetime_picker.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\xml_searchable.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\xml\\searchable.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_selected.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\selected.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\color_secondary_text_dark.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\color\\secondary_text_dark.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_new_todo.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\new_todo.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_font_super.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\font_super.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\menu_call_note_edit.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\menu\\call_note_edit.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_font_normal.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\font_normal.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_green_down.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_green_down.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\menu_call_record_folder.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\menu\\call_record_folder.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_2x_red.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_2x_red.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_4x_blue.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_4x_blue.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_account_dialog_title.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\account_dialog_title.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_title_blue.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_title_blue.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_yellow.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_yellow.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\raw_introduction.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\raw\\introduction"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_red.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_red.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_search_result.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\search_result.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_green_middle.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_green_middle.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_white_single.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_white_single.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_notification.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\notification.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_add_account_text.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\add_account_text.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_white.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_white.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_2x_white.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_2x_white.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_green_single.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_green_single.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_dropdown_icon.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\dropdown_icon.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_green.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_green.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_2x_yellow.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_2x_yellow.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_title_yellow.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_title_yellow.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_red_up.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_red_up.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_title_white.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_title_white.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_widget_2x.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\widget_2x.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_red_middle.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_red_middle.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_font_large.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\font_large.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_icon_actionbar.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\icon_actionbar.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_2x_green.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_2x_green.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\xml_widget_4x_info.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\xml\\widget_4x_info.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_bg_color_btn_mask.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\bg_color_btn_mask.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_white_board.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\white_board.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_menu_move.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\menu_move.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_title_bar_bg.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\title_bar_bg.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_red_single.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_red_single.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_footer_bg.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_footer_bg.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_red_down.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_red_down.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_note_list_footer.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\note_list_footer.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_clock.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\clock.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_2x_blue.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_2x_blue.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_4x_yellow.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_4x_yellow.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_new_folder.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\new_folder.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_bg_btn_set_color.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\bg_btn_set_color.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_widget_4x.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\widget_4x.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\color_primary_text_dark.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\color\\primary_text_dark.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_dialog_edit_todo.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\dialog_edit_todo.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\raw-zh-rCN_introduction.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\raw-zh-rCN\\introduction"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_blue_up.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_blue_up.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_note_edit.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\note_edit.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_folder.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_folder.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\menu_note_list.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\menu\\note_list.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\menu_note_list_dropdown.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\menu\\note_list_dropdown.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_title_alert.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\title_alert.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_font_small.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\font_small.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_white_middle.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_white_middle.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_dialog_edit_text.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\dialog_edit_text.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\menu_note_edit.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\menu\\note_edit.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_font_size_selector_bg.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\font_size_selector_bg.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_note_edit_list_item.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\note_edit_list_item.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_title_green.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_title_green.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_folder_list_item.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\folder_list_item.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_note_list.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\note_list.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_green_up.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_green_up.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_4x_red.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_4x_red.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_todo_list_item.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\todo_list_item.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_blue_down.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_blue_down.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_background.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_background.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_4x_green.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_4x_green.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_icon_app.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\icon_app.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_blue.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_blue.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_title_red.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_title_red.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_note_item.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\note_item.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\menu_note_list_options.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\menu\\note_list_options.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\xml_widget_2x_info.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\xml\\widget_2x_info.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_delete.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\delete.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_blue_single.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_blue_single.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_new_note_normal.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\new_note_normal.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_yellow_single.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_yellow_single.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_note_list_dropdown_menu.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\note_list_dropdown_menu.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_new_note.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable\\new_note.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_yellow_up.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_yellow_up.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_yellow_middle.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_yellow_middle.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_yellow_down.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_yellow_down.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_4x_white.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_4x_white.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_white_up.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_white_up.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\menu_sub_folder.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\menu\\sub_folder.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_note_edit_color_selector_panel.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\note_edit_color_selector_panel.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_todo_list.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\todo_list.xml"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_blue_middle.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_blue_middle.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_new_note_pressed.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\new_note_pressed.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_white_down.9.png.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_white_down.9.png"
+ },
+ {
+ "merged": "C:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_settings_header.xml.flat",
+ "source": "C:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\settings_header.xml"
+ }
+]
\ No newline at end of file
diff --git a/src/app/build/intermediates/bundle_manifest/debug/processDebugManifest/bundle-manifest/AndroidManifest.xml b/src/app/build/intermediates/bundle_manifest/debug/processDebugManifest/bundle-manifest/AndroidManifest.xml
new file mode 100644
index 0000000..57f24f3
--- /dev/null
+++ b/src/app/build/intermediates/bundle_manifest/debug/processDebugManifest/bundle-manifest/AndroidManifest.xml
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/build/intermediates/bundle_manifest/debug/processDebugManifest/bundle-manifest/output.json b/src/app/build/intermediates/bundle_manifest/debug/processDebugManifest/bundle-manifest/output.json
new file mode 100644
index 0000000..9219be4
--- /dev/null
+++ b/src/app/build/intermediates/bundle_manifest/debug/processDebugManifest/bundle-manifest/output.json
@@ -0,0 +1 @@
+[{"outputType":{"type":"BUNDLE_MANIFEST"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"0.1","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{"packageId":"net.micode.notes","split":"","minSdkVersion":"17"}}]
\ No newline at end of file
diff --git a/src/app/build/intermediates/dex/debug/mergeDexDebug/out/classes.dex b/src/app/build/intermediates/dex/debug/mergeDexDebug/out/classes.dex
new file mode 100644
index 0000000..c4e4ffb
Binary files /dev/null and b/src/app/build/intermediates/dex/debug/mergeDexDebug/out/classes.dex differ
diff --git a/src/app/build/intermediates/incremental/debug-mergeJavaRes/merge-state b/src/app/build/intermediates/incremental/debug-mergeJavaRes/merge-state
new file mode 100644
index 0000000..1b7f8b8
Binary files /dev/null and b/src/app/build/intermediates/incremental/debug-mergeJavaRes/merge-state differ
diff --git a/src/app/build/intermediates/incremental/debug-mergeNativeLibs/merge-state b/src/app/build/intermediates/incremental/debug-mergeNativeLibs/merge-state
new file mode 100644
index 0000000..aed7fc9
Binary files /dev/null and b/src/app/build/intermediates/incremental/debug-mergeNativeLibs/merge-state differ
diff --git a/src/app/build/intermediates/incremental/mergeDebugResources/compile-file-map.properties b/src/app/build/intermediates/incremental/mergeDebugResources/compile-file-map.properties
new file mode 100644
index 0000000..a67c225
--- /dev/null
+++ b/src/app/build/intermediates/incremental/mergeDebugResources/compile-file-map.properties
@@ -0,0 +1,496 @@
+#Fri Nov 01 21:33:36 CST 2019
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\new_folder.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_new_folder.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\search_result.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_search_result.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_btn_rating_star_on_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_btn_rating_star_on_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\anim\\abc_slide_in_top.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\anim_abc_slide_in_top.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\anim\\abc_slide_out_bottom.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\anim_abc_slide_out_bottom.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_ic_menu_copy_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_ic_menu_copy_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\anim\\abc_popup_enter.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\anim_abc_popup_enter.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_2x_yellow.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_2x_yellow.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_btn_switch_to_on_mtrl_00012.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_btn_switch_to_on_mtrl_00012.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\layout-port\\fragment_white_board.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout-port_fragment_white_board.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_2x_red.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_2x_red.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_textfield_default_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_textfield_default_mtrl_alpha.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_footer_bg.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_footer_bg.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_ic_go_search_api_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_ic_go_search_api_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\stroke_type_rbtn_draw_checked.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_stroke_type_rbtn_draw_checked.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\menu\\call_note_edit.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\menu_call_note_edit.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_list_focused_holo.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_list_focused_holo.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_btn_rating_star_off_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_btn_rating_star_off_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_btn_switch_to_on_mtrl_00001.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_btn_switch_to_on_mtrl_00001.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_btn_radio_to_on_mtrl_000.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_btn_radio_to_on_mtrl_000.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\ic_file.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_ic_file.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_list_pressed_holo_light.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_list_pressed_holo_light.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-mdpi-v17\\abc_ic_ab_back_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-mdpi-v17_abc_ic_ab_back_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_cab_background_internal_bg.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_cab_background_internal_bg.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_list_selector_background_transition_holo_dark.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_list_selector_background_transition_holo_dark.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_ic_clear_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_ic_clear_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_scrubber_control_to_pressed_mtrl_000.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_scrubber_control_to_pressed_mtrl_000.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_ic_star_black_16dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_ic_star_black_16dp.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_blue_up.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_blue_up.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_menu_hardkey_panel_mtrl_mult.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_menu_hardkey_panel_mtrl_mult.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_ic_menu_cut_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_ic_menu_cut_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_ic_menu_share_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_ic_menu_share_mtrl_alpha.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_green_middle.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_green_middle.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_btn_switch_to_on_mtrl_00001.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_btn_switch_to_on_mtrl_00001.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\menu\\note_edit.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\menu_note_edit.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\stroke_type_rbtn_text_normal.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_stroke_type_rbtn_text_normal.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_btn_check_to_on_mtrl_000.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_btn_check_to_on_mtrl_000.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_scrubber_primary_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_scrubber_primary_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_btn_check_to_on_mtrl_000.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_btn_check_to_on_mtrl_000.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_scrubber_control_to_pressed_mtrl_005.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_scrubber_control_to_pressed_mtrl_005.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_list_pressed_holo_light.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_list_pressed_holo_light.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-hdpi-v17\\abc_ic_ab_back_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-hdpi-v17_abc_ic_ab_back_mtrl_am_alpha.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_green.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_green.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_ic_menu_selectall_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_ic_menu_selectall_mtrl_alpha.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\call_record.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_call_record.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_white_down.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_white_down.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_list_divider_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_list_divider_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_action_mode_bar.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_action_mode_bar.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\notification.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_notification.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\select_dialog_multichoice_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_select_dialog_multichoice_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_ic_star_half_black_36dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_ic_star_half_black_36dp.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_btn_check_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_btn_check_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_textfield_search_activated_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_textfield_search_activated_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\layout\\include_draw_content_layout.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_include_draw_content_layout.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_menu_hardkey_panel_mtrl_mult.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_menu_hardkey_panel_mtrl_mult.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-mdpi-v17\\abc_ic_menu_cut_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-mdpi-v17_abc_ic_menu_cut_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_btn_rating_star_on_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_btn_rating_star_on_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-hdpi-v17\\abc_ic_menu_copy_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-hdpi-v17_abc_ic_menu_copy_mtrl_am_alpha.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\font_size_selector_bg.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_font_size_selector_bg.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_red_up.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_red_up.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_ic_menu_selectall_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_ic_menu_selectall_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-hdpi-v17\\abc_spinner_mtrl_am_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-hdpi-v17_abc_spinner_mtrl_am_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-mdpi-v17\\abc_spinner_mtrl_am_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-mdpi-v17_abc_spinner_mtrl_am_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_btn_switch_to_on_mtrl_00012.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_btn_switch_to_on_mtrl_00012.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\color-v23\\abc_color_highlight_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\color-v23_abc_color_highlight_material.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\widget_2x.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_widget_2x.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_seekbar_thumb_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_seekbar_thumb_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-xhdpi-v17\\abc_ic_menu_cut_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-xhdpi-v17_abc_ic_menu_cut_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_popup_background_mtrl_mult.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_popup_background_mtrl_mult.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_btn_rating_star_off_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_btn_rating_star_off_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\support_simple_spinner_dropdown_item.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_support_simple_spinner_dropdown_item.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_red_middle.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_red_middle.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-xhdpi-v17\\abc_ic_ab_back_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-xhdpi-v17_abc_ic_ab_back_mtrl_am_alpha.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\title_alert.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_title_alert.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_yellow_up.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_yellow_up.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\color\\abc_primary_text_material_light.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\color_abc_primary_text_material_light.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\ic_eraser.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_ic_eraser.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\color\\abc_primary_text_disable_only_material_light.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\color_abc_primary_text_disable_only_material_light.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-xxxhdpi-v17\\abc_ic_menu_copy_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-xxxhdpi-v17_abc_ic_menu_copy_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_edit_text_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_edit_text_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_btn_radio_to_on_mtrl_015.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_btn_radio_to_on_mtrl_015.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_btn_check_to_on_mtrl_015.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_btn_check_to_on_mtrl_015.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_ic_menu_copy_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_ic_menu_copy_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_textfield_search_default_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_textfield_search_default_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\default_check.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_default_check.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_search_dropdown_item_icons_2line.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_search_dropdown_item_icons_2line.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_ic_ab_back_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_ic_ab_back_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_popup_background_mtrl_mult.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_popup_background_mtrl_mult.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_4x_red.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_4x_red.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_ic_star_black_36dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_ic_star_black_36dp.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_textfield_search_default_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_textfield_search_default_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\layout\\fragment_multi_image.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_fragment_multi_image.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_ic_menu_share_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_ic_menu_share_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_ic_menu_share_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_ic_menu_share_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_ic_menu_cut_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_ic_menu_cut_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_btn_switch_to_on_mtrl_00001.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_btn_switch_to_on_mtrl_00001.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_btn_check_to_on_mtrl_000.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_btn_check_to_on_mtrl_000.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\todo_list_item.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_todo_list_item.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_btn_check_to_on_mtrl_000.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_btn_check_to_on_mtrl_000.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-xxxhdpi-v17\\abc_ic_ab_back_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-xxxhdpi-v17_abc_ic_ab_back_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_activity_chooser_view.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_activity_chooser_view.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\delete.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_delete.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_ic_menu_selectall_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_ic_menu_selectall_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_ratingbar_full_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_ratingbar_full_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_ic_go_search_api_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_ic_go_search_api_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_list_focused_holo.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_list_focused_holo.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e1d9da03002cb11f79e842a285800b3f\\pagerslidingtabstrip-1.0.1\\res\\drawable\\background_tab.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_background_tab.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_popup_menu_item_layout.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_popup_menu_item_layout.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_textfield_search_default_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_textfield_search_default_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_ic_clear_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_ic_clear_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_ic_menu_paste_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_ic_menu_paste_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_ic_star_half_black_36dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_ic_star_half_black_36dp.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_ic_menu_selectall_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_ic_menu_selectall_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable\\stroke_color_rbtn_green.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_stroke_color_rbtn_green.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\settings_header.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_settings_header.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_btn_radio_to_on_mtrl_000.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_btn_radio_to_on_mtrl_000.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\clock.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_clock.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_ic_clear_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_ic_clear_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_alert_dialog_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_alert_dialog_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable\\stroke_color_rbtn_red.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_stroke_color_rbtn_red.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_list_selector_disabled_holo_light.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_list_selector_disabled_holo_light.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_green_down.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_green_down.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\menu_delete.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_menu_delete.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\anim\\pophide_anim.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\anim_pophide_anim.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_2x_blue.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_2x_blue.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_white_middle.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_white_middle.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_dialog_material_background_dark.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_dialog_material_background_dark.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_btn_rating_star_on_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_btn_rating_star_on_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\stroke_type_rbtn_line_normal.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_stroke_type_rbtn_line_normal.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\anim\\abc_fade_out.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\anim_abc_fade_out.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\notification_template_part_time.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_notification_template_part_time.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_switch_track_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_switch_track_mtrl_alpha.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_background.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_background.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\white_board.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_white_board.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-hdpi-v17\\abc_ic_menu_cut_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-hdpi-v17_abc_ic_menu_cut_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\ic_redo.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_ic_redo.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_btn_radio_to_on_mtrl_015.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_btn_radio_to_on_mtrl_015.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_item_background_holo_dark.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_item_background_holo_dark.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_ic_ab_back_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_ic_ab_back_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_dialog_title_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_dialog_title_material.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\note_list_dropdown_menu.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_note_list_dropdown_menu.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_ic_ab_back_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_ic_ab_back_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable\\stroke_type_rbtn_draw.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_stroke_type_rbtn_draw.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\account_dialog_title.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_account_dialog_title.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable\\new_note.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_new_note.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\color-v11\\abc_background_cache_hint_selector_material_dark.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\color-v11_abc_background_cache_hint_selector_material_dark.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\color\\switch_thumb_material_light.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\color_switch_thumb_material_light.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\font_small.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_font_small.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_tab_indicator_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_tab_indicator_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_list_selector_disabled_holo_light.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_list_selector_disabled_holo_light.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_ic_menu_paste_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_ic_menu_paste_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_action_bar_up_container.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_action_bar_up_container.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable\\stroke_type_rbtn_circle.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_stroke_type_rbtn_circle.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_scrubber_track_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_scrubber_track_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable\\stroke_color_rbtn_orange.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_stroke_color_rbtn_orange.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_btn_default_mtrl_shape.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_btn_default_mtrl_shape.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_btn_switch_to_on_mtrl_00012.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_btn_switch_to_on_mtrl_00012.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_ratingbar_indicator_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_ratingbar_indicator_material.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_white_up.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_white_up.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\anim\\abc_slide_in_bottom.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\anim_abc_slide_in_bottom.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_ratingbar_small_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_ratingbar_small_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_text_cursor_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_text_cursor_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\layout\\activity_image_selector.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_activity_image_selector.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\ic_drag.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_ic_drag.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\color-v11\\abc_background_cache_hint_selector_material_light.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\color-v11_abc_background_cache_hint_selector_material_light.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_ic_menu_moreoverflow_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_ic_menu_moreoverflow_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_activity_chooser_view_list_item.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_activity_chooser_view_list_item.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_ic_star_black_36dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_ic_star_black_36dp.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_tab_indicator_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_tab_indicator_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_select_dialog_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_select_dialog_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_list_menu_item_layout.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_list_menu_item_layout.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\todo_edit.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_todo_edit.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable\\action_btn.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_action_btn.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_textfield_search_default_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_textfield_search_default_mtrl_alpha.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\dialog_edit_todo.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_dialog_edit_todo.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_blue_middle.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_blue_middle.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_action_mode_close_item_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_action_mode_close_item_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_action_bar_title_item.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_action_bar_title_item.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\menu\\call_record_folder.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\menu_call_record_folder.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\color\\secondary_text_dark.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\color_secondary_text_dark.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\dropdown_icon.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_dropdown_icon.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_white.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_white.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_ic_commit_search_api_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_ic_commit_search_api_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_item_background_holo_light.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_item_background_holo_light.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_ic_star_half_black_36dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_ic_star_half_black_36dp.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_ic_star_half_black_16dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_ic_star_half_black_16dp.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\default_error.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_default_error.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\stroke_type_rbtn_line_checked.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_stroke_type_rbtn_line_checked.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_ic_voice_search_api_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_ic_voice_search_api_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\layout\\grid_item_sketch_data.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_grid_item_sketch_data.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\bg_container.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_bg_container.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\grid_corner.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_grid_corner.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_btn_borderless_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_btn_borderless_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_list_pressed_holo_light.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_list_pressed_holo_light.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_scrubber_track_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_scrubber_track_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\ic_photo.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_ic_photo.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_textfield_default_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_textfield_default_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_ab_share_pack_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_ab_share_pack_mtrl_alpha.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\xml\\preferences.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\xml_preferences.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_textfield_search_activated_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_textfield_search_activated_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\ic_add_big.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_ic_add_big.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_ic_search_api_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_ic_search_api_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_ic_star_half_black_36dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_ic_star_half_black_36dp.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\anim\\abc_slide_out_top.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\anim_abc_slide_out_top.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_ic_star_black_36dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_ic_star_black_36dp.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_ic_clear_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_ic_clear_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_screen_content_include.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_screen_content_include.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_ic_menu_copy_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_ic_menu_copy_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_textfield_search_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_textfield_search_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_scrubber_control_to_pressed_mtrl_005.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_scrubber_control_to_pressed_mtrl_005.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_red.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_red.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_ic_menu_moreoverflow_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_ic_menu_moreoverflow_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_switch_track_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_switch_track_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_scrubber_control_to_pressed_mtrl_000.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_scrubber_control_to_pressed_mtrl_000.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_scrubber_control_off_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_scrubber_control_off_mtrl_alpha.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\note_edit.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_note_edit.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-v21\\abc_edit_text_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-v21_abc_edit_text_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_btn_colored_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_btn_colored_material.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\note_edit_list_item.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_note_edit_list_item.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable\\stroke_color_rbtn_black.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_stroke_color_rbtn_black.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-v21\\abc_btn_colored_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-v21_abc_btn_colored_material.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_green_single.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_green_single.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_cab_background_top_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_cab_background_top_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_scrubber_control_to_pressed_mtrl_005.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_scrubber_control_to_pressed_mtrl_005.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_btn_radio_to_on_mtrl_015.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_btn_radio_to_on_mtrl_015.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\menu\\note_list.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\menu_note_list.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\notification_template_media.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_notification_template_media.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_menu_hardkey_panel_mtrl_mult.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_menu_hardkey_panel_mtrl_mult.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-xhdpi-v17\\abc_spinner_mtrl_am_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-xhdpi-v17_abc_spinner_mtrl_am_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_ic_menu_cut_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_ic_menu_cut_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\notification_template_big_media_narrow.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_notification_template_big_media_narrow.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_ab_share_pack_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_ab_share_pack_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\anim\\abc_grow_fade_in_from_bottom.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\anim_abc_grow_fade_in_from_bottom.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_ic_star_black_36dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_ic_star_black_36dp.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_title_blue.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_title_blue.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_list_selector_background_transition_holo_light.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_list_selector_background_transition_holo_light.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-xxhdpi-v17\\abc_ic_menu_cut_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-xxhdpi-v17_abc_ic_menu_cut_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-xxhdpi-v17\\abc_ic_ab_back_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-xxhdpi-v17_abc_ic_ab_back_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_textfield_default_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_textfield_default_mtrl_alpha.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\add_account_text.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_add_account_text.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_list_divider_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_list_divider_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_ic_menu_moreoverflow_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_ic_menu_moreoverflow_mtrl_alpha.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_red_down.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_red_down.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_expanded_menu_layout.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_expanded_menu_layout.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-mdpi-v17\\abc_ic_menu_copy_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-mdpi-v17_abc_ic_menu_copy_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_ic_voice_search_api_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_ic_voice_search_api_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_list_selector_holo_dark.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_list_selector_holo_dark.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_list_focused_holo.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_list_focused_holo.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_yellow_middle.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_yellow_middle.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_folder.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_folder.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_list_selector_disabled_holo_light.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_list_selector_disabled_holo_light.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable\\stroke_color_rbtn_blue.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_stroke_color_rbtn_blue.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_ic_star_half_black_36dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_ic_star_half_black_36dp.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_switch_track_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_switch_track_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_tab_indicator_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_tab_indicator_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\anim\\abc_fade_in.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\anim_abc_fade_in.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_list_divider_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_list_divider_mtrl_alpha.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\note_list.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_note_list.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\bg_popup.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_bg_popup.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_list_longpressed_holo.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_list_longpressed_holo.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_list_pressed_holo_dark.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_list_pressed_holo_dark.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_ab_share_pack_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_ab_share_pack_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_list_pressed_holo_dark.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_list_pressed_holo_dark.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\ic_background.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_ic_background.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\new_note_pressed.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_new_note_pressed.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_ic_commit_search_api_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_ic_commit_search_api_mtrl_alpha.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_red_single.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_red_single.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_green_up.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_green_up.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_yellow.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_yellow.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_4x_yellow.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_4x_yellow.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-xxhdpi-v17\\abc_spinner_mtrl_am_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-xxhdpi-v17_abc_spinner_mtrl_am_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_popup_background_mtrl_mult.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_popup_background_mtrl_mult.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_ic_star_black_36dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_ic_star_black_36dp.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_ic_menu_moreoverflow_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_ic_menu_moreoverflow_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable\\stroke_type_rbtn_rectangle.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_stroke_type_rbtn_rectangle.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\datetime_picker.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_datetime_picker.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\layout\\popup_sketch_stroke.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_popup_sketch_stroke.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\color\\switch_thumb_material_dark.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\color_switch_thumb_material_dark.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-xxxhdpi-v17\\abc_ic_menu_cut_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-xxxhdpi-v17_abc_ic_menu_cut_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_scrubber_control_to_pressed_mtrl_005.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_scrubber_control_to_pressed_mtrl_005.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_ic_go_search_api_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_ic_go_search_api_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_btn_radio_to_on_mtrl_015.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_btn_radio_to_on_mtrl_015.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\ic_empty.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_ic_empty.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_menu_hardkey_panel_mtrl_mult.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_menu_hardkey_panel_mtrl_mult.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable\\sketch_gv_item_bg.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_sketch_gv_item_bg.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\mark_reset.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_mark_reset.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_ic_menu_selectall_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_ic_menu_selectall_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_btn_check_to_on_mtrl_015.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_btn_check_to_on_mtrl_015.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_btn_check_to_on_mtrl_015.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_btn_check_to_on_mtrl_015.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\notification_media_action.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_notification_media_action.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_scrubber_control_off_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_scrubber_control_off_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\mark_rotate.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_mark_rotate.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_ic_star_black_16dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_ic_star_black_16dp.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\color\\abc_secondary_text_material_light.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\color_abc_secondary_text_material_light.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_list_selector_disabled_holo_dark.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_list_selector_disabled_holo_dark.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\ic_undo.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_ic_undo.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable\\circle.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_circle.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\xml\\widget_2x_info.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\xml_widget_2x_info.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_seekbar_track_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_seekbar_track_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_screen_simple_overlay_action_mode.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_screen_simple_overlay_action_mode.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_textfield_search_activated_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_textfield_search_activated_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_ic_menu_moreoverflow_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_ic_menu_moreoverflow_mtrl_alpha.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\menu\\note_list_dropdown.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\menu_note_list_dropdown.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_switch_track_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_switch_track_mtrl_alpha.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_4x_white.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_4x_white.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\bg_color_btn_mask.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_bg_color_btn_mask.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_cab_background_top_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_cab_background_top_mtrl_alpha.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_white_single.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_white_single.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_ic_menu_cut_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_ic_menu_cut_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_list_longpressed_holo.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_list_longpressed_holo.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_list_pressed_holo_dark.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_list_pressed_holo_dark.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_list_pressed_holo_dark.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_list_pressed_holo_dark.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_screen_toolbar.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_screen_toolbar.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_ic_menu_share_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_ic_menu_share_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_ic_voice_search_api_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_ic_voice_search_api_mtrl_alpha.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_blue_down.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_blue_down.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\white.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_white.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_ic_star_half_black_16dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_ic_star_half_black_16dp.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_btn_radio_to_on_mtrl_000.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_btn_radio_to_on_mtrl_000.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_btn_check_to_on_mtrl_000.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_btn_check_to_on_mtrl_000.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\stroke_type_rbtn_draw_bold_normal.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_stroke_type_rbtn_draw_bold_normal.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_ic_menu_copy_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_ic_menu_copy_mtrl_am_alpha.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_title_green.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_title_green.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\btn_unselected.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_btn_unselected.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\stroke_type_rbtn_text_checked.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_stroke_type_rbtn_text_checked.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_scrubber_control_off_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_scrubber_control_off_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_ic_commit_search_api_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_ic_commit_search_api_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_list_pressed_holo_light.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_list_pressed_holo_light.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_ic_go_search_api_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_ic_go_search_api_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_list_menu_item_icon.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_list_menu_item_icon.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\stroke_type_rbtn_rectangle_normal.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_stroke_type_rbtn_rectangle_normal.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_list_focused_holo.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_list_focused_holo.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_ic_clear_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_ic_clear_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\notification_template_lines.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_notification_template_lines.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\folder_list_item.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_folder_list_item.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_ic_menu_paste_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_ic_menu_paste_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_textfield_activated_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_textfield_activated_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_ic_star_half_black_16dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_ic_star_half_black_16dp.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\todo_icon.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_todo_icon.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable\\stroke_type_rbtn_draw_bold.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_stroke_type_rbtn_draw_bold.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_list_selector_holo_light.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_list_selector_holo_light.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_btn_check_to_on_mtrl_015.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_btn_check_to_on_mtrl_015.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_btn_check_to_on_mtrl_015.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_btn_check_to_on_mtrl_015.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_list_selector_disabled_holo_dark.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_list_selector_disabled_holo_dark.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\color\\abc_search_url_text.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\color_abc_search_url_text.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\font_large.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_font_large.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable\\stroke_type_rbtn_line.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_stroke_type_rbtn_line.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_action_menu_layout.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_action_menu_layout.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_spinner_mtrl_am_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_spinner_mtrl_am_alpha.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_yellow_down.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_yellow_down.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_scrubber_control_off_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_scrubber_control_off_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_tab_indicator_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_tab_indicator_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_scrubber_control_to_pressed_mtrl_005.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_scrubber_control_to_pressed_mtrl_005.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\note_edit_color_selector_panel.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_note_edit_color_selector_panel.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\raw-zh-rCN\\introduction=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\raw-zh-rCN_introduction.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_btn_radio_to_on_mtrl_015.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_btn_radio_to_on_mtrl_015.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_blue_single.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_blue_single.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\todo_list.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_todo_list.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_ic_ab_back_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_ic_ab_back_mtrl_am_alpha.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_title_red.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_title_red.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\stroke_type_rbtn_circle_checked.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_stroke_type_rbtn_circle_checked.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_ic_voice_search_api_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_ic_voice_search_api_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\stroke_type_rbtn_rectangle_checked.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_stroke_type_rbtn_rectangle_checked.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\btn_selected.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_btn_selected.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_cab_background_top_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_cab_background_top_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_spinner_mtrl_am_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_spinner_mtrl_am_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_ic_star_black_16dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_ic_star_black_16dp.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_textfield_activated_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_textfield_activated_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_cab_background_top_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_cab_background_top_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_spinner_mtrl_am_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_spinner_mtrl_am_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_btn_radio_to_on_mtrl_000.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_btn_radio_to_on_mtrl_000.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\select_dialog_item_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_select_dialog_item_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\notification_template_big_media.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_notification_template_big_media.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\layout\\popup_sketch_eraser.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_popup_sketch_eraser.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_ic_menu_share_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_ic_menu_share_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_scrubber_control_to_pressed_mtrl_000.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_scrubber_control_to_pressed_mtrl_000.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_scrubber_track_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_scrubber_track_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_list_selector_disabled_holo_dark.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_list_selector_disabled_holo_dark.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\grid_delete.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_grid_delete.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_popup_background_mtrl_mult.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_popup_background_mtrl_mult.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_title_yellow.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_title_yellow.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_ic_star_half_black_16dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_ic_star_half_black_16dp.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_alert_dialog_button_bar_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_alert_dialog_button_bar_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_ic_star_half_black_16dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_ic_star_half_black_16dp.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\menu\\sub_folder.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\menu_sub_folder.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_list_longpressed_holo.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_list_longpressed_holo.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\bg_note.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_bg_note.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\icon_app.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_icon_app.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\xml\\searchable.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\xml_searchable.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\title_bar_bg.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_title_bar_bg.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_2x_white.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_2x_white.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_scrubber_control_to_pressed_mtrl_000.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_scrubber_control_to_pressed_mtrl_000.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_ic_menu_paste_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_ic_menu_paste_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_list_menu_item_checkbox.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_list_menu_item_checkbox.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\new_todo.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_new_todo.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-xhdpi-v17\\abc_ic_menu_copy_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-xhdpi-v17_abc_ic_menu_copy_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\anim\\abc_shrink_fade_out_from_bottom.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\anim_abc_shrink_fade_out_from_bottom.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\color\\abc_primary_text_material_dark.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\color_abc_primary_text_material_dark.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\ic_add_small.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_ic_add_small.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\icon_actionbar.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_icon_actionbar.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_4x_green.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_4x_green.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_ic_star_black_16dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_ic_star_black_16dp.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_list_divider_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_list_divider_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\select_dialog_singlechoice_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_select_dialog_singlechoice_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_ic_menu_paste_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_ic_menu_paste_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_dialog_material_background_light.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_dialog_material_background_light.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_list_selector_disabled_holo_dark.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_list_selector_disabled_holo_dark.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\mark_delete.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_mark_delete.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_ic_voice_search_api_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_ic_voice_search_api_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_ic_search_api_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_ic_search_api_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_btn_rating_star_on_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_btn_rating_star_on_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_ic_search_api_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_ic_search_api_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\notification_media_cancel_action.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_notification_media_cancel_action.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_textfield_search_activated_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_textfield_search_activated_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_ic_menu_copy_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_ic_menu_copy_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-xxhdpi-v17\\abc_ic_menu_copy_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-xxhdpi-v17_abc_ic_menu_copy_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_btn_switch_to_on_mtrl_00012.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_btn_switch_to_on_mtrl_00012.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_spinner_mtrl_am_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_spinner_mtrl_am_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_scrubber_primary_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_scrubber_primary_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_spinner_mtrl_am_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_spinner_mtrl_am_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\ic_teacher.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_ic_teacher.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\widget_4x.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_widget_4x.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_ic_ab_back_mtrl_am_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_ic_ab_back_mtrl_am_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable\\stroke_type_rbtn_text.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_stroke_type_rbtn_text.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\color\\abc_secondary_text_material_dark.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\color_abc_secondary_text_material_dark.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_list_menu_item_radio.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_list_menu_item_radio.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_textfield_activated_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_textfield_activated_mtrl_alpha.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\new_note_normal.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_new_note_normal.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\text_indicator.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_text_indicator.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\asy.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_asy.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-ldrtl-xxxhdpi-v17\\abc_spinner_mtrl_am_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldrtl-xxxhdpi-v17_abc_spinner_mtrl_am_alpha.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_4x_blue.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_4x_blue.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\layout\\list_item_folder.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_list_item_folder.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\font_super.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_font_super.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_ic_commit_search_api_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_ic_commit_search_api_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_tab_indicator_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_tab_indicator_mtrl_alpha.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\list_yellow_single.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_list_yellow_single.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxxhdpi-v4\\abc_btn_switch_to_on_mtrl_00001.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxxhdpi-v4_abc_btn_switch_to_on_mtrl_00001.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_blue.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_blue.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_spinner_textfield_background_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_spinner_textfield_background_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_btn_switch_to_on_mtrl_00012.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_btn_switch_to_on_mtrl_00012.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_scrubber_control_to_pressed_mtrl_000.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_scrubber_control_to_pressed_mtrl_000.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable\\control_btn_bg.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_control_btn_bg.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_ab_share_pack_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_ab_share_pack_mtrl_alpha.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\font_normal.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_font_normal.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_scrubber_track_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_scrubber_track_mtrl_alpha.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\edit_title_white.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_edit_title_white.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_list_selector_disabled_holo_light.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_list_selector_disabled_holo_light.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_list_longpressed_holo.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_list_longpressed_holo.9.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\menu\\note_list_options.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\menu_note_list_options.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\layout\\fragment_white_board.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_fragment_white_board.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\layout\\popup_sketch_text.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_popup_sketch_text.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\stroke_type_rbtn_circle_normal.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_stroke_type_rbtn_circle_normal.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_btn_rating_star_off_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_btn_rating_star_off_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_ic_search_api_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_ic_search_api_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_switch_track_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_switch_track_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_textfield_activated_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_textfield_activated_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_ic_search_api_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_ic_search_api_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_switch_thumb_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_switch_thumb_material.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\bg_btn_set_color.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_bg_btn_set_color.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_btn_switch_to_on_mtrl_00001.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_btn_switch_to_on_mtrl_00001.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xhdpi-v4\\abc_scrubber_primary_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_abc_scrubber_primary_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_btn_radio_to_on_mtrl_000.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_btn_radio_to_on_mtrl_000.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_action_bar_view_list_nav_layout.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_action_bar_view_list_nav_layout.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\anim\\popshow_anim.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\anim_popshow_anim.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_btn_radio_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_btn_radio_material.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\xml\\widget_4x_info.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\xml_widget_4x_info.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_search_view.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_search_view.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\note_item.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_note_item.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\mark_copy.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_mark_copy.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\layout\\list_item_image.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_list_item_image.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\color\\primary_text_dark.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\color_primary_text_dark.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\layout\\list_item_camera.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_list_item_camera.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\raw\\introduction=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\raw_introduction.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\anim\\abc_popup_exit.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\anim_abc_popup_exit.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_ic_menu_cut_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_ic_menu_cut_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_scrubber_primary_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_scrubber_primary_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\stroke_type_rbtn_draw_normal.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_stroke_type_rbtn_draw_normal.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-hdpi-v4\\abc_cab_background_top_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi-v4_abc_cab_background_top_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_action_menu_item_layout.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_action_menu_item_layout.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\menu_move.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_menu_move.png.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\selected.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_selected.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_textfield_default_mtrl_alpha.9.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_textfield_default_mtrl_alpha.9.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-mdpi-v4\\abc_ic_star_black_16dp.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi-v4_abc_ic_star_black_16dp.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\notification_template_part_chronometer.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_notification_template_part_chronometer.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-xxhdpi-v4\\abc_btn_rating_star_off_mtrl_alpha.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xxhdpi-v4_abc_btn_rating_star_off_mtrl_alpha.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\baccd5e3080034634dd322ace01bc706\\whiteboardlib-1.0.9\\res\\drawable-xhdpi-v4\\stroke_type_rbtn_draw_bold_checked.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi-v4_stroke_type_rbtn_draw_bold_checked.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-v21\\abc_action_bar_item_background_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-v21_abc_action_bar_item_background_material.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\dialog_edit_text.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_dialog_edit_text.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\drawable-hdpi\\widget_2x_green.png=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_widget_2x_green.png.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\color\\abc_primary_text_disable_only_material_dark.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\color_abc_primary_text_disable_only_material_dark.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable-v23\\abc_control_background_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable-v23_abc_control_background_material.xml.flat
+C\:\\Project\\minote\\src\\app\\src\\main\\res\\layout\\note_list_footer.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_note_list_footer.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\drawable\\abc_tab_indicator_material.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\drawable_abc_tab_indicator_material.xml.flat
+C\:\\Users\\21931\\.gradle\\gradle-5.4.1-all\\gradle-5.4.1\\caches\\transforms-2\\files-2.1\\e4cb349764fc98f73a6de00598fb422c\\appcompat-v7-23.3.0\\res\\layout\\abc_screen_simple.xml=C\:\\Project\\minote\\src\\app\\build\\intermediates\\res\\merged\\debug\\layout_abc_screen_simple.xml.flat
diff --git a/src/app/build/intermediates/incremental/mergeDebugResources/merger.xml b/src/app/build/intermediates/incremental/mergeDebugResources/merger.xml
new file mode 100644
index 0000000..bd72a8d
--- /dev/null
+++ b/src/app/build/intermediates/incremental/mergeDebugResources/merger.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt b/src/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt
new file mode 100644
index 0000000..92825ab
--- /dev/null
+++ b/src/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt
@@ -0,0 +1,4 @@
+#Fri Nov 01 23:03:25 CST 2019
+base.0=C\:\\Project\\minote\\src\\app\\build\\intermediates\\dex\\debug\\mergeDexDebug\\out\\classes.dex
+path.0=classes.dex
+renamed.0=classes.dex
diff --git a/src/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/dPcwR9oS2EmiImbvDZ1Qg_iwk3M= b/src/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/dPcwR9oS2EmiImbvDZ1Qg_iwk3M=
new file mode 100644
index 0000000..fe5b51b
Binary files /dev/null and b/src/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/dPcwR9oS2EmiImbvDZ1Qg_iwk3M= differ
diff --git a/src/app/build/intermediates/instant_app_manifest/debug/AndroidManifest.xml b/src/app/build/intermediates/instant_app_manifest/debug/AndroidManifest.xml
new file mode 100644
index 0000000..2cbf148
--- /dev/null
+++ b/src/app/build/intermediates/instant_app_manifest/debug/AndroidManifest.xml
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/build/intermediates/instant_app_manifest/debug/output.json b/src/app/build/intermediates/instant_app_manifest/debug/output.json
new file mode 100644
index 0000000..eb6cdfa
--- /dev/null
+++ b/src/app/build/intermediates/instant_app_manifest/debug/output.json
@@ -0,0 +1 @@
+[{"outputType":{"type":"INSTANT_APP_MANIFEST"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"0.1","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{"packageId":"net.micode.notes","split":"","minSdkVersion":"17"}}]
\ No newline at end of file
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$color.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$color.class
new file mode 100644
index 0000000..2b8a572
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$color.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$dimen.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$dimen.class
new file mode 100644
index 0000000..fe0ec9d
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$dimen.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$drawable.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$drawable.class
new file mode 100644
index 0000000..9f95eb3
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$drawable.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$id.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$id.class
new file mode 100644
index 0000000..972f880
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$id.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$layout.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$layout.class
new file mode 100644
index 0000000..1229c33
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$layout.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$menu.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$menu.class
new file mode 100644
index 0000000..417ba2a
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$menu.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$plurals.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$plurals.class
new file mode 100644
index 0000000..199ad35
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$plurals.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$raw.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$raw.class
new file mode 100644
index 0000000..fe76f0f
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$raw.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$string.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$string.class
new file mode 100644
index 0000000..031bb94
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$string.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$style.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$style.class
new file mode 100644
index 0000000..714be7d
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$style.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$xml.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$xml.class
new file mode 100644
index 0000000..2acee6e
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R$xml.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R.class
new file mode 100644
index 0000000..95bb995
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/R.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/Notes$DataConstants.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/Notes$DataConstants.class
new file mode 100644
index 0000000..29c84b9
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/Notes$DataConstants.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/Notes.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/Notes.class
new file mode 100644
index 0000000..e50cff4
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/Notes.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesDatabaseHelper.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesDatabaseHelper.class
new file mode 100644
index 0000000..fde7a35
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesDatabaseHelper.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesProvider.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesProvider.class
new file mode 100644
index 0000000..e8dc6f3
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesProvider.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/data/MetaData.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/data/MetaData.class
new file mode 100644
index 0000000..342ce9a
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/data/MetaData.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/data/Node.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/data/Node.class
new file mode 100644
index 0000000..5ecdbb7
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/data/Node.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/data/SqlData.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/data/SqlData.class
new file mode 100644
index 0000000..bb8dc6c
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/data/SqlData.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/data/SqlNote.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/data/SqlNote.class
new file mode 100644
index 0000000..ffb261f
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/data/SqlNote.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/data/Task.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/data/Task.class
new file mode 100644
index 0000000..967f12c
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/data/Task.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/data/TaskList.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/data/TaskList.class
new file mode 100644
index 0000000..ad01a79
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/data/TaskList.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/exception/ActionFailureException.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/exception/ActionFailureException.class
new file mode 100644
index 0000000..133523d
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/exception/ActionFailureException.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/exception/NetworkFailureException.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/exception/NetworkFailureException.class
new file mode 100644
index 0000000..55a57e5
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/exception/NetworkFailureException.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskASyncTask$1.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskASyncTask$1.class
new file mode 100644
index 0000000..db205ba
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskASyncTask$1.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskASyncTask.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskASyncTask.class
new file mode 100644
index 0000000..10484d6
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskASyncTask.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskClient.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskClient.class
new file mode 100644
index 0000000..0825120
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskClient.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskManager.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskManager.class
new file mode 100644
index 0000000..b939dc7
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskManager.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskSyncService$1.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskSyncService$1.class
new file mode 100644
index 0000000..25b37a3
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskSyncService$1.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskSyncService.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskSyncService.class
new file mode 100644
index 0000000..d2e21c9
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskSyncService.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note$NoteData.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note$NoteData.class
new file mode 100644
index 0000000..0945d97
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note$NoteData.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note.class
new file mode 100644
index 0000000..84a2979
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/WorkingNote.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/WorkingNote.class
new file mode 100644
index 0000000..1aa7da8
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/WorkingNote.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils$TextExport.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils$TextExport.class
new file mode 100644
index 0000000..0e7f64d
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils$TextExport.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils.class
new file mode 100644
index 0000000..9d3fa9f
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/DataUtils.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/DataUtils.class
new file mode 100644
index 0000000..6297569
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/DataUtils.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/GTaskStringUtils.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/GTaskStringUtils.class
new file mode 100644
index 0000000..97639a7
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/GTaskStringUtils.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/ResourceParser$NoteBgResources.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/ResourceParser$NoteBgResources.class
new file mode 100644
index 0000000..d32f06c
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/ResourceParser$NoteBgResources.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/ResourceParser$NoteItemBgResources.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/ResourceParser$NoteItemBgResources.class
new file mode 100644
index 0000000..ee78230
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/ResourceParser$NoteItemBgResources.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/ResourceParser$TextAppearanceResources.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/ResourceParser$TextAppearanceResources.class
new file mode 100644
index 0000000..412e9b6
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/ResourceParser$TextAppearanceResources.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/ResourceParser$WidgetBgResources.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/ResourceParser$WidgetBgResources.class
new file mode 100644
index 0000000..029c0a2
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/ResourceParser$WidgetBgResources.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/ResourceParser.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/ResourceParser.class
new file mode 100644
index 0000000..2b5c700
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/ResourceParser.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/AlarmAlertActivity.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/AlarmAlertActivity.class
new file mode 100644
index 0000000..9e4928d
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/AlarmAlertActivity.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker.class
new file mode 100644
index 0000000..3588199
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePickerDialog.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePickerDialog.class
new file mode 100644
index 0000000..33a63d0
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePickerDialog.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DropdownMenu.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DropdownMenu.class
new file mode 100644
index 0000000..07e85c7
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DropdownMenu.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/FoldersListAdapter$FolderListItem.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/FoldersListAdapter$FolderListItem.class
new file mode 100644
index 0000000..f84b90b
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/FoldersListAdapter$FolderListItem.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/FoldersListAdapter.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/FoldersListAdapter.class
new file mode 100644
index 0000000..19e0026
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/FoldersListAdapter.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$1.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$1.class
new file mode 100644
index 0000000..4e3c97d
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$1.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$2.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$2.class
new file mode 100644
index 0000000..e175921
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$2.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$3.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$3.class
new file mode 100644
index 0000000..f6b01f0
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$3.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$HeadViewHolder.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$HeadViewHolder.class
new file mode 100644
index 0000000..8786dcb
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$HeadViewHolder.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity.class
new file mode 100644
index 0000000..6c8bdba
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditText.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditText.class
new file mode 100644
index 0000000..9899ca9
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditText.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$1.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$1.class
new file mode 100644
index 0000000..9c51a52
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$1.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$2.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$2.class
new file mode 100644
index 0000000..a59cc14
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$2.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$3.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$3.class
new file mode 100644
index 0000000..d54d161
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$3.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$4.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$4.class
new file mode 100644
index 0000000..46a556a
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$4.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$5.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$5.class
new file mode 100644
index 0000000..b7e1055
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$5.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$6.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$6.class
new file mode 100644
index 0000000..96aad5b
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$6.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$7.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$7.class
new file mode 100644
index 0000000..6595122
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$7.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$8.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$8.class
new file mode 100644
index 0000000..f4c76ea
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$8.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$9.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$9.class
new file mode 100644
index 0000000..ecd03b8
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$9.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$BackgroundQueryHandler.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$BackgroundQueryHandler.class
new file mode 100644
index 0000000..7282a22
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$BackgroundQueryHandler.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ListEditState.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ListEditState.class
new file mode 100644
index 0000000..70715d1
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ListEditState.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$1.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$1.class
new file mode 100644
index 0000000..9b002bd
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$1.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$2.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$2.class
new file mode 100644
index 0000000..6a88d87
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$2.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback.class
new file mode 100644
index 0000000..96b3e02
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$NewNoteOnTouchListener.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$NewNoteOnTouchListener.class
new file mode 100644
index 0000000..b3b32fd
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$NewNoteOnTouchListener.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$OnListItemClickListener.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$OnListItemClickListener.class
new file mode 100644
index 0000000..ba8fb4d
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$OnListItemClickListener.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity.class
new file mode 100644
index 0000000..e80ce69
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListItem.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListItem.class
new file mode 100644
index 0000000..5958945
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListItem.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$1.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$1.class
new file mode 100644
index 0000000..d91bd3c
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$1.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$GTaskReceiver.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$GTaskReceiver.class
new file mode 100644
index 0000000..cc0f693
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$GTaskReceiver.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity.class
new file mode 100644
index 0000000..e385f8f
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/widget/NoteWidgetProvider.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/widget/NoteWidgetProvider.class
new file mode 100644
index 0000000..d4d082c
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/widget/NoteWidgetProvider.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/widget/NoteWidgetProvider_2x.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/widget/NoteWidgetProvider_2x.class
new file mode 100644
index 0000000..1f13d5e
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/widget/NoteWidgetProvider_2x.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/widget/NoteWidgetProvider_4x.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/widget/NoteWidgetProvider_4x.class
new file mode 100644
index 0000000..ec3ecdf
Binary files /dev/null and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/widget/NoteWidgetProvider_4x.class differ
diff --git a/src/app/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt b/src/app/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt
new file mode 100644
index 0000000..3bda38d
--- /dev/null
+++ b/src/app/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt
@@ -0,0 +1,274 @@
+1
+2
+17
+21
+22 C:\Project\minote\src\app\src\main\AndroidManifest.xml
+24 android:targetSdkVersion="17" />
+24-->C:\Project\minote\src\app\src\main\AndroidManifest.xml
+25
+26
+26-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:23:5-81
+26-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:23:22-78
+27
+27-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:24:5-88
+27-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:24:22-85
+28
+28-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:25:5-67
+28-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:25:22-64
+29
+29-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:26:5-72
+29-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:26:22-69
+30
+30-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:27:5-74
+30-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:27:22-71
+31
+31-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:28:5-80
+31-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:28:22-77
+32
+32-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:29:5-71
+32-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:29:22-68
+33
+33-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:30:5-74
+33-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:30:22-71
+34
+34-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:31:5-81
+34-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:31:22-78
+35
+36 C:\Project\minote\src\app\src\main\AndroidManifest.xml:33:5-148:19
+37 android:debuggable="true"
+38 android:icon="@drawable/icon_app"
+38-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:34:9-42
+39 android:label="@string/app_name"
+39-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:35:9-41
+40 android:testOnly="true" >
+41 C:\Project\minote\src\app\src\main\AndroidManifest.xml:36:9-49:20
+42 android:name="net.micode.notes.ui.NotesListActivity"
+42-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:37:13-49
+43 android:configChanges="keyboardHidden|orientation|screenSize"
+43-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:39:13-74
+44 android:label="@string/app_name"
+44-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:40:13-45
+45 android:launchMode="singleTop"
+45-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:41:13-43
+46 android:logo="@drawable/icon_actionbar"
+46-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:38:13-52
+47 android:theme="@android:style/Theme.Holo.Light"
+47-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:42:13-60
+48 android:windowSoftInputMode="adjustPan" >
+48-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:43:13-52
+49
+49-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:45:13-48:29
+50
+50-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:46:17-69
+50-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:46:25-66
+51
+52
+52-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:47:17-77
+52-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:47:27-74
+53
+54
+55 C:\Project\minote\src\app\src\main\AndroidManifest.xml:51:9-80:20
+56 android:name="net.micode.notes.ui.NoteEditActivity"
+56-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:52:13-48
+57 android:configChanges="keyboardHidden|orientation|screenSize"
+57-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:54:13-74
+58 android:launchMode="singleTop"
+58-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:55:13-43
+59 android:logo="@drawable/icon_actionbar"
+59-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:53:13-52
+60 android:theme="@style/NoteTheme" >
+60-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:56:13-45
+61
+61-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:58:13-63:29
+62
+62-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:59:17-69
+62-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:59:25-66
+63
+64
+64-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:60:17-76
+64-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:60:27-73
+65
+66
+66-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:61:17-78
+66-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:61:23-75
+67
+67-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:61:17-78
+67-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:61:23-75
+68
+69
+69-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:65:13-70:29
+70
+70-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:66:17-79
+70-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:66:25-76
+71
+72
+72-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:60:17-76
+72-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:60:27-73
+73
+74
+74-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:61:17-78
+74-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:61:23-75
+75
+75-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:61:17-78
+75-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:61:23-75
+76
+77
+77-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:72:13-75:29
+78
+78-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:73:17-71
+78-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:73:25-68
+79
+80
+80-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:60:17-76
+80-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:60:27-73
+81
+82
+83 C:\Project\minote\src\app\src\main\AndroidManifest.xml:77:13-79:54
+84 android:name="android.app.searchable"
+84-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:78:17-54
+85 android:resource="@xml/searchable" />
+85-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:79:17-51
+86
+87
+88 C:\Project\minote\src\app\src\main\AndroidManifest.xml:82:9-85:43
+89 android:name="net.micode.notes.data.NotesProvider"
+89-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:83:13-63
+90 android:authorities="micode_notes"
+90-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:84:13-47
+91 android:multiprocess="true" />
+91-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:85:13-40
+92
+93 C:\Project\minote\src\app\src\main\AndroidManifest.xml:87:9-99:20
+94 android:name="net.micode.notes.widget.NoteWidgetProvider_2x"
+94-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:88:13-57
+95 android:label="@string/app_widget2x2" >
+95-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:89:13-50
+96
+96-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:90:13-94:29
+97
+97-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:91:17-84
+97-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:91:25-81
+98
+98-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:92:17-85
+98-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:92:25-82
+99
+99-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:93:17-85
+99-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:93:25-82
+100
+101
+102 C:\Project\minote\src\app\src\main\AndroidManifest.xml:96:13-98:58
+103 android:name="android.appwidget.provider"
+103-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:97:17-58
+104 android:resource="@xml/widget_2x_info" />
+104-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:98:17-55
+105
+106 C:\Project\minote\src\app\src\main\AndroidManifest.xml:100:9-113:20
+107 android:name="net.micode.notes.widget.NoteWidgetProvider_4x"
+107-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:101:13-57
+108 android:label="@string/app_widget4x4" >
+108-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:102:13-50
+109
+109-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:90:13-94:29
+110
+110-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:91:17-84
+110-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:91:25-81
+111
+111-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:92:17-85
+111-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:92:25-82
+112
+112-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:93:17-85
+112-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:93:25-82
+113
+114
+115 C:\Project\minote\src\app\src\main\AndroidManifest.xml:96:13-98:58
+116 android:name="android.appwidget.provider"
+116-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:97:17-58
+117 android:resource="@xml/widget_4x_info" />
+117-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:98:17-55
+118
+119
+119-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:115:9-119:20
+119-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:115:19-55
+120
+120-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:116:13-118:29
+121
+121-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:117:17-79
+121-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:117:25-76
+122
+123
+124 C:\Project\minote\src\app\src\main\AndroidManifest.xml:121:9-124:20
+125 android:name="net.micode.notes.ui.AlarmReceiver"
+125-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:122:13-61
+126 android:process=":remote" >
+126-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:123:13-38
+127
+128
+129 C:\Project\minote\src\app\src\main\AndroidManifest.xml:126:9-131:20
+130 android:name="net.micode.notes.ui.AlarmAlertActivity"
+130-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:127:13-50
+131 android:label="@string/app_name"
+131-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:128:13-45
+132 android:launchMode="singleInstance"
+132-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:129:13-48
+133 android:theme="@android:style/Theme.Holo.Wallpaper.NoTitleBar" >
+133-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:130:13-75
+134
+135 C:\Project\minote\src\app\src\main\AndroidManifest.xml:133:9-138:20
+136 android:name="net.micode.notes.ui.NotesPreferenceActivity"
+136-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:134:13-71
+137 android:label="@string/preferences_title"
+137-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:135:13-54
+138 android:launchMode="singleTop"
+138-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:136:13-43
+139 android:theme="@android:style/Theme.Holo.Light" >
+139-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:137:13-60
+140
+141
+142 C:\Project\minote\src\app\src\main\AndroidManifest.xml:140:9-143:19
+143 android:name="net.micode.notes.gtask.remote.GTaskSyncService"
+143-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:141:13-74
+144 android:exported="false" >
+144-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:142:13-37
+145
+146
+147 C:\Project\minote\src\app\src\main\AndroidManifest.xml:145:9-147:52
+148 android:name="android.app.default_searchable"
+148-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:146:13-58
+149 android:value=".ui.NoteEditActivity" />
+149-->C:\Project\minote\src\app\src\main\AndroidManifest.xml:147:13-49
+150
+151
+152
diff --git a/src/app/build/intermediates/merged_manifests/debug/AndroidManifest.xml b/src/app/build/intermediates/merged_manifests/debug/AndroidManifest.xml
new file mode 100644
index 0000000..57f24f3
--- /dev/null
+++ b/src/app/build/intermediates/merged_manifests/debug/AndroidManifest.xml
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/build/intermediates/merged_manifests/debug/output.json b/src/app/build/intermediates/merged_manifests/debug/output.json
new file mode 100644
index 0000000..647d425
--- /dev/null
+++ b/src/app/build/intermediates/merged_manifests/debug/output.json
@@ -0,0 +1 @@
+[{"outputType":{"type":"MERGED_MANIFESTS"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"0.1","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{"packageId":"net.micode.notes","split":"","minSdkVersion":"17"}}]
\ No newline at end of file
diff --git a/src/app/build/intermediates/merged_manifests/debugAndroidTest/AndroidManifest.xml b/src/app/build/intermediates/merged_manifests/debugAndroidTest/AndroidManifest.xml
new file mode 100644
index 0000000..2688cd6
--- /dev/null
+++ b/src/app/build/intermediates/merged_manifests/debugAndroidTest/AndroidManifest.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/build/intermediates/processed_res/debug/processDebugResources/out/output.json b/src/app/build/intermediates/processed_res/debug/processDebugResources/out/output.json
new file mode 100644
index 0000000..c8dfe51
--- /dev/null
+++ b/src/app/build/intermediates/processed_res/debug/processDebugResources/out/output.json
@@ -0,0 +1 @@
+[{"outputType":{"type":"PROCESSED_RES"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"0.1","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"},"path":"resources-debug.ap_","properties":{"packageId":"net.micode.notes","split":"","minSdkVersion":"17"}}]
\ No newline at end of file
diff --git a/src/app/build/intermediates/processed_res/debug/processDebugResources/out/resources-debug.ap_ b/src/app/build/intermediates/processed_res/debug/processDebugResources/out/resources-debug.ap_
new file mode 100644
index 0000000..1086399
Binary files /dev/null and b/src/app/build/intermediates/processed_res/debug/processDebugResources/out/resources-debug.ap_ differ
diff --git a/src/app/build/intermediates/res/merged/debug/drawable-hdpi_icon_app.png.flat b/src/app/build/intermediates/res/merged/debug/drawable-hdpi_icon_app.png.flat
new file mode 100644
index 0000000..935aabc
Binary files /dev/null and b/src/app/build/intermediates/res/merged/debug/drawable-hdpi_icon_app.png.flat differ
diff --git a/src/app/build/intermediates/res/merged/debug/drawable-hdpi_list_background.png.flat b/src/app/build/intermediates/res/merged/debug/drawable-hdpi_list_background.png.flat
new file mode 100644
index 0000000..94dccdd
Binary files /dev/null and b/src/app/build/intermediates/res/merged/debug/drawable-hdpi_list_background.png.flat differ
diff --git a/src/app/build/intermediates/res/merged/debug/drawable-hdpi_new_note_normal.png.flat b/src/app/build/intermediates/res/merged/debug/drawable-hdpi_new_note_normal.png.flat
new file mode 100644
index 0000000..0ff6b9f
Binary files /dev/null and b/src/app/build/intermediates/res/merged/debug/drawable-hdpi_new_note_normal.png.flat differ
diff --git a/src/app/build/intermediates/res/merged/debug/drawable-hdpi_new_note_pressed.png.flat b/src/app/build/intermediates/res/merged/debug/drawable-hdpi_new_note_pressed.png.flat
new file mode 100644
index 0000000..0f8638a
Binary files /dev/null and b/src/app/build/intermediates/res/merged/debug/drawable-hdpi_new_note_pressed.png.flat differ
diff --git a/src/app/build/intermediates/res/merged/debug/drawable-hdpi_title_alert.png.flat b/src/app/build/intermediates/res/merged/debug/drawable-hdpi_title_alert.png.flat
new file mode 100644
index 0000000..45bf788
Binary files /dev/null and b/src/app/build/intermediates/res/merged/debug/drawable-hdpi_title_alert.png.flat differ
diff --git a/src/app/build/intermediates/res/merged/debug/layout_note_list.xml.flat b/src/app/build/intermediates/res/merged/debug/layout_note_list.xml.flat
new file mode 100644
index 0000000..ca16531
Binary files /dev/null and b/src/app/build/intermediates/res/merged/debug/layout_note_list.xml.flat differ
diff --git a/src/app/build/intermediates/res/merged/debug/menu_note_list.xml.flat b/src/app/build/intermediates/res/merged/debug/menu_note_list.xml.flat
new file mode 100644
index 0000000..2b80d91
Binary files /dev/null and b/src/app/build/intermediates/res/merged/debug/menu_note_list.xml.flat differ
diff --git a/src/app/build/intermediates/res/merged/debug/menu_sub_folder.xml.flat b/src/app/build/intermediates/res/merged/debug/menu_sub_folder.xml.flat
new file mode 100644
index 0000000..876fc6b
Binary files /dev/null and b/src/app/build/intermediates/res/merged/debug/menu_sub_folder.xml.flat differ
diff --git a/src/app/build/intermediates/res/merged/debug/values-zh-rCN_values-zh-rCN.arsc.flat b/src/app/build/intermediates/res/merged/debug/values-zh-rCN_values-zh-rCN.arsc.flat
new file mode 100644
index 0000000..c580e26
Binary files /dev/null and b/src/app/build/intermediates/res/merged/debug/values-zh-rCN_values-zh-rCN.arsc.flat differ
diff --git a/src/app/build/intermediates/res/merged/debug/values-zh-rTW_values-zh-rTW.arsc.flat b/src/app/build/intermediates/res/merged/debug/values-zh-rTW_values-zh-rTW.arsc.flat
new file mode 100644
index 0000000..fb5da27
Binary files /dev/null and b/src/app/build/intermediates/res/merged/debug/values-zh-rTW_values-zh-rTW.arsc.flat differ
diff --git a/src/app/build/intermediates/res/merged/debug/values_values.arsc.flat b/src/app/build/intermediates/res/merged/debug/values_values.arsc.flat
new file mode 100644
index 0000000..752628f
Binary files /dev/null and b/src/app/build/intermediates/res/merged/debug/values_values.arsc.flat differ
diff --git a/src/app/build/intermediates/symbols/debug/R.txt b/src/app/build/intermediates/symbols/debug/R.txt
new file mode 100644
index 0000000..df25427
--- /dev/null
+++ b/src/app/build/intermediates/symbols/debug/R.txt
@@ -0,0 +1,327 @@
+int array format_for_exported_note 0x7f010000
+int array menu_share_ways 0x7f010001
+int attr pstsDividerColor 0x7f020000
+int attr pstsDividerPadding 0x7f020001
+int attr pstsIndicatorColor 0x7f020002
+int attr pstsIndicatorHeight 0x7f020003
+int attr pstsScrollOffset 0x7f020004
+int attr pstsShouldExpand 0x7f020005
+int attr pstsTabBackground 0x7f020006
+int attr pstsTabPaddingLeftRight 0x7f020007
+int attr pstsTextAllCaps 0x7f020008
+int attr pstsUnderlineColor 0x7f020009
+int attr pstsUnderlineHeight 0x7f02000a
+int color background_tab_pressed 0x7f030000
+int color primary_text_dark 0x7f030001
+int color secondary_text_dark 0x7f030002
+int color user_query_highlight 0x7f030003
+int dimen text_font_size_large 0x7f040000
+int dimen text_font_size_medium 0x7f040001
+int dimen text_font_size_normal 0x7f040002
+int dimen text_font_size_small 0x7f040003
+int dimen text_font_size_super 0x7f040004
+int drawable background_tab 0x7f050000
+int drawable bg_btn_set_color 0x7f050001
+int drawable bg_color_btn_mask 0x7f050002
+int drawable call_record 0x7f050003
+int drawable clock 0x7f050004
+int drawable delete 0x7f050005
+int drawable dropdown_icon 0x7f050006
+int drawable edit_blue 0x7f050007
+int drawable edit_green 0x7f050008
+int drawable edit_red 0x7f050009
+int drawable edit_title_blue 0x7f05000a
+int drawable edit_title_green 0x7f05000b
+int drawable edit_title_red 0x7f05000c
+int drawable edit_title_white 0x7f05000d
+int drawable edit_title_yellow 0x7f05000e
+int drawable edit_white 0x7f05000f
+int drawable edit_yellow 0x7f050010
+int drawable font_large 0x7f050011
+int drawable font_normal 0x7f050012
+int drawable font_size_selector_bg 0x7f050013
+int drawable font_small 0x7f050014
+int drawable font_super 0x7f050015
+int drawable icon_actionbar 0x7f050016
+int drawable icon_app 0x7f050017
+int drawable list_background 0x7f050018
+int drawable list_blue_down 0x7f050019
+int drawable list_blue_middle 0x7f05001a
+int drawable list_blue_single 0x7f05001b
+int drawable list_blue_up 0x7f05001c
+int drawable list_folder 0x7f05001d
+int drawable list_footer_bg 0x7f05001e
+int drawable list_green_down 0x7f05001f
+int drawable list_green_middle 0x7f050020
+int drawable list_green_single 0x7f050021
+int drawable list_green_up 0x7f050022
+int drawable list_red_down 0x7f050023
+int drawable list_red_middle 0x7f050024
+int drawable list_red_single 0x7f050025
+int drawable list_red_up 0x7f050026
+int drawable list_white_down 0x7f050027
+int drawable list_white_middle 0x7f050028
+int drawable list_white_single 0x7f050029
+int drawable list_white_up 0x7f05002a
+int drawable list_yellow_down 0x7f05002b
+int drawable list_yellow_middle 0x7f05002c
+int drawable list_yellow_single 0x7f05002d
+int drawable list_yellow_up 0x7f05002e
+int drawable menu_delete 0x7f05002f
+int drawable menu_move 0x7f050030
+int drawable new_folder 0x7f050031
+int drawable new_note 0x7f050032
+int drawable new_note_normal 0x7f050033
+int drawable new_note_pressed 0x7f050034
+int drawable new_todo 0x7f050035
+int drawable note_edit_color_selector_panel 0x7f050036
+int drawable notification 0x7f050037
+int drawable search_result 0x7f050038
+int drawable selected 0x7f050039
+int drawable title_alert 0x7f05003a
+int drawable title_bar_bg 0x7f05003b
+int drawable widget_2x_blue 0x7f05003c
+int drawable widget_2x_green 0x7f05003d
+int drawable widget_2x_red 0x7f05003e
+int drawable widget_2x_white 0x7f05003f
+int drawable widget_2x_yellow 0x7f050040
+int drawable widget_4x_blue 0x7f050041
+int drawable widget_4x_green 0x7f050042
+int drawable widget_4x_red 0x7f050043
+int drawable widget_4x_white 0x7f050044
+int drawable widget_4x_yellow 0x7f050045
+int id account_dialog_subtitle 0x7f060000
+int id account_dialog_title 0x7f060001
+int id action_select_all 0x7f060002
+int id amPm 0x7f060003
+int id bg_color_list_view 0x7f060004
+int id btn 0x7f060005
+int id btn_new_note 0x7f060006
+int id btn_new_todo 0x7f060007
+int id btn_set_bg_color 0x7f060008
+int id cb_edit_item 0x7f060009
+int id cb_todo 0x7f06000a
+int id date 0x7f06000b
+int id delete 0x7f06000c
+int id draw 0x7f06000d
+int id et_edit_text 0x7f06000e
+int id et_foler_name 0x7f06000f
+int id et_todo_text 0x7f060010
+int id font_size_selector 0x7f060011
+int id hour 0x7f060012
+int id iv_alert_icon 0x7f060013
+int id iv_bg_blue 0x7f060014
+int id iv_bg_blue_select 0x7f060015
+int id iv_bg_green 0x7f060016
+int id iv_bg_green_select 0x7f060017
+int id iv_bg_red 0x7f060018
+int id iv_bg_red_select 0x7f060019
+int id iv_bg_white 0x7f06001a
+int id iv_bg_white_select 0x7f06001b
+int id iv_bg_yellow 0x7f06001c
+int id iv_bg_yellow_select 0x7f06001d
+int id iv_large_select 0x7f06001e
+int id iv_medium_select 0x7f06001f
+int id iv_small_select 0x7f060020
+int id iv_super_select 0x7f060021
+int id ll_font_large 0x7f060022
+int id ll_font_normal 0x7f060023
+int id ll_font_small 0x7f060024
+int id ll_font_super 0x7f060025
+int id menu_alert 0x7f060026
+int id menu_delete 0x7f060027
+int id menu_delete_remind 0x7f060028
+int id menu_export_text 0x7f060029
+int id menu_font_size 0x7f06002a
+int id menu_list_mode 0x7f06002b
+int id menu_new_folder 0x7f06002c
+int id menu_new_note 0x7f06002d
+int id menu_search 0x7f06002e
+int id menu_send_to_desktop 0x7f06002f
+int id menu_setting 0x7f060030
+int id menu_share 0x7f060031
+int id menu_sync 0x7f060032
+int id minute 0x7f060033
+int id move 0x7f060034
+int id navigation_bar 0x7f060035
+int id note_bg_color_selector 0x7f060036
+int id note_edit_list 0x7f060037
+int id note_edit_view 0x7f060038
+int id note_item 0x7f060039
+int id note_title 0x7f06003a
+int id notes_list 0x7f06003b
+int id prefenerece_sync_status_textview 0x7f06003c
+int id preference_sync_button 0x7f06003d
+int id selection_menu 0x7f06003e
+int id sv_note_edit 0x7f06003f
+int id todo_list 0x7f060040
+int id tv_alert_date 0x7f060041
+int id tv_folder_name 0x7f060042
+int id tv_modified_date 0x7f060043
+int id tv_name 0x7f060044
+int id tv_time 0x7f060045
+int id tv_title 0x7f060046
+int id tv_title_bar 0x7f060047
+int id tv_todo_text 0x7f060048
+int id widget_bg_image 0x7f060049
+int id widget_text 0x7f06004a
+int layout account_dialog_title 0x7f070000
+int layout add_account_text 0x7f070001
+int layout datetime_picker 0x7f070002
+int layout dialog_edit_text 0x7f070003
+int layout dialog_edit_todo 0x7f070004
+int layout folder_list_item 0x7f070005
+int layout note_edit 0x7f070006
+int layout note_edit_list_item 0x7f070007
+int layout note_item 0x7f070008
+int layout note_list 0x7f070009
+int layout note_list_dropdown_menu 0x7f07000a
+int layout note_list_footer 0x7f07000b
+int layout settings_header 0x7f07000c
+int layout todo_list 0x7f07000d
+int layout todo_list_item 0x7f07000e
+int layout white_board 0x7f07000f
+int layout widget_2x 0x7f070010
+int layout widget_4x 0x7f070011
+int menu call_note_edit 0x7f080000
+int menu call_record_folder 0x7f080001
+int menu note_edit 0x7f080002
+int menu note_list 0x7f080003
+int menu note_list_dropdown 0x7f080004
+int menu note_list_options 0x7f080005
+int menu sub_folder 0x7f080006
+int plurals search_results_title 0x7f090000
+int raw introduction 0x7f0a0000
+int string alert_message_delete_folder 0x7f0b0000
+int string alert_message_delete_note 0x7f0b0001
+int string alert_message_delete_notes 0x7f0b0002
+int string alert_title_delete 0x7f0b0003
+int string app_name 0x7f0b0004
+int string app_widget2x2 0x7f0b0005
+int string app_widget4x4 0x7f0b0006
+int string button_delete 0x7f0b0007
+int string call_record_folder_name 0x7f0b0008
+int string create_new_todo 0x7f0b0009
+int string datetime_dialog_cancel 0x7f0b000a
+int string datetime_dialog_ok 0x7f0b000b
+int string delete_remind_time_message 0x7f0b000c
+int string error_note_empty_for_clock 0x7f0b000d
+int string error_note_empty_for_send_to_desktop 0x7f0b000e
+int string error_note_not_exist 0x7f0b000f
+int string error_sdcard_export 0x7f0b0010
+int string error_sdcard_unmounted 0x7f0b0011
+int string error_sync_cancelled 0x7f0b0012
+int string error_sync_internal 0x7f0b0013
+int string error_sync_network 0x7f0b0014
+int string failed_sdcard_export 0x7f0b0015
+int string file_name_txt_format 0x7f0b0016
+int string file_path 0x7f0b0017
+int string folder_exist 0x7f0b0018
+int string format_date_ymd 0x7f0b0019
+int string format_datetime_mdhm 0x7f0b001a
+int string format_exported_file_location 0x7f0b001b
+int string format_folder_files_count 0x7f0b001c
+int string format_move_notes_to_folder 0x7f0b001d
+int string hint_foler_name 0x7f0b001e
+int string hint_todo_text 0x7f0b001f
+int string info_note_enter_desktop 0x7f0b0020
+int string menu_alert 0x7f0b0021
+int string menu_create_folder 0x7f0b0022
+int string menu_delete 0x7f0b0023
+int string menu_deselect_all 0x7f0b0024
+int string menu_export_text 0x7f0b0025
+int string menu_folder_change_name 0x7f0b0026
+int string menu_folder_delete 0x7f0b0027
+int string menu_folder_view 0x7f0b0028
+int string menu_font_large 0x7f0b0029
+int string menu_font_normal 0x7f0b002a
+int string menu_font_size 0x7f0b002b
+int string menu_font_small 0x7f0b002c
+int string menu_font_super 0x7f0b002d
+int string menu_list_mode 0x7f0b002e
+int string menu_move 0x7f0b002f
+int string menu_move_parent_folder 0x7f0b0030
+int string menu_normal_mode 0x7f0b0031
+int string menu_remove_remind 0x7f0b0032
+int string menu_search 0x7f0b0033
+int string menu_select_all 0x7f0b0034
+int string menu_select_none 0x7f0b0035
+int string menu_select_title 0x7f0b0036
+int string menu_send_to_desktop 0x7f0b0037
+int string menu_setting 0x7f0b0038
+int string menu_share 0x7f0b0039
+int string menu_sync 0x7f0b003a
+int string menu_sync_cancel 0x7f0b003b
+int string menu_title_select_folder 0x7f0b003c
+int string note_alert_expired 0x7f0b003d
+int string note_length 0x7f0b003e
+int string note_link_email 0x7f0b003f
+int string note_link_other 0x7f0b0040
+int string note_link_tel 0x7f0b0041
+int string note_link_web 0x7f0b0042
+int string notealert_enter 0x7f0b0043
+int string notealert_ok 0x7f0b0044
+int string notelist_menu_new 0x7f0b0045
+int string notelist_string_info 0x7f0b0046
+int string preferences_account_summary 0x7f0b0047
+int string preferences_account_title 0x7f0b0048
+int string preferences_add_account 0x7f0b0049
+int string preferences_bg_random_appear_title 0x7f0b004a
+int string preferences_button_sync_cancel 0x7f0b004b
+int string preferences_button_sync_immediately 0x7f0b004c
+int string preferences_dialog_change_account_title 0x7f0b004d
+int string preferences_dialog_change_account_warn_msg 0x7f0b004e
+int string preferences_dialog_select_account_tips 0x7f0b004f
+int string preferences_dialog_select_account_title 0x7f0b0050
+int string preferences_last_sync_time 0x7f0b0051
+int string preferences_last_sync_time_format 0x7f0b0052
+int string preferences_menu_cancel 0x7f0b0053
+int string preferences_menu_change_account 0x7f0b0054
+int string preferences_menu_remove_account 0x7f0b0055
+int string preferences_title 0x7f0b0056
+int string preferences_toast_cannot_change_account 0x7f0b0057
+int string preferences_toast_success_set_accout 0x7f0b0058
+int string search 0x7f0b0059
+int string search_hint 0x7f0b005a
+int string search_label 0x7f0b005b
+int string search_setting_description 0x7f0b005c
+int string set_remind_time_message 0x7f0b005d
+int string success_sdcard_export 0x7f0b005e
+int string success_sync_account 0x7f0b005f
+int string sync_progress_init_list 0x7f0b0060
+int string sync_progress_login 0x7f0b0061
+int string sync_progress_syncing 0x7f0b0062
+int string ticker_cancel 0x7f0b0063
+int string ticker_fail 0x7f0b0064
+int string ticker_success 0x7f0b0065
+int string ticker_syncing 0x7f0b0066
+int string todo_welcome 0x7f0b0067
+int string widget_havenot_content 0x7f0b0068
+int string widget_under_visit_mode 0x7f0b0069
+int style HighlightTextAppearancePrimary 0x7f0c0000
+int style HighlightTextAppearanceSecondary 0x7f0c0001
+int style NoteActionBarStyle 0x7f0c0002
+int style NoteTheme 0x7f0c0003
+int style TextAppearanceLarge 0x7f0c0004
+int style TextAppearanceMedium 0x7f0c0005
+int style TextAppearanceNormal 0x7f0c0006
+int style TextAppearancePrimaryItem 0x7f0c0007
+int style TextAppearanceSecondaryItem 0x7f0c0008
+int style TextAppearanceSuper 0x7f0c0009
+int style TextAppearanceUnderMenuIcon 0x7f0c000a
+int[] styleable PagerSlidingTabStrip { 0x7f020000, 0x7f020001, 0x7f020002, 0x7f020003, 0x7f020004, 0x7f020005, 0x7f020006, 0x7f020007, 0x7f020008, 0x7f020009, 0x7f02000a }
+int styleable PagerSlidingTabStrip_pstsDividerColor 0
+int styleable PagerSlidingTabStrip_pstsDividerPadding 1
+int styleable PagerSlidingTabStrip_pstsIndicatorColor 2
+int styleable PagerSlidingTabStrip_pstsIndicatorHeight 3
+int styleable PagerSlidingTabStrip_pstsScrollOffset 4
+int styleable PagerSlidingTabStrip_pstsShouldExpand 5
+int styleable PagerSlidingTabStrip_pstsTabBackground 6
+int styleable PagerSlidingTabStrip_pstsTabPaddingLeftRight 7
+int styleable PagerSlidingTabStrip_pstsTextAllCaps 8
+int styleable PagerSlidingTabStrip_pstsUnderlineColor 9
+int styleable PagerSlidingTabStrip_pstsUnderlineHeight 10
+int xml preferences 0x7f0e0000
+int xml searchable 0x7f0e0001
+int xml widget_2x_info 0x7f0e0002
+int xml widget_4x_info 0x7f0e0003
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/BuildConfig.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/BuildConfig.dex
new file mode 100644
index 0000000..b31dba9
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/BuildConfig.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$array.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$array.dex
new file mode 100644
index 0000000..86f25c1
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$array.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$color.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$color.dex
new file mode 100644
index 0000000..14cf163
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$color.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$dimen.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$dimen.dex
new file mode 100644
index 0000000..a371322
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$dimen.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$drawable.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$drawable.dex
new file mode 100644
index 0000000..8faa0c1
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$drawable.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$id.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$id.dex
new file mode 100644
index 0000000..30f3e14
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$id.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$layout.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$layout.dex
new file mode 100644
index 0000000..efd94ab
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$layout.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$menu.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$menu.dex
new file mode 100644
index 0000000..7184840
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$menu.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$plurals.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$plurals.dex
new file mode 100644
index 0000000..2916c41
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$plurals.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$raw.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$raw.dex
new file mode 100644
index 0000000..4b51f12
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$raw.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$string.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$string.dex
new file mode 100644
index 0000000..c9f9bc2
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$string.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$style.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$style.dex
new file mode 100644
index 0000000..b6618d7
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$style.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$xml.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$xml.dex
new file mode 100644
index 0000000..cfc0ffb
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R$xml.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R.dex
new file mode 100644
index 0000000..ddc503e
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/R.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Contact.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Contact.dex
new file mode 100644
index 0000000..64c44e2
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Contact.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Notes$CallNote.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Notes$CallNote.dex
new file mode 100644
index 0000000..02d3ca9
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Notes$CallNote.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Notes$DataColumns.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Notes$DataColumns.dex
new file mode 100644
index 0000000..ab099ac
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Notes$DataColumns.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Notes$DataConstants.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Notes$DataConstants.dex
new file mode 100644
index 0000000..bd12833
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Notes$DataConstants.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Notes$NoteColumns.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Notes$NoteColumns.dex
new file mode 100644
index 0000000..ac39b20
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Notes$NoteColumns.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Notes$TextNote.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Notes$TextNote.dex
new file mode 100644
index 0000000..a6dabfa
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Notes$TextNote.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Notes.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Notes.dex
new file mode 100644
index 0000000..bd61cc1
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/Notes.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesDatabaseHelper$TABLE.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesDatabaseHelper$TABLE.dex
new file mode 100644
index 0000000..26ec9ff
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesDatabaseHelper$TABLE.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesDatabaseHelper.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesDatabaseHelper.dex
new file mode 100644
index 0000000..5eef087
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesDatabaseHelper.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesProvider.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesProvider.dex
new file mode 100644
index 0000000..b1cab7e
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesProvider.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/data/MetaData.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/data/MetaData.dex
new file mode 100644
index 0000000..f52d2f6
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/data/MetaData.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/data/Node.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/data/Node.dex
new file mode 100644
index 0000000..294a0cb
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/data/Node.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/data/SqlData.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/data/SqlData.dex
new file mode 100644
index 0000000..40c9310
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/data/SqlData.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/data/SqlNote.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/data/SqlNote.dex
new file mode 100644
index 0000000..1f80565
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/data/SqlNote.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/data/Task.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/data/Task.dex
new file mode 100644
index 0000000..a8ca476
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/data/Task.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/data/TaskList.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/data/TaskList.dex
new file mode 100644
index 0000000..0746cc3
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/data/TaskList.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/exception/ActionFailureException.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/exception/ActionFailureException.dex
new file mode 100644
index 0000000..74ccc42
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/exception/ActionFailureException.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/exception/NetworkFailureException.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/exception/NetworkFailureException.dex
new file mode 100644
index 0000000..a8ae7a8
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/exception/NetworkFailureException.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskASyncTask$1.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskASyncTask$1.dex
new file mode 100644
index 0000000..f5805e8
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskASyncTask$1.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskASyncTask$OnCompleteListener.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskASyncTask$OnCompleteListener.dex
new file mode 100644
index 0000000..c82fe19
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskASyncTask$OnCompleteListener.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskASyncTask.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskASyncTask.dex
new file mode 100644
index 0000000..aadd4c3
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskASyncTask.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskClient.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskClient.dex
new file mode 100644
index 0000000..a48a7d2
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskClient.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskManager.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskManager.dex
new file mode 100644
index 0000000..c4c5852
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskManager.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskSyncService$1.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskSyncService$1.dex
new file mode 100644
index 0000000..7700cfa
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskSyncService$1.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskSyncService.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskSyncService.dex
new file mode 100644
index 0000000..9e28441
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/gtask/remote/GTaskSyncService.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/model/Note$NoteData.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/model/Note$NoteData.dex
new file mode 100644
index 0000000..e94f4b1
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/model/Note$NoteData.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/model/Note.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/model/Note.dex
new file mode 100644
index 0000000..3863b36
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/model/Note.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/model/WorkingNote$NoteSettingChangedListener.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/model/WorkingNote$NoteSettingChangedListener.dex
new file mode 100644
index 0000000..7b1d48b
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/model/WorkingNote$NoteSettingChangedListener.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/model/WorkingNote.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/model/WorkingNote.dex
new file mode 100644
index 0000000..e204e2c
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/model/WorkingNote.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/BackupUtils$TextExport.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/BackupUtils$TextExport.dex
new file mode 100644
index 0000000..a859b72
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/BackupUtils$TextExport.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/BackupUtils.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/BackupUtils.dex
new file mode 100644
index 0000000..949250b
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/BackupUtils.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/DataUtils.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/DataUtils.dex
new file mode 100644
index 0000000..f39496e
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/DataUtils.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/GTaskStringUtils.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/GTaskStringUtils.dex
new file mode 100644
index 0000000..a9ac62a
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/GTaskStringUtils.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/ResourceParser$NoteBgResources.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/ResourceParser$NoteBgResources.dex
new file mode 100644
index 0000000..369bbcf
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/ResourceParser$NoteBgResources.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/ResourceParser$NoteItemBgResources.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/ResourceParser$NoteItemBgResources.dex
new file mode 100644
index 0000000..f83ec2c
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/ResourceParser$NoteItemBgResources.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/ResourceParser$TextAppearanceResources.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/ResourceParser$TextAppearanceResources.dex
new file mode 100644
index 0000000..c18e626
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/ResourceParser$TextAppearanceResources.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/ResourceParser$WidgetBgResources.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/ResourceParser$WidgetBgResources.dex
new file mode 100644
index 0000000..e7a9321
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/ResourceParser$WidgetBgResources.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/ResourceParser.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/ResourceParser.dex
new file mode 100644
index 0000000..dcfc913
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/tool/ResourceParser.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/AlarmAlertActivity.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/AlarmAlertActivity.dex
new file mode 100644
index 0000000..9bc4697
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/AlarmAlertActivity.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/AlarmInitReceiver.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/AlarmInitReceiver.dex
new file mode 100644
index 0000000..0e6e827
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/AlarmInitReceiver.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/AlarmReceiver.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/AlarmReceiver.dex
new file mode 100644
index 0000000..9efbef0
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/AlarmReceiver.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePicker$1.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePicker$1.dex
new file mode 100644
index 0000000..7969780
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePicker$1.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePicker$2.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePicker$2.dex
new file mode 100644
index 0000000..d42e3cc
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePicker$2.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePicker$3.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePicker$3.dex
new file mode 100644
index 0000000..8010940
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePicker$3.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePicker$4.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePicker$4.dex
new file mode 100644
index 0000000..b717593
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePicker$4.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePicker$OnDateTimeChangedListener.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePicker$OnDateTimeChangedListener.dex
new file mode 100644
index 0000000..7624a01
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePicker$OnDateTimeChangedListener.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePicker.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePicker.dex
new file mode 100644
index 0000000..1bec1ff
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePicker.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePickerDialog$1.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePickerDialog$1.dex
new file mode 100644
index 0000000..62fbbf4
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePickerDialog$1.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePickerDialog$OnDateTimeSetListener.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePickerDialog$OnDateTimeSetListener.dex
new file mode 100644
index 0000000..239852e
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePickerDialog$OnDateTimeSetListener.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePickerDialog.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePickerDialog.dex
new file mode 100644
index 0000000..4ecc7c1
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DateTimePickerDialog.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DropdownMenu$1.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DropdownMenu$1.dex
new file mode 100644
index 0000000..67199d7
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DropdownMenu$1.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DropdownMenu.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DropdownMenu.dex
new file mode 100644
index 0000000..a61d5eb
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/DropdownMenu.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/FoldersListAdapter$FolderListItem.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/FoldersListAdapter$FolderListItem.dex
new file mode 100644
index 0000000..5e9b209
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/FoldersListAdapter$FolderListItem.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/FoldersListAdapter.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/FoldersListAdapter.dex
new file mode 100644
index 0000000..5e91a24
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/FoldersListAdapter.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditActivity$1.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditActivity$1.dex
new file mode 100644
index 0000000..aabd70b
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditActivity$1.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditActivity$2.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditActivity$2.dex
new file mode 100644
index 0000000..870d640
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditActivity$2.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditActivity$3.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditActivity$3.dex
new file mode 100644
index 0000000..5153cab
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditActivity$3.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditActivity$HeadViewHolder.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditActivity$HeadViewHolder.dex
new file mode 100644
index 0000000..953d7e8
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditActivity$HeadViewHolder.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditActivity.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditActivity.dex
new file mode 100644
index 0000000..e45060f
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditActivity.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditText$1.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditText$1.dex
new file mode 100644
index 0000000..8f68b9b
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditText$1.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditText$OnTextViewChangeListener.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditText$OnTextViewChangeListener.dex
new file mode 100644
index 0000000..8bf55e0
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditText$OnTextViewChangeListener.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditText.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditText.dex
new file mode 100644
index 0000000..1bbfaa3
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteEditText.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteItemData.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteItemData.dex
new file mode 100644
index 0000000..2054951
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NoteItemData.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$1.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$1.dex
new file mode 100644
index 0000000..cc688b3
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$1.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$2.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$2.dex
new file mode 100644
index 0000000..f947949
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$2.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$3.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$3.dex
new file mode 100644
index 0000000..76bad82
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$3.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$4.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$4.dex
new file mode 100644
index 0000000..cff1ad3
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$4.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$5.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$5.dex
new file mode 100644
index 0000000..6aeec4e
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$5.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$6.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$6.dex
new file mode 100644
index 0000000..501e8f0
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$6.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$7.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$7.dex
new file mode 100644
index 0000000..5c0203f
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$7.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$8.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$8.dex
new file mode 100644
index 0000000..3f37781
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$8.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$9.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$9.dex
new file mode 100644
index 0000000..9d30898
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$9.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$BackgroundQueryHandler.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$BackgroundQueryHandler.dex
new file mode 100644
index 0000000..59c73d2
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$BackgroundQueryHandler.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$ListEditState.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$ListEditState.dex
new file mode 100644
index 0000000..741ceaf
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$ListEditState.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$ModeCallback$1.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$ModeCallback$1.dex
new file mode 100644
index 0000000..5903e2c
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$ModeCallback$1.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$ModeCallback$2.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$ModeCallback$2.dex
new file mode 100644
index 0000000..a65d30f
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$ModeCallback$2.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$ModeCallback.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$ModeCallback.dex
new file mode 100644
index 0000000..b3b1553
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$ModeCallback.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$NewNoteOnTouchListener.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$NewNoteOnTouchListener.dex
new file mode 100644
index 0000000..19784aa
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$NewNoteOnTouchListener.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$OnListItemClickListener.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$OnListItemClickListener.dex
new file mode 100644
index 0000000..6b05b1b
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity$OnListItemClickListener.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity.dex
new file mode 100644
index 0000000..38ced45
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListActivity.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListAdapter$AppWidgetAttribute.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListAdapter$AppWidgetAttribute.dex
new file mode 100644
index 0000000..ffb2ac6
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListAdapter$AppWidgetAttribute.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListAdapter.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListAdapter.dex
new file mode 100644
index 0000000..a6ee5ee
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListAdapter.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListItem.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListItem.dex
new file mode 100644
index 0000000..1caff05
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesListItem.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$1.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$1.dex
new file mode 100644
index 0000000..ff40e9f
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$1.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$2.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$2.dex
new file mode 100644
index 0000000..206be74
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$2.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$3.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$3.dex
new file mode 100644
index 0000000..7d8653c
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$3.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$4.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$4.dex
new file mode 100644
index 0000000..df9e7fb
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$4.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$5.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$5.dex
new file mode 100644
index 0000000..66cd24a
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$5.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$6.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$6.dex
new file mode 100644
index 0000000..258145b
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$6.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$7.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$7.dex
new file mode 100644
index 0000000..51133e5
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$7.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$8.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$8.dex
new file mode 100644
index 0000000..6f6bbc2
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$8.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$GTaskReceiver.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$GTaskReceiver.dex
new file mode 100644
index 0000000..faedeb0
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity$GTaskReceiver.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity.dex
new file mode 100644
index 0000000..28c99df
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/ui/NotesPreferenceActivity.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/widget/NoteWidgetProvider.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/widget/NoteWidgetProvider.dex
new file mode 100644
index 0000000..e8bc7ff
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/widget/NoteWidgetProvider.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/widget/NoteWidgetProvider_2x.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/widget/NoteWidgetProvider_2x.dex
new file mode 100644
index 0000000..388946c
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/widget/NoteWidgetProvider_2x.dex differ
diff --git a/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/widget/NoteWidgetProvider_4x.dex b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/widget/NoteWidgetProvider_4x.dex
new file mode 100644
index 0000000..a7661bb
Binary files /dev/null and b/src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/widget/NoteWidgetProvider_4x.dex differ
diff --git a/src/app/build/outputs/apk/debug/app-debug.apk b/src/app/build/outputs/apk/debug/app-debug.apk
new file mode 100644
index 0000000..411dd74
Binary files /dev/null and b/src/app/build/outputs/apk/debug/app-debug.apk differ
diff --git a/src/app/build/outputs/logs/manifest-merger-debug-report.txt b/src/app/build/outputs/logs/manifest-merger-debug-report.txt
new file mode 100644
index 0000000..2fec8a5
--- /dev/null
+++ b/src/app/build/outputs/logs/manifest-merger-debug-report.txt
@@ -0,0 +1,242 @@
+-- Merging decision tree log ---
+manifest
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:18:1-149:12
+INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:18:1-149:12
+INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:18:1-149:12
+INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:18:1-149:12
+MERGED from [com.astuetz:pagerslidingtabstrip:1.0.1] C:\Users\21931\.gradle\gradle-5.4.1-all\gradle-5.4.1\caches\transforms-2\files-2.1\e1d9da03002cb11f79e842a285800b3f\pagerslidingtabstrip-1.0.1\AndroidManifest.xml:1:1-5:12
+INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:18:1-149:12
+INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:18:1-149:12
+INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:18:1-149:12
+ package
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:19:5-31
+ INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml
+ INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml
+ android:versionName
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:21:5-30
+ INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml
+ INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml
+ xmlns:android
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:18:11-69
+ android:versionCode
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:20:5-28
+ INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml
+ INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml
+uses-permission#android.permission.WRITE_EXTERNAL_STORAGE
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:23:5-81
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:23:22-78
+uses-permission#com.android.launcher.permission.INSTALL_SHORTCUT
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:24:5-88
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:24:22-85
+uses-permission#android.permission.INTERNET
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:25:5-67
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:25:22-64
+uses-permission#android.permission.READ_CONTACTS
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:26:5-72
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:26:22-69
+uses-permission#android.permission.MANAGE_ACCOUNTS
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:27:5-74
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:27:22-71
+uses-permission#android.permission.AUTHENTICATE_ACCOUNTS
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:28:5-80
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:28:22-77
+uses-permission#android.permission.GET_ACCOUNTS
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:29:5-71
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:29:22-68
+uses-permission#android.permission.USE_CREDENTIALS
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:30:5-74
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:30:22-71
+uses-permission#android.permission.RECEIVE_BOOT_COMPLETED
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:31:5-81
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:31:22-78
+application
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:33:5-148:19
+MERGED from [com.astuetz:pagerslidingtabstrip:1.0.1] C:\Users\21931\.gradle\gradle-5.4.1-all\gradle-5.4.1\caches\transforms-2\files-2.1\e1d9da03002cb11f79e842a285800b3f\pagerslidingtabstrip-1.0.1\AndroidManifest.xml:4:5-19
+MERGED from [com.astuetz:pagerslidingtabstrip:1.0.1] C:\Users\21931\.gradle\gradle-5.4.1-all\gradle-5.4.1\caches\transforms-2\files-2.1\e1d9da03002cb11f79e842a285800b3f\pagerslidingtabstrip-1.0.1\AndroidManifest.xml:4:5-19
+ android:label
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:35:9-41
+ android:icon
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:34:9-42
+activity#net.micode.notes.ui.NotesListActivity
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:36:9-49:20
+ android:label
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:40:13-45
+ android:launchMode
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:41:13-43
+ android:windowSoftInputMode
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:43:13-52
+ android:configChanges
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:39:13-74
+ android:theme
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:42:13-60
+ android:logo
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:38:13-52
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:37:13-49
+intent-filter#action:name:android.intent.action.MAIN+category:name:android.intent.category.LAUNCHER
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:45:13-48:29
+action#android.intent.action.MAIN
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:46:17-69
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:46:25-66
+category#android.intent.category.LAUNCHER
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:47:17-77
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:47:27-74
+activity#net.micode.notes.ui.NoteEditActivity
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:51:9-80:20
+ android:launchMode
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:55:13-43
+ android:configChanges
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:54:13-74
+ android:theme
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:56:13-45
+ android:logo
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:53:13-52
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:52:13-48
+intent-filter#action:name:android.intent.action.VIEW+category:name:android.intent.category.DEFAULT+data:mimeType:vnd.android.cursor.item/call_note+data:mimeType:vnd.android.cursor.item/text_note
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:58:13-63:29
+action#android.intent.action.VIEW
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:59:17-69
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:59:25-66
+category#android.intent.category.DEFAULT
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:60:17-76
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:60:27-73
+data
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:61:17-78
+ android:mimeType
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:61:23-75
+intent-filter#action:name:android.intent.action.INSERT_OR_EDIT+category:name:android.intent.category.DEFAULT+data:mimeType:vnd.android.cursor.item/call_note+data:mimeType:vnd.android.cursor.item/text_note
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:65:13-70:29
+action#android.intent.action.INSERT_OR_EDIT
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:66:17-79
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:66:25-76
+intent-filter#action:name:android.intent.action.SEARCH+category:name:android.intent.category.DEFAULT
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:72:13-75:29
+action#android.intent.action.SEARCH
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:73:17-71
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:73:25-68
+meta-data#android.app.searchable
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:77:13-79:54
+ android:resource
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:79:17-51
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:78:17-54
+provider#net.micode.notes.data.NotesProvider
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:82:9-85:43
+ android:authorities
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:84:13-47
+ android:multiprocess
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:85:13-40
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:83:13-63
+receiver#net.micode.notes.widget.NoteWidgetProvider_2x
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:87:9-99:20
+ android:label
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:89:13-50
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:88:13-57
+intent-filter#action:name:android.appwidget.action.APPWIDGET_DELETED+action:name:android.appwidget.action.APPWIDGET_UPDATE+action:name:android.intent.action.PRIVACY_MODE_CHANGED
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:90:13-94:29
+action#android.appwidget.action.APPWIDGET_UPDATE
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:91:17-84
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:91:25-81
+action#android.appwidget.action.APPWIDGET_DELETED
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:92:17-85
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:92:25-82
+action#android.intent.action.PRIVACY_MODE_CHANGED
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:93:17-85
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:93:25-82
+meta-data#android.appwidget.provider
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:96:13-98:58
+ android:resource
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:98:17-55
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:97:17-58
+receiver#net.micode.notes.widget.NoteWidgetProvider_4x
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:100:9-113:20
+ android:label
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:102:13-50
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:101:13-57
+receiver#net.micode.notes.ui.AlarmInitReceiver
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:115:9-119:20
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:115:19-55
+intent-filter#action:name:android.intent.action.BOOT_COMPLETED
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:116:13-118:29
+action#android.intent.action.BOOT_COMPLETED
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:117:17-79
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:117:25-76
+receiver#net.micode.notes.ui.AlarmReceiver
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:121:9-124:20
+ android:process
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:123:13-38
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:122:13-61
+activity#net.micode.notes.ui.AlarmAlertActivity
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:126:9-131:20
+ android:label
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:128:13-45
+ android:launchMode
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:129:13-48
+ android:theme
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:130:13-75
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:127:13-50
+activity#net.micode.notes.ui.NotesPreferenceActivity
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:133:9-138:20
+ android:label
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:135:13-54
+ android:launchMode
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:136:13-43
+ android:theme
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:137:13-60
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:134:13-71
+service#net.micode.notes.gtask.remote.GTaskSyncService
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:140:9-143:19
+ android:exported
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:142:13-37
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:141:13-74
+meta-data#android.app.default_searchable
+ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:145:9-147:52
+ android:value
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:147:13-49
+ android:name
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml:146:13-58
+uses-sdk
+INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml reason: use-sdk injection requested
+INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml
+INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml
+MERGED from [com.astuetz:pagerslidingtabstrip:1.0.1] C:\Users\21931\.gradle\gradle-5.4.1-all\gradle-5.4.1\caches\transforms-2\files-2.1\e1d9da03002cb11f79e842a285800b3f\pagerslidingtabstrip-1.0.1\AndroidManifest.xml:2:5-72
+MERGED from [com.astuetz:pagerslidingtabstrip:1.0.1] C:\Users\21931\.gradle\gradle-5.4.1-all\gradle-5.4.1\caches\transforms-2\files-2.1\e1d9da03002cb11f79e842a285800b3f\pagerslidingtabstrip-1.0.1\AndroidManifest.xml:2:5-72
+INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml
+INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml
+ android:targetSdkVersion
+ INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml
+ INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml
+ android:minSdkVersion
+ INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml
+ ADDED from C:\Project\minote\src\app\src\main\AndroidManifest.xml
+ INJECTED from C:\Project\minote\src\app\src\main\AndroidManifest.xml
diff --git a/src/app/src/main/AndroidManifest.xml b/src/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..8ba2de8
--- /dev/null
+++ b/src/app/src/main/AndroidManifest.xml
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/src/main/java/net/micode/notes/gtask/data/MetaData.java b/src/app/src/main/java/net/micode/notes/gtask/data/MetaData.java
new file mode 100644
index 0000000..32da50d
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/gtask/data/MetaData.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.gtask.data;
+
+import android.database.Cursor;
+import android.util.Log;
+
+import net.micode.notes.tool.GTaskStringUtils;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/*
+关于同步任务的元数据
+ */
+public class MetaData extends Task {
+ private final static String TAG = MetaData.class.getSimpleName();
+
+ private String mRelatedGid = null;
+
+ public void setMeta(String gid, JSONObject metaInfo) {
+ try {
+ //put中第一个元素在tool包中
+ metaInfo.put(GTaskStringUtils.META_HEAD_GTASK_ID, gid);
+ //捕获json异常
+ } catch (JSONException e) {
+ Log.e(TAG, "failed to put related gid");
+ }
+ //建立便签
+ setNotes(metaInfo.toString());
+ //函数中的元素依然在tool包中,设置便签名
+ setName(GTaskStringUtils.META_NOTE_NAME);
+ }
+
+ public String getRelatedGid() {
+ return mRelatedGid;
+ }
+
+ @Override
+ public boolean isWorthSaving() {
+ return getNotes() != null;
+ }
+
+ @Override
+
+ public void setContentByRemoteJSON(JSONObject js) {
+ //super调用父类
+ super.setContentByRemoteJSON(js);
+ if (getNotes() != null) {
+ try {
+ //将trim()去掉两端无意义字符后的字符串转化为JSON格式
+ JSONObject metaInfo = new JSONObject(getNotes().trim());
+ mRelatedGid = metaInfo.getString(GTaskStringUtils.META_HEAD_GTASK_ID);
+ } catch (JSONException e) {
+ Log.w(TAG, "failed to get related gid");
+ mRelatedGid = null;
+ }
+ }
+ }
+ /*override
+ 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。
+ 即外壳不变,核心重写!
+ 重写的好处在于子类可以根据需要,定义特定于自己的行为。
+ 也就是说子类能够根据需要实现父类的方法。
+ */
+ @Override
+ public void setContentByLocalJSON(JSONObject js) {
+ // this function should not be called
+ throw new IllegalAccessError("MetaData:setContentByLocalJSON should not be called");
+ }
+
+ @Override
+ public JSONObject getLocalJSONFromContent() {
+ throw new IllegalAccessError("MetaData:getLocalJSONFromContent should not be called");
+ }
+
+ @Override
+ public int getSyncAction(Cursor c) {
+ throw new IllegalAccessError("MetaData:getSyncAction should not be called");
+ }
+
+}
diff --git a/src/app/src/main/java/net/micode/notes/gtask/data/Node.java b/src/app/src/main/java/net/micode/notes/gtask/data/Node.java
new file mode 100644
index 0000000..778d76b
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/gtask/data/Node.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.gtask.data;
+
+import android.database.Cursor;
+
+import org.json.JSONObject;
+
+public abstract class Node {
+ //定义结点的属性变量
+ public static final int SYNC_ACTION_NONE = 0;
+ //添加远程同步动作
+ public static final int SYNC_ACTION_ADD_REMOTE = 1;
+ //添加当地同步动作
+ public static final int SYNC_ACTION_ADD_LOCAL = 2;
+ //删除远程同步动作
+ public static final int SYNC_ACTION_DEL_REMOTE = 3;
+ //删除当地同步动作
+ public static final int SYNC_ACTION_DEL_LOCAL = 4;
+ //更新远程同步动作
+ public static final int SYNC_ACTION_UPDATE_REMOTE = 5;
+ //更新当地同步动作
+ public static final int SYNC_ACTION_UPDATE_LOCAL = 6;
+ //远程同步动作冲突
+ public static final int SYNC_ACTION_UPDATE_CONFLICT = 7;
+ //当地远程同步冲突
+ public static final int SYNC_ACTION_ERROR = 8;
+
+ private String mGid;
+
+ private String mName;
+ //记录最后一次修改
+ private long mLastModified;
+
+ private boolean mDeleted;
+
+ //构造Node
+ public Node() {
+ mGid = null;
+ mName = "";
+ mLastModified = 0;
+ mDeleted = false;
+ }
+ //创建
+ public abstract JSONObject getCreateAction(int actionId);
+ //更新
+ public abstract JSONObject getUpdateAction(int actionId);
+ //通过远程JSON设置内容
+ public abstract void setContentByRemoteJSON(JSONObject js);
+ //通过本地JSON设置内容
+ public abstract void setContentByLocalJSON(JSONObject js);
+ //从内容获得本地JSON
+ public abstract JSONObject getLocalJSONFromContent();
+ //获得同步动作
+ public abstract int getSyncAction(Cursor c);
+ //下面是一系列构造初始化
+ public void setGid(String gid) {
+ this.mGid = gid;
+ }
+
+ public void setName(String name) {
+ this.mName = name;
+ }
+
+ public void setLastModified(long lastModified) {
+ this.mLastModified = lastModified;
+ }
+
+ public void setDeleted(boolean deleted) {
+ this.mDeleted = deleted;
+ }
+
+ public String getGid() {
+ return this.mGid;
+ }
+
+ public String getName() {
+ return this.mName;
+ }
+
+ public long getLastModified() {
+ return this.mLastModified;
+ }
+
+ public boolean getDeleted() {
+ return this.mDeleted;
+ }
+
+}
diff --git a/src/app/src/main/java/net/micode/notes/gtask/data/SqlData.java b/src/app/src/main/java/net/micode/notes/gtask/data/SqlData.java
new file mode 100644
index 0000000..3abbac0
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/gtask/data/SqlData.java
@@ -0,0 +1,210 @@
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.gtask.data;
+
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.util.Log;
+
+import net.micode.notes.data.Notes;
+import net.micode.notes.data.Notes.DataColumns;
+import net.micode.notes.data.Notes.DataConstants;
+import net.micode.notes.data.Notes.NoteColumns;
+import net.micode.notes.data.NotesDatabaseHelper.TABLE;
+import net.micode.notes.gtask.exception.ActionFailureException;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/*
+同步任务基本数据
+ */
+public class SqlData {
+ private static final String TAG = SqlData.class.getSimpleName();
+ //设置初始ID
+ private static final int INVALID_ID = -99999;
+
+ public static final String[] PROJECTION_DATA = new String[] {
+ DataColumns.ID, DataColumns.MIME_TYPE, DataColumns.CONTENT, DataColumns.DATA1,
+ DataColumns.DATA3
+ };
+
+ //数据列ID
+ public static final int DATA_ID_COLUMN = 0;
+ //数据列的mime_type
+ public static final int DATA_MIME_TYPE_COLUMN = 1;
+ //数据列内容
+ public static final int DATA_CONTENT_COLUMN = 2;
+
+ public static final int DATA_CONTENT_DATA_1_COLUMN = 3;
+
+ public static final int DATA_CONTENT_DATA_3_COLUMN = 4;
+
+ private ContentResolver mContentResolver;
+
+ private boolean mIsCreate;
+
+ private long mDataId;
+
+ private String mDataMimeType;
+
+ private String mDataContent;
+
+ private long mDataContentData1;
+
+ private String mDataContentData3;
+ /*ContentValues
+ 就是用于保存一些数据(string/boolean/byte/double/float/int/long/short …)信息,
+ 这些信息可以被数据库操作时方便地使用。
+ ContentValues 和 HashTable 类似,都是一种存储的机制,
+ 但是两者最大的区别就在于:ContentValues 只能存储基本类型的数据,
+ 像string、int之类的,不能存储对象这种东西,而HashTable却可以存储对象。
+ */
+ private ContentValues mDiffDataValues;
+ //构造函数两种
+ public SqlData(Context context) {
+ mContentResolver = context.getContentResolver();
+ mIsCreate = true;
+ mDataId = INVALID_ID;
+ mDataMimeType = DataConstants.NOTE;
+ mDataContent = "";
+ mDataContentData1 = 0;
+ mDataContentData3 = "";
+ mDiffDataValues = new ContentValues();
+ }
+
+ public SqlData(Context context, Cursor c) {
+ mContentResolver = context.getContentResolver();
+ mIsCreate = false;
+ loadFromCursor(c);
+ mDiffDataValues = new ContentValues();
+ }
+ //根据cursor确定属性参数
+ private void loadFromCursor(Cursor c) {
+ mDataId = c.getLong(DATA_ID_COLUMN);
+ mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN);
+ mDataContent = c.getString(DATA_CONTENT_COLUMN);
+ mDataContentData1 = c.getLong(DATA_CONTENT_DATA_1_COLUMN);
+ mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN);
+ }
+ //根据JSON的内容设置属性
+ public void setContent(JSONObject js) throws JSONException {
+ long dataId = js.has(DataColumns.ID) ? js.getLong(DataColumns.ID) : INVALID_ID;
+ if (mIsCreate || mDataId != dataId) {
+ mDiffDataValues.put(DataColumns.ID, dataId);
+ }
+ mDataId = dataId;
+
+ String dataMimeType = js.has(DataColumns.MIME_TYPE) ? js.getString(DataColumns.MIME_TYPE)
+ : DataConstants.NOTE;
+ if (mIsCreate || !mDataMimeType.equals(dataMimeType)) {
+ mDiffDataValues.put(DataColumns.MIME_TYPE, dataMimeType);
+ }
+ mDataMimeType = dataMimeType;
+
+ String dataContent = js.has(DataColumns.CONTENT) ? js.getString(DataColumns.CONTENT) : "";
+ if (mIsCreate || !mDataContent.equals(dataContent)) {
+ mDiffDataValues.put(DataColumns.CONTENT, dataContent);
+ }
+ mDataContent = dataContent;
+
+ long dataContentData1 = js.has(DataColumns.DATA1) ? js.getLong(DataColumns.DATA1) : 0;
+ if (mIsCreate || mDataContentData1 != dataContentData1) {
+ mDiffDataValues.put(DataColumns.DATA1, dataContentData1);
+ }
+ mDataContentData1 = dataContentData1;
+
+ String dataContentData3 = js.has(DataColumns.DATA3) ? js.getString(DataColumns.DATA3) : "";
+ if (mIsCreate || !mDataContentData3.equals(dataContentData3)) {
+ mDiffDataValues.put(DataColumns.DATA3, dataContentData3);
+ }
+ mDataContentData3 = dataContentData3;
+ }
+ //利用JSON获取内容属性
+ public JSONObject getContent() throws JSONException {
+ //记录未在数据库建立
+ if (mIsCreate) {
+ Log.e(TAG, "it seems that we haven't created this in database yet");
+ return null;
+ }
+ JSONObject js = new JSONObject();
+ //利用JSON将一系列参数添加进来
+ js.put(DataColumns.ID, mDataId);
+ js.put(DataColumns.MIME_TYPE, mDataMimeType);
+ js.put(DataColumns.CONTENT, mDataContent);
+ js.put(DataColumns.DATA1, mDataContentData1);
+ js.put(DataColumns.DATA3, mDataContentData3);
+ return js;
+ }
+ //传入noteid为建立便签准备
+ public void commit(long noteId, boolean validateVersion, long version) {
+
+ if (mIsCreate) {
+ if (mDataId == INVALID_ID && mDiffDataValues.containsKey(DataColumns.ID)) {
+ mDiffDataValues.remove(DataColumns.ID);
+ }
+ //保存信息
+ mDiffDataValues.put(DataColumns.NOTE_ID, noteId);
+ Uri uri = mContentResolver.insert(Notes.CONTENT_DATA_URI, mDiffDataValues);
+ try {
+ /*
+ Uri的getPathSegments()方法返回的是一个元素为String的List,
+ 每个元素都是从Uri截取出来的一部分。
+ */
+ mDataId = Long.valueOf(uri.getPathSegments().get(1));
+ //捕获数字格式异常
+ } catch (NumberFormatException e) {
+ Log.e(TAG, "Get note id error :" + e.toString());
+ throw new ActionFailureException("create note failed");
+ }
+ } else {
+ if (mDiffDataValues.size() > 0) {
+ int result = 0;
+ if (!validateVersion) {
+ /*
+ ContentResolver.update方法ContentValue只更新指定的字段
+ .update(Uri arg0,ContentValues arg1,String arg2,String[] arg3)
+ */
+ result = mContentResolver.update(ContentUris.withAppendedId(
+ Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, null, null);
+ } else {
+ result = mContentResolver.update(ContentUris.withAppendedId(
+ Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues,
+ " ? in (SELECT " + NoteColumns.ID + " FROM " + TABLE.NOTE
+ + " WHERE " + NoteColumns.VERSION + "=?)", new String[] {
+ String.valueOf(noteId), String.valueOf(version)
+ });
+ }
+ //未更新
+ if (result == 0) {
+ Log.w(TAG, "there is no update. maybe user updates note when syncing");
+ }
+ }
+ }
+ //清空记录,建立失败
+ mDiffDataValues.clear();
+ mIsCreate = false;
+ }
+
+ public long getId() {
+ return mDataId;
+ }
+}
diff --git a/src/app/src/main/java/net/micode/notes/gtask/data/SqlNote.java b/src/app/src/main/java/net/micode/notes/gtask/data/SqlNote.java
new file mode 100644
index 0000000..476c307
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/gtask/data/SqlNote.java
@@ -0,0 +1,509 @@
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.gtask.data;
+
+import android.appwidget.AppWidgetManager;
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.util.Log;
+
+import net.micode.notes.data.Notes;
+import net.micode.notes.data.Notes.DataColumns;
+import net.micode.notes.data.Notes.NoteColumns;
+import net.micode.notes.gtask.exception.ActionFailureException;
+import net.micode.notes.tool.GTaskStringUtils;
+import net.micode.notes.tool.ResourceParser;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+
+
+public class SqlNote {
+ private static final String TAG = SqlNote.class.getSimpleName();
+
+ private static final int INVALID_ID = -99999;
+
+ public static final String[] PROJECTION_NOTE = new String[] {
+ NoteColumns.ID, NoteColumns.ALERTED_DATE, NoteColumns.BG_COLOR_ID,
+ NoteColumns.CREATED_DATE, NoteColumns.HAS_ATTACHMENT, NoteColumns.MODIFIED_DATE,
+ NoteColumns.NOTES_COUNT, NoteColumns.PARENT_ID, NoteColumns.SNIPPET, NoteColumns.TYPE,
+ NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE, NoteColumns.SYNC_ID,
+ NoteColumns.LOCAL_MODIFIED, NoteColumns.ORIGIN_PARENT_ID, NoteColumns.GTASK_ID,
+ NoteColumns.VERSION
+ };
+ //ID列
+ public static final int ID_COLUMN = 0;
+ //警示日期列
+ public static final int ALERTED_DATE_COLUMN = 1;
+ //背景颜色id列
+ public static final int BG_COLOR_ID_COLUMN = 2;
+ //建立的日期列
+ public static final int CREATED_DATE_COLUMN = 3;
+ //有连接列
+ public static final int HAS_ATTACHMENT_COLUMN = 4;
+ //修改日期列
+ public static final int MODIFIED_DATE_COLUMN = 5;
+ //便签数目列
+ public static final int NOTES_COUNT_COLUMN = 6;
+
+ public static final int PARENT_ID_COLUMN = 7;
+
+ public static final int SNIPPET_COLUMN = 8;
+
+ public static final int TYPE_COLUMN = 9;
+
+ public static final int WIDGET_ID_COLUMN = 10;
+
+ public static final int WIDGET_TYPE_COLUMN = 11;
+
+ public static final int SYNC_ID_COLUMN = 12;
+
+ public static final int LOCAL_MODIFIED_COLUMN = 13;
+
+ public static final int ORIGIN_PARENT_ID_COLUMN = 14;
+
+ public static final int GTASK_ID_COLUMN = 15;
+
+ public static final int VERSION_COLUMN = 16;
+
+ private Context mContext;
+
+ private ContentResolver mContentResolver;
+
+ private boolean mIsCreate;
+
+ private long mId;
+
+ private long mAlertDate;
+
+ private int mBgColorId;
+
+ private long mCreatedDate;
+
+ private int mHasAttachment;
+
+ private long mModifiedDate;
+
+ private long mParentId;
+
+ private String mSnippet;
+
+ private int mType;
+
+ private int mWidgetId;
+
+ private int mWidgetType;
+
+ private long mOriginParent;
+
+ private long mVersion;
+
+ private ContentValues mDiffNoteValues;
+
+ private ArrayList mDataList;
+ //三类构造函数
+ public SqlNote(Context context) {
+ mContext = context;
+ mContentResolver = context.getContentResolver();
+ mIsCreate = true;
+ mId = INVALID_ID;
+ mAlertDate = 0;
+ mBgColorId = ResourceParser.getDefaultBgId(context);
+ mCreatedDate = System.currentTimeMillis();
+ mHasAttachment = 0;
+ mModifiedDate = System.currentTimeMillis();
+ mParentId = 0;
+ mSnippet = "";
+ mType = Notes.TYPE_NOTE;
+ mWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
+ mWidgetType = Notes.TYPE_WIDGET_INVALIDE;
+ mOriginParent = 0;
+ mVersion = 0;
+ mDiffNoteValues = new ContentValues();
+ mDataList = new ArrayList();
+ }
+
+ public SqlNote(Context context, Cursor c) {
+ mContext = context;
+ mContentResolver = context.getContentResolver();
+ mIsCreate = false;
+ loadFromCursor(c);
+ mDataList = new ArrayList();
+ if (mType == Notes.TYPE_NOTE)
+ loadDataContent();
+ mDiffNoteValues = new ContentValues();
+ }
+
+ public SqlNote(Context context, long id) {
+ mContext = context;
+ mContentResolver = context.getContentResolver();
+ mIsCreate = false;
+ loadFromCursor(id);
+ mDataList = new ArrayList();
+ if (mType == Notes.TYPE_NOTE)
+ loadDataContent();
+ mDiffNoteValues = new ContentValues();
+
+ }
+ //递归查询符合的id
+ private void loadFromCursor(long id) {
+ Cursor c = null;
+ try {
+ c = mContentResolver.query(Notes.CONTENT_NOTE_URI, PROJECTION_NOTE, "(_id=?)",
+ new String[] {
+ String.valueOf(id)
+ }, null);
+ if (c != null) {
+ c.moveToNext();
+ loadFromCursor(c);
+ } else {
+ Log.w(TAG, "loadFromCursor: cursor = null");
+ }
+ } finally {
+ if (c != null)
+ c.close();
+ }
+ }
+ //利用cursor设置属性参数
+ private void loadFromCursor(Cursor c) {
+ mId = c.getLong(ID_COLUMN);
+ mAlertDate = c.getLong(ALERTED_DATE_COLUMN);
+ mBgColorId = c.getInt(BG_COLOR_ID_COLUMN);
+ mCreatedDate = c.getLong(CREATED_DATE_COLUMN);
+ mHasAttachment = c.getInt(HAS_ATTACHMENT_COLUMN);
+ mModifiedDate = c.getLong(MODIFIED_DATE_COLUMN);
+ mParentId = c.getLong(PARENT_ID_COLUMN);
+ mSnippet = c.getString(SNIPPET_COLUMN);
+ mType = c.getInt(TYPE_COLUMN);
+ mWidgetId = c.getInt(WIDGET_ID_COLUMN);
+ mWidgetType = c.getInt(WIDGET_TYPE_COLUMN);
+ mVersion = c.getLong(VERSION_COLUMN);
+ }
+ //根据数据库查询id
+ private void loadDataContent() {
+ Cursor c = null;
+ mDataList.clear();
+ try {
+ c = mContentResolver.query(Notes.CONTENT_DATA_URI, SqlData.PROJECTION_DATA,
+ "(note_id=?)", new String[] {
+ String.valueOf(mId)
+ }, null);
+ if (c != null) {
+ if (c.getCount() == 0) {
+ Log.w(TAG, "it seems that the note has not data");
+ return;
+ }
+ while (c.moveToNext()) {
+ SqlData data = new SqlData(mContext, c);
+ mDataList.add(data);
+ }
+ } else {
+ Log.w(TAG, "loadDataContent: cursor = null");
+ }
+ } finally {
+ if (c != null)
+ c.close();
+ }
+ }
+ //根据JSON的内容设置属性参数
+ public boolean setContent(JSONObject js) {
+ try {
+ JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);
+ if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_SYSTEM) {
+ Log.w(TAG, "cannot set system folder");
+ } else if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_FOLDER) {
+ // for folder we can only update the snnipet and type
+ String snippet = note.has(NoteColumns.SNIPPET) ? note
+ .getString(NoteColumns.SNIPPET) : "";
+ if (mIsCreate || !mSnippet.equals(snippet)) {
+ mDiffNoteValues.put(NoteColumns.SNIPPET, snippet);
+ }
+ mSnippet = snippet;
+
+ int type = note.has(NoteColumns.TYPE) ? note.getInt(NoteColumns.TYPE)
+ : Notes.TYPE_NOTE;
+ if (mIsCreate || mType != type) {
+ mDiffNoteValues.put(NoteColumns.TYPE, type);
+ }
+ mType = type;
+ } else if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_NOTE) {
+ JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA);
+ long id = note.has(NoteColumns.ID) ? note.getLong(NoteColumns.ID) : INVALID_ID;
+ if (mIsCreate || mId != id) {
+ mDiffNoteValues.put(NoteColumns.ID, id);
+ }
+ mId = id;
+
+ long alertDate = note.has(NoteColumns.ALERTED_DATE) ? note
+ .getLong(NoteColumns.ALERTED_DATE) : 0;
+ if (mIsCreate || mAlertDate != alertDate) {
+ mDiffNoteValues.put(NoteColumns.ALERTED_DATE, alertDate);
+ }
+ mAlertDate = alertDate;
+
+ int bgColorId = note.has(NoteColumns.BG_COLOR_ID) ? note
+ .getInt(NoteColumns.BG_COLOR_ID) : ResourceParser.getDefaultBgId(mContext);
+ if (mIsCreate || mBgColorId != bgColorId) {
+ mDiffNoteValues.put(NoteColumns.BG_COLOR_ID, bgColorId);
+ }
+ mBgColorId = bgColorId;
+
+ long createDate = note.has(NoteColumns.CREATED_DATE) ? note
+ .getLong(NoteColumns.CREATED_DATE) : System.currentTimeMillis();
+ if (mIsCreate || mCreatedDate != createDate) {
+ mDiffNoteValues.put(NoteColumns.CREATED_DATE, createDate);
+ }
+ mCreatedDate = createDate;
+
+ int hasAttachment = note.has(NoteColumns.HAS_ATTACHMENT) ? note
+ .getInt(NoteColumns.HAS_ATTACHMENT) : 0;
+ if (mIsCreate || mHasAttachment != hasAttachment) {
+ mDiffNoteValues.put(NoteColumns.HAS_ATTACHMENT, hasAttachment);
+ }
+ mHasAttachment = hasAttachment;
+
+ long modifiedDate = note.has(NoteColumns.MODIFIED_DATE) ? note
+ .getLong(NoteColumns.MODIFIED_DATE) : System.currentTimeMillis();
+ if (mIsCreate || mModifiedDate != modifiedDate) {
+ mDiffNoteValues.put(NoteColumns.MODIFIED_DATE, modifiedDate);
+ }
+ mModifiedDate = modifiedDate;
+
+ long parentId = note.has(NoteColumns.PARENT_ID) ? note
+ .getLong(NoteColumns.PARENT_ID) : 0;
+ if (mIsCreate || mParentId != parentId) {
+ mDiffNoteValues.put(NoteColumns.PARENT_ID, parentId);
+ }
+ mParentId = parentId;
+
+ String snippet = note.has(NoteColumns.SNIPPET) ? note
+ .getString(NoteColumns.SNIPPET) : "";
+ if (mIsCreate || !mSnippet.equals(snippet)) {
+ mDiffNoteValues.put(NoteColumns.SNIPPET, snippet);
+ }
+ mSnippet = snippet;
+
+ int type = note.has(NoteColumns.TYPE) ? note.getInt(NoteColumns.TYPE)
+ : Notes.TYPE_NOTE;
+ if (mIsCreate || mType != type) {
+ mDiffNoteValues.put(NoteColumns.TYPE, type);
+ }
+ mType = type;
+
+ int widgetId = note.has(NoteColumns.WIDGET_ID) ? note.getInt(NoteColumns.WIDGET_ID)
+ : AppWidgetManager.INVALID_APPWIDGET_ID;
+ if (mIsCreate || mWidgetId != widgetId) {
+ mDiffNoteValues.put(NoteColumns.WIDGET_ID, widgetId);
+ }
+ mWidgetId = widgetId;
+
+ int widgetType = note.has(NoteColumns.WIDGET_TYPE) ? note
+ .getInt(NoteColumns.WIDGET_TYPE) : Notes.TYPE_WIDGET_INVALIDE;
+ if (mIsCreate || mWidgetType != widgetType) {
+ mDiffNoteValues.put(NoteColumns.WIDGET_TYPE, widgetType);
+ }
+ mWidgetType = widgetType;
+
+ long originParent = note.has(NoteColumns.ORIGIN_PARENT_ID) ? note
+ .getLong(NoteColumns.ORIGIN_PARENT_ID) : 0;
+ if (mIsCreate || mOriginParent != originParent) {
+ mDiffNoteValues.put(NoteColumns.ORIGIN_PARENT_ID, originParent);
+ }
+ mOriginParent = originParent;
+
+ for (int i = 0; i < dataArray.length(); i++) {
+ JSONObject data = dataArray.getJSONObject(i);
+ SqlData sqlData = null;
+ if (data.has(DataColumns.ID)) {
+ long dataId = data.getLong(DataColumns.ID);
+ for (SqlData temp : mDataList) {
+ if (dataId == temp.getId()) {
+ sqlData = temp;
+ }
+ }
+ }
+
+ if (sqlData == null) {
+ sqlData = new SqlData(mContext);
+ mDataList.add(sqlData);
+ }
+
+ sqlData.setContent(data);
+ }
+ }
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+ //小米便签获取内容
+ public JSONObject getContent() {
+ try {
+ JSONObject js = new JSONObject();
+ //未创建内容加入数据库中
+ if (mIsCreate) {
+ Log.e(TAG, "it seems that we haven't created this in database yet");
+ return null;
+ }
+
+ JSONObject note = new JSONObject();
+ //如果便签类型匹配
+ if (mType == Notes.TYPE_NOTE) {
+ note.put(NoteColumns.ID, mId);
+ note.put(NoteColumns.ALERTED_DATE, mAlertDate);
+ note.put(NoteColumns.BG_COLOR_ID, mBgColorId);
+ note.put(NoteColumns.CREATED_DATE, mCreatedDate);
+ note.put(NoteColumns.HAS_ATTACHMENT, mHasAttachment);
+ note.put(NoteColumns.MODIFIED_DATE, mModifiedDate);
+ note.put(NoteColumns.PARENT_ID, mParentId);
+ note.put(NoteColumns.SNIPPET, mSnippet);
+ note.put(NoteColumns.TYPE, mType);
+ note.put(NoteColumns.WIDGET_ID, mWidgetId);
+ note.put(NoteColumns.WIDGET_TYPE, mWidgetType);
+ note.put(NoteColumns.ORIGIN_PARENT_ID, mOriginParent);
+ js.put(GTaskStringUtils.META_HEAD_NOTE, note);
+
+ JSONArray dataArray = new JSONArray();
+ for (SqlData sqlData : mDataList) {
+ JSONObject data = sqlData.getContent();
+ if (data != null) {
+ dataArray.put(data);
+ }
+ }
+ js.put(GTaskStringUtils.META_HEAD_DATA, dataArray);
+ } else if (mType == Notes.TYPE_FOLDER || mType == Notes.TYPE_SYSTEM) {
+ note.put(NoteColumns.ID, mId);
+ note.put(NoteColumns.TYPE, mType);
+ note.put(NoteColumns.SNIPPET, mSnippet);
+ js.put(GTaskStringUtils.META_HEAD_NOTE, note);
+ }
+
+ return js;
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ }
+ return null;
+ }
+ //设置父ID
+ public void setParentId(long id) {
+ mParentId = id;
+ mDiffNoteValues.put(NoteColumns.PARENT_ID, id);
+ }
+ //设置日程同步ID
+ public void setGtaskId(String gid) {
+ mDiffNoteValues.put(NoteColumns.GTASK_ID, gid);
+ }
+ //设置同步ID
+ public void setSyncId(long syncId) {
+ mDiffNoteValues.put(NoteColumns.SYNC_ID, syncId);
+ }
+ //重新设定本地修改
+ public void resetLocalModified() {
+ mDiffNoteValues.put(NoteColumns.LOCAL_MODIFIED, 0);
+ }
+ //获取对象ID
+ public long getId() {
+ return mId;
+ }
+ //获取父ID
+ public long getParentId() {
+ return mParentId;
+ }
+ //获取对象片段
+ public String getSnippet() {
+ return mSnippet;
+ }
+ //判断是否为便签ID
+ public boolean isNoteType() {
+ return mType == Notes.TYPE_NOTE;
+ }
+
+ public void commit(boolean validateVersion) {
+ if (mIsCreate) {
+ if (mId == INVALID_ID && mDiffNoteValues.containsKey(NoteColumns.ID)) {
+ mDiffNoteValues.remove(NoteColumns.ID);
+ }
+
+ Uri uri = mContentResolver.insert(Notes.CONTENT_NOTE_URI, mDiffNoteValues);
+ try {
+ mId = Long.valueOf(uri.getPathSegments().get(1));
+ } catch (NumberFormatException e) {
+ Log.e(TAG, "Get note id error :" + e.toString());
+ throw new ActionFailureException("create note failed");
+ }
+ //建立线程ID失败
+ if (mId == 0) {
+ throw new IllegalStateException("Create thread id failed");
+ }
+
+ if (mType == Notes.TYPE_NOTE) {
+ for (SqlData sqlData : mDataList) {
+ sqlData.commit(mId, false, -1);
+ }
+ }
+ } else {
+ if (mId <= 0 && mId != Notes.ID_ROOT_FOLDER && mId != Notes.ID_CALL_RECORD_FOLDER) {
+ Log.e(TAG, "No such note");
+ throw new IllegalStateException("Try to update note with invalid id");
+ }
+ if (mDiffNoteValues.size() > 0) {
+ mVersion ++;
+ int result = 0;
+ //若有效
+ if (!validateVersion) {
+ result = mContentResolver.update(Notes.CONTENT_NOTE_URI, mDiffNoteValues, "("
+ + NoteColumns.ID + "=?)", new String[] {
+ String.valueOf(mId)
+ });
+ } else {
+ result = mContentResolver.update(Notes.CONTENT_NOTE_URI, mDiffNoteValues, "("
+ + NoteColumns.ID + "=?) AND (" + NoteColumns.VERSION + "<=?)",
+ new String[] {
+ String.valueOf(mId), String.valueOf(mVersion)
+ });
+ }
+ //未更新,可能在同步时更新了
+ if (result == 0) {
+ Log.w(TAG, "there is no update. maybe user updates note when syncing");
+ }
+ }
+
+ if (mType == Notes.TYPE_NOTE) {
+ for (SqlData sqlData : mDataList) {
+ sqlData.commit(mId, validateVersion, mVersion);
+ }
+ }
+ }
+
+ // 刷新本地infof
+ loadFromCursor(mId);
+ if (mType == Notes.TYPE_NOTE)
+ loadDataContent();
+
+ mDiffNoteValues.clear();
+ mIsCreate = false;
+ }
+}
diff --git a/src/app/src/main/java/net/micode/notes/gtask/data/Task.java b/src/app/src/main/java/net/micode/notes/gtask/data/Task.java
new file mode 100644
index 0000000..d03f3bc
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/gtask/data/Task.java
@@ -0,0 +1,352 @@
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.gtask.data;
+
+import android.database.Cursor;
+import android.text.TextUtils;
+import android.util.Log;
+
+import net.micode.notes.data.Notes;
+import net.micode.notes.data.Notes.DataColumns;
+import net.micode.notes.data.Notes.DataConstants;
+import net.micode.notes.data.Notes.NoteColumns;
+import net.micode.notes.gtask.exception.ActionFailureException;
+import net.micode.notes.tool.GTaskStringUtils;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+
+public class Task extends Node {
+ private static final String TAG = Task.class.getSimpleName();
+
+ private boolean mCompleted;
+
+ private String mNotes;
+
+ private JSONObject mMetaInfo;
+
+ private Task mPriorSibling;
+
+ private TaskList mParent;
+ //构造函数
+ public Task() {
+ super();
+ mCompleted = false;
+ mNotes = null;
+ mPriorSibling = null;
+ mParent = null;
+ mMetaInfo = null;
+ }
+ //获得创造的动作
+ public JSONObject getCreateAction(int actionId) {
+ JSONObject js = new JSONObject();
+
+ try {
+ // 动作类型
+ js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE,
+ GTaskStringUtils.GTASK_JSON_ACTION_TYPE_CREATE);
+
+ // 动作ID
+ js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId);
+
+ // 索引
+ js.put(GTaskStringUtils.GTASK_JSON_INDEX, mParent.getChildTaskIndex(this));
+
+ // JSON创建内容
+ JSONObject entity = new JSONObject();
+ entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName());
+ entity.put(GTaskStringUtils.GTASK_JSON_CREATOR_ID, "null");
+ entity.put(GTaskStringUtils.GTASK_JSON_ENTITY_TYPE,
+ GTaskStringUtils.GTASK_JSON_TYPE_TASK);
+ if (getNotes() != null) {
+ entity.put(GTaskStringUtils.GTASK_JSON_NOTES, getNotes());
+ }
+ js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity);
+
+ // 父ID
+ js.put(GTaskStringUtils.GTASK_JSON_PARENT_ID, mParent.getGid());
+
+ // 目的父类型
+ js.put(GTaskStringUtils.GTASK_JSON_DEST_PARENT_TYPE,
+ GTaskStringUtils.GTASK_JSON_TYPE_GROUP);
+
+ // 列表ID
+ js.put(GTaskStringUtils.GTASK_JSON_LIST_ID, mParent.getGid());
+
+ // 优先同级ID
+ if (mPriorSibling != null) {
+ js.put(GTaskStringUtils.GTASK_JSON_PRIOR_SIBLING_ID, mPriorSibling.getGid());
+ }
+
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new ActionFailureException("fail to generate task-create jsonobject");
+ }
+
+ return js;
+ }
+ //获得更新的动作
+ public JSONObject getUpdateAction(int actionId) {
+ JSONObject js = new JSONObject();
+
+ try {
+
+ js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE,
+ GTaskStringUtils.GTASK_JSON_ACTION_TYPE_UPDATE);
+
+
+ js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId);
+
+ // id
+ js.put(GTaskStringUtils.GTASK_JSON_ID, getGid());
+
+
+ JSONObject entity = new JSONObject();
+ entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName());
+ if (getNotes() != null) {
+ entity.put(GTaskStringUtils.GTASK_JSON_NOTES, getNotes());
+ }
+ entity.put(GTaskStringUtils.GTASK_JSON_DELETED, getDeleted());
+ js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity);
+
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new ActionFailureException("fail to generate task-update jsonobject");
+ }
+
+ return js;
+ }
+ //通过远程JSON设置内容
+ public void setContentByRemoteJSON(JSONObject js) {
+ if (js != null) {
+ try {
+ // id
+ if (js.has(GTaskStringUtils.GTASK_JSON_ID)) {
+ setGid(js.getString(GTaskStringUtils.GTASK_JSON_ID));
+ }
+
+ // 最后一次修改
+ if (js.has(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)) {
+ setLastModified(js.getLong(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED));
+ }
+
+ // 姓名
+ if (js.has(GTaskStringUtils.GTASK_JSON_NAME)) {
+ setName(js.getString(GTaskStringUtils.GTASK_JSON_NAME));
+ }
+
+ // 有便签
+ if (js.has(GTaskStringUtils.GTASK_JSON_NOTES)) {
+ setNotes(js.getString(GTaskStringUtils.GTASK_JSON_NOTES));
+ }
+
+ // 删除
+ if (js.has(GTaskStringUtils.GTASK_JSON_DELETED)) {
+ setDeleted(js.getBoolean(GTaskStringUtils.GTASK_JSON_DELETED));
+ }
+
+ // 完成
+ if (js.has(GTaskStringUtils.GTASK_JSON_COMPLETED)) {
+ setCompleted(js.getBoolean(GTaskStringUtils.GTASK_JSON_COMPLETED));
+ }
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new ActionFailureException("fail to get task content from jsonobject");
+ }
+ }
+ }
+ //通过本地JSON设置内容
+ public void setContentByLocalJSON(JSONObject js) {
+ //JSON空消息设置内容失败
+ if (js == null || !js.has(GTaskStringUtils.META_HEAD_NOTE)
+ || !js.has(GTaskStringUtils.META_HEAD_DATA)) {
+ Log.w(TAG, "setContentByLocalJSON: nothing is avaiable");
+ }
+
+ try {
+ JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);
+ JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA);
+ //无效类型
+ if (note.getInt(NoteColumns.TYPE) != Notes.TYPE_NOTE) {
+ Log.e(TAG, "invalid type");
+ return;
+ }
+ //如果文本备份找到一致就跳出
+ for (int i = 0; i < dataArray.length(); i++) {
+ JSONObject data = dataArray.getJSONObject(i);
+ if (TextUtils.equals(data.getString(DataColumns.MIME_TYPE), DataConstants.NOTE)) {
+ setName(data.getString(DataColumns.CONTENT));
+ break;
+ }
+ }
+
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ }
+ }
+
+ public JSONObject getLocalJSONFromContent() {
+ String name = getName();
+ try {
+ if (mMetaInfo == null) {
+ // 初始为空,从网页创建的新任务
+ if (name == null) {
+ Log.w(TAG, "the note seems to be an empty one");
+ return null;
+ }
+
+ JSONObject js = new JSONObject();
+ JSONObject note = new JSONObject();
+ JSONArray dataArray = new JSONArray();
+ JSONObject data = new JSONObject();
+ data.put(DataColumns.CONTENT, name);
+ dataArray.put(data);
+ js.put(GTaskStringUtils.META_HEAD_DATA, dataArray);
+ note.put(NoteColumns.TYPE, Notes.TYPE_NOTE);
+ js.put(GTaskStringUtils.META_HEAD_NOTE, note);
+ return js;
+ } else {
+ // 同步任务
+ JSONObject note = mMetaInfo.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);
+ JSONArray dataArray = mMetaInfo.getJSONArray(GTaskStringUtils.META_HEAD_DATA);
+
+ for (int i = 0; i < dataArray.length(); i++) {
+ JSONObject data = dataArray.getJSONObject(i);
+ if (TextUtils.equals(data.getString(DataColumns.MIME_TYPE), DataConstants.NOTE)) {
+ data.put(DataColumns.CONTENT, getName());
+ break;
+ }
+ }
+
+ note.put(NoteColumns.TYPE, Notes.TYPE_NOTE);
+ return mMetaInfo;
+ }
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ return null;
+ }
+ }
+ //设置元信息
+ public void setMetaInfo(MetaData metaData) {
+ if (metaData != null && metaData.getNotes() != null) {
+ try {
+ mMetaInfo = new JSONObject(metaData.getNotes());
+ } catch (JSONException e) {
+ Log.w(TAG, e.toString());
+ mMetaInfo = null;
+ }
+ }
+ }
+
+ public int getSyncAction(Cursor c) {
+ try {
+ JSONObject noteInfo = null;
+ if (mMetaInfo != null && mMetaInfo.has(GTaskStringUtils.META_HEAD_NOTE)) {
+ noteInfo = mMetaInfo.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);
+ }
+
+ if (noteInfo == null) {
+ Log.w(TAG, "it seems that note meta has been deleted");
+ return SYNC_ACTION_UPDATE_REMOTE;
+ }
+
+ if (!noteInfo.has(NoteColumns.ID)) {
+ Log.w(TAG, "remote note id seems to be deleted");
+ return SYNC_ACTION_UPDATE_LOCAL;
+ }
+
+ // 现在验证便签 id
+ if (c.getLong(SqlNote.ID_COLUMN) != noteInfo.getLong(NoteColumns.ID)) {
+ Log.w(TAG, "note id doesn't match");
+ return SYNC_ACTION_UPDATE_LOCAL;
+ }
+
+ if (c.getInt(SqlNote.LOCAL_MODIFIED_COLUMN) == 0) {
+ // 没有本地更新
+ if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) {
+ // no update both side
+ return SYNC_ACTION_NONE;
+ } else {
+ // 将远程应用到本地
+ return SYNC_ACTION_UPDATE_LOCAL;
+ }
+ } else {
+ // 验证日程同步 id
+ if (!c.getString(SqlNote.GTASK_ID_COLUMN).equals(getGid())) {
+ Log.e(TAG, "gtask id doesn't match");
+ return SYNC_ACTION_ERROR;
+ }
+ if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) {
+ // 只有本地修改
+ return SYNC_ACTION_UPDATE_REMOTE;
+ } else {
+ return SYNC_ACTION_UPDATE_CONFLICT;
+ }
+ }
+ } catch (Exception e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ }
+
+ return SYNC_ACTION_ERROR;
+ }
+ //值得保留
+ public boolean isWorthSaving() {
+ return mMetaInfo != null || (getName() != null && getName().trim().length() > 0)
+ || (getNotes() != null && getNotes().trim().length() > 0);
+ }
+ //设置完成
+ public void setCompleted(boolean completed) {
+ this.mCompleted = completed;
+ }
+ //设置便签
+ public void setNotes(String notes) {
+ this.mNotes = notes;
+ }
+ //设置优先级
+ public void setPriorSibling(Task priorSibling) {
+ this.mPriorSibling = priorSibling;
+ }
+ //设置父列表
+ public void setParent(TaskList parent) {
+ this.mParent = parent;
+ }
+ //获得完成项
+ public boolean getCompleted() {
+ return this.mCompleted;
+ }
+ //获得便签
+ public String getNotes() {
+ return this.mNotes;
+ }
+ //获得优先级
+ public Task getPriorSibling() {
+ return this.mPriorSibling;
+ }
+
+ public TaskList getParent() {
+ return this.mParent;
+ }
+
+}
diff --git a/src/app/src/main/java/net/micode/notes/gtask/data/TaskList.java b/src/app/src/main/java/net/micode/notes/gtask/data/TaskList.java
new file mode 100644
index 0000000..51132db
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/gtask/data/TaskList.java
@@ -0,0 +1,347 @@
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.gtask.data;
+
+import android.database.Cursor;
+import android.util.Log;
+
+import net.micode.notes.data.Notes;
+import net.micode.notes.data.Notes.NoteColumns;
+import net.micode.notes.gtask.exception.ActionFailureException;
+import net.micode.notes.tool.GTaskStringUtils;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+
+
+public class TaskList extends Node {
+ private static final String TAG = TaskList.class.getSimpleName();
+
+ private int mIndex;
+
+ private ArrayList mChildren;
+
+ public TaskList() {
+ super();
+ mChildren = new ArrayList();
+ mIndex = 1;
+ }
+
+ public JSONObject getCreateAction(int actionId) {
+ JSONObject js = new JSONObject();
+
+ try {
+ // 动作类型
+ js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE,
+ GTaskStringUtils.GTASK_JSON_ACTION_TYPE_CREATE);
+
+ // 动作ID
+ js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId);
+
+ // 索引
+ js.put(GTaskStringUtils.GTASK_JSON_INDEX, mIndex);
+
+ // JSON设置内容
+ JSONObject entity = new JSONObject();
+ entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName());
+ entity.put(GTaskStringUtils.GTASK_JSON_CREATOR_ID, "null");
+ entity.put(GTaskStringUtils.GTASK_JSON_ENTITY_TYPE,
+ GTaskStringUtils.GTASK_JSON_TYPE_GROUP);
+ js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity);
+
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new ActionFailureException("fail to generate tasklist-create jsonobject");
+ }
+
+ return js;
+ }
+
+ public JSONObject getUpdateAction(int actionId) {
+ JSONObject js = new JSONObject();
+
+ try {
+
+ js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE,
+ GTaskStringUtils.GTASK_JSON_ACTION_TYPE_UPDATE);
+
+
+ js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId);
+
+
+ js.put(GTaskStringUtils.GTASK_JSON_ID, getGid());
+
+
+ JSONObject entity = new JSONObject();
+ entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName());
+ entity.put(GTaskStringUtils.GTASK_JSON_DELETED, getDeleted());
+ js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity);
+
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new ActionFailureException("fail to generate tasklist-update jsonobject");
+ }
+
+ return js;
+ }
+ //通过远程JSON设置内容
+ public void setContentByRemoteJSON(JSONObject js) {
+ if (js != null) {
+ try {
+
+ if (js.has(GTaskStringUtils.GTASK_JSON_ID)) {
+ setGid(js.getString(GTaskStringUtils.GTASK_JSON_ID));
+ }
+
+ // 最后一次修改
+ if (js.has(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)) {
+ setLastModified(js.getLong(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED));
+ }
+
+ // 姓名
+ if (js.has(GTaskStringUtils.GTASK_JSON_NAME)) {
+ setName(js.getString(GTaskStringUtils.GTASK_JSON_NAME));
+ }
+
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new ActionFailureException("fail to get tasklist content from jsonobject");
+ }
+ }
+ }
+ //通过本地JSON设置内容(在Node中有涉及)
+ public void setContentByLocalJSON(JSONObject js) {
+ if (js == null || !js.has(GTaskStringUtils.META_HEAD_NOTE)) {
+ Log.w(TAG, "setContentByLocalJSON: nothing is avaiable");
+ }
+ //建立JSON文件夹加入元头便签
+ try {
+ JSONObject folder = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);
+
+ if (folder.getInt(NoteColumns.TYPE) == Notes.TYPE_FOLDER) {
+ String name = folder.getString(NoteColumns.SNIPPET);
+ //设置姓名
+ setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + name);
+ //获得类型与便签系统类型一样时
+ } else if (folder.getInt(NoteColumns.TYPE) == Notes.TYPE_SYSTEM) {
+ if (folder.getLong(NoteColumns.ID) == Notes.ID_ROOT_FOLDER)
+ setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT);
+ else if (folder.getLong(NoteColumns.ID) == Notes.ID_CALL_RECORD_FOLDER)
+ setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX
+ + GTaskStringUtils.FOLDER_CALL_NOTE);
+ //无效系统文件夹
+ else
+ Log.e(TAG, "invalid system folder");
+ } else {
+ Log.e(TAG, "error type");
+ }
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ }
+ }
+ //通过内容获得本地JSON
+ public JSONObject getLocalJSONFromContent() {
+ try {
+ JSONObject js = new JSONObject();
+ JSONObject folder = new JSONObject();
+
+ String folderName = getName();
+ if (getName().startsWith(GTaskStringUtils.MIUI_FOLDER_PREFFIX))
+ folderName = folderName.substring(GTaskStringUtils.MIUI_FOLDER_PREFFIX.length(),
+ folderName.length());
+ folder.put(NoteColumns.SNIPPET, folderName);
+ //文件夹名和默认文件夹名一致时
+ if (folderName.equals(GTaskStringUtils.FOLDER_DEFAULT)
+ || folderName.equals(GTaskStringUtils.FOLDER_CALL_NOTE))
+ folder.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM);
+ else
+ folder.put(NoteColumns.TYPE, Notes.TYPE_FOLDER);
+
+ js.put(GTaskStringUtils.META_HEAD_NOTE, folder);
+
+ return js;
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ public int getSyncAction(Cursor c) {
+ try {
+ if (c.getInt(SqlNote.LOCAL_MODIFIED_COLUMN) == 0) {
+ // t没有本地更新
+ if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) {
+ // 双方无更新
+ return SYNC_ACTION_NONE;
+ } else {
+ // 将远程应用到本地
+ return SYNC_ACTION_UPDATE_LOCAL;
+ }
+ } else {
+ // 验证日程同步 id
+ if (!c.getString(SqlNote.GTASK_ID_COLUMN).equals(getGid())) {
+ Log.e(TAG, "gtask id doesn't match");
+ return SYNC_ACTION_ERROR;
+ }
+ if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) {
+ // 只有本地修改
+ return SYNC_ACTION_UPDATE_REMOTE;
+ } else {
+ // 对于文件夹冲突,只需应用本地修改
+ return SYNC_ACTION_UPDATE_REMOTE;
+ }
+ }
+ } catch (Exception e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ }
+
+ return SYNC_ACTION_ERROR;
+ }
+ //获得子任务数量
+ public int getChildTaskCount() {
+ return mChildren.size();
+ }
+ //添加子任务
+ public boolean addChildTask(Task task) {
+ boolean ret = false;
+ if (task != null && !mChildren.contains(task)) {
+ ret = mChildren.add(task);
+ if (ret) {
+ // 需要设置之前的父结点和兄节点
+ task.setPriorSibling(mChildren.isEmpty() ? null : mChildren
+ .get(mChildren.size() - 1));
+ task.setParent(this);
+ }
+ }
+ return ret;
+ }
+ //通过索引添加子任务
+ public boolean addChildTask(Task task, int index) {
+ if (index < 0 || index > mChildren.size()) {
+ Log.e(TAG, "add child task: invalid index");
+ return false;
+ }
+
+ int pos = mChildren.indexOf(task);
+ if (task != null && pos == -1) {
+ mChildren.add(index, task);
+
+ // 更新任务列表
+ Task preTask = null;
+ Task afterTask = null;
+ if (index != 0)
+ preTask = mChildren.get(index - 1);
+ if (index != mChildren.size() - 1)
+ afterTask = mChildren.get(index + 1);
+ //设置同级
+ task.setPriorSibling(preTask);
+ if (afterTask != null)
+ afterTask.setPriorSibling(task);
+ }
+
+ return true;
+ }
+ //移除子任务
+ public boolean removeChildTask(Task task) {
+ boolean ret = false;
+ int index = mChildren.indexOf(task);
+ if (index != -1) {
+ ret = mChildren.remove(task);
+
+ if (ret) {
+
+ task.setPriorSibling(null);
+ task.setParent(null);
+
+ // 更新任务列表
+ if (index != mChildren.size()) {
+ mChildren.get(index).setPriorSibling(
+ index == 0 ? null : mChildren.get(index - 1));
+ }
+ }
+ }
+ return ret;
+ }
+ //移动子任务
+ public boolean moveChildTask(Task task, int index) {
+
+ if (index < 0 || index >= mChildren.size()) {
+ Log.e(TAG, "move child task: invalid index");
+ return false;
+ }
+ //子任务索引位置
+ int pos = mChildren.indexOf(task);
+ if (pos == -1) {
+ Log.e(TAG, "move child task: the task should in the list");
+ return false;
+ }
+
+ if (pos == index)
+ return true;
+ return (removeChildTask(task) && addChildTask(task, index));
+ }
+ //通过Gid找到子任务
+ public Task findChildTaskByGid(String gid) {
+ for (int i = 0; i < mChildren.size(); i++) {
+ Task t = mChildren.get(i);
+ if (t.getGid().equals(gid)) {
+ return t;
+ }
+ }
+ return null;
+ }
+ //获得子任务的索引
+ public int getChildTaskIndex(Task task) {
+ return mChildren.indexOf(task);
+ }
+
+ public Task getChildTaskByIndex(int index) {
+ if (index < 0 || index >= mChildren.size()) {
+ Log.e(TAG, "getTaskByIndex: invalid index");
+ return null;
+ }
+ return mChildren.get(index);
+ }
+ //通过Gid获取子任务
+ public Task getChilTaskByGid(String gid) {
+ for (Task task : mChildren) {
+ if (task.getGid().equals(gid))
+ return task;
+ }
+ return null;
+ }
+
+ public ArrayList getChildTaskList() {
+ return this.mChildren;
+ }
+ //设置索引
+ public void setIndex(int index) {
+ this.mIndex = index;
+ }
+
+ public int getIndex() {
+ return this.mIndex;
+ }
+}
diff --git a/src/app/src/main/java/net/micode/notes/gtask/exception/ActionFailureException.java b/src/app/src/main/java/net/micode/notes/gtask/exception/ActionFailureException.java
new file mode 100644
index 0000000..b2bc8f1
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/gtask/exception/ActionFailureException.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.gtask.exception;
+/*
+动作失败异常
+ */
+public class ActionFailureException extends RuntimeException {
+ private static final long serialVersionUID = 4425249765923293627L;
+
+ public ActionFailureException() {
+ super();
+ }
+
+ public ActionFailureException(String paramString) {
+ super(paramString);
+ }
+
+ public ActionFailureException(String paramString, Throwable paramThrowable) {
+ super(paramString, paramThrowable);
+ }
+}
diff --git a/src/app/src/main/java/net/micode/notes/gtask/exception/NetworkFailureException.java b/src/app/src/main/java/net/micode/notes/gtask/exception/NetworkFailureException.java
new file mode 100644
index 0000000..e8b43be
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/gtask/exception/NetworkFailureException.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.gtask.exception;
+/*
+网络失败异常
+ */
+public class NetworkFailureException extends Exception {
+ private static final long serialVersionUID = 2107610287180234136L;
+
+ public NetworkFailureException() {
+ super();
+ }
+
+ public NetworkFailureException(String paramString) {
+ super(paramString);
+ }
+
+ public NetworkFailureException(String paramString, Throwable paramThrowable) {
+ super(paramString, paramThrowable);
+ }
+}
diff --git a/src/app/src/main/java/net/micode/notes/gtask/remote/GTaskASyncTask.java b/src/app/src/main/java/net/micode/notes/gtask/remote/GTaskASyncTask.java
new file mode 100644
index 0000000..9e7c689
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/gtask/remote/GTaskASyncTask.java
@@ -0,0 +1,125 @@
+
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.gtask.remote;
+
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.os.AsyncTask;
+
+import net.micode.notes.R;
+import net.micode.notes.ui.NotesListActivity;
+import net.micode.notes.ui.NotesPreferenceActivity;
+
+/*
+Gtask异步任务
+ */
+public class GTaskASyncTask extends AsyncTask {
+
+ private static int GTASK_SYNC_NOTIFICATION_ID = 5234235;
+
+ public interface OnCompleteListener {
+ void onComplete();
+ }
+
+ private Context mContext;
+
+ private NotificationManager mNotifiManager;
+
+ private GTaskManager mTaskManager;
+
+ private OnCompleteListener mOnCompleteListener;
+
+ public GTaskASyncTask(Context context, OnCompleteListener listener) {
+ mContext = context;
+ mOnCompleteListener = listener;
+ mNotifiManager = (NotificationManager) mContext
+ .getSystemService(Context.NOTIFICATION_SERVICE);
+ mTaskManager = GTaskManager.getInstance();
+ }
+ //取消同步
+ public void cancelSync() {
+ mTaskManager.cancelSync();
+ }
+
+ public void publishProgess(String message) {
+ publishProgress(new String[] {
+ message
+ });
+ }
+ //展示提示
+ private void showNotification(int tickerId, String content) {
+ Notification notification = new Notification(R.drawable.notification, mContext
+ .getString(tickerId), System.currentTimeMillis());
+ notification.defaults = Notification.DEFAULT_LIGHTS;
+ notification.flags = Notification.FLAG_AUTO_CANCEL;
+ PendingIntent pendingIntent;
+ if (tickerId != R.string.ticker_success) {
+ pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext,
+ NotesPreferenceActivity.class), 0);
+
+ } else {
+ pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext,
+ NotesListActivity.class), 0);
+ }
+ /* notification.setLatestEventInfo(mContext, mContext.getString(R.string.app_name), content,
+ pendingIntent);*/
+ mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification);
+ }
+
+ @Override
+ protected Integer doInBackground(Void... unused) {
+ publishProgess(mContext.getString(R.string.sync_progress_login, NotesPreferenceActivity
+ .getSyncAccountName(mContext)));
+ return mTaskManager.sync(mContext, this);
+ }
+
+ @Override
+ protected void onProgressUpdate(String... progress) {
+ showNotification(R.string.ticker_syncing, progress[0]);
+ if (mContext instanceof GTaskSyncService) {
+ ((GTaskSyncService) mContext).sendBroadcast(progress[0]);
+ }
+ }
+
+ @Override
+ protected void onPostExecute(Integer result) {
+ if (result == GTaskManager.STATE_SUCCESS) {
+ showNotification(R.string.ticker_success, mContext.getString(
+ R.string.success_sync_account, mTaskManager.getSyncAccount()));
+ NotesPreferenceActivity.setLastSyncTime(mContext, System.currentTimeMillis());
+ } else if (result == GTaskManager.STATE_NETWORK_ERROR) {
+ showNotification(R.string.ticker_fail, mContext.getString(R.string.error_sync_network));
+ } else if (result == GTaskManager.STATE_INTERNAL_ERROR) {
+ showNotification(R.string.ticker_fail, mContext.getString(R.string.error_sync_internal));
+ } else if (result == GTaskManager.STATE_SYNC_CANCELLED) {
+ showNotification(R.string.ticker_cancel, mContext
+ .getString(R.string.error_sync_cancelled));
+ }
+ if (mOnCompleteListener != null) {
+ new Thread(new Runnable() {
+
+ public void run() {
+ mOnCompleteListener.onComplete();
+ }
+ }).start();
+ }
+ }
+}
diff --git a/src/app/src/main/java/net/micode/notes/gtask/remote/GTaskClient.java b/src/app/src/main/java/net/micode/notes/gtask/remote/GTaskClient.java
new file mode 100644
index 0000000..c3698de
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/gtask/remote/GTaskClient.java
@@ -0,0 +1,588 @@
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.gtask.remote;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.accounts.AccountManagerFuture;
+import android.app.Activity;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+
+import net.micode.notes.gtask.data.Node;
+import net.micode.notes.gtask.data.Task;
+import net.micode.notes.gtask.data.TaskList;
+import net.micode.notes.gtask.exception.ActionFailureException;
+import net.micode.notes.gtask.exception.NetworkFailureException;
+import net.micode.notes.tool.GTaskStringUtils;
+import net.micode.notes.ui.NotesPreferenceActivity;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.cookie.Cookie;
+import org.apache.http.impl.client.BasicCookieStore;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.params.BasicHttpParams;
+import org.apache.http.params.HttpConnectionParams;
+import org.apache.http.params.HttpParams;
+import org.apache.http.params.HttpProtocolParams;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.Inflater;
+import java.util.zip.InflaterInputStream;
+
+/*
+Gtask客户端类,提供登录Google账户,创建任务和任务列表
+添加和删除节点,提交、重置更新,获取任务列表等功能
+ */
+public class GTaskClient {
+ private static final String TAG = GTaskClient.class.getSimpleName();
+
+ private static final String GTASK_URL = "https://mail.google.com/tasks/";
+
+ private static final String GTASK_GET_URL = "https://mail.google.com/tasks/ig";
+
+ private static final String GTASK_POST_URL = "https://mail.google.com/tasks/r/ig";
+
+ private static GTaskClient mInstance = null;
+
+ private DefaultHttpClient mHttpClient;
+
+ private String mGetUrl;
+
+ private String mPostUrl;
+
+ private long mClientVersion;
+
+ private boolean mLoggedin;
+
+ private long mLastLoginTime;
+
+ private int mActionId;
+
+ private Account mAccount;
+
+ private JSONArray mUpdateArray;
+
+ private GTaskClient() {
+ mHttpClient = null;
+ mGetUrl = GTASK_GET_URL;
+ mPostUrl = GTASK_POST_URL;
+ mClientVersion = -1;
+ mLoggedin = false;
+ mLastLoginTime = 0;
+ mActionId = 1;
+ mAccount = null;
+ mUpdateArray = null;
+ }
+
+ public static synchronized GTaskClient getInstance() {
+ if (mInstance == null) {
+ mInstance = new GTaskClient();
+ }
+ return mInstance;
+ }
+ //登录;注册
+ public boolean login(Activity activity) {
+ // we suppose that the cookie would expire after 5 minutes
+ // then we need to re-login
+ final long interval = 1000 * 60 * 5;
+ if (mLastLoginTime + interval < System.currentTimeMillis()) {
+ mLoggedin = false;
+ }
+
+ // need to re-login after account switch
+ if (mLoggedin
+ && !TextUtils.equals(getSyncAccount().name, NotesPreferenceActivity
+ .getSyncAccountName(activity))) {
+ mLoggedin = false;
+ }
+
+ if (mLoggedin) {
+ Log.d(TAG, "already logged in");
+ return true;
+ }
+
+ mLastLoginTime = System.currentTimeMillis();
+ String authToken = loginGoogleAccount(activity, false);
+ if (authToken == null) {
+ Log.e(TAG, "login google account failed");
+ return false;
+ }
+
+ // login with custom domain if necessary
+ if (!(mAccount.name.toLowerCase().endsWith("gmail.com") || mAccount.name.toLowerCase()
+ .endsWith("googlemail.com"))) {
+ StringBuilder url = new StringBuilder(GTASK_URL).append("a/");
+ int index = mAccount.name.indexOf('@') + 1;
+ String suffix = mAccount.name.substring(index);
+ url.append(suffix + "/");
+ mGetUrl = url.toString() + "ig";
+ mPostUrl = url.toString() + "r/ig";
+
+ if (tryToLoginGtask(activity, authToken)) {
+ mLoggedin = true;
+ }
+ }
+
+ // try to login with google official url
+ if (!mLoggedin) {
+ mGetUrl = GTASK_GET_URL;
+ mPostUrl = GTASK_POST_URL;
+ if (!tryToLoginGtask(activity, authToken)) {
+ return false;
+ }
+ }
+
+ mLoggedin = true;
+ return true;
+ }
+ //登录Google账户
+ private String loginGoogleAccount(Activity activity, boolean invalidateToken) {
+ String authToken;
+ AccountManager accountManager = AccountManager.get(activity);
+ Account[] accounts = accountManager.getAccountsByType("com.google");
+
+ if (accounts.length == 0) {
+ Log.e(TAG, "there is no available google account");
+ return null;
+ }
+
+ String accountName = NotesPreferenceActivity.getSyncAccountName(activity);
+ Account account = null;
+ for (Account a : accounts) {
+ if (a.name.equals(accountName)) {
+ account = a;
+ break;
+ }
+ }
+ if (account != null) {
+ mAccount = account;
+ } else {
+ Log.e(TAG, "unable to get an account with the same name in the settings");
+ return null;
+ }
+
+ // get the token now
+ AccountManagerFuture accountManagerFuture = accountManager.getAuthToken(account,
+ "goanna_mobile", null, activity, null, null);
+ try {
+ Bundle authTokenBundle = accountManagerFuture.getResult();
+ authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN);
+ if (invalidateToken) {
+ accountManager.invalidateAuthToken("com.google", authToken);
+ loginGoogleAccount(activity, false);
+ }
+ } catch (Exception e) {
+ Log.e(TAG, "get auth token failed");
+ authToken = null;
+ }
+
+ return authToken;
+ }
+ //尝试登录日程同步
+ private boolean tryToLoginGtask(Activity activity, String authToken) {
+ if (!loginGtask(authToken)) {
+ // maybe the auth token is out of date, now let's invalidate the
+ // token and try again
+ authToken = loginGoogleAccount(activity, true);
+ if (authToken == null) {
+ Log.e(TAG, "login google account failed");
+ return false;
+ }
+
+ if (!loginGtask(authToken)) {
+ Log.e(TAG, "login gtask failed");
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private boolean loginGtask(String authToken) {
+ int timeoutConnection = 10000;
+ int timeoutSocket = 15000;
+ HttpParams httpParameters = new BasicHttpParams();
+ HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
+ HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
+ mHttpClient = new DefaultHttpClient(httpParameters);
+ BasicCookieStore localBasicCookieStore = new BasicCookieStore();
+ mHttpClient.setCookieStore(localBasicCookieStore);
+ HttpProtocolParams.setUseExpectContinue(mHttpClient.getParams(), false);
+
+ // login gtask
+ try {
+ String loginUrl = mGetUrl + "?auth=" + authToken;
+ HttpGet httpGet = new HttpGet(loginUrl);
+ HttpResponse response = null;
+ response = mHttpClient.execute(httpGet);
+
+ // get the cookie now
+ List cookies = mHttpClient.getCookieStore().getCookies();
+ boolean hasAuthCookie = false;
+ for (Cookie cookie : cookies) {
+ if (cookie.getName().contains("GTL")) {
+ hasAuthCookie = true;
+ }
+ }
+ if (!hasAuthCookie) {
+ Log.w(TAG, "it seems that there is no auth cookie");
+ }
+
+ // get the client version
+ String resString = getResponseContent(response.getEntity());
+ String jsBegin = "_setup(";
+ String jsEnd = ")}";
+ int begin = resString.indexOf(jsBegin);
+ int end = resString.lastIndexOf(jsEnd);
+ String jsString = null;
+ if (begin != -1 && end != -1 && begin < end) {
+ jsString = resString.substring(begin + jsBegin.length(), end);
+ }
+ JSONObject js = new JSONObject(jsString);
+ mClientVersion = js.getLong("v");
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ return false;
+ } catch (Exception e) {
+ // simply catch all exceptions
+ Log.e(TAG, "httpget gtask_url failed");
+ return false;
+ }
+
+ return true;
+ }
+ //获得动作
+ private int getActionId() {
+ return mActionId++;
+ }
+ //建立互联网请求
+ private HttpPost createHttpPost() {
+ HttpPost httpPost = new HttpPost(mPostUrl);
+ httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
+ httpPost.setHeader("AT", "1");
+ return httpPost;
+ }
+ //获得回复消息
+ private String getResponseContent(HttpEntity entity) throws IOException {
+ String contentEncoding = null;
+ if (entity.getContentEncoding() != null) {
+ contentEncoding = entity.getContentEncoding().getValue();
+ Log.d(TAG, "encoding: " + contentEncoding);
+ }
+
+ InputStream input = entity.getContent();
+ if (contentEncoding != null && contentEncoding.equalsIgnoreCase("gzip")) {
+ input = new GZIPInputStream(entity.getContent());
+ } else if (contentEncoding != null && contentEncoding.equalsIgnoreCase("deflate")) {
+ Inflater inflater = new Inflater(true);
+ input = new InflaterInputStream(entity.getContent(), inflater);
+ }
+
+ try {
+ InputStreamReader isr = new InputStreamReader(input);
+ BufferedReader br = new BufferedReader(isr);
+ StringBuilder sb = new StringBuilder();
+
+ while (true) {
+ String buff = br.readLine();
+ if (buff == null) {
+ return sb.toString();
+ }
+ sb = sb.append(buff);
+ }
+ } finally {
+ input.close();
+ }
+ }
+
+ private JSONObject postRequest(JSONObject js) throws NetworkFailureException {
+ if (!mLoggedin) {
+ Log.e(TAG, "please login first");
+ throw new ActionFailureException("not logged in");
+ }
+
+ HttpPost httpPost = createHttpPost();
+ try {
+ LinkedList list = new LinkedList();
+ list.add(new BasicNameValuePair("r", js.toString()));
+ UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, "UTF-8");
+ httpPost.setEntity(entity);
+
+ // execute the post
+ HttpResponse response = mHttpClient.execute(httpPost);
+ String jsString = getResponseContent(response.getEntity());
+ return new JSONObject(jsString);
+
+ } catch (ClientProtocolException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new NetworkFailureException("postRequest failed");
+ } catch (IOException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new NetworkFailureException("postRequest failed");
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new ActionFailureException("unable to convert response content to jsonobject");
+ } catch (Exception e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new ActionFailureException("error occurs when posting request");
+ }
+ }
+
+ public void createTask(Task task) throws NetworkFailureException {
+ commitUpdate();
+ try {
+ JSONObject jsPost = new JSONObject();
+ JSONArray actionList = new JSONArray();
+
+ // action_list
+ actionList.put(task.getCreateAction(getActionId()));
+ jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList);
+
+ // client_version
+ jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion);
+
+ // post
+ JSONObject jsResponse = postRequest(jsPost);
+ JSONObject jsResult = (JSONObject) jsResponse.getJSONArray(
+ GTaskStringUtils.GTASK_JSON_RESULTS).get(0);
+ task.setGid(jsResult.getString(GTaskStringUtils.GTASK_JSON_NEW_ID));
+
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new ActionFailureException("create task: handing jsonobject failed");
+ }
+ }
+
+ public void createTaskList(TaskList tasklist) throws NetworkFailureException {
+ commitUpdate();
+ try {
+ JSONObject jsPost = new JSONObject();
+ JSONArray actionList = new JSONArray();
+
+ // action_list
+ actionList.put(tasklist.getCreateAction(getActionId()));
+ jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList);
+
+ // client version
+ jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion);
+
+ // post
+ JSONObject jsResponse = postRequest(jsPost);
+ JSONObject jsResult = (JSONObject) jsResponse.getJSONArray(
+ GTaskStringUtils.GTASK_JSON_RESULTS).get(0);
+ tasklist.setGid(jsResult.getString(GTaskStringUtils.GTASK_JSON_NEW_ID));
+
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new ActionFailureException("create tasklist: handing jsonobject failed");
+ }
+ }
+
+ public void commitUpdate() throws NetworkFailureException {
+ if (mUpdateArray != null) {
+ try {
+ JSONObject jsPost = new JSONObject();
+
+ // action_list
+ jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, mUpdateArray);
+
+ // client_version
+ jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion);
+
+ postRequest(jsPost);
+ mUpdateArray = null;
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new ActionFailureException("commit update: handing jsonobject failed");
+ }
+ }
+ }
+ //添加更新节点
+ public void addUpdateNode(Node node) throws NetworkFailureException {
+ if (node != null) {
+ // too many update items may result in an error
+ // set max to 10 items
+ if (mUpdateArray != null && mUpdateArray.length() > 10) {
+ commitUpdate();
+ }
+
+ if (mUpdateArray == null)
+ mUpdateArray = new JSONArray();
+ mUpdateArray.put(node.getUpdateAction(getActionId()));
+ }
+ }
+ //移动任务
+ public void moveTask(Task task, TaskList preParent, TaskList curParent)
+ throws NetworkFailureException {
+ commitUpdate();
+ try {
+ JSONObject jsPost = new JSONObject();
+ JSONArray actionList = new JSONArray();
+ JSONObject action = new JSONObject();
+
+ // action_list
+ action.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE,
+ GTaskStringUtils.GTASK_JSON_ACTION_TYPE_MOVE);
+ action.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, getActionId());
+ action.put(GTaskStringUtils.GTASK_JSON_ID, task.getGid());
+ if (preParent == curParent && task.getPriorSibling() != null) {
+ // put prioring_sibing_id only if moving within the tasklist and
+ // it is not the first one
+ action.put(GTaskStringUtils.GTASK_JSON_PRIOR_SIBLING_ID, task.getPriorSibling());
+ }
+ action.put(GTaskStringUtils.GTASK_JSON_SOURCE_LIST, preParent.getGid());
+ action.put(GTaskStringUtils.GTASK_JSON_DEST_PARENT, curParent.getGid());
+ if (preParent != curParent) {
+ // put the dest_list only if moving between tasklists
+ action.put(GTaskStringUtils.GTASK_JSON_DEST_LIST, curParent.getGid());
+ }
+ actionList.put(action);
+ jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList);
+
+ // client_version
+ jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion);
+
+ postRequest(jsPost);
+
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new ActionFailureException("move task: handing jsonobject failed");
+ }
+ }
+ //删除结点
+ public void deleteNode(Node node) throws NetworkFailureException {
+ commitUpdate();
+ try {
+ JSONObject jsPost = new JSONObject();
+ JSONArray actionList = new JSONArray();
+
+ // action_list
+ node.setDeleted(true);
+ actionList.put(node.getUpdateAction(getActionId()));
+ jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList);
+
+ // client_version
+ jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion);
+
+ postRequest(jsPost);
+ mUpdateArray = null;
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new ActionFailureException("delete node: handing jsonobject failed");
+ }
+ }
+
+ public JSONArray getTaskLists() throws NetworkFailureException {
+ if (!mLoggedin) {
+ Log.e(TAG, "please login first");
+ throw new ActionFailureException("not logged in");
+ }
+
+ try {
+ HttpGet httpGet = new HttpGet(mGetUrl);
+ HttpResponse response = null;
+ response = mHttpClient.execute(httpGet);
+
+ // get the task list
+ String resString = getResponseContent(response.getEntity());
+ String jsBegin = "_setup(";
+ String jsEnd = ")}";
+ int begin = resString.indexOf(jsBegin);
+ int end = resString.lastIndexOf(jsEnd);
+ String jsString = null;
+ if (begin != -1 && end != -1 && begin < end) {
+ jsString = resString.substring(begin + jsBegin.length(), end);
+ }
+ JSONObject js = new JSONObject(jsString);
+ return js.getJSONObject("t").getJSONArray(GTaskStringUtils.GTASK_JSON_LISTS);
+ } catch (ClientProtocolException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new NetworkFailureException("gettasklists: httpget failed");
+ } catch (IOException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new NetworkFailureException("gettasklists: httpget failed");
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new ActionFailureException("get task lists: handing jasonobject failed");
+ }
+ }
+
+ public JSONArray getTaskList(String listGid) throws NetworkFailureException {
+ commitUpdate();
+ try {
+ JSONObject jsPost = new JSONObject();
+ JSONArray actionList = new JSONArray();
+ JSONObject action = new JSONObject();
+
+ // action_list
+ action.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE,
+ GTaskStringUtils.GTASK_JSON_ACTION_TYPE_GETALL);
+ action.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, getActionId());
+ action.put(GTaskStringUtils.GTASK_JSON_LIST_ID, listGid);
+ action.put(GTaskStringUtils.GTASK_JSON_GET_DELETED, false);
+ actionList.put(action);
+ jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList);
+
+ // client_version
+ jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion);
+
+ JSONObject jsResponse = postRequest(jsPost);
+ return jsResponse.getJSONArray(GTaskStringUtils.GTASK_JSON_TASKS);
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new ActionFailureException("get task list: handing jsonobject failed");
+ }
+ }
+
+ public Account getSyncAccount() {
+ return mAccount;
+ }
+
+ public void resetUpdateArray() {
+ mUpdateArray = null;
+ }
+}
diff --git a/src/app/src/main/java/net/micode/notes/gtask/remote/GTaskManager.java b/src/app/src/main/java/net/micode/notes/gtask/remote/GTaskManager.java
new file mode 100644
index 0000000..91683b3
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/gtask/remote/GTaskManager.java
@@ -0,0 +1,803 @@
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.gtask.remote;
+
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.util.Log;
+
+import net.micode.notes.R;
+import net.micode.notes.data.Notes;
+import net.micode.notes.data.Notes.DataColumns;
+import net.micode.notes.data.Notes.NoteColumns;
+import net.micode.notes.gtask.data.MetaData;
+import net.micode.notes.gtask.data.Node;
+import net.micode.notes.gtask.data.SqlNote;
+import net.micode.notes.gtask.data.Task;
+import net.micode.notes.gtask.data.TaskList;
+import net.micode.notes.gtask.exception.ActionFailureException;
+import net.micode.notes.gtask.exception.NetworkFailureException;
+import net.micode.notes.tool.DataUtils;
+import net.micode.notes.tool.GTaskStringUtils;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+
+/*
+Gtask管理者类,提供初始化任务列表,同步便签内容和文件夹
+添加、更新本地和远端节点,更新本地同步任务ID等功能
+ */
+public class GTaskManager {
+ private static final String TAG = GTaskManager.class.getSimpleName();
+
+ public static final int STATE_SUCCESS = 0;
+
+ public static final int STATE_NETWORK_ERROR = 1;
+
+ public static final int STATE_INTERNAL_ERROR = 2;
+
+ public static final int STATE_SYNC_IN_PROGRESS = 3;
+
+ public static final int STATE_SYNC_CANCELLED = 4;
+
+ private static GTaskManager mInstance = null;
+
+ private Activity mActivity;
+
+ private Context mContext;
+
+ private ContentResolver mContentResolver;
+
+ private boolean mSyncing;
+
+ private boolean mCancelled;
+
+ private HashMap mGTaskListHashMap;
+
+ private HashMap mGTaskHashMap;
+
+ private HashMap mMetaHashMap;
+
+ private TaskList mMetaList;
+
+ private HashSet mLocalDeleteIdMap;
+
+ private HashMap mGidToNid;
+
+ private HashMap mNidToGid;
+
+ private GTaskManager() {
+ mSyncing = false;
+ mCancelled = false;
+ mGTaskListHashMap = new HashMap();
+ mGTaskHashMap = new HashMap();
+ mMetaHashMap = new HashMap();
+ mMetaList = null;
+ mLocalDeleteIdMap = new HashSet();
+ mGidToNid = new HashMap();
+ mNidToGid = new HashMap();
+ }
+ //获得实例
+ public static synchronized GTaskManager getInstance() {
+ if (mInstance == null) {
+ mInstance = new GTaskManager();
+ }
+ return mInstance;
+ }
+
+ public synchronized void setActivityContext(Activity activity) {
+ // used for getting authtoken
+ mActivity = activity;
+ }
+
+ public int sync(Context context, GTaskASyncTask asyncTask) {
+ if (mSyncing) {
+ Log.d(TAG, "Sync is in progress");
+ return STATE_SYNC_IN_PROGRESS;
+ }
+ mContext = context;
+ mContentResolver = mContext.getContentResolver();
+ mSyncing = true;
+ mCancelled = false;
+ mGTaskListHashMap.clear();
+ mGTaskHashMap.clear();
+ mMetaHashMap.clear();
+ mLocalDeleteIdMap.clear();
+ mGidToNid.clear();
+ mNidToGid.clear();
+
+ try {
+ GTaskClient client = GTaskClient.getInstance();
+ client.resetUpdateArray();
+
+ // login google task
+ if (!mCancelled) {
+ if (!client.login(mActivity)) {
+ throw new NetworkFailureException("login google task failed");
+ }
+ }
+
+ // get the task list from google
+ asyncTask.publishProgess(mContext.getString(R.string.sync_progress_init_list));
+ initGTaskList();
+
+ // do content sync work
+ asyncTask.publishProgess(mContext.getString(R.string.sync_progress_syncing));
+ syncContent();
+ } catch (NetworkFailureException e) {
+ Log.e(TAG, e.toString());
+ return STATE_NETWORK_ERROR;
+ } catch (ActionFailureException e) {
+ Log.e(TAG, e.toString());
+ return STATE_INTERNAL_ERROR;
+ } catch (Exception e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ return STATE_INTERNAL_ERROR;
+ } finally {
+ mGTaskListHashMap.clear();
+ mGTaskHashMap.clear();
+ mMetaHashMap.clear();
+ mLocalDeleteIdMap.clear();
+ mGidToNid.clear();
+ mNidToGid.clear();
+ mSyncing = false;
+ }
+
+ return mCancelled ? STATE_SYNC_CANCELLED : STATE_SUCCESS;
+ }
+
+ private void initGTaskList() throws NetworkFailureException {
+ if (mCancelled)
+ return;
+ GTaskClient client = GTaskClient.getInstance();
+ try {
+ JSONArray jsTaskLists = client.getTaskLists();
+
+ // init meta list first
+ mMetaList = null;
+ for (int i = 0; i < jsTaskLists.length(); i++) {
+ JSONObject object = jsTaskLists.getJSONObject(i);
+ String gid = object.getString(GTaskStringUtils.GTASK_JSON_ID);
+ String name = object.getString(GTaskStringUtils.GTASK_JSON_NAME);
+
+ if (name
+ .equals(GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_META)) {
+ mMetaList = new TaskList();
+ mMetaList.setContentByRemoteJSON(object);
+
+ // load meta data
+ JSONArray jsMetas = client.getTaskList(gid);
+ for (int j = 0; j < jsMetas.length(); j++) {
+ object = (JSONObject) jsMetas.getJSONObject(j);
+ MetaData metaData = new MetaData();
+ metaData.setContentByRemoteJSON(object);
+ if (metaData.isWorthSaving()) {
+ mMetaList.addChildTask(metaData);
+ if (metaData.getGid() != null) {
+ mMetaHashMap.put(metaData.getRelatedGid(), metaData);
+ }
+ }
+ }
+ }
+ }
+
+ // create meta list if not existed
+ if (mMetaList == null) {
+ mMetaList = new TaskList();
+ mMetaList.setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX
+ + GTaskStringUtils.FOLDER_META);
+ GTaskClient.getInstance().createTaskList(mMetaList);
+ }
+
+ // init task list
+ for (int i = 0; i < jsTaskLists.length(); i++) {
+ JSONObject object = jsTaskLists.getJSONObject(i);
+ String gid = object.getString(GTaskStringUtils.GTASK_JSON_ID);
+ String name = object.getString(GTaskStringUtils.GTASK_JSON_NAME);
+
+ if (name.startsWith(GTaskStringUtils.MIUI_FOLDER_PREFFIX)
+ && !name.equals(GTaskStringUtils.MIUI_FOLDER_PREFFIX
+ + GTaskStringUtils.FOLDER_META)) {
+ TaskList tasklist = new TaskList();
+ tasklist.setContentByRemoteJSON(object);
+ mGTaskListHashMap.put(gid, tasklist);
+ mGTaskHashMap.put(gid, tasklist);
+
+ // load tasks
+ JSONArray jsTasks = client.getTaskList(gid);
+ for (int j = 0; j < jsTasks.length(); j++) {
+ object = (JSONObject) jsTasks.getJSONObject(j);
+ gid = object.getString(GTaskStringUtils.GTASK_JSON_ID);
+ Task task = new Task();
+ task.setContentByRemoteJSON(object);
+ if (task.isWorthSaving()) {
+ task.setMetaInfo(mMetaHashMap.get(gid));
+ tasklist.addChildTask(task);
+ mGTaskHashMap.put(gid, task);
+ }
+ }
+ }
+ }
+ } catch (JSONException e) {
+ Log.e(TAG, e.toString());
+ e.printStackTrace();
+ throw new ActionFailureException("initGTaskList: handing JSONObject failed");
+ }
+ }
+
+ private void syncContent() throws NetworkFailureException {
+ int syncType;
+ Cursor c = null;
+ String gid;
+ Node node;
+
+ mLocalDeleteIdMap.clear();
+
+ if (mCancelled) {
+ return;
+ }
+
+ // for local deleted note
+ try {
+ c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE,
+ "(type<>? AND parent_id=?)", new String[] {
+ String.valueOf(Notes.TYPE_SYSTEM), String.valueOf(Notes.ID_TRASH_FOLER)
+ }, null);
+ if (c != null) {
+ while (c.moveToNext()) {
+ gid = c.getString(SqlNote.GTASK_ID_COLUMN);
+ node = mGTaskHashMap.get(gid);
+ if (node != null) {
+ mGTaskHashMap.remove(gid);
+ doContentSync(Node.SYNC_ACTION_DEL_REMOTE, node, c);
+ }
+
+ mLocalDeleteIdMap.add(c.getLong(SqlNote.ID_COLUMN));
+ }
+ } else {
+ Log.w(TAG, "failed to query trash folder");
+ }
+ } finally {
+ if (c != null) {
+ c.close();
+ c = null;
+ }
+ }
+
+ // sync folder first
+ syncFolder();
+
+ // for note existing in database
+ try {
+ c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE,
+ "(type=? AND parent_id<>?)", new String[] {
+ String.valueOf(Notes.TYPE_NOTE), String.valueOf(Notes.ID_TRASH_FOLER)
+ }, NoteColumns.TYPE + " DESC");
+ if (c != null) {
+ while (c.moveToNext()) {
+ gid = c.getString(SqlNote.GTASK_ID_COLUMN);
+ node = mGTaskHashMap.get(gid);
+ if (node != null) {
+ mGTaskHashMap.remove(gid);
+ mGidToNid.put(gid, c.getLong(SqlNote.ID_COLUMN));
+ mNidToGid.put(c.getLong(SqlNote.ID_COLUMN), gid);
+ syncType = node.getSyncAction(c);
+ } else {
+ if (c.getString(SqlNote.GTASK_ID_COLUMN).trim().length() == 0) {
+ // local add
+ syncType = Node.SYNC_ACTION_ADD_REMOTE;
+ } else {
+ // remote delete
+ syncType = Node.SYNC_ACTION_DEL_LOCAL;
+ }
+ }
+ doContentSync(syncType, node, c);
+ }
+ } else {
+ Log.w(TAG, "failed to query existing note in database");
+ }
+
+ } finally {
+ if (c != null) {
+ c.close();
+ c = null;
+ }
+ }
+
+ // go through remaining items
+ Iterator> iter = mGTaskHashMap.entrySet().iterator();
+ while (iter.hasNext()) {
+ Map.Entry entry = iter.next();
+ node = entry.getValue();
+ doContentSync(Node.SYNC_ACTION_ADD_LOCAL, node, null);
+ }
+
+ // mCancelled can be set by another thread, so we neet to check one by
+ // one
+ // clear local delete table
+ if (!mCancelled) {
+ if (!DataUtils.batchDeleteNotes(mContentResolver, mLocalDeleteIdMap)) {
+ throw new ActionFailureException("failed to batch-delete local deleted notes");
+ }
+ }
+
+ // refresh local sync id
+ if (!mCancelled) {
+ GTaskClient.getInstance().commitUpdate();
+ refreshLocalSyncId();
+ }
+
+ }
+
+ private void syncFolder() throws NetworkFailureException {
+ Cursor c = null;
+ String gid;
+ Node node;
+ int syncType;
+
+ if (mCancelled) {
+ return;
+ }
+
+ // for root folder
+ try {
+ c = mContentResolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI,
+ Notes.ID_ROOT_FOLDER), SqlNote.PROJECTION_NOTE, null, null, null);
+ if (c != null) {
+ c.moveToNext();
+ gid = c.getString(SqlNote.GTASK_ID_COLUMN);
+ node = mGTaskHashMap.get(gid);
+ if (node != null) {
+ mGTaskHashMap.remove(gid);
+ mGidToNid.put(gid, (long) Notes.ID_ROOT_FOLDER);
+ mNidToGid.put((long) Notes.ID_ROOT_FOLDER, gid);
+ // for system folder, only update remote name if necessary
+ if (!node.getName().equals(
+ GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT))
+ doContentSync(Node.SYNC_ACTION_UPDATE_REMOTE, node, c);
+ } else {
+ doContentSync(Node.SYNC_ACTION_ADD_REMOTE, node, c);
+ }
+ } else {
+ Log.w(TAG, "failed to query root folder");
+ }
+ } finally {
+ if (c != null) {
+ c.close();
+ c = null;
+ }
+ }
+
+ // for call-note folder
+ try {
+ c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, "(_id=?)",
+ new String[] {
+ String.valueOf(Notes.ID_CALL_RECORD_FOLDER)
+ }, null);
+ if (c != null) {
+ if (c.moveToNext()) {
+ gid = c.getString(SqlNote.GTASK_ID_COLUMN);
+ node = mGTaskHashMap.get(gid);
+ if (node != null) {
+ mGTaskHashMap.remove(gid);
+ mGidToNid.put(gid, (long) Notes.ID_CALL_RECORD_FOLDER);
+ mNidToGid.put((long) Notes.ID_CALL_RECORD_FOLDER, gid);
+ // for system folder, only update remote name if
+ // necessary
+ if (!node.getName().equals(
+ GTaskStringUtils.MIUI_FOLDER_PREFFIX
+ + GTaskStringUtils.FOLDER_CALL_NOTE))
+ doContentSync(Node.SYNC_ACTION_UPDATE_REMOTE, node, c);
+ } else {
+ doContentSync(Node.SYNC_ACTION_ADD_REMOTE, node, c);
+ }
+ }
+ } else {
+ Log.w(TAG, "failed to query call note folder");
+ }
+ } finally {
+ if (c != null) {
+ c.close();
+ c = null;
+ }
+ }
+
+ // for local existing folders
+ try {
+ c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE,
+ "(type=? AND parent_id<>?)", new String[] {
+ String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER)
+ }, NoteColumns.TYPE + " DESC");
+ if (c != null) {
+ while (c.moveToNext()) {
+ gid = c.getString(SqlNote.GTASK_ID_COLUMN);
+ node = mGTaskHashMap.get(gid);
+ if (node != null) {
+ mGTaskHashMap.remove(gid);
+ mGidToNid.put(gid, c.getLong(SqlNote.ID_COLUMN));
+ mNidToGid.put(c.getLong(SqlNote.ID_COLUMN), gid);
+ syncType = node.getSyncAction(c);
+ } else {
+ if (c.getString(SqlNote.GTASK_ID_COLUMN).trim().length() == 0) {
+ // local add
+ syncType = Node.SYNC_ACTION_ADD_REMOTE;
+ } else {
+ // remote delete
+ syncType = Node.SYNC_ACTION_DEL_LOCAL;
+ }
+ }
+ doContentSync(syncType, node, c);
+ }
+ } else {
+ Log.w(TAG, "failed to query existing folder");
+ }
+ } finally {
+ if (c != null) {
+ c.close();
+ c = null;
+ }
+ }
+
+ // for remote add folders
+ Iterator> iter = mGTaskListHashMap.entrySet().iterator();
+ while (iter.hasNext()) {
+ Map.Entry entry = iter.next();
+ gid = entry.getKey();
+ node = entry.getValue();
+ if (mGTaskHashMap.containsKey(gid)) {
+ mGTaskHashMap.remove(gid);
+ doContentSync(Node.SYNC_ACTION_ADD_LOCAL, node, null);
+ }
+ }
+
+ if (!mCancelled)
+ GTaskClient.getInstance().commitUpdate();
+ }
+
+ private void doContentSync(int syncType, Node node, Cursor c) throws NetworkFailureException {
+ if (mCancelled) {
+ return;
+ }
+
+ MetaData meta;
+ switch (syncType) {
+ case Node.SYNC_ACTION_ADD_LOCAL:
+ addLocalNode(node);
+ break;
+ case Node.SYNC_ACTION_ADD_REMOTE:
+ addRemoteNode(node, c);
+ break;
+ case Node.SYNC_ACTION_DEL_LOCAL:
+ meta = mMetaHashMap.get(c.getString(SqlNote.GTASK_ID_COLUMN));
+ if (meta != null) {
+ GTaskClient.getInstance().deleteNode(meta);
+ }
+ mLocalDeleteIdMap.add(c.getLong(SqlNote.ID_COLUMN));
+ break;
+ case Node.SYNC_ACTION_DEL_REMOTE:
+ meta = mMetaHashMap.get(node.getGid());
+ if (meta != null) {
+ GTaskClient.getInstance().deleteNode(meta);
+ }
+ GTaskClient.getInstance().deleteNode(node);
+ break;
+ case Node.SYNC_ACTION_UPDATE_LOCAL:
+ updateLocalNode(node, c);
+ break;
+ case Node.SYNC_ACTION_UPDATE_REMOTE:
+ updateRemoteNode(node, c);
+ break;
+ case Node.SYNC_ACTION_UPDATE_CONFLICT:
+ // merging both modifications maybe a good idea
+ // right now just use local update simply
+ updateRemoteNode(node, c);
+ break;
+ case Node.SYNC_ACTION_NONE:
+ break;
+ case Node.SYNC_ACTION_ERROR:
+ default:
+ throw new ActionFailureException("unkown sync action type");
+ }
+ }
+
+ private void addLocalNode(Node node) throws NetworkFailureException {
+ if (mCancelled) {
+ return;
+ }
+
+ SqlNote sqlNote;
+ if (node instanceof TaskList) {
+ if (node.getName().equals(
+ GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT)) {
+ sqlNote = new SqlNote(mContext, Notes.ID_ROOT_FOLDER);
+ } else if (node.getName().equals(
+ GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_CALL_NOTE)) {
+ sqlNote = new SqlNote(mContext, Notes.ID_CALL_RECORD_FOLDER);
+ } else {
+ sqlNote = new SqlNote(mContext);
+ sqlNote.setContent(node.getLocalJSONFromContent());
+ sqlNote.setParentId(Notes.ID_ROOT_FOLDER);
+ }
+ } else {
+ sqlNote = new SqlNote(mContext);
+ JSONObject js = node.getLocalJSONFromContent();
+ try {
+ if (js.has(GTaskStringUtils.META_HEAD_NOTE)) {
+ JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);
+ if (note.has(NoteColumns.ID)) {
+ long id = note.getLong(NoteColumns.ID);
+ if (DataUtils.existInNoteDatabase(mContentResolver, id)) {
+ // the id is not available, have to create a new one
+ note.remove(NoteColumns.ID);
+ }
+ }
+ }
+
+ if (js.has(GTaskStringUtils.META_HEAD_DATA)) {
+ JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA);
+ for (int i = 0; i < dataArray.length(); i++) {
+ JSONObject data = dataArray.getJSONObject(i);
+ if (data.has(DataColumns.ID)) {
+ long dataId = data.getLong(DataColumns.ID);
+ if (DataUtils.existInDataDatabase(mContentResolver, dataId)) {
+ // the data id is not available, have to create
+ // a new one
+ data.remove(DataColumns.ID);
+ }
+ }
+ }
+
+ }
+ } catch (JSONException e) {
+ Log.w(TAG, e.toString());
+ e.printStackTrace();
+ }
+ sqlNote.setContent(js);
+
+ Long parentId = mGidToNid.get(((Task) node).getParent().getGid());
+ if (parentId == null) {
+ Log.e(TAG, "cannot find task's parent id locally");
+ throw new ActionFailureException("cannot add local node");
+ }
+ sqlNote.setParentId(parentId.longValue());
+ }
+
+ // create the local node
+ sqlNote.setGtaskId(node.getGid());
+ sqlNote.commit(false);
+
+ // update gid-nid mapping
+ mGidToNid.put(node.getGid(), sqlNote.getId());
+ mNidToGid.put(sqlNote.getId(), node.getGid());
+
+ // update meta
+ updateRemoteMeta(node.getGid(), sqlNote);
+ }
+
+ private void updateLocalNode(Node node, Cursor c) throws NetworkFailureException {
+ if (mCancelled) {
+ return;
+ }
+
+ SqlNote sqlNote;
+ // update the note locally
+ sqlNote = new SqlNote(mContext, c);
+ sqlNote.setContent(node.getLocalJSONFromContent());
+
+ Long parentId = (node instanceof Task) ? mGidToNid.get(((Task) node).getParent().getGid())
+ : new Long(Notes.ID_ROOT_FOLDER);
+ if (parentId == null) {
+ Log.e(TAG, "cannot find task's parent id locally");
+ throw new ActionFailureException("cannot update local node");
+ }
+ sqlNote.setParentId(parentId.longValue());
+ sqlNote.commit(true);
+
+ // update meta info
+ updateRemoteMeta(node.getGid(), sqlNote);
+ }
+
+ private void addRemoteNode(Node node, Cursor c) throws NetworkFailureException {
+ if (mCancelled) {
+ return;
+ }
+
+ SqlNote sqlNote = new SqlNote(mContext, c);
+ Node n;
+
+ // update remotely
+ if (sqlNote.isNoteType()) {
+ Task task = new Task();
+ task.setContentByLocalJSON(sqlNote.getContent());
+
+ String parentGid = mNidToGid.get(sqlNote.getParentId());
+ if (parentGid == null) {
+ Log.e(TAG, "cannot find task's parent tasklist");
+ throw new ActionFailureException("cannot add remote task");
+ }
+ mGTaskListHashMap.get(parentGid).addChildTask(task);
+
+ GTaskClient.getInstance().createTask(task);
+ n = (Node) task;
+
+ // add meta
+ updateRemoteMeta(task.getGid(), sqlNote);
+ } else {
+ TaskList tasklist = null;
+
+ // we need to skip folder if it has already existed
+ String folderName = GTaskStringUtils.MIUI_FOLDER_PREFFIX;
+ if (sqlNote.getId() == Notes.ID_ROOT_FOLDER)
+ folderName += GTaskStringUtils.FOLDER_DEFAULT;
+ else if (sqlNote.getId() == Notes.ID_CALL_RECORD_FOLDER)
+ folderName += GTaskStringUtils.FOLDER_CALL_NOTE;
+ else
+ folderName += sqlNote.getSnippet();
+
+ Iterator> iter = mGTaskListHashMap.entrySet().iterator();
+ while (iter.hasNext()) {
+ Map.Entry entry = iter.next();
+ String gid = entry.getKey();
+ TaskList list = entry.getValue();
+
+ if (list.getName().equals(folderName)) {
+ tasklist = list;
+ if (mGTaskHashMap.containsKey(gid)) {
+ mGTaskHashMap.remove(gid);
+ }
+ break;
+ }
+ }
+
+ // no match we can add now
+ if (tasklist == null) {
+ tasklist = new TaskList();
+ tasklist.setContentByLocalJSON(sqlNote.getContent());
+ GTaskClient.getInstance().createTaskList(tasklist);
+ mGTaskListHashMap.put(tasklist.getGid(), tasklist);
+ }
+ n = (Node) tasklist;
+ }
+
+ // update local note
+ sqlNote.setGtaskId(n.getGid());
+ sqlNote.commit(false);
+ sqlNote.resetLocalModified();
+ sqlNote.commit(true);
+
+ // gid-id mapping
+ mGidToNid.put(n.getGid(), sqlNote.getId());
+ mNidToGid.put(sqlNote.getId(), n.getGid());
+ }
+
+ private void updateRemoteNode(Node node, Cursor c) throws NetworkFailureException {
+ if (mCancelled) {
+ return;
+ }
+
+ SqlNote sqlNote = new SqlNote(mContext, c);
+
+ // update remotely
+ node.setContentByLocalJSON(sqlNote.getContent());
+ GTaskClient.getInstance().addUpdateNode(node);
+
+ // update meta
+ updateRemoteMeta(node.getGid(), sqlNote);
+
+ // move task if necessary
+ if (sqlNote.isNoteType()) {
+ Task task = (Task) node;
+ TaskList preParentList = task.getParent();
+
+ String curParentGid = mNidToGid.get(sqlNote.getParentId());
+ if (curParentGid == null) {
+ Log.e(TAG, "cannot find task's parent tasklist");
+ throw new ActionFailureException("cannot update remote task");
+ }
+ TaskList curParentList = mGTaskListHashMap.get(curParentGid);
+
+ if (preParentList != curParentList) {
+ preParentList.removeChildTask(task);
+ curParentList.addChildTask(task);
+ GTaskClient.getInstance().moveTask(task, preParentList, curParentList);
+ }
+ }
+
+ // clear local modified flag
+ sqlNote.resetLocalModified();
+ sqlNote.commit(true);
+ }
+
+ private void updateRemoteMeta(String gid, SqlNote sqlNote) throws NetworkFailureException {
+ if (sqlNote != null && sqlNote.isNoteType()) {
+ MetaData metaData = mMetaHashMap.get(gid);
+ if (metaData != null) {
+ metaData.setMeta(gid, sqlNote.getContent());
+ GTaskClient.getInstance().addUpdateNode(metaData);
+ } else {
+ metaData = new MetaData();
+ metaData.setMeta(gid, sqlNote.getContent());
+ mMetaList.addChildTask(metaData);
+ mMetaHashMap.put(gid, metaData);
+ GTaskClient.getInstance().createTask(metaData);
+ }
+ }
+ }
+
+ private void refreshLocalSyncId() throws NetworkFailureException {
+ if (mCancelled) {
+ return;
+ }
+
+ // get the latest gtask list
+ mGTaskHashMap.clear();
+ mGTaskListHashMap.clear();
+ mMetaHashMap.clear();
+ initGTaskList();
+
+ Cursor c = null;
+ try {
+ c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE,
+ "(type<>? AND parent_id<>?)", new String[] {
+ String.valueOf(Notes.TYPE_SYSTEM), String.valueOf(Notes.ID_TRASH_FOLER)
+ }, NoteColumns.TYPE + " DESC");
+ if (c != null) {
+ while (c.moveToNext()) {
+ String gid = c.getString(SqlNote.GTASK_ID_COLUMN);
+ Node node = mGTaskHashMap.get(gid);
+ if (node != null) {
+ mGTaskHashMap.remove(gid);
+ ContentValues values = new ContentValues();
+ values.put(NoteColumns.SYNC_ID, node.getLastModified());
+ mContentResolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI,
+ c.getLong(SqlNote.ID_COLUMN)), values, null, null);
+ } else {
+ Log.e(TAG, "something is missed");
+ throw new ActionFailureException(
+ "some local items don't have gid after sync");
+ }
+ }
+ } else {
+ Log.w(TAG, "failed to query local note to refresh sync id");
+ }
+ } finally {
+ if (c != null) {
+ c.close();
+ c = null;
+ }
+ }
+ }
+
+ public String getSyncAccount() {
+ return GTaskClient.getInstance().getSyncAccount().name;
+ }
+
+ public void cancelSync() {
+ mCancelled = true;
+ }
+}
diff --git a/src/app/src/main/java/net/micode/notes/gtask/remote/GTaskSyncService.java b/src/app/src/main/java/net/micode/notes/gtask/remote/GTaskSyncService.java
new file mode 100644
index 0000000..404a180
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/gtask/remote/GTaskSyncService.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.gtask.remote;
+
+import android.app.Activity;
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.IBinder;
+/*
+Gtask同步服务
+ */
+public class GTaskSyncService extends Service {
+ public final static String ACTION_STRING_NAME = "sync_action_type";
+
+ public final static int ACTION_START_SYNC = 0;
+
+ public final static int ACTION_CANCEL_SYNC = 1;
+
+ public final static int ACTION_INVALID = 2;
+
+ public final static String GTASK_SERVICE_BROADCAST_NAME = "net.micode.notes.gtask.remote.gtask_sync_service";
+
+ public final static String GTASK_SERVICE_BROADCAST_IS_SYNCING = "isSyncing";
+
+ public final static String GTASK_SERVICE_BROADCAST_PROGRESS_MSG = "progressMsg";
+
+ private static GTaskASyncTask mSyncTask = null;
+
+ private static String mSyncProgress = "";
+
+ private void startSync() {
+ if (mSyncTask == null) {
+ mSyncTask = new GTaskASyncTask(this, new GTaskASyncTask.OnCompleteListener() {
+ public void onComplete() {
+ mSyncTask = null;
+ sendBroadcast("");
+ stopSelf();
+ }
+ });
+ sendBroadcast("");
+ mSyncTask.execute();
+ }
+ }
+
+ private void cancelSync() {
+ if (mSyncTask != null) {
+ mSyncTask.cancelSync();
+ }
+ }
+
+ @Override
+ public void onCreate() {
+ mSyncTask = null;
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ Bundle bundle = intent.getExtras();
+ if (bundle != null && bundle.containsKey(ACTION_STRING_NAME)) {
+ switch (bundle.getInt(ACTION_STRING_NAME, ACTION_INVALID)) {
+ case ACTION_START_SYNC:
+ startSync();
+ break;
+ case ACTION_CANCEL_SYNC:
+ cancelSync();
+ break;
+ default:
+ break;
+ }
+ return START_STICKY;
+ }
+ return super.onStartCommand(intent, flags, startId);
+ }
+
+ @Override
+ public void onLowMemory() {
+ if (mSyncTask != null) {
+ mSyncTask.cancelSync();
+ }
+ }
+
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+ //发送广播
+ public void sendBroadcast(String msg) {
+ mSyncProgress = msg;
+ Intent intent = new Intent(GTASK_SERVICE_BROADCAST_NAME);
+ intent.putExtra(GTASK_SERVICE_BROADCAST_IS_SYNCING, mSyncTask != null);
+ intent.putExtra(GTASK_SERVICE_BROADCAST_PROGRESS_MSG, msg);
+ sendBroadcast(intent);
+ }
+ //开始同步
+ public static void startSync(Activity activity) {
+ GTaskManager.getInstance().setActivityContext(activity);
+ Intent intent = new Intent(activity, GTaskSyncService.class);
+ intent.putExtra(GTaskSyncService.ACTION_STRING_NAME, GTaskSyncService.ACTION_START_SYNC);
+ activity.startService(intent);
+ }
+ //取消同步
+ public static void cancelSync(Context context) {
+ Intent intent = new Intent(context, GTaskSyncService.class);
+ intent.putExtra(GTaskSyncService.ACTION_STRING_NAME, GTaskSyncService.ACTION_CANCEL_SYNC);
+ context.startService(intent);
+ }
+ //判断同步
+ public static boolean isSyncing() {
+ return mSyncTask != null;
+ }
+ //获取进程字符串
+ public static String getProgressString() {
+ return mSyncProgress;
+ }
+}
diff --git a/src/app/src/main/java/net/micode/notes/model/Note.java b/src/app/src/main/java/net/micode/notes/model/Note.java
new file mode 100644
index 0000000..0aa447d
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/model/Note.java
@@ -0,0 +1,304 @@
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.model;
+import android.content.ContentProviderOperation;
+import android.content.ContentProviderResult;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.OperationApplicationException;
+import android.net.Uri;
+import android.os.RemoteException;
+import android.util.Log;
+
+import net.micode.notes.data.Notes;
+import net.micode.notes.data.Notes.CallNote;
+import net.micode.notes.data.Notes.DataColumns;
+import net.micode.notes.data.Notes.NoteColumns;
+import net.micode.notes.data.Notes.TextNote;
+
+import java.util.ArrayList;
+
+/*
+* 该类实现了对便签功能的建模
+* */
+public class Note {
+ //获取便签更改
+ private ContentValues mNoteDiffValues;
+ //获取便签
+ private NoteData mNoteData;
+ private static final String TAG = "Note";
+ private static final String WRONGNOTEID = "Wrong note id:";
+ /**
+ * Create a new note id for adding a new note to databases
+ * 返回值为新建的note的Id
+ */
+ public static synchronized long getNewNoteId(Context context, long folderId) {
+ // 在数据库中创建新便签
+ ContentValues values = new ContentValues();
+ long createdTime = System.currentTimeMillis();
+ //创建时间
+ values.put(NoteColumns.CREATED_DATE, createdTime);
+ //最近修改时间
+ values.put(NoteColumns.MODIFIED_DATE, createdTime);
+ values.put(NoteColumns.TYPE, Notes.TYPE_NOTE);
+ //本地修改,未同步
+ values.put(NoteColumns.LOCAL_MODIFIED, 1);
+ values.put(NoteColumns.PARENT_ID, folderId);
+ Uri uri = context.getContentResolver().insert(Notes.CONTENT_NOTE_URI, values);
+
+ long noteId = 0;
+ try {
+ //在数据库中为该便签分配id
+ noteId = Long.valueOf(uri.getPathSegments().get(1));
+ } catch (NumberFormatException e) {
+ //分配失败,将错误信息记入日志
+ Log.e(TAG, "Get note id error :" + e.toString());
+ noteId = 0;
+ }
+ if (noteId == -1) {
+ //抛出异常,非法状态,noteId无效
+ throw new IllegalStateException(WRONGNOTEID + noteId);
+ }
+ //分配成功,返回便签id
+ return noteId;
+ }
+
+ //构造函数
+ public Note() {
+ //为mNoteDiffValues与mNoteData初始化
+ mNoteDiffValues = new ContentValues();
+ mNoteData = new NoteData();
+ }
+
+ public void setNoteValue(String key, String value) {
+ mNoteDiffValues.put(key, value);
+ //本地修改标记
+ mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);
+ //设置当前时间为最近修改时间
+ mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis());
+ }
+
+ public void setTextData(String key, String value) {
+ //插入文本
+ mNoteData.setTextData(key, value);
+ }
+
+ public void setTextDataId(long id) {
+ mNoteData.setTextDataId(id);
+ }
+
+ public long getTextDataId() {
+ return mNoteData.mTextDataId;
+ }
+
+ public void setCallDataId(long id) {
+ //插入通话记录id
+ mNoteData.setCallDataId(id);
+ }
+
+ public void setCallData(String key, String value) {
+ mNoteData.setCallData(key, value);
+ }
+
+ //判断是否在本地修改
+ public boolean isLocalModified() {
+ return mNoteDiffValues.size() > 0 || mNoteData.isLocalModified();
+ }
+
+ //同步便签的方法
+ public boolean syncNote(Context context, long noteId) {
+ if (noteId <= 0) {
+ //note的id小于0时,无效
+ throw new IllegalArgumentException(WRONGNOTEID + noteId);
+ }
+
+ //如果不是本地修改,已经同步,不用再操作,直接返回true
+ if (!isLocalModified()) {
+ return true;
+ }
+
+ /**
+ * In theory, once data changed, the note should be updated on {@link NoteColumns#LOCAL_MODIFIED} and
+ * {@link NoteColumns#MODIFIED_DATE}. For data safety, though update note fails, we also update the
+ * note data info
+ */
+ //如果是本地修改,执行下列操作
+ if (context.getContentResolver().update(
+ ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), mNoteDiffValues, null,
+ null) == 0) {
+ Log.e(TAG, "Update note error, should not happen");
+ // Do not return, fall through
+ }
+ //清空已更改的内容
+ mNoteDiffValues.clear();
+
+ //当便签修改过但是传入Resolver出错时,无法同步
+ if (mNoteData.isLocalModified() && (mNoteData.pushIntoContentResolver(context, noteId) == null)) {
+ //同步失败
+ return false;
+ }
+
+ return true;
+ }
+
+ //记录便签内部数据
+ private class NoteData {
+ //文本内容id
+ private long mTextDataId;
+
+ //改动的文本内容
+ private ContentValues mTextDataValues;
+
+ private long mCallDataId;
+
+ private ContentValues mCallDataValues;
+
+ private static final String TAG = "NoteData";
+
+ //构造函数,初始化变量
+ public NoteData() {
+ mTextDataValues = new ContentValues();
+ mCallDataValues = new ContentValues();
+ mTextDataId = 0;
+ mCallDataId = 0;
+ }
+
+ //判断是否为本地修改
+ boolean isLocalModified() {
+ return mTextDataValues.size() > 0 || mCallDataValues.size() > 0;
+ }
+
+ //设置文本数据id的fangfa
+ void setTextDataId(long id) {
+ if(id <= 0) {
+ //id <= 0 不合法的id,抛出异常
+ throw new IllegalArgumentException("Text data id should larger than 0");
+ }
+ mTextDataId = id;
+ }
+
+ void setCallDataId(long id) {
+ //判断id是否合法
+ if (id <= 0) {
+ throw new IllegalArgumentException("Call data id should larger than 0");
+ }
+ mCallDataId = id;
+ }
+
+ //插入通话记录数据
+ void setCallData(String key, String value) {
+ mCallDataValues.put(key, value);
+ mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);
+ mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis());
+ }
+
+ //插入文本数据
+ void setTextData(String key, String value) {
+ mTextDataValues.put(key, value);
+ mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);
+ mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis());
+ }
+
+ Uri pushIntoContentResolver(Context context, long noteId) {
+ /**
+ * 防止无效的id
+ */
+ if (noteId <= 0) {
+ throw new IllegalArgumentException(WRONGNOTEID + noteId);
+ }
+
+ ArrayList operationList = new ArrayList<>();
+ ContentProviderOperation.Builder builder = null;
+
+ //文本内容发生改变
+ if(mTextDataValues.size() > 0) {
+ mTextDataValues.put(DataColumns.NOTE_ID, noteId);
+ //如果没有分配id号
+ if (mTextDataId == 0) {
+ mTextDataValues.put(DataColumns.MIME_TYPE, TextNote.CONTENT_ITEM_TYPE);
+ Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI,
+ mTextDataValues);
+ try {
+ //尝试分配id
+ setTextDataId(Long.valueOf(uri.getPathSegments().get(1)));
+ } catch (NumberFormatException e) {
+ //分配失败
+ Log.e(TAG, "Insert new text data fail with noteId" + noteId);
+ //清除内容
+ mTextDataValues.clear();
+ return null;
+ }
+ } else {
+ //已经有id号,执行下列操作
+ builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId(
+ Notes.CONTENT_DATA_URI, mTextDataId));
+ builder.withValues(mTextDataValues);
+ //加入修改内容
+ operationList.add(builder.build());
+ }
+ //清除已修改
+ mTextDataValues.clear();
+ }
+
+ //如果数据内容发生改变
+ if(mCallDataValues.size() > 0) {
+ mCallDataValues.put(DataColumns.NOTE_ID, noteId);
+
+ if (mCallDataId == 0) {
+ //如果没有id号,执行下列操作
+ mCallDataValues.put(DataColumns.MIME_TYPE, CallNote.CONTENT_ITEM_TYPE);
+ Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI,
+ mCallDataValues);
+ //尝试分配id
+ try {
+ setCallDataId(Long.valueOf(uri.getPathSegments().get(1)));
+ } catch (NumberFormatException e) {
+ //失败,错误信息加入日志
+ Log.e(TAG, "Insert new call data fail with noteId" + noteId);
+ //清除已修改内容
+ mCallDataValues.clear();
+ return null;
+ }
+ } else {
+ //有id号,执行下列操作
+ builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId(
+ Notes.CONTENT_DATA_URI, mCallDataId));
+ builder.withValues(mCallDataValues);
+ operationList.add(builder.build());
+ }
+ mCallDataValues.clear();
+ }
+
+ if (!operationList.isEmpty()) {
+ //当前操作的便签不空,执行
+ try {
+ ContentProviderResult[] results = context.getContentResolver().applyBatch(
+ Notes.AUTHORITY, operationList);
+ //如果res无效,插入失败,返回null值
+ //否则返回uri
+ return (results == null || results.length == 0 || results[0] == null) ? null
+ : ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId);
+ } catch (RemoteException|OperationApplicationException e) {
+ Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
+ return null;
+ }
+ }
+ return null;
+ }
+ }
+}
diff --git a/src/app/src/main/java/net/micode/notes/model/WorkingNote.java b/src/app/src/main/java/net/micode/notes/model/WorkingNote.java
new file mode 100644
index 0000000..819f958
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/model/WorkingNote.java
@@ -0,0 +1,442 @@
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.model;
+
+import android.appwidget.AppWidgetManager;
+import android.content.ContentUris;
+import android.content.Context;
+import android.database.Cursor;
+import android.text.TextUtils;
+import android.util.Log;
+
+import net.micode.notes.data.Notes;
+import net.micode.notes.data.Notes.CallNote;
+import net.micode.notes.data.Notes.DataColumns;
+import net.micode.notes.data.Notes.DataConstants;
+import net.micode.notes.data.Notes.NoteColumns;
+import net.micode.notes.data.Notes.TextNote;
+import net.micode.notes.tool.ResourceParser.NoteBgResources;
+
+
+public class WorkingNote {
+ // Note for the working note
+ private Note mNote;
+ // Note Id
+ private long mNoteId;
+ // Note content
+ private String mContent;
+ // Note mode
+ private int mMode;
+
+ //记录闹铃时间
+ private long mAlertDate;
+
+ //记录最近更改时间
+ private long mModifiedDate;
+
+ //记录背景色ID
+ private int mBgColorId;
+
+ //记录Widget Id
+ private int mWidgetId;
+
+ //记录Widget类型
+ private int mWidgetType;
+
+ //记录文件夹id
+ private long mFolderId;
+
+ private Context mContext;
+
+ private static final String TAG = "WorkingNote";
+
+ //是否删除标识
+ private boolean mIsDeleted;
+
+ //用于检查便签设置是否更改
+ private NoteSettingChangedListener mNoteSettingStatusListener;
+
+ public static final String[] DATA_PROJECTION = new String[] {
+ DataColumns.ID,
+ DataColumns.CONTENT,
+ DataColumns.MIME_TYPE,
+ DataColumns.DATA1,
+ DataColumns.DATA2,
+ DataColumns.DATA3,
+ DataColumns.DATA4,
+ };
+
+ //定义了便签显示的一系列参数
+ public static final String[] NOTE_PROJECTION = new String[] {
+ NoteColumns.PARENT_ID,
+ NoteColumns.ALERTED_DATE,
+ NoteColumns.BG_COLOR_ID,
+ NoteColumns.WIDGET_ID,
+ NoteColumns.WIDGET_TYPE,
+ NoteColumns.MODIFIED_DATE
+ };
+
+ //定义了一系列id
+ private static final int DATA_ID_COLUMN = 0;
+
+ private static final int DATA_CONTENT_COLUMN = 1;
+
+ private static final int DATA_MIME_TYPE_COLUMN = 2;
+
+ private static final int DATA_MODE_COLUMN = 3;
+
+ private static final int NOTE_PARENT_ID_COLUMN = 0;
+
+ private static final int NOTE_ALERTED_DATE_COLUMN = 1;
+
+ private static final int NOTE_BG_COLOR_ID_COLUMN = 2;
+
+ private static final int NOTE_WIDGET_ID_COLUMN = 3;
+
+ private static final int NOTE_WIDGET_TYPE_COLUMN = 4;
+
+ private static final int NOTE_MODIFIED_DATE_COLUMN = 5;
+
+ // New note construct
+ //构造函数,实例化时调用,创建新便签
+ private WorkingNote(Context context, long folderId) {
+ mContext = context;
+ mAlertDate = 0;
+ mModifiedDate = System.currentTimeMillis();
+ mFolderId = folderId;
+ mNote = new Note();
+ mNoteId = 0;
+ mIsDeleted = false;
+ mMode = 0;
+ mWidgetType = Notes.TYPE_WIDGET_INVALIDE;
+ }
+
+ // 已有便签结构
+ private WorkingNote(Context context, long noteId, long folderId) {
+ mContext = context;
+ mNoteId = noteId;
+ mFolderId = folderId;
+ mIsDeleted = false;
+ mNote = new Note();
+ loadNote();
+ }
+
+ //根据ID加载便签的方法
+ private void loadNote() {
+ Cursor cursor = mContext.getContentResolver().query(
+ ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mNoteId), NOTE_PROJECTION, null,
+ null, null);
+
+ //如果查询到的内容有效
+ if (cursor != null) {
+ if (cursor.moveToFirst()) {
+ //如果将游标置于第一个元素成功
+ //将便签参数以这个元素初始化
+ mFolderId = cursor.getLong(NOTE_PARENT_ID_COLUMN);
+ mBgColorId = cursor.getInt(NOTE_BG_COLOR_ID_COLUMN);
+ mWidgetId = cursor.getInt(NOTE_WIDGET_ID_COLUMN);
+ mWidgetType = cursor.getInt(NOTE_WIDGET_TYPE_COLUMN);
+ mAlertDate = cursor.getLong(NOTE_ALERTED_DATE_COLUMN);
+ mModifiedDate = cursor.getLong(NOTE_MODIFIED_DATE_COLUMN);
+ }
+ //关闭cursor
+ cursor.close();
+ } else {
+ //否则,记录错误,抛出异常
+ Log.e(TAG, "No note with id:" + mNoteId);
+ throw new IllegalArgumentException("Unable to find note with id " + mNoteId);
+ }
+ //加载便签数据的方法
+ loadNoteData();
+ }
+
+ //实现了加载便签数据的方法
+ private void loadNoteData() {
+ Cursor cursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, DATA_PROJECTION,
+ DataColumns.NOTE_ID + "=?", new String[] {
+ String.valueOf(mNoteId)
+ }, null);
+
+ //如果查询到了内容有效
+ if (cursor != null) {
+ if (cursor.moveToFirst()) {
+ do {
+ String type = cursor.getString(DATA_MIME_TYPE_COLUMN);
+ //匹配数据类型
+ //如果是便签类的数据
+ if (DataConstants.NOTE.equals(type)) {
+ //初始化
+ mContent = cursor.getString(DATA_CONTENT_COLUMN);
+ mMode = cursor.getInt(DATA_MODE_COLUMN);
+ mNote.setTextDataId(cursor.getLong(DATA_ID_COLUMN));
+ } else if (DataConstants.CALL_NOTE.equals(type)) {
+ //如果是通话记录类的数据
+ mNote.setCallDataId(cursor.getLong(DATA_ID_COLUMN));
+ } else {
+ //都不是,保错
+ Log.d(TAG, "Wrong note type with type:" + type);
+ }
+ } while (cursor.moveToNext());//遍历cursor中的所有内容
+ }
+ cursor.close();
+ } else {
+ //cursor为null,当前id找不到内容
+ //将错误信息记入日志,抛出异常
+ Log.e(TAG, "No data with id:" + mNoteId);
+ throw new IllegalArgumentException("Unable to find note's data with id " + mNoteId);
+ }
+ }
+
+ //该方法实现了创建新的空便签的方法
+ public static WorkingNote createEmptyNote(Context context, long folderId, int widgetId,
+ int widgetType, int defaultBgColorId) {
+ //创建新的便签
+ WorkingNote note = new WorkingNote(context, folderId);
+ //设置背景色
+ note.setBgColorId(defaultBgColorId);
+ //设置widget
+ note.setWidgetId(widgetId);
+ //设置wegit类型
+ note.setWidgetType(widgetType);
+ //返回新建的便签
+ return note;
+ }
+
+ //该方法返回当前便签的功能
+ //@ id 要加载的便签id号
+ public static WorkingNote load(Context context, long id) {
+ return new WorkingNote(context, id, 0);
+ }
+
+ //该方法实现了保存便签的功能
+ public synchronized boolean saveNote() {
+ if (isWorthSaving()) {
+ if (!existInDatabase()) {
+ //当需要保存且在数据库中不存在时
+ if ((mNoteId = Note.getNewNoteId(mContext, mFolderId)) == 0) {
+ //分配id失败(id == 0),记入日志
+ Log.e(TAG, "Create new note fail with id:" + mNoteId);
+ //返回false,保存失败
+ return false;
+ }
+ }
+
+ //同步便签
+ mNote.syncNote(mContext, mNoteId);
+
+ /**
+ * Update widget content if there exist any widget of this note
+ */
+ if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID
+ && mWidgetType != Notes.TYPE_WIDGET_INVALIDE
+ && mNoteSettingStatusListener != null) {
+ //更新便签widget
+ mNoteSettingStatusListener.onWidgetChanged();
+ }
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ //根据id判断是否在数据库中的方法,id>0有效,否则无效
+ public boolean existInDatabase() {
+ return mNoteId > 0;
+ }
+
+ //判断是否需要保存的方法
+ private boolean isWorthSaving() {
+ if (mIsDeleted || (!existInDatabase() && TextUtils.isEmpty(mContent))
+ || (existInDatabase() && !mNote.isLocalModified())) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ public void setOnSettingStatusChangedListener(NoteSettingChangedListener l) {
+ mNoteSettingStatusListener = l;
+ }
+
+ //设置闹铃时间的方法
+ public void setAlertDate(long date, boolean set) {
+ //如果闹钟时间改变
+ if (date != mAlertDate) {
+ //更改提醒时间
+ mAlertDate = date;
+ //将更改保存
+ mNote.setNoteValue(NoteColumns.ALERTED_DATE, String.valueOf(mAlertDate));
+ }
+ if (mNoteSettingStatusListener != null) {
+ mNoteSettingStatusListener.onClockAlertChanged(date, set);
+ }
+ }
+
+ //置上删除标记
+ //mark - true,已删除
+ //mark - false,未删除
+ public void markDeleted(boolean mark) {
+ mIsDeleted = mark;
+ //widget有效
+ if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID
+ && mWidgetType != Notes.TYPE_WIDGET_INVALIDE && mNoteSettingStatusListener != null) {
+ mNoteSettingStatusListener.onWidgetChanged();
+ }
+ }
+
+ //设置背景色ID
+ public void setBgColorId(int id) {
+ if (id != mBgColorId) {
+ //如果背景色id改变,执行下列操作
+ //否则,不执行操作
+ mBgColorId = id;
+ if (mNoteSettingStatusListener != null) {
+ mNoteSettingStatusListener.onBackgroundColorChanged();
+ }
+ //将更改保存到便签中
+ mNote.setNoteValue(NoteColumns.BG_COLOR_ID, String.valueOf(id));
+ }
+ }
+
+ //设置为清单模式的方法
+ public void setCheckListMode(int mode) {
+ if (mMode != mode) {
+ //如果模式改变,执行下列操作
+ //否则,跳过
+ if (mNoteSettingStatusListener != null) {
+ mNoteSettingStatusListener.onCheckListModeChanged(mMode, mode);
+ }
+ mMode = mode;
+ mNote.setTextData(TextNote.MODE, String.valueOf(mMode));
+ }
+ }
+
+ //设置Widget类型的方法
+ public void setWidgetType(int type) {
+ if (type != mWidgetType) {
+ mWidgetType = type;
+ //将更改保存到便签中
+ mNote.setNoteValue(NoteColumns.WIDGET_TYPE, String.valueOf(mWidgetType));
+ }
+ }
+
+ //设置widget的id的方法
+ //如果id不变,不执行操作
+ public void setWidgetId(int id) {
+ if (id != mWidgetId) {
+ mWidgetId = id;
+ //将更改保存
+ mNote.setNoteValue(NoteColumns.WIDGET_ID, String.valueOf(mWidgetId));
+ }
+ }
+
+ public void setWorkingText(String text) {
+ if (!TextUtils.equals(mContent, text)) {
+ mContent = text;
+ //保存更改
+ mNote.setTextData(DataColumns.CONTENT, mContent);
+ }
+ }
+
+ public void convertToCallNote(String phoneNumber, long callDate) {
+ mNote.setCallData(CallNote.CALL_DATE, String.valueOf(callDate));
+ mNote.setCallData(CallNote.PHONE_NUMBER, phoneNumber);
+ mNote.setNoteValue(NoteColumns.PARENT_ID, String.valueOf(Notes.ID_CALL_RECORD_FOLDER));
+ }
+
+ public boolean hasClockAlert() {
+ return (mAlertDate > 0 ? true : false);
+ }
+
+ public String getContent() {
+ return mContent;
+ }
+
+ //共有方法,获取闹铃时间
+ public long getAlertDate() {
+ return mAlertDate;
+ }
+
+ //共有方法,获取最近修改时间
+ public long getModifiedDate() {
+ return mModifiedDate;
+ }
+
+ //获取背景色的资源id号
+ public int getBgColorResId() {
+ return NoteBgResources.getNoteBgResource(mBgColorId);
+ }
+
+ //共有方法,获取背景色ID
+ public int getBgColorId() {
+ return mBgColorId;
+ }
+
+ //获取标题背景资源id
+ public int getTitleBgResId() {
+ return NoteBgResources.getNoteTitleBgResource(mBgColorId);
+ }
+
+ public int getCheckListMode() {
+ return mMode;
+ }
+
+ //获取便签id
+ public long getNoteId() {
+ return mNoteId;
+ }
+
+ //获取文件夹id
+ public long getFolderId() {
+ return mFolderId;
+ }
+
+ //获取widget的id
+ public int getWidgetId() {
+ return mWidgetId;
+ }
+
+ //获取widget的类型
+ public int getWidgetType() {
+ return mWidgetType;
+ }
+
+ //接口,定义了一系列便签设置更改的监听器
+ public interface NoteSettingChangedListener {
+ /**
+ * Called when the background color of current note has just changed
+ */
+ void onBackgroundColorChanged();
+
+ /**
+ * Called when user set clock
+ */
+ void onClockAlertChanged(long date, boolean set);
+
+ /**
+ * Call when user create note from widget
+ */
+ void onWidgetChanged();
+
+ /**
+ * Call when switch between check list mode and normal mode
+ * @param oldMode is previous mode before change
+ * @param newMode is new mode
+ */
+ void onCheckListModeChanged(int oldMode, int newMode);
+ }
+}
diff --git a/src/app/src/main/java/net/micode/notes/tool/BackupUtils.java b/src/app/src/main/java/net/micode/notes/tool/BackupUtils.java
new file mode 100644
index 0000000..8cc9e1b
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/tool/BackupUtils.java
@@ -0,0 +1,370 @@
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.tool;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.os.Environment;
+import android.text.TextUtils;
+import android.text.format.DateFormat;
+import android.util.Log;
+
+import net.micode.notes.R;
+import net.micode.notes.data.Notes;
+import net.micode.notes.data.Notes.DataColumns;
+import net.micode.notes.data.Notes.DataConstants;
+import net.micode.notes.data.Notes.NoteColumns;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+
+/*
+备份工具类
+ */
+public class BackupUtils {
+ private static final String TAG = "BackupUtils";
+ // Singleton stuff
+ private static BackupUtils sInstance;
+ //获得实例
+ public static synchronized BackupUtils getInstance(Context context) {
+ if (sInstance == null) {
+ sInstance = new BackupUtils(context);
+ }
+ return sInstance;
+ }
+
+ /**
+ * Following states are signs to represents backup or restore
+ * status
+ */
+ // Currently, the sdcard is not mounted
+ public static final int STATE_SD_CARD_UNMOUONTED = 0;
+ // The backup file not exist
+ public static final int STATE_BACKUP_FILE_NOT_EXIST = 1;
+ // The data is not well formated, may be changed by other programs
+ public static final int STATE_DATA_DESTROIED = 2;
+ // Some run-time exception which causes restore or backup fails
+ public static final int STATE_SYSTEM_ERROR = 3;
+ // Backup or restore success
+ public static final int STATE_SUCCESS = 4;
+
+ private TextExport mTextExport;
+ //构造函数
+ private BackupUtils(Context context) {
+ mTextExport = new TextExport(context);
+ }
+
+ private static boolean externalStorageAvailable() {
+ /*Environment类中提供了几个静态常量用于标识外部存储的状态
+ MEDIA_MOUNTED存储媒体已经挂载
+ 并且挂载点可读/写
+ 可以通过静态方法getExternalStorageState()来获取外部存储的状态
+ 其中.equals表示的是二者的内容是否相等*/
+ return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
+ }
+ //导出文本
+ public int exportToText() {
+ return mTextExport.exportToText();
+ }
+ //获取导出文本名字
+ public String getExportedTextFileName() {
+ return mTextExport.mFileName;
+ }
+ //获取导出文本目录
+ public String getExportedTextFileDir() {
+ return mTextExport.mFileDirectory;
+ }
+ //引用内部类包含了之前data.Notes中的NoteColumns和DataColumns
+ private static class TextExport {
+ private static final String[] NOTE_PROJECTION = {
+ NoteColumns.ID,
+ NoteColumns.MODIFIED_DATE,
+ NoteColumns.SNIPPET,
+ NoteColumns.TYPE
+ };
+ //便签列id
+ private static final int NOTE_COLUMN_ID = 0;
+ //便签修改的日期
+ private static final int NOTE_COLUMN_MODIFIED_DATE = 1;
+ //便签列片段
+ private static final int NOTE_COLUMN_SNIPPET = 2;
+ //数据项
+ private static final String[] DATA_PROJECTION = {
+ DataColumns.CONTENT,
+ DataColumns.MIME_TYPE,
+ DataColumns.DATA1,
+ DataColumns.DATA2,
+ DataColumns.DATA3,
+ DataColumns.DATA4,
+ };
+ //数据列中内容
+ private static final int DATA_COLUMN_CONTENT = 0;
+ //数据列中mime类型
+ private static final int DATA_COLUMN_MIME_TYPE = 1;
+ //数据中拨打日期
+ private static final int DATA_COLUMN_CALL_DATE = 2;
+ //数据列中的电话号码
+ private static final int DATA_COLUMN_PHONE_NUMBER = 4;
+ //文本格式
+ private final String [] TEXT_FORMAT;
+ private static final int FORMAT_FOLDER_NAME = 0;
+ private static final int FORMAT_NOTE_DATE = 1;
+ private static final int FORMAT_NOTE_CONTENT = 2;
+
+ private Context mContext;
+ private String mFileName;
+ private String mFileDirectory;
+ //文本导出初始化
+ public TextExport(Context context) {
+ TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note);
+ mContext = context;
+ mFileName = "";
+ mFileDirectory = "";
+ }
+ //获取文本格式类型
+ private String getFormat(int id) {
+ return TEXT_FORMAT[id];
+ }
+
+ /**
+ * Export the folder identified by folder id to text
+ */
+ private void exportFolderToText(String folderId, PrintStream ps) {
+ // 查询属于此文件夹的Notes
+ Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI,
+ NOTE_PROJECTION, NoteColumns.PARENT_ID + "=?", new String[] {
+ folderId
+ }, null);
+ //下面有很多地方调用了android.database.Cursor类有一些固定用法
+ if (notesCursor != null) {
+ /*
+ 查询出来的cursor的初始位置是指向第一条记录的前一个位置的
+ cursor.moveToFirst()指向查询结果的第一个位置。
+ 一般通过判断cursor.moveToFirst()的值为true或false来确定查询结果是否为空。
+ */
+ if (notesCursor.moveToFirst()) {
+ do {
+ // Print note's last modified date
+ ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format(
+ mContext.getString(R.string.format_datetime_mdhm),
+ notesCursor.getLong(NOTE_COLUMN_MODIFIED_DATE))));
+ // Query data belong to this note
+ String noteId = notesCursor.getString(NOTE_COLUMN_ID);
+ exportNoteToText(noteId, ps);
+ } while (notesCursor.moveToNext());
+ }
+ notesCursor.close();
+ }
+ }
+
+ /**
+ * Export note identified by id to a print stream
+ */
+ private void exportNoteToText(String noteId, PrintStream ps) {
+ Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI,
+ DATA_PROJECTION, DataColumns.NOTE_ID + "=?", new String[] {
+ noteId
+ }, null);
+
+ if (dataCursor != null) {
+ if (dataCursor.moveToFirst()) {
+ do {
+ //获取mimeType
+ String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE);
+ if (DataConstants.CALL_NOTE.equals(mimeType)) {
+ // Print phone number
+ String phoneNumber = dataCursor.getString(DATA_COLUMN_PHONE_NUMBER);
+ long callDate = dataCursor.getLong(DATA_COLUMN_CALL_DATE);
+ String location = dataCursor.getString(DATA_COLUMN_CONTENT);
+
+ if (!TextUtils.isEmpty(phoneNumber)) {
+ ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT),
+ phoneNumber));
+ }
+ // 打印调用日期
+ ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), DateFormat
+ .format(mContext.getString(R.string.format_datetime_mdhm),
+ callDate)));
+ // 打印调用位置
+ if (!TextUtils.isEmpty(location)) {
+ ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT),
+ location));
+ }
+ } else if (DataConstants.NOTE.equals(mimeType)) {
+ String content = dataCursor.getString(DATA_COLUMN_CONTENT);
+ if (!TextUtils.isEmpty(content)) {
+ ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT),
+ content));
+ }
+ }
+ } while (dataCursor.moveToNext());
+ }
+ //及时关闭cursor
+ dataCursor.close();
+ }
+ // 在便签之间打印一个行分隔符
+ try {
+ ps.write(new byte[] {
+ Character.LINE_SEPARATOR, Character.LETTER_NUMBER
+ });
+ } catch (IOException e) {
+ Log.e(TAG, e.toString());
+ }
+ }
+
+ /*
+ 便签将被导出为用户可读的文本
+ */
+ public int exportToText() {
+ //判断是否有外部存储空间
+ if (!externalStorageAvailable()) {
+ Log.d(TAG, "Media was not mounted");
+ return STATE_SD_CARD_UNMOUONTED;
+ }
+ //定义输出流ps
+ PrintStream ps = getExportToTextPrintStream();
+ //检查null
+ if (ps == null) {
+ Log.e(TAG, "get print stream error");
+ return STATE_SYSTEM_ERROR;
+ }
+ // 第一个导出文件夹及其注释
+ Cursor folderCursor = mContext.getContentResolver().query(
+ Notes.CONTENT_NOTE_URI,
+ NOTE_PROJECTION,
+ "(" + NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + " AND "
+ + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + ") OR "
+ + NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER, null, null);
+
+ if (folderCursor != null) {
+ if (folderCursor.moveToFirst()) {
+ do {
+ // 打印文件夹的名字
+ String folderName = "";
+ //若id为最近记录里调用的文件中
+ if(folderCursor.getLong(NOTE_COLUMN_ID) == Notes.ID_CALL_RECORD_FOLDER) {
+ folderName = mContext.getString(R.string.call_record_folder_name);
+ } else {
+ folderName = folderCursor.getString(NOTE_COLUMN_SNIPPET);
+ }
+ //若文本工具为空
+ if (!TextUtils.isEmpty(folderName)) {
+ ps.println(String.format(getFormat(FORMAT_FOLDER_NAME), folderName));
+ }
+ //获得文件id
+ String folderId = folderCursor.getString(NOTE_COLUMN_ID);
+ exportFolderToText(folderId, ps);
+ } while (folderCursor.moveToNext());
+ }
+ //及时关闭folderCursor
+ folderCursor.close();
+ }
+
+ // 在根目录下导出注释
+ Cursor noteCursor = mContext.getContentResolver().query(
+ Notes.CONTENT_NOTE_URI,
+ NOTE_PROJECTION,
+ NoteColumns.TYPE + "=" + +Notes.TYPE_NOTE + " AND " + NoteColumns.PARENT_ID
+ + "=0", null, null);
+
+ if (noteCursor != null) {
+ //如果不为空
+ if (noteCursor.moveToFirst()) {
+ do {
+ ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format(
+ mContext.getString(R.string.format_datetime_mdhm),
+ noteCursor.getLong(NOTE_COLUMN_MODIFIED_DATE))));
+ // 查询数据属于该便签
+ String noteId = noteCursor.getString(NOTE_COLUMN_ID);
+ //通过id导出文本
+ exportNoteToText(noteId, ps);
+ } while (noteCursor.moveToNext());
+ }
+ noteCursor.close();
+ }
+ ps.close();
+
+ return STATE_SUCCESS;
+ }
+
+ /*
+ 获取指向该文件的打印流 {@generateExportedTextFile}
+ */
+ private PrintStream getExportToTextPrintStream() {
+ File file = generateFileMountedOnSDcard(mContext, R.string.file_path,
+ R.string.file_name_txt_format);
+ if (file == null) {
+ Log.e(TAG, "create file to exported failed");
+ return null;
+ }
+ mFileName = file.getName();
+ mFileDirectory = mContext.getString(R.string.file_path);
+ PrintStream ps = null;
+ try {
+ FileOutputStream fos = new FileOutputStream(file);
+ ps = new PrintStream(fos);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ return null;
+ } catch (NullPointerException e) {
+ e.printStackTrace();
+ return null;
+ }
+ return ps;
+ }
+ }
+
+ /*
+ 生成文本文件来存储导入的数据
+ */
+ private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) {
+ StringBuilder sb = new StringBuilder();
+ sb.append(Environment.getExternalStorageDirectory());
+ sb.append(context.getString(filePathResId));
+ File filedir = new File(sb.toString());
+ sb.append(context.getString(
+ fileNameFormatResId,
+ DateFormat.format(context.getString(R.string.format_date_ymd),
+ System.currentTimeMillis())));
+ File file = new File(sb.toString());
+
+ try {
+ //目录不存在就创建
+ if (!filedir.exists()) {
+ filedir.mkdir();
+ }
+ //文件不存在也创建
+ if (!file.exists()) {
+ file.createNewFile();
+ }
+ return file;
+ //安全性异常
+ } catch (SecurityException e) {
+ e.printStackTrace();
+ //IO异常
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ return null;
+ }
+}
+
+
diff --git a/src/app/src/main/java/net/micode/notes/tool/DataUtils.java b/src/app/src/main/java/net/micode/notes/tool/DataUtils.java
new file mode 100644
index 0000000..d6d437a
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/tool/DataUtils.java
@@ -0,0 +1,318 @@
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.tool;
+
+import android.content.ContentProviderOperation;
+import android.content.ContentProviderResult;
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.OperationApplicationException;
+import android.database.Cursor;
+import android.os.RemoteException;
+import android.util.Log;
+
+import net.micode.notes.data.Notes;
+import net.micode.notes.data.Notes.CallNote;
+import net.micode.notes.data.Notes.NoteColumns;
+import net.micode.notes.ui.NotesListAdapter.AppWidgetAttribute;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+
+/*
+便签数据处理工具类
+ */
+public class DataUtils {
+ public static final String TAG = "DataUtils";
+ //批处理删除便签
+ public static boolean batchDeleteNotes(ContentResolver resolver, HashSet ids) {
+ //id不存在
+ if (ids == null) {
+ Log.d(TAG, "the ids is null");
+ return true;
+ }
+ //id在哈希表里
+ if (ids.size() == 0) {
+ Log.d(TAG, "no id is in the hashset");
+ return true;
+ }
+
+ ArrayList operationList = new ArrayList();
+ for (long id : ids) {
+ //id是便签根文件夹id
+ if(id == Notes.ID_ROOT_FOLDER) {
+ Log.e(TAG, "Don't delete system folder root");
+ continue;
+ }
+ //使用ArrayList来保存 ContentProviderOperation操作
+ ContentProviderOperation.Builder builder = ContentProviderOperation
+ .newDelete(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id));
+ operationList.add(builder.build());
+ }
+ try {
+ //通过ContentResolver 的applyBatch()函数来应用批量操作:
+ ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList);
+ if (results == null || results.length == 0 || results[0] == null) {
+ Log.d(TAG, "delete notes failed, ids:" + ids.toString());
+ return false;
+ }
+ return true;
+ //捕捉远程异常
+ } catch (RemoteException e) {
+ Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
+ } catch (OperationApplicationException e) {
+ Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
+ }
+ return false;
+ }
+
+ public static void moveNoteToFoler(ContentResolver resolver, long id, long srcFolderId, long desFolderId) {
+ ContentValues values = new ContentValues();
+ values.put(NoteColumns.PARENT_ID, desFolderId);
+ values.put(NoteColumns.ORIGIN_PARENT_ID, srcFolderId);
+ values.put(NoteColumns.LOCAL_MODIFIED, 1);
+ resolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id), values, null, null);
+ }
+ //批量移动至文件夹
+ public static boolean batchMoveToFolder(ContentResolver resolver, HashSet ids,
+ long folderId) {
+ if (ids == null) {
+ Log.d(TAG, "the ids is null");
+ return true;
+ }
+
+ ArrayList operationList = new ArrayList();
+ for (long id : ids) {
+ ContentProviderOperation.Builder builder = ContentProviderOperation
+ .newUpdate(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id));
+ builder.withValue(NoteColumns.PARENT_ID, folderId);
+ builder.withValue(NoteColumns.LOCAL_MODIFIED, 1);
+ operationList.add(builder.build());
+ }
+
+ try {
+ ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList);
+ if (results == null || results.length == 0 || results[0] == null) {
+ Log.d(TAG, "delete notes failed, ids:" + ids.toString());
+ return false;
+ }
+ return true;
+ } catch (RemoteException e) {
+ Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
+ } catch (OperationApplicationException e) {
+ Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
+ }
+ return false;
+ }
+
+ /*
+ 获取除系统文件夹外的所有文件夹计数 {@link Notes#TYPE_SYSTEM}}
+ */
+ public static int getUserFolderCount(ContentResolver resolver) {
+ /*
+ ContentResolver直译为内容解析器,
+ Android中程序间数据的共享是通过Provider/Resolver进行的。
+ 提供数据(内容)的就叫Provider,Resovler提供接口对这个内容进行解读。
+ 在这里,系统提供了联系人的Provider,那么我们就需要构建一个Resolver来读取联系人的内容。
+ */
+ Cursor cursor =resolver.query(Notes.CONTENT_NOTE_URI,
+ new String[] { "COUNT(*)" },
+ NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>?",
+ new String[] { String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER)},
+ null);
+
+ int count = 0;
+ if(cursor != null) {
+ if(cursor.moveToFirst()) {
+ try {
+ count = cursor.getInt(0);
+ } catch (IndexOutOfBoundsException e) {
+ Log.e(TAG, "get folder count failed:" + e.toString());
+ } finally {
+ cursor.close();
+ }
+ }
+ }
+ return count;
+ }
+
+ public static boolean visibleInNoteDatabase(ContentResolver resolver, long noteId, int type) {
+ Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId),
+ null,
+ NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER,
+ new String [] {String.valueOf(type)},
+ null);
+
+ boolean exist = false;
+ if (cursor != null) {
+ if (cursor.getCount() > 0) {
+ exist = true;
+ }
+ cursor.close();
+ }
+ return exist;
+ }
+ //查询该ID在数据库中是否存在
+ public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) {
+ Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId),
+ null, null, null, null);
+
+ boolean exist = false;
+ if (cursor != null) {
+ //行数大于0
+ if (cursor.getCount() > 0) {
+ exist = true;
+ }
+ cursor.close();
+ }
+ return exist;
+ }
+ //查询dataID在数据库中是否存在
+ public static boolean existInDataDatabase(ContentResolver resolver, long dataId) {
+ Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId),
+ null, null, null, null);
+
+ boolean exist = false;
+ if (cursor != null) {
+ if (cursor.getCount() > 0) {
+ exist = true;
+ }
+ cursor.close();
+ }
+ return exist;
+ }
+ //检查可见文件名是否存在
+ public static boolean checkVisibleFolderName(ContentResolver resolver, String name) {
+ Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, null,
+ NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER +
+ " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER +
+ " AND " + NoteColumns.SNIPPET + "=?",
+ new String[] { name }, null);
+ boolean exist = false;
+ if(cursor != null) {
+ if(cursor.getCount() > 0) {
+ exist = true;
+ }
+ cursor.close();
+ }
+ return exist;
+ }
+ //获取文件夹便签的widget返回的是哈希表
+ public static HashSet getFolderNoteWidget(ContentResolver resolver, long folderId) {
+ Cursor c = resolver.query(Notes.CONTENT_NOTE_URI,
+ new String[] { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE },
+ NoteColumns.PARENT_ID + "=?",
+ new String[] { String.valueOf(folderId) },
+ null);
+
+ HashSet set = null;
+ if (c != null) {
+ if (c.moveToFirst()) {
+ //定义AppWidgetAttribute类型的哈希表
+ set = new HashSet();
+ do {
+ try {
+ AppWidgetAttribute widget = new AppWidgetAttribute();
+ widget.widgetId = c.getInt(0);
+ widget.widgetType = c.getInt(1);
+ set.add(widget);
+ } catch (IndexOutOfBoundsException e) {
+ Log.e(TAG, e.toString());
+ }
+ //这里循环是找到cursor不为空的时候
+ } while (c.moveToNext());
+ }
+ c.close();
+ }
+ return set;
+ }
+ //通过便签ID获得电话号码
+ public static String getCallNumberByNoteId(ContentResolver resolver, long noteId) {
+ Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI,
+ new String [] { CallNote.PHONE_NUMBER },
+ CallNote.NOTE_ID + "=? AND " + CallNote.MIME_TYPE + "=?",
+ new String [] { String.valueOf(noteId), CallNote.CONTENT_ITEM_TYPE },
+ null);
+
+ if (cursor != null && cursor.moveToFirst()) {
+ //获得第一行数据
+ try {
+ return cursor.getString(0);
+ //捕捉超界异常
+ } catch (IndexOutOfBoundsException e) {
+ Log.e(TAG, "Get call number fails " + e.toString());
+ } finally {
+ cursor.close();
+ }
+ }
+ return "";
+ }
+ //通过电话号码和拨打日期获得便签ID
+ public static long getNoteIdByPhoneNumberAndCallDate(ContentResolver resolver, String phoneNumber, long callDate) {
+ Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI,
+ new String [] { CallNote.NOTE_ID },
+ CallNote.CALL_DATE + "=? AND " + CallNote.MIME_TYPE + "=? AND PHONE_NUMBERS_EQUAL("
+ + CallNote.PHONE_NUMBER + ",?)",
+ new String [] { String.valueOf(callDate), CallNote.CONTENT_ITEM_TYPE, phoneNumber },
+ null);
+
+ if (cursor != null) {
+ if (cursor.moveToFirst()) {
+ try {
+ return cursor.getLong(0);
+ //记录获取失败
+ } catch (IndexOutOfBoundsException e) {
+ Log.e(TAG, "Get call note id fails " + e.toString());
+ }
+ }
+ cursor.close();
+ }
+ return 0;
+ }
+ //通过ID获取NoteColumns.SNIPPET
+ public static String getSnippetById(ContentResolver resolver, long noteId) {
+ Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI,
+ new String [] { NoteColumns.SNIPPET },
+ NoteColumns.ID + "=?",
+ new String [] { String.valueOf(noteId)},
+ null);
+
+ if (cursor != null) {
+ String snippet = "";
+ if (cursor.moveToFirst()) {
+ //获取第一列字符串
+ snippet = cursor.getString(0);
+ }
+ cursor.close();
+ return snippet;
+ }
+ //抛出无法利用id找到便签的异常
+ throw new IllegalArgumentException("Note is not found with id: " + noteId);
+ }
+ //获得格式化的snippet(主要是去除无用字符)
+ public static String getFormattedSnippet(String snippet) {
+ if (snippet != null) {
+ snippet = snippet.trim();
+ int index = snippet.indexOf('\n');
+ if (index != -1) {
+ snippet = snippet.substring(0, index);
+ }
+ }
+ return snippet;
+ }
+}
diff --git a/src/app/src/main/java/net/micode/notes/tool/GTaskStringUtils.java b/src/app/src/main/java/net/micode/notes/tool/GTaskStringUtils.java
new file mode 100644
index 0000000..3ea4d96
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/tool/GTaskStringUtils.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.tool;
+/*
+ 字符工具类
+ */
+public class GTaskStringUtils {
+ //日程同步动作ID
+ public final static String GTASK_JSON_ACTION_ID = "action_id";
+ //日程同步动作列表
+ public final static String GTASK_JSON_ACTION_LIST = "action_list";
+ //日程同步动作类型
+ public final static String GTASK_JSON_ACTION_TYPE = "action_type";
+ //日程同步动作类型构造
+ public final static String GTASK_JSON_ACTION_TYPE_CREATE = "create";
+ //返回日程同步动作类型
+ public final static String GTASK_JSON_ACTION_TYPE_GETALL = "get_all";
+ //日程同步动作类型移动
+ public final static String GTASK_JSON_ACTION_TYPE_MOVE = "move";
+ //日程同步动作类型更新
+ public final static String GTASK_JSON_ACTION_TYPE_UPDATE = "update";
+ //日程同步创建id
+ public final static String GTASK_JSON_CREATOR_ID = "creator_id";
+ //日程同步子体
+ public final static String GTASK_JSON_CHILD_ENTITY = "child_entity";
+ //日程同步用户版本
+ public final static String GTASK_JSON_CLIENT_VERSION = "client_version";
+ //日程同步已完成
+ public final static String GTASK_JSON_COMPLETED = "completed";
+ //日程同步当前列表ID
+ public final static String GTASK_JSON_CURRENT_LIST_ID = "current_list_id";
+ //日程同步默认列表id
+ public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_id";
+ //日程同步删除
+ public final static String GTASK_JSON_DELETED = "deleted";
+
+ public final static String GTASK_JSON_DEST_LIST = "dest_list";
+
+ public final static String GTASK_JSON_DEST_PARENT = "dest_parent";
+
+ public final static String GTASK_JSON_DEST_PARENT_TYPE = "dest_parent_type";
+
+ public final static String GTASK_JSON_ENTITY_DELTA = "entity_delta";
+
+ public final static String GTASK_JSON_ENTITY_TYPE = "entity_type";
+
+ public final static String GTASK_JSON_GET_DELETED = "get_deleted";
+
+ public final static String GTASK_JSON_ID = "id";
+
+ public final static String GTASK_JSON_INDEX = "index";
+
+ public final static String GTASK_JSON_LAST_MODIFIED = "last_modified";
+
+ public final static String GTASK_JSON_LATEST_SYNC_POINT = "latest_sync_point";
+
+ public final static String GTASK_JSON_LIST_ID = "list_id";
+
+ public final static String GTASK_JSON_LISTS = "lists";
+
+ public final static String GTASK_JSON_NAME = "name";
+
+ public final static String GTASK_JSON_NEW_ID = "new_id";
+
+ public final static String GTASK_JSON_NOTES = "notes";
+
+ public final static String GTASK_JSON_PARENT_ID = "parent_id";
+
+ public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_id";
+
+ public final static String GTASK_JSON_RESULTS = "results";
+
+ public final static String GTASK_JSON_SOURCE_LIST = "source_list";
+
+ public final static String GTASK_JSON_TASKS = "tasks";
+
+ public final static String GTASK_JSON_TYPE = "type";
+
+ public final static String GTASK_JSON_TYPE_GROUP = "GROUP";
+
+ public final static String GTASK_JSON_TYPE_TASK = "TASK";
+
+ public final static String GTASK_JSON_USER = "user";
+
+ public final static String MIUI_FOLDER_PREFFIX = "[MIUI_Notes]";
+
+ public final static String FOLDER_DEFAULT = "Default";
+
+ public final static String FOLDER_CALL_NOTE = "Call_Note";
+
+ public final static String FOLDER_META = "METADATA";
+
+ public final static String META_HEAD_GTASK_ID = "meta_gid";
+
+ public final static String META_HEAD_NOTE = "meta_note";
+
+ public final static String META_HEAD_DATA = "meta_data";
+
+ public final static String META_NOTE_NAME = "[META INFO] DON'T UPDATE AND DELETE";
+
+}
diff --git a/src/app/src/main/java/net/micode/notes/tool/ResourceParser.java b/src/app/src/main/java/net/micode/notes/tool/ResourceParser.java
new file mode 100644
index 0000000..b15dccb
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/tool/ResourceParser.java
@@ -0,0 +1,186 @@
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.tool;
+
+import android.content.Context;
+import android.preference.PreferenceManager;
+
+import net.micode.notes.R;
+import net.micode.notes.ui.NotesPreferenceActivity;
+/*
+界面元素解析工具类
+ */
+public class ResourceParser {
+ //定义各种颜色
+ public static final int YELLOW = 0;
+ public static final int BLUE = 1;
+ public static final int WHITE = 2;
+ public static final int GREEN = 3;
+ public static final int RED = 4;
+ //背景默认色
+ public static final int BG_DEFAULT_COLOR = YELLOW;
+
+ public static final int TEXT_SMALL = 0;
+ public static final int TEXT_MEDIUM = 1;
+ public static final int TEXT_LARGE = 2;
+ public static final int TEXT_SUPER = 3;
+ //背景默认字体大小
+ public static final int BG_DEFAULT_FONT_SIZE = TEXT_MEDIUM;
+ //便签背景源
+ public static class NoteBgResources {
+ //颜色
+ private final static int [] BG_EDIT_RESOURCES = new int [] {
+ R.drawable.edit_yellow,
+ R.drawable.edit_blue,
+ R.drawable.edit_white,
+ R.drawable.edit_green,
+ R.drawable.edit_red
+ };
+ //标题色
+ private final static int [] BG_EDIT_TITLE_RESOURCES = new int [] {
+ R.drawable.edit_title_yellow,
+ R.drawable.edit_title_blue,
+ R.drawable.edit_title_white,
+ R.drawable.edit_title_green,
+ R.drawable.edit_title_red
+ };
+ //获取便签背景源第ID项内容
+ public static int getNoteBgResource(int id) {
+ return BG_EDIT_RESOURCES[id];
+ }
+ //获取便签标题背景源第ID项内容
+ public static int getNoteTitleBgResource(int id) {
+ return BG_EDIT_TITLE_RESOURCES[id];
+ }
+ }
+ //获得默认背景颜色ID
+ public static int getDefaultBgId(Context context) {
+ if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean(
+ NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) {
+ return (int) (Math.random() * NoteBgResources.BG_EDIT_RESOURCES.length);
+ } else {
+ return BG_DEFAULT_COLOR;
+ }
+ }
+ //便签不同区域的定色
+ public static class NoteItemBgResources {
+ private final static int [] BG_FIRST_RESOURCES = new int [] {
+ R.drawable.list_yellow_up,
+ R.drawable.list_blue_up,
+ R.drawable.list_white_up,
+ R.drawable.list_green_up,
+ R.drawable.list_red_up
+ };
+
+ private final static int [] BG_NORMAL_RESOURCES = new int [] {
+ R.drawable.list_yellow_middle,
+ R.drawable.list_blue_middle,
+ R.drawable.list_white_middle,
+ R.drawable.list_green_middle,
+ R.drawable.list_red_middle
+ };
+
+ private final static int [] BG_LAST_RESOURCES = new int [] {
+ R.drawable.list_yellow_down,
+ R.drawable.list_blue_down,
+ R.drawable.list_white_down,
+ R.drawable.list_green_down,
+ R.drawable.list_red_down,
+ };
+
+ private final static int [] BG_SINGLE_RESOURCES = new int [] {
+ R.drawable.list_yellow_single,
+ R.drawable.list_blue_single,
+ R.drawable.list_white_single,
+ R.drawable.list_green_single,
+ R.drawable.list_red_single
+ };
+ //获得便签背景首源
+ public static int getNoteBgFirstRes(int id) {
+ return BG_FIRST_RESOURCES[id];
+ }
+ //获得便签背景尾源
+ public static int getNoteBgLastRes(int id) {
+ return BG_LAST_RESOURCES[id];
+ }
+ //获得单个便签源
+ public static int getNoteBgSingleRes(int id) {
+ return BG_SINGLE_RESOURCES[id];
+ }
+ //获得便签正常源
+ public static int getNoteBgNormalRes(int id) {
+ return BG_NORMAL_RESOURCES[id];
+ }
+ //获得文件背景源
+ public static int getFolderBgRes() {
+ return R.drawable.list_folder;
+ }
+ }
+
+ public static class WidgetBgResources {
+ //2x大小背景
+ private final static int [] BG_2X_RESOURCES = new int [] {
+ R.drawable.widget_2x_yellow,
+ R.drawable.widget_2x_blue,
+ R.drawable.widget_2x_white,
+ R.drawable.widget_2x_green,
+ R.drawable.widget_2x_red,
+ };
+
+ public static int getWidget2xBgResource(int id) {
+ return BG_2X_RESOURCES[id];
+ }
+ //4X大小背景
+ private final static int [] BG_4X_RESOURCES = new int [] {
+ R.drawable.widget_4x_yellow,
+ R.drawable.widget_4x_blue,
+ R.drawable.widget_4x_white,
+ R.drawable.widget_4x_green,
+ R.drawable.widget_4x_red
+ };
+
+ public static int getWidget4xBgResource(int id) {
+ return BG_4X_RESOURCES[id];
+ }
+ }
+ //文本显示大小
+ public static class TextAppearanceResources {
+ private final static int [] TEXTAPPEARANCE_RESOURCES = new int [] {
+ R.style.TextAppearanceNormal,
+ R.style.TextAppearanceMedium,
+ R.style.TextAppearanceLarge,
+ R.style.TextAppearanceSuper
+ };
+
+ public static int getTexAppearanceResource(int id) {
+ /**
+ * HACKME: Fix bug of store the resource id in shared preference.
+ * The id may larger than the length of resources, in this case,
+ * return the {@link ResourceParser#BG_DEFAULT_FONT_SIZE}
+ */
+ //如果索引超界
+ if (id >= TEXTAPPEARANCE_RESOURCES.length) {
+ return BG_DEFAULT_FONT_SIZE;
+ }
+ return TEXTAPPEARANCE_RESOURCES[id];
+ }
+
+ public static int getResourcesSize() {
+ return TEXTAPPEARANCE_RESOURCES.length;
+ }
+ }
+}
diff --git a/src/app/src/main/java/net/micode/notes/ui/CheckBoxAdapter.java b/src/app/src/main/java/net/micode/notes/ui/CheckBoxAdapter.java
new file mode 100644
index 0000000..25eba55
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/ui/CheckBoxAdapter.java
@@ -0,0 +1,72 @@
+package net.micode.notes.ui;
+
+import java.util.HashMap;
+import java.util.List;
+
+import android.content.Context;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.CheckBox;
+import android.widget.TextView;
+
+import net.micode.notes.R;
+
+public class CheckBoxAdapter extends BaseAdapter{
+
+ private Context context;
+ private List> list;
+ private LayoutInflater layoutInflater;
+ private TextView tv;
+ private CheckBox cb;
+ public CheckBoxAdapter(Context context,List> list) {
+ this.context = context;
+ this.list = list;//list中checkbox状态为false
+ this.layoutInflater=LayoutInflater.from(context);
+ }
+
+ @Override
+ public int getCount() {
+ return list.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return list.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ if(convertView == null){
+ convertView = layoutInflater.inflate(R.layout.todo_list_item, null);
+
+ ViewCache viewCache = new ViewCache();
+ tv = (TextView) convertView.findViewById(R.id.tv_todo_text);
+ cb = (CheckBox) convertView.findViewById(R.id.cb_todo);
+
+ viewCache.tv = tv;
+ viewCache.cb = cb;
+ convertView.setTag(viewCache);
+ }else{
+ ViewCache viewCache = (ViewCache) convertView.getTag();
+ tv = viewCache.tv;
+ cb = viewCache.cb;
+ }
+
+ tv.setText(list.get(position).get("name")+"");
+ cb.setChecked((Boolean) list.get(position).get("boolean"));
+ return convertView;
+ }
+
+ public class ViewCache{
+ TextView tv;
+ CheckBox cb;
+ }
+}
\ No newline at end of file
diff --git a/src/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java b/src/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java
new file mode 100644
index 0000000..74c5a9e
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java
@@ -0,0 +1,961 @@
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.ui;
+
+import android.app.Activity;
+import android.app.AlarmManager;
+import android.app.AlertDialog;
+import android.app.PendingIntent;
+import android.app.SearchManager;
+import android.appwidget.AppWidgetManager;
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.graphics.Paint;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.text.Editable;
+import android.text.Spannable;
+import android.text.SpannableString;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.text.format.DateUtils;
+import android.text.style.BackgroundColorSpan;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.WindowManager;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
+import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import net.micode.notes.R;
+import net.micode.notes.data.Notes;
+import net.micode.notes.data.Notes.TextNote;
+import net.micode.notes.model.WorkingNote;
+import net.micode.notes.model.WorkingNote.NoteSettingChangedListener;
+import net.micode.notes.tool.DataUtils;
+import net.micode.notes.tool.ResourceParser;
+import net.micode.notes.tool.ResourceParser.TextAppearanceResources;
+import net.micode.notes.ui.DateTimePickerDialog.OnDateTimeSetListener;
+import net.micode.notes.ui.NoteEditText.OnTextViewChangeListener;
+import net.micode.notes.widget.NoteWidgetProvider_2x;
+import net.micode.notes.widget.NoteWidgetProvider_4x;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 该类实现了便签编辑功能的实现
+ */
+public class NoteEditActivity extends Activity implements OnClickListener,
+ NoteSettingChangedListener, OnTextViewChangeListener {
+ private class HeadViewHolder {
+ //文本内容显示,显示最近修改时间
+ public TextView tvModified;
+
+ //图片内容显示,在便签右上方显示闹钟图标
+ public ImageView ivAlertIcon;
+
+ //文本内容显示,提醒时间
+ public TextView tvAlertDate;
+
+ //设置背景色
+ public ImageView ibSetBgColor;
+ }
+
+ //ResourceParser - tools\ResourceParser.java中的类,用于解析界面元素
+ private static final Map sBgSelectorBtnsMap = new HashMap();
+ static {
+ //向R文件中放入一系列颜色资源与id
+ sBgSelectorBtnsMap.put(R.id.iv_bg_yellow, ResourceParser.YELLOW);
+ sBgSelectorBtnsMap.put(R.id.iv_bg_red, ResourceParser.RED);
+ sBgSelectorBtnsMap.put(R.id.iv_bg_blue, ResourceParser.BLUE);
+ sBgSelectorBtnsMap.put(R.id.iv_bg_green, ResourceParser.GREEN);
+ sBgSelectorBtnsMap.put(R.id.iv_bg_white, ResourceParser.WHITE);
+ }
+
+ private static final Map sBgSelectorSelectionMap = new HashMap();
+ static {
+ //向资源文件中加入一系列背景资源与id
+ sBgSelectorSelectionMap.put(ResourceParser.YELLOW, R.id.iv_bg_yellow_select);
+ sBgSelectorSelectionMap.put(ResourceParser.RED, R.id.iv_bg_red_select);
+ sBgSelectorSelectionMap.put(ResourceParser.BLUE, R.id.iv_bg_blue_select);
+ sBgSelectorSelectionMap.put(ResourceParser.GREEN, R.id.iv_bg_green_select);
+ sBgSelectorSelectionMap.put(ResourceParser.WHITE, R.id.iv_bg_white_select);
+ }
+
+ private static final Map sFontSizeBtnsMap = new HashMap();
+ static {
+ //向R文件中加入字体大小id与内容
+ sFontSizeBtnsMap.put(R.id.ll_font_large, ResourceParser.TEXT_LARGE);
+ sFontSizeBtnsMap.put(R.id.ll_font_small, ResourceParser.TEXT_SMALL);
+ sFontSizeBtnsMap.put(R.id.ll_font_normal, ResourceParser.TEXT_MEDIUM);
+ sFontSizeBtnsMap.put(R.id.ll_font_super, ResourceParser.TEXT_SUPER);
+ }
+
+ private static final Map sFontSelectorSelectionMap = new HashMap();
+ static {
+ sFontSelectorSelectionMap.put(ResourceParser.TEXT_LARGE, R.id.iv_large_select);
+ sFontSelectorSelectionMap.put(ResourceParser.TEXT_SMALL, R.id.iv_small_select);
+ sFontSelectorSelectionMap.put(ResourceParser.TEXT_MEDIUM, R.id.iv_medium_select);
+ sFontSelectorSelectionMap.put(ResourceParser.TEXT_SUPER, R.id.iv_super_select);
+ }
+
+ //用于日志记录的标识
+ private static final String TAG = "NoteEditActivity";
+
+ //定义标题栏
+ private HeadViewHolder mNoteHeaderHolder;
+
+ //定义标题界面
+ private View mHeadViewPanel;
+
+ //定义背景色选择界面
+ private View mNoteBgColorSelector;
+
+ //定义字体大小选择页面
+ private View mFontSizeSelector;
+
+ //定义便签编辑页面
+ private EditText mNoteEditor;
+
+ //便签编辑面板
+ private View mNoteEditorPanel;
+
+ //当前显示的便签
+ private WorkingNote mWorkingNote;
+
+ private SharedPreferences mSharedPrefs;
+ //记录字体大小id
+ private int mFontSizeId;
+
+ //定义title时间后与字符数的空格
+ private static final String space_after_title_time = " ";
+
+ //保存便签字符数量
+ private int mNoteLength;
+
+ private String mFormateDataTime;
+
+ //记录默认字体大小
+ private static final String PREFERENCE_FONT_SIZE = "pref_font_size";
+
+ private static final int SHORTCUT_ICON_TITLE_MAX_LEN = 10;
+
+ public static final String TAG_CHECKED = String.valueOf('\u221A');
+ public static final String TAG_UNCHECKED = String.valueOf('\u25A1');
+
+ //界面线性单元
+ private LinearLayout mEditTextList;
+
+ private String mUserQuery;
+ private Pattern mPattern;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ //设置显示界面,参见note_edit.xml
+ this.setContentView(R.layout.note_edit);
+
+ //如果Activity没有被系统destroy,函数返回
+ if (savedInstanceState == null && !initActivityState(getIntent())) {
+ finish();//退出当前Activity,没有destroy
+ return;
+ }
+ //否则,初始化资源
+ initResources();
+ }
+
+ /**
+ * Current activity may be killed when the memory is low. Once it is killed, for another time
+ * user load this activity, we should restore the former state
+ */
+ @Override
+ protected void onRestoreInstanceState(Bundle savedInstanceState) {
+ super.onRestoreInstanceState(savedInstanceState);
+ //activity被意外杀死,savedInstanceState保存断点状态
+ if (savedInstanceState != null && savedInstanceState.containsKey(Intent.EXTRA_UID)) {
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.putExtra(Intent.EXTRA_UID, savedInstanceState.getLong(Intent.EXTRA_UID));
+ if (!initActivityState(intent)) {
+ //断点重启失败,结束activity
+ finish();
+ return;
+ }
+ //将断点重启成功信息记入日志
+ Log.d(TAG, "Restoring from killed activity");
+ }
+ }
+
+ //该方法用于初始化activity的状态,重启activity
+ private boolean initActivityState(Intent intent) {
+ /**
+ * If the user specified the {@link Intent#ACTION_VIEW} but not provided with id,
+ * then jump to the NotesListActivity
+ */
+ mWorkingNote = null;
+ if (TextUtils.equals(Intent.ACTION_VIEW, intent.getAction())) {
+ long noteId = intent.getLongExtra(Intent.EXTRA_UID, 0);
+ mUserQuery = "";
+
+ /**
+ * 从搜索结果启动
+ */
+ if (intent.hasExtra(SearchManager.EXTRA_DATA_KEY)) {
+ noteId = Long.parseLong(intent.getStringExtra(SearchManager.EXTRA_DATA_KEY));
+ mUserQuery = intent.getStringExtra(SearchManager.USER_QUERY);
+ }
+
+ if (!DataUtils.visibleInNoteDatabase(getContentResolver(), noteId, Notes.TYPE_NOTE)) {
+ Intent jump = new Intent(this, NotesListActivity.class);
+ startActivity(jump);
+ showToast(R.string.error_note_not_exist);
+ finish();
+ return false;
+ } else {
+ mWorkingNote = WorkingNote.load(this, noteId);
+ if (mWorkingNote == null) {
+ Log.e(TAG, "load note failed with note id" + noteId);
+ finish();
+ return false;
+ }
+ }
+ getWindow().setSoftInputMode(
+ WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN
+ | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
+ } else if(TextUtils.equals(Intent.ACTION_INSERT_OR_EDIT, intent.getAction())) {
+ // New note
+ long folderId = intent.getLongExtra(Notes.INTENT_EXTRA_FOLDER_ID, 0);
+ int widgetId = intent.getIntExtra(Notes.INTENT_EXTRA_WIDGET_ID,
+ AppWidgetManager.INVALID_APPWIDGET_ID);
+ int widgetType = intent.getIntExtra(Notes.INTENT_EXTRA_WIDGET_TYPE,
+ Notes.TYPE_WIDGET_INVALIDE);
+ //背景色id
+ int bgResId = intent.getIntExtra(Notes.INTENT_EXTRA_BACKGROUND_ID,
+ ResourceParser.getDefaultBgId(this));
+
+ // Parse call-record note
+ String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
+ long callDate = intent.getLongExtra(Notes.INTENT_EXTRA_CALL_DATE, 0);
+ if (callDate != 0 && phoneNumber != null) {
+ if (TextUtils.isEmpty(phoneNumber)) {
+ Log.w(TAG, "The call record number is null");
+ }
+ long noteId = 0;
+ if ((noteId = DataUtils.getNoteIdByPhoneNumberAndCallDate(getContentResolver(),
+ phoneNumber, callDate)) > 0) {
+ mWorkingNote = WorkingNote.load(this, noteId);
+ if (mWorkingNote == null) {
+ Log.e(TAG, "load call note failed with note id" + noteId);
+ finish();
+ return false;
+ }
+ } else {
+ mWorkingNote = WorkingNote.createEmptyNote(this, folderId, widgetId,
+ widgetType, bgResId);
+ mWorkingNote.convertToCallNote(phoneNumber, callDate);
+ }
+ } else {
+ mWorkingNote = WorkingNote.createEmptyNote(this, folderId, widgetId, widgetType,
+ bgResId);
+ }
+
+ getWindow().setSoftInputMode(
+ WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE
+ | WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
+ } else {
+ Log.e(TAG, "Intent not specified action, should not support");
+ finish();
+ return false;
+ }
+ mWorkingNote.setOnSettingStatusChangedListener(this);
+ return true;
+ }
+
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ initNoteScreen();
+ }
+
+ /*
+ * 该方法实现了对便签编辑屏幕的初始化
+ * */
+ private void initNoteScreen() {
+ mNoteEditor.setTextAppearance(this, TextAppearanceResources
+ .getTexAppearanceResource(mFontSizeId));
+ if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) {
+ switchToListMode(mWorkingNote.getContent());
+ } else {
+ //获取便签中已经保存的内容
+ mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery));
+ //获取长度
+ mNoteEditor.setSelection(mNoteEditor.getText().length());
+ }
+ for (Integer id : sBgSelectorSelectionMap.keySet()) {
+ findViewById(sBgSelectorSelectionMap.get(id)).setVisibility(View.GONE);
+ }
+ mHeadViewPanel.setBackgroundResource(mWorkingNote.getTitleBgResId());
+ mNoteEditorPanel.setBackgroundResource(mWorkingNote.getBgColorResId());
+
+ //获取已保存便签的字符数
+ mNoteLength = mNoteEditor.getText().toString().length();
+
+ mFormateDataTime = DateUtils.formatDateTime(this,
+ mWorkingNote.getModifiedDate(), DateUtils.FORMAT_SHOW_DATE
+ | DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_SHOW_TIME
+ | DateUtils.FORMAT_SHOW_YEAR);
+
+ mNoteHeaderHolder.tvModified.setText(mFormateDataTime
+ + space_after_title_time +getResources().getString(R.string.note_length) + " : "
+ + mNoteLength);
+
+ /*
+ * TODO: Add the menu for setting alert. Currently disable it because the DateTimePicker
+ * is not ready
+ */
+ showAlertHeader();
+ }
+
+ private void showAlertHeader() {
+ if (mWorkingNote.hasClockAlert()) {
+ long time = System.currentTimeMillis();
+ if (time > mWorkingNote.getAlertDate()) {
+ mNoteHeaderHolder.tvAlertDate.setText(R.string.note_alert_expired);
+ } else {
+ mNoteHeaderHolder.tvAlertDate.setText(DateUtils.getRelativeTimeSpanString(
+ mWorkingNote.getAlertDate(), time, DateUtils.MINUTE_IN_MILLIS));
+ }
+ mNoteHeaderHolder.tvAlertDate.setVisibility(View.VISIBLE);
+ mNoteHeaderHolder.ivAlertIcon.setVisibility(View.VISIBLE);
+ } else {
+ mNoteHeaderHolder.tvAlertDate.setVisibility(View.GONE);
+ mNoteHeaderHolder.ivAlertIcon.setVisibility(View.GONE);
+ };
+ }
+
+ @Override
+ protected void onNewIntent(Intent intent) {
+ super.onNewIntent(intent);
+ initActivityState(intent);
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ /**
+ * For new note without note id, we should firstly save it to
+ * generate a id. If the editing note is not worth saving, there
+ * is no id which is equivalent to create new note
+ */
+ if (!mWorkingNote.existInDatabase()) {
+ saveNote();
+ }
+ outState.putLong(Intent.EXTRA_UID, mWorkingNote.getNoteId());
+ Log.d(TAG, "Save working note id: " + mWorkingNote.getNoteId() + " onSaveInstanceState");
+ }
+
+ @Override
+ public boolean dispatchTouchEvent(MotionEvent ev) {
+ if (mNoteBgColorSelector.getVisibility() == View.VISIBLE
+ && !inRangeOfView(mNoteBgColorSelector, ev)) {
+ mNoteBgColorSelector.setVisibility(View.GONE);
+ return true;
+ }
+
+ if (mFontSizeSelector.getVisibility() == View.VISIBLE
+ && !inRangeOfView(mFontSizeSelector, ev)) {
+ mFontSizeSelector.setVisibility(View.GONE);
+ return true;
+ }
+ return super.dispatchTouchEvent(ev);
+ }
+
+ private boolean inRangeOfView(View view, MotionEvent ev) {
+ int []location = new int[2];
+ view.getLocationOnScreen(location);
+ int x = location[0];
+ int y = location[1];
+ if (ev.getX() < x
+ || ev.getX() > (x + view.getWidth())
+ || ev.getY() < y
+ || ev.getY() > (y + view.getHeight())) {
+ return false;
+ }
+ return true;
+ }
+
+ private void initResources() {
+ mHeadViewPanel = findViewById(R.id.note_title);
+ mNoteHeaderHolder = new HeadViewHolder();
+ mNoteHeaderHolder.tvModified = (TextView) findViewById(R.id.tv_modified_date);
+ mNoteHeaderHolder.ivAlertIcon = (ImageView) findViewById(R.id.iv_alert_icon);
+ mNoteHeaderHolder.tvAlertDate = (TextView) findViewById(R.id.tv_alert_date);
+ mNoteHeaderHolder.ibSetBgColor = (ImageView) findViewById(R.id.btn_set_bg_color);
+ mNoteHeaderHolder.ibSetBgColor.setOnClickListener(this);
+ mFormateDataTime = DateUtils.formatDateTime(this,
+ mWorkingNote.getModifiedDate(), DateUtils.FORMAT_SHOW_DATE
+ | DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_SHOW_TIME
+ | DateUtils.FORMAT_SHOW_YEAR);
+ mNoteEditor = (EditText) findViewById(R.id.note_edit_view);
+ mNoteEditor.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ if(count == 0){
+ mNoteLength -= before;
+ }else{
+ mNoteLength += count;
+ }
+ mNoteHeaderHolder.tvModified.setText(mFormateDataTime
+ + space_after_title_time +getResources().getString(R.string.note_length) + " : "
+ + mNoteLength);
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+
+ }
+ });
+ mNoteLength = mNoteEditor.getText().toString().length();
+ mNoteEditorPanel = findViewById(R.id.sv_note_edit);
+ mNoteBgColorSelector = findViewById(R.id.note_bg_color_selector);
+ for (int id : sBgSelectorBtnsMap.keySet()) {
+ ImageView iv = (ImageView) findViewById(id);
+ iv.setOnClickListener(this);
+ }
+
+ mFontSizeSelector = findViewById(R.id.font_size_selector);
+ for (int id : sFontSizeBtnsMap.keySet()) {
+ View view = findViewById(id);
+ view.setOnClickListener(this);
+ };
+ mSharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
+ mFontSizeId = mSharedPrefs.getInt(PREFERENCE_FONT_SIZE, ResourceParser.BG_DEFAULT_FONT_SIZE);
+ /**
+ * HACKME: Fix bug of store the resource id in shared preference.
+ * The id may larger than the length of resources, in this case,
+ * return the {@link ResourceParser#BG_DEFAULT_FONT_SIZE}
+ */
+ if(mFontSizeId >= TextAppearanceResources.getResourcesSize()) {
+ mFontSizeId = ResourceParser.BG_DEFAULT_FONT_SIZE;
+ }
+ mEditTextList = (LinearLayout) findViewById(R.id.note_edit_list);
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ if(saveNote()) {
+ Log.d(TAG, "Note data was saved with length:" + mWorkingNote.getContent().length());
+ }
+ clearSettingState();
+ }
+
+ private void updateWidget() {
+ Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
+ if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_2X) {
+ intent.setClass(this, NoteWidgetProvider_2x.class);
+ } else if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_4X) {
+ intent.setClass(this, NoteWidgetProvider_4x.class);
+ } else {
+ Log.e(TAG, "Unspported widget type");
+ return;
+ }
+
+ intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {
+ mWorkingNote.getWidgetId()
+ });
+
+ sendBroadcast(intent);
+ setResult(RESULT_OK, intent);
+ }
+
+ public void onClick(View v) {
+ int id = v.getId();
+ if (id == R.id.btn_set_bg_color) {
+ mNoteBgColorSelector.setVisibility(View.VISIBLE);
+ findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility( View.VISIBLE);
+ } else if (sBgSelectorBtnsMap.containsKey(id)) {
+ findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility(
+ View.GONE);
+ mWorkingNote.setBgColorId(sBgSelectorBtnsMap.get(id));
+ mNoteBgColorSelector.setVisibility(View.GONE);
+ } else if (sFontSizeBtnsMap.containsKey(id)) {
+ findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.GONE);
+ mFontSizeId = sFontSizeBtnsMap.get(id);
+ mSharedPrefs.edit().putInt(PREFERENCE_FONT_SIZE, mFontSizeId).commit();
+ findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.VISIBLE);
+ if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) {
+ getWorkingText();
+ switchToListMode(mWorkingNote.getContent());
+ } else {
+ mNoteEditor.setTextAppearance(this,
+ TextAppearanceResources.getTexAppearanceResource(mFontSizeId));
+ }
+ mFontSizeSelector.setVisibility(View.GONE);
+ }
+ }
+
+ @Override
+ public void onBackPressed() {
+ if(clearSettingState()) {
+ return;
+ }
+
+ saveNote();
+ super.onBackPressed();
+ }
+
+ private boolean clearSettingState() {
+ if (mNoteBgColorSelector.getVisibility() == View.VISIBLE) {
+ mNoteBgColorSelector.setVisibility(View.GONE);
+ return true;
+ } else if (mFontSizeSelector.getVisibility() == View.VISIBLE) {
+ mFontSizeSelector.setVisibility(View.GONE);
+ return true;
+ }
+ return false;
+ }
+
+ public void onBackgroundColorChanged() {
+ findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility(
+ View.VISIBLE);
+ mNoteEditorPanel.setBackgroundResource(mWorkingNote.getBgColorResId());
+ mHeadViewPanel.setBackgroundResource(mWorkingNote.getTitleBgResId());
+ }
+
+ @Override
+ public boolean onPrepareOptionsMenu(Menu menu) {
+ if (isFinishing()) {
+ return true;
+ }
+ clearSettingState();
+ menu.clear();
+ if (mWorkingNote.getFolderId() == Notes.ID_CALL_RECORD_FOLDER) {
+ getMenuInflater().inflate(R.menu.call_note_edit, menu);
+ } else {
+ getMenuInflater().inflate(R.menu.note_edit, menu);
+ }
+ if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) {
+ menu.findItem(R.id.menu_list_mode).setTitle(R.string.menu_normal_mode);
+ } else {
+ menu.findItem(R.id.menu_list_mode).setTitle(R.string.menu_list_mode);
+ }
+ if (mWorkingNote.hasClockAlert()) {
+ menu.findItem(R.id.menu_alert).setVisible(false);
+ } else {
+ menu.findItem(R.id.menu_delete_remind).setVisible(false);
+ }
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.menu_new_note:
+ createNewNote();
+ break;
+ case R.id.menu_delete:
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(getString(R.string.alert_title_delete));
+ builder.setIcon(android.R.drawable.ic_dialog_alert);
+ builder.setMessage(getString(R.string.alert_message_delete_note));
+ builder.setPositiveButton(android.R.string.ok,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ deleteCurrentNote();
+ finish();
+ }
+ });
+ builder.setNegativeButton(android.R.string.cancel, null);
+ builder.show();
+ break;
+ case R.id.menu_font_size:
+ mFontSizeSelector.setVisibility(View.VISIBLE);
+ findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.VISIBLE);
+ break;
+ case R.id.menu_list_mode:
+ mWorkingNote.setCheckListMode(mWorkingNote.getCheckListMode() == 0 ?
+ TextNote.MODE_CHECK_LIST : 0);
+ break;
+ case R.id.menu_share:
+ getWorkingText();
+ sendTo(this, mWorkingNote.getContent());
+ break;
+ case R.id.menu_send_to_desktop:
+ sendToDesktop();
+ break;
+ case R.id.menu_alert:
+ setReminder();
+ break;
+ case R.id.menu_delete_remind:
+ mWorkingNote.setAlertDate(0, false);
+ break;
+ default:
+ break;
+ }
+ return true;
+ }
+
+ private void setReminder() {
+ DateTimePickerDialog d = new DateTimePickerDialog(this, System.currentTimeMillis());
+ d.setOnDateTimeSetListener(new OnDateTimeSetListener() {
+ public void OnDateTimeSet(AlertDialog dialog, long date) {
+ mWorkingNote.setAlertDate(date , true);
+ }
+ });
+ d.show();
+ }
+
+ /**
+ * Share note to apps that support {@link Intent#ACTION_SEND} action
+ * and {@text/plain} type
+ */
+ private void sendTo(Context context, String info) {
+ Intent intent = new Intent(Intent.ACTION_SEND);
+ intent.putExtra(Intent.EXTRA_TEXT, info);
+ intent.setType("text/plain");
+ context.startActivity(intent);
+ }
+
+ private void createNewNote() {
+ // Firstly, save current editing notes
+ saveNote();
+
+ // For safety, start a new NoteEditActivity
+ finish();
+ Intent intent = new Intent(this, NoteEditActivity.class);
+ intent.setAction(Intent.ACTION_INSERT_OR_EDIT);
+ intent.putExtra(Notes.INTENT_EXTRA_FOLDER_ID, mWorkingNote.getFolderId());
+ startActivity(intent);
+ }
+
+ /*
+ * 该方法实现了删除当前便签
+ * */
+ private void deleteCurrentNote() {
+ //如果当前便签存在于数据库中
+ if (mWorkingNote.existInDatabase()) {
+ HashSet ids = new HashSet();
+ long id = mWorkingNote.getNoteId();
+ if (id != Notes.ID_ROOT_FOLDER) {
+ ids.add(id);
+ } else {
+ Log.d(TAG, "Wrong note id, should not happen");
+ }
+ if (!isSyncMode()) {
+ if (!DataUtils.batchDeleteNotes(getContentResolver(), ids)) {
+ Log.e(TAG, "Delete Note error");
+ }
+ } else {
+ if (!DataUtils.batchMoveToFolder(getContentResolver(), ids, Notes.ID_TRASH_FOLER)) {
+ Log.e(TAG, "Move notes to trash folder error, should not happens");
+ }
+ }
+ }
+ mWorkingNote.markDeleted(true);
+ }
+
+ //判断是否为同步模式的方法
+ private boolean isSyncMode() {
+ return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0;
+ }
+
+ public void onClockAlertChanged(long date, boolean set) {
+ /**
+ * User could set clock to an unsaved note, so before setting the
+ * alert clock, we should save the note first
+ */
+ if (!mWorkingNote.existInDatabase()) {
+ saveNote();
+ }
+ if (mWorkingNote.getNoteId() > 0) {
+ Intent intent = new Intent(this, AlarmReceiver.class);
+ intent.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mWorkingNote.getNoteId()));
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
+ AlarmManager alarmManager = ((AlarmManager) getSystemService(ALARM_SERVICE));
+ showAlertHeader();
+ if(!set) {
+ alarmManager.cancel(pendingIntent);
+ } else {
+ alarmManager.set(AlarmManager.RTC_WAKEUP, date, pendingIntent);
+ }
+ } else {
+ /**
+ * There is the condition that user has input nothing (the note is
+ * not worthy saving), we have no note id, remind the user that he
+ * should input something
+ */
+ Log.e(TAG, "Clock alert setting error");
+ showToast(R.string.error_note_empty_for_clock);
+ }
+ }
+
+ /*
+ * 该方法实现了当窗口小部件更改时,更新窗口部件的方法
+ * */
+ public void onWidgetChanged() {
+ updateWidget();
+ }
+
+ public void onEditTextDelete(int index, String text) {
+ int childCount = mEditTextList.getChildCount();
+ if (childCount == 1) {
+ return;
+ }
+
+ for (int i = index + 1; i < childCount; i++) {
+ ((NoteEditText) mEditTextList.getChildAt(i).findViewById(R.id.et_edit_text))
+ .setIndex(i - 1);
+ }
+
+ mEditTextList.removeViewAt(index);
+ NoteEditText edit = null;
+ if(index == 0) {
+ edit = (NoteEditText) mEditTextList.getChildAt(0).findViewById(
+ R.id.et_edit_text);
+ } else {
+ edit = (NoteEditText) mEditTextList.getChildAt(index - 1).findViewById(
+ R.id.et_edit_text);
+ }
+ int length = edit.length();
+ edit.append(text);
+ edit.requestFocus();
+ edit.setSelection(length);
+ }
+
+ public void onEditTextEnter(int index, String text) {
+ /**
+ * Should not happen, check for debug
+ */
+ if(index > mEditTextList.getChildCount()) {
+ Log.e(TAG, "Index out of mEditTextList boundrary, should not happen");
+ }
+
+ View view = getListItem(text, index);
+ mEditTextList.addView(view, index);
+ NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text);
+ edit.requestFocus();
+ edit.setSelection(0);
+ for (int i = index + 1; i < mEditTextList.getChildCount(); i++) {
+ ((NoteEditText) mEditTextList.getChildAt(i).findViewById(R.id.et_edit_text))
+ .setIndex(i);
+ }
+ }
+
+ private void switchToListMode(String text) {
+ mEditTextList.removeAllViews();
+ String[] items = text.split("\n");
+ int index = 0;
+ for (String item : items) {
+ if(!TextUtils.isEmpty(item)) {
+ mEditTextList.addView(getListItem(item, index));
+ index++;
+ }
+ }
+ mEditTextList.addView(getListItem("", index));
+ mEditTextList.getChildAt(index).findViewById(R.id.et_edit_text).requestFocus();
+
+ mNoteEditor.setVisibility(View.GONE);
+ mEditTextList.setVisibility(View.VISIBLE);
+ }
+
+ private Spannable getHighlightQueryResult(String fullText, String userQuery) {
+ SpannableString spannable = new SpannableString(fullText == null ? "" : fullText);
+ if (!TextUtils.isEmpty(userQuery)) {
+ mPattern = Pattern.compile(userQuery);
+ Matcher m = mPattern.matcher(fullText);
+ int start = 0;
+ while (m.find(start)) {
+ spannable.setSpan(
+ new BackgroundColorSpan(this.getResources().getColor(
+ R.color.user_query_highlight)), m.start(), m.end(),
+ Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
+ start = m.end();
+ }
+ }
+ return spannable;
+ }
+
+ private View getListItem(String item, int index) {
+ View view = LayoutInflater.from(this).inflate(R.layout.note_edit_list_item, null);
+ final NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text);
+ edit.setTextAppearance(this, TextAppearanceResources.getTexAppearanceResource(mFontSizeId));
+ CheckBox cb = ((CheckBox) view.findViewById(R.id.cb_edit_item));
+ cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ if (isChecked) {
+ edit.setPaintFlags(edit.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
+ } else {
+ edit.setPaintFlags(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG);
+ }
+ }
+ });
+
+ if (item.startsWith(TAG_CHECKED)) {
+ cb.setChecked(true);
+ edit.setPaintFlags(edit.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
+ item = item.substring(TAG_CHECKED.length(), item.length()).trim();
+ } else if (item.startsWith(TAG_UNCHECKED)) {
+ cb.setChecked(false);
+ edit.setPaintFlags(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG);
+ item = item.substring(TAG_UNCHECKED.length(), item.length()).trim();
+ }
+
+ edit.setOnTextViewChangeListener(this);
+ edit.setIndex(index);
+ edit.setText(getHighlightQueryResult(item, mUserQuery));
+ return view;
+ }
+
+ public void onTextChange(int index, boolean hasText) {
+ if (index >= mEditTextList.getChildCount()) {
+ Log.e(TAG, "Wrong index, should not happen");
+ return;
+ }
+ if(hasText) {
+ mEditTextList.getChildAt(index).findViewById(R.id.cb_edit_item).setVisibility(View.VISIBLE);
+ } else {
+ mEditTextList.getChildAt(index).findViewById(R.id.cb_edit_item).setVisibility(View.GONE);
+ }
+ }
+
+ public void onCheckListModeChanged(int oldMode, int newMode) {
+ if (newMode == TextNote.MODE_CHECK_LIST) {
+ //将模式转换为列表模式
+ switchToListMode(mNoteEditor.getText().toString());
+ } else {
+ if (!getWorkingText()) {
+ mWorkingNote.setWorkingText(mWorkingNote.getContent().replace(TAG_UNCHECKED + " ",
+ ""));
+ }
+ mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery));
+ mEditTextList.setVisibility(View.GONE);
+ mNoteEditor.setVisibility(View.VISIBLE);
+ }
+ }
+
+ private boolean getWorkingText() {
+ boolean hasChecked = false;
+ if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) {
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < mEditTextList.getChildCount(); i++) {
+ View view = mEditTextList.getChildAt(i);
+ NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text);
+ if (!TextUtils.isEmpty(edit.getText())) {
+ if (((CheckBox) view.findViewById(R.id.cb_edit_item)).isChecked()) {
+ sb.append(TAG_CHECKED).append(" ").append(edit.getText()).append("\n");
+ hasChecked = true;
+ } else {
+ sb.append(TAG_UNCHECKED).append(" ").append(edit.getText()).append("\n");
+ }
+ }
+ }
+ mWorkingNote.setWorkingText(sb.toString());
+ } else {
+ mWorkingNote.setWorkingText(mNoteEditor.getText().toString());
+ }
+ return hasChecked;
+ }
+
+ private boolean saveNote() {
+ getWorkingText();
+ boolean saved = mWorkingNote.saveNote();
+ if (saved) {
+ /**
+ * There are two modes from List view to edit view, open one note,
+ * create/edit a node. Opening node requires to the original
+ * position in the list when back from edit view, while creating a
+ * new node requires to the top of the list. This code
+ * {@link #RESULT_OK} is used to identify the create/edit state
+ */
+ setResult(RESULT_OK);
+ }
+ return saved;
+ }
+
+ private void sendToDesktop() {
+ /**
+ * Before send message to home, we should make sure that current
+ * editing note is exists in databases. So, for new note, firstly
+ * save it
+ */
+ if (!mWorkingNote.existInDatabase()) {
+ saveNote();
+ }
+
+ if (mWorkingNote.getNoteId() > 0) {
+ Intent sender = new Intent();
+ Intent shortcutIntent = new Intent(this, NoteEditActivity.class);
+ shortcutIntent.setAction(Intent.ACTION_VIEW);
+ shortcutIntent.putExtra(Intent.EXTRA_UID, mWorkingNote.getNoteId());
+ sender.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
+ sender.putExtra(Intent.EXTRA_SHORTCUT_NAME,
+ makeShortcutIconTitle(mWorkingNote.getContent()));
+ sender.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
+ Intent.ShortcutIconResource.fromContext(this, R.drawable.icon_app));
+ sender.putExtra("duplicate", true);
+ sender.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
+ showToast(R.string.info_note_enter_desktop);
+ sendBroadcast(sender);
+ } else {
+ /**
+ * There is the condition that user has input nothing (the note is
+ * not worthy saving), we have no note id, remind the user that he
+ * should input something
+ */
+ Log.e(TAG, "Send to desktop error");
+ showToast(R.string.error_note_empty_for_send_to_desktop);
+ }
+ }
+
+ private String makeShortcutIconTitle(String content) {
+ content = content.replace(TAG_CHECKED, "");
+ content = content.replace(TAG_UNCHECKED, "");
+ return content.length() > SHORTCUT_ICON_TITLE_MAX_LEN ? content.substring(0,
+ SHORTCUT_ICON_TITLE_MAX_LEN) : content;
+ }
+
+ private void showToast(int resId) {
+ showToast(resId, Toast.LENGTH_SHORT);
+ }
+
+ private void showToast(int resId, int duration) {
+ Toast.makeText(this, resId, duration).show();
+ }
+}
diff --git a/src/app/src/main/java/net/micode/notes/ui/NoteFragment.java b/src/app/src/main/java/net/micode/notes/ui/NoteFragment.java
new file mode 100644
index 0000000..a515841
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/ui/NoteFragment.java
@@ -0,0 +1,30 @@
+package net.micode.notes.ui;
+
+import android.app.Fragment;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import net.micode.notes.R;
+
+
+public class NoteFragment extends Fragment {
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ //TextView textView = new TextView(getActivity());
+ LinearLayout layout = new LinearLayout(getActivity());
+ //ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
+ //layout.addView(textView, params);
+ return layout;
+ //return inflater.inflate(R.layout.note_list, container, false);
+ }
+
+}
+
diff --git a/src/app/src/main/java/net/micode/notes/ui/NotesListActivity.java b/src/app/src/main/java/net/micode/notes/ui/NotesListActivity.java
new file mode 100644
index 0000000..9f32f9a
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/ui/NotesListActivity.java
@@ -0,0 +1,1163 @@
+/*
+ * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
+ *
+ * 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.
+ */
+
+package net.micode.notes.ui;
+
+import android.app.ActionBar;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.appwidget.AppWidgetManager;
+import android.content.AsyncQueryHandler;
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.database.Cursor;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.util.Log;
+import android.view.ActionMode;
+import android.view.ContextMenu;
+import android.view.ContextMenu.ContextMenuInfo;
+import android.view.Display;
+import android.view.HapticFeedbackConstants;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.MenuItem.OnMenuItemClickListener;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnCreateContextMenuListener;
+import android.view.View.OnTouchListener;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.AdapterView.OnItemLongClickListener;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ListView;
+import android.widget.PopupMenu;
+import android.widget.TextView;
+import android.widget.Toast;
+
+
+import net.micode.notes.R;
+import net.micode.notes.data.Notes;
+import net.micode.notes.data.Notes.NoteColumns;
+import net.micode.notes.gtask.remote.GTaskSyncService;
+import net.micode.notes.model.WorkingNote;
+import net.micode.notes.tool.BackupUtils;
+import net.micode.notes.tool.DataUtils;
+import net.micode.notes.tool.ResourceParser;
+import net.micode.notes.ui.NotesListAdapter.AppWidgetAttribute;
+import net.micode.notes.widget.NoteWidgetProvider_2x;
+import net.micode.notes.widget.NoteWidgetProvider_4x;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.HashSet;
+
+/*
+* main activity 列表activity
+* OnClickListener 点击监听
+* OnItemLongClickListener 长按监听
+* */
+public class NotesListActivity extends Activity implements OnClickListener, OnItemLongClickListener {
+ private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0;
+
+ private static final int FOLDER_LIST_QUERY_TOKEN = 1;
+
+ private static final int MENU_FOLDER_DELETE = 0;
+
+ private static final int MENU_FOLDER_VIEW = 1;
+
+ private static final int MENU_FOLDER_CHANGE_NAME = 2;
+
+ //添加介绍内容
+ private static final String PREFERENCE_ADD_INTRODUCTION = "net.micode.notes.introduction";
+
+ //枚举,列表编辑状态
+ private enum ListEditState {
+ NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER
+ };
+
+ //声明变量记录编辑状态
+ private ListEditState mState;
+
+ private BackgroundQueryHandler mBackgroundQueryHandler;
+
+ //实例化NotesListAdapter
+ private NotesListAdapter mNotesListAdapter;
+
+ //列表视图变量
+ private ListView mNotesListView;
+
+ //声明按钮变量
+ private Button mAddNewNote;
+
+ private boolean mDispatch;
+
+ private int mOriginY;
+
+ private int mDispatchY;
+
+ //声明标题栏
+ private TextView mTitleBar;
+
+ //当前文件夹ID
+ private long mCurrentFolderId;
+
+ private ContentResolver mContentResolver;
+
+ private ModeCallback mModeCallBack;
+
+ //日志字符串
+ private static final String TAG = "NotesListActivity";
+
+ public static final int NOTES_LISTVIEW_SCROLL_RATE = 30;
+
+ //当前便签项
+ private NoteItemData mFocusNoteDataItem;
+
+ private static final String NORMAL_SELECTION = NoteColumns.PARENT_ID + "=?";
+
+ //用于数据库检索,检索父文件夹
+ private static final String ROOT_FOLDER_SELECTION = "(" + NoteColumns.TYPE + "<>"
+ + Notes.TYPE_SYSTEM + " AND " + NoteColumns.PARENT_ID + "=?)" + " OR ("
+ + NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER + " AND "
+ + NoteColumns.NOTES_COUNT + ">0)";
+
+ private final static int REQUEST_CODE_OPEN_NODE = 102;
+ private final static int REQUEST_CODE_NEW_NODE = 103;
+
+ //输入的todo内容,用于在两个fragment间中转
+ private String mTodoText;
+
+ public String getmTodoText() {
+ return mTodoText;
+ }
+ public void setmTodoText(String text){
+ this.mTodoText = text;
+ }
+
+ /*
+ * 实例化时调用
+ * @savedInstanceState activity被意外kill时,保存的断点状态
+ * 用于恢复断点状态
+ * */
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.note_list);
+ initView();
+
+ //初始化资源
+ initResources();
+
+ /**
+ * Insert an introduction when user firstly use this application
+ */
+ setAppInfoFromRawRes();
+ }
+
+ private void initView() {
+ // getActionBar方法一定在setContentView后面
+ ActionBar actionBar = getActionBar();
+ actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
+
+ // 添加Tab选项
+ ActionBar.Tab tab = actionBar
+ .newTab()
+ .setText("便签")
+ .setTabListener(
+ new TabListener(this,"便签",NoteFragment.class));
+ actionBar.addTab(tab);
+
+ tab = actionBar
+ .newTab()
+ .setText("ToDo")
+ .setTabListener(
+ new TabListener(this,"ToDo",TodoFragment.class));
+ actionBar.addTab(tab);
+
+ tab = actionBar
+ .newTab()
+ .setText("画板")
+ .setTabListener(
+ new TabListener(this,"画板",WhiteBoardFragment.class));
+ actionBar.addTab(tab);
+
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (resultCode == RESULT_OK
+ && (requestCode == REQUEST_CODE_OPEN_NODE || requestCode == REQUEST_CODE_NEW_NODE)) {
+ mNotesListAdapter.changeCursor(null);
+ } else {
+ super.onActivityResult(requestCode, resultCode, data);
+ }
+ }
+
+ //第一次使用时,根据raw资源中的信息设置APP信息,添加介绍
+ private void setAppInfoFromRawRes() {
+ SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
+ if (!sp.getBoolean(PREFERENCE_ADD_INTRODUCTION, false)) {
+ StringBuilder sb = new StringBuilder();
+ InputStream in = null;//待写入的字符串
+ try {
+ in = getResources().openRawResource(R.raw.introduction);//获取资源,位于res文件夹下的introduction文件
+ if (in != null) {
+ //成功获取介绍内容字符串
+ InputStreamReader isr = new InputStreamReader(in);
+ BufferedReader br = new BufferedReader(isr);
+ char [] buf = new char[1024];//设置缓区
+ int len = 0;
+ while ((len = br.read(buf)) > 0) {
+ sb.append(buf, 0, len);
+ }
+ } else {
+ //读取文件失败
+ Log.e(TAG, "Read introduction file error");
+ return;
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ return;
+ } finally {
+ if(in != null) {
+ try {
+ in.close();//关闭文件,防止泄漏
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+
+ //创建工作便签,插入刚读入的字符串
+ WorkingNote note = WorkingNote.createEmptyNote(this, Notes.ID_ROOT_FOLDER,
+ AppWidgetManager.INVALID_APPWIDGET_ID, Notes.TYPE_WIDGET_INVALIDE,
+ ResourceParser.RED);
+ note.setWorkingText(sb.toString());
+ if (note.saveNote()) {
+ //保存便签
+ sp.edit().putBoolean(PREFERENCE_ADD_INTRODUCTION, true).commit();
+ } else {
+ //保存失败,记入日志
+ Log.e(TAG, "Save introduction note error");
+ return;
+ }
+ }
+ }
+
+ //重写onStart方法,activity可见
+ @Override
+ protected void onStart() {
+ super.onStart();
+ //后台服务,不影响主进程
+ startAsyncNotesListQuery();
+ }
+
+ //初始化变量
+ private void initResources() {
+ mContentResolver = this.getContentResolver();
+ mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver());
+ mCurrentFolderId = Notes.ID_ROOT_FOLDER;
+ mNotesListView = (ListView) findViewById(R.id.notes_list);//设置显示内容与格式
+ mNotesListView.addFooterView(LayoutInflater.from(this).inflate(R.layout.note_list_footer, null),
+ null, false);
+ mNotesListView.setOnItemClickListener(new OnListItemClickListener());
+ mNotesListView.setOnItemLongClickListener(this);//设置长按的监听器
+ mNotesListAdapter = new NotesListAdapter(this);
+ mNotesListView.setAdapter(mNotesListAdapter);
+ mAddNewNote = (Button) findViewById(R.id.btn_new_note);//添加新便签的按钮
+ mAddNewNote.setOnClickListener(this);//设置点击的监听器
+ mAddNewNote.setOnTouchListener(new NewNoteOnTouchListener());
+ mDispatch = false;
+ mDispatchY = 0;
+ mOriginY = 0;
+ mTitleBar = (TextView) findViewById(R.id.tv_title_bar);//设置标题栏
+ mState = ListEditState.NOTE_LIST;
+ mModeCallBack = new ModeCallback();
+ }
+
+ /*
+ * 该类实现了当前模式的获取,如多选模式,菜单模式
+ * */
+ private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener {
+ private DropdownMenu mDropDownMenu;
+ private ActionMode mActionMode;//设置变量,记录操作模式
+ private MenuItem mMoveMenu;
+
+ public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+ getMenuInflater().inflate(R.menu.note_list_options, menu);
+ menu.findItem(R.id.delete).setOnMenuItemClickListener(this);
+ mMoveMenu = menu.findItem(R.id.move);
+ if (mFocusNoteDataItem.getParentId() == Notes.ID_CALL_RECORD_FOLDER
+ || DataUtils.getUserFolderCount(mContentResolver) == 0) {
+ mMoveMenu.setVisible(false);
+ } else {
+ mMoveMenu.setVisible(true);
+ mMoveMenu.setOnMenuItemClickListener(this);
+ }
+ mActionMode = mode;
+ mNotesListAdapter.setChoiceMode(true);
+ mNotesListView.setLongClickable(false);
+ mAddNewNote.setVisibility(View.GONE);
+
+ View customView = LayoutInflater.from(NotesListActivity.this).inflate(
+ R.layout.note_list_dropdown_menu, null);//设置显示样式
+ mode.setCustomView(customView);
+ mDropDownMenu = new DropdownMenu(NotesListActivity.this,
+ (Button) customView.findViewById(R.id.selection_menu),
+ R.menu.note_list_dropdown);
+ mDropDownMenu.setOnDropdownMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){
+ public boolean onMenuItemClick(MenuItem item) {
+ mNotesListAdapter.selectAll(!mNotesListAdapter.isAllSelected());
+ updateMenu();
+ return true;
+ }
+
+ });
+ return true;
+ }
+
+ //更新菜单栏操作的私有方法
+ private void updateMenu() {
+ //获取选中的便签数量
+ int selectedCount = mNotesListAdapter.getSelectedCount();
+ // Update dropdown menu
+ String format = getResources().getString(R.string.menu_select_title, selectedCount);
+ mDropDownMenu.setTitle(format);
+ MenuItem item = mDropDownMenu.findItem(R.id.action_select_all);
+ if (item != null) {
+ if (mNotesListAdapter.isAllSelected()) {
+ item.setChecked(true);
+ item.setTitle(R.string.menu_deselect_all);
+ } else {
+ item.setChecked(false);
+ item.setTitle(R.string.menu_select_all);//设置标题,字符来自R文件
+ }
+ }
+ }
+
+ public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public void onDestroyActionMode(ActionMode mode) {
+ mNotesListAdapter.setChoiceMode(false);
+ mNotesListView.setLongClickable(true);
+ mAddNewNote.setVisibility(View.VISIBLE);
+ }
+
+ public void finishActionMode() {
+ mActionMode.finish();
+ }
+
+ public void onItemCheckedStateChanged(ActionMode mode, int position, long id,
+ boolean checked) {
+ mNotesListAdapter.setCheckedItem(position, checked);
+ updateMenu();
+ }//在选中项目更改后更新
+
+ //对菜单点击进行响应
+ public boolean onMenuItemClick(MenuItem item) {
+ if (mNotesListAdapter.getSelectedCount() == 0) {
+ Toast.makeText(NotesListActivity.this, getString(R.string.menu_select_none),
+ Toast.LENGTH_SHORT).show();//显示没有选中,操作无效
+ return true;
+ }
+
+ switch (item.getItemId()) {
+ //对项目进行操作
+ case R.id.delete:
+ //删除
+ AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this);
+ builder.setTitle(getString(R.string.alert_title_delete));
+ builder.setIcon(android.R.drawable.ic_dialog_alert);
+ builder.setMessage(getString(R.string.alert_message_delete_notes,
+ mNotesListAdapter.getSelectedCount()));
+ builder.setPositiveButton(android.R.string.ok,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog,
+ int which) {
+ batchDelete();
+ }
+ });
+ builder.setNegativeButton(android.R.string.cancel, null);
+ builder.show();
+ break;
+ case R.id.move:
+ //移动
+ startQueryDestinationFolders();
+ break;
+ default:
+ //返回false,操作失败
+ return false;
+ }
+ return true;
+ }
+ }
+
+ /*
+ * 该类实现点击新建便签按钮,新建便签的实现方法
+ * */
+ private class NewNoteOnTouchListener implements OnTouchListener {
+
+ public boolean onTouch(View v, MotionEvent event) {
+ //获取事件列表中的操作
+ switch (event.getAction()) {
+ //按下按钮的情况
+ case MotionEvent.ACTION_DOWN: {
+ //显示默认窗体
+ Display display = getWindowManager().getDefaultDisplay();
+ int screenHeight = display.getHeight();
+ int newNoteViewHeight = mAddNewNote.getHeight();
+ int start = screenHeight - newNoteViewHeight;
+ int eventY = start + (int) event.getY();
+ /**
+ * Minus TitleBar's height
+ */
+ if (mState == ListEditState.SUB_FOLDER) {
+ eventY -= mTitleBar.getHeight();
+ start -= mTitleBar.getHeight();
+ }
+ /**
+ * HACKME:When click the transparent part of "New Note" button, dispatch
+ * the event to the list view behind this button. The transparent part of
+ * "New Note" button could be expressed by formula y=-0.12x+94(Unit:pixel)
+ * and the line top of the button. The coordinate based on left of the "New
+ * Note" button. The 94 represents maximum height of the transparent part.
+ * Notice that, if the background of the button changes, the formula should
+ * also change. This is very bad, just for the UI designer's strong requirement.
+ */
+ if (event.getY() < (event.getX() * (-0.12) + 94)) {
+ View view = mNotesListView.getChildAt(mNotesListView.getChildCount() - 1
+ - mNotesListView.getFooterViewsCount());
+ if (view != null && view.getBottom() > start
+ && (view.getTop() < (start + 94))) {
+ mOriginY = (int) event.getY();
+ mDispatchY = eventY;
+ event.setLocation(event.getX(), mDispatchY);
+ mDispatch = true;
+ return mNotesListView.dispatchTouchEvent(event);
+ }
+ }
+ break;
+ }
+ case MotionEvent.ACTION_MOVE: {
+ if (mDispatch) {
+ mDispatchY += (int) event.getY() - mOriginY;
+ event.setLocation(event.getX(), mDispatchY);
+ return mNotesListView.dispatchTouchEvent(event);
+ }
+ break;
+ }
+ default: {
+ if (mDispatch) {
+ event.setLocation(event.getX(), mDispatchY);
+ mDispatch = false;
+ return mNotesListView.dispatchTouchEvent(event);
+ }
+ break;
+ }
+ }
+ return false;
+ }
+
+ };
+
+ private void startAsyncNotesListQuery() {
+ String selection = (mCurrentFolderId == Notes.ID_ROOT_FOLDER) ? ROOT_FOLDER_SELECTION
+ : NORMAL_SELECTION;
+ mBackgroundQueryHandler.startQuery(FOLDER_NOTE_LIST_QUERY_TOKEN, null,
+ Notes.CONTENT_NOTE_URI, NoteItemData.PROJECTION, selection, new String[] {
+ String.valueOf(mCurrentFolderId)
+ }, NoteColumns.TYPE + " DESC," + NoteColumns.MODIFIED_DATE + " DESC");
+ }
+
+ /*
+ * 后台查询句柄,不会阻塞核心线程
+ * */
+ private final class BackgroundQueryHandler extends AsyncQueryHandler {
+ public BackgroundQueryHandler(ContentResolver contentResolver) {
+ super(contentResolver);
+ }
+
+ @Override
+ protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
+ //对token进行选择,执行不同操作
+ switch (token) {
+ //文件夹下列表查询
+ case FOLDER_NOTE_LIST_QUERY_TOKEN:
+ mNotesListAdapter.changeCursor(cursor);
+ break;
+ //文件列表查询
+ case FOLDER_LIST_QUERY_TOKEN:
+ //存在文件夹
+ if (cursor != null && cursor.getCount() > 0) {
+ showFolderListMenu(cursor);
+ } else {
+ //记入错误日志,无文件夹
+ Log.e(TAG, "Query folder failed");
+ }
+ break;
+ default:
+ return;
+ }
+ }
+ }
+
+ /*
+ * 该方法实现了展示文件夹列表的功能
+ * @ cursor 游标,获取文件夹信息
+ * */
+ private void showFolderListMenu(Cursor cursor) {
+ //新建窗体
+ AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this);
+ //设置标题
+ builder.setTitle(R.string.menu_title_select_folder);
+ final FoldersListAdapter adapter = new FoldersListAdapter(this, cursor);
+ builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
+
+ public void onClick(DialogInterface dialog, int which) {
+ DataUtils.batchMoveToFolder(mContentResolver,
+ mNotesListAdapter.getSelectedItemIds(), adapter.getItemId(which));
+ Toast.makeText(
+ NotesListActivity.this,
+ getString(R.string.format_move_notes_to_folder,
+ mNotesListAdapter.getSelectedCount(),
+ adapter.getFolderName(NotesListActivity.this, which)),
+ Toast.LENGTH_SHORT).show();
+ mModeCallBack.finishActionMode();
+ }
+ });
+ //展示窗体
+ builder.show();
+ }
+
+ /*
+ * 该方法实现了创建空的新便签功能
+ * */
+ private void createNewNote() {
+ Intent intent = new Intent(this, NoteEditActivity.class);
+ //设置便签状态,插入或者编辑
+ intent.setAction(Intent.ACTION_INSERT_OR_EDIT);
+ //插入便签信息
+ intent.putExtra(Notes.INTENT_EXTRA_FOLDER_ID, mCurrentFolderId);
+ this.startActivityForResult(intent, REQUEST_CODE_NEW_NODE);
+ }
+
+ private void batchDelete() {
+ new AsyncTask>() {
+ protected HashSet doInBackground(Void... unused) {
+ HashSet widgets = mNotesListAdapter.getSelectedWidget();
+ if (!isSyncMode()) {
+ // if not synced, delete notes directly
+ if (DataUtils.batchDeleteNotes(mContentResolver, mNotesListAdapter
+ .getSelectedItemIds())) {
+ } else {
+ Log.e(TAG, "Delete notes error, should not happens");
+ }
+ } else {
+ // in sync mode, we'll move the deleted note into the trash
+ // folder
+ if (!DataUtils.batchMoveToFolder(mContentResolver, mNotesListAdapter
+ .getSelectedItemIds(), Notes.ID_TRASH_FOLER)) {
+ Log.e(TAG, "Move notes to trash folder error, should not happens");
+ }
+ }
+ return widgets;
+ }
+
+ @Override
+ protected void onPostExecute(HashSet widgets) {
+ if (widgets != null) {
+ for (AppWidgetAttribute widget : widgets) {
+ if (widget.widgetId != AppWidgetManager.INVALID_APPWIDGET_ID
+ && widget.widgetType != Notes.TYPE_WIDGET_INVALIDE) {
+ updateWidget(widget.widgetId, widget.widgetType);
+ }
+ }
+ }
+ mModeCallBack.finishActionMode();
+ }
+ }.execute();
+ }
+
+ /*
+ * 该方法实现了删除文件夹得功能
+ * @ folderId 要删除文件夹得id
+ * */
+ private void deleteFolder(long folderId) {
+ if (folderId == Notes.ID_ROOT_FOLDER) {
+ //删除父文件夹时报错
+ Log.e(TAG, "Wrong folder id, should not happen " + folderId);
+ return;
+ }
+
+ HashSet ids = new HashSet();
+ ids.add(folderId);
+ HashSet widgets = DataUtils.getFolderNoteWidget(mContentResolver,
+ folderId);
+ if (!isSyncMode()) {
+ // 如果没有同步,直接删除
+ DataUtils.batchDeleteNotes(mContentResolver, ids);
+ } else {
+ // 如果同步,丢入垃圾箱
+ DataUtils.batchMoveToFolder(mContentResolver, ids, Notes.ID_TRASH_FOLER);
+ }
+ if (widgets != null) {
+ for (AppWidgetAttribute widget : widgets) {
+ if (widget.widgetId != AppWidgetManager.INVALID_APPWIDGET_ID
+ && widget.widgetType != Notes.TYPE_WIDGET_INVALIDE) {
+ updateWidget(widget.widgetId, widget.widgetType);
+ }
+ }
+ }
+ }
+
+ private void openNode(NoteItemData data) {
+ Intent intent = new Intent(this, NoteEditActivity.class);
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.putExtra(Intent.EXTRA_UID, data.getId());
+ this.startActivityForResult(intent, REQUEST_CODE_OPEN_NODE);
+ }
+
+ /*
+ * 该方法实现了打开文件夹的功能
+ * */
+ private void openFolder(NoteItemData data) {
+ //获取当前文件夹id
+ mCurrentFolderId = data.getId();
+ startAsyncNotesListQuery();
+ if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) {
+ //状态设为
+ mState = ListEditState.CALL_RECORD_FOLDER;
+ mAddNewNote.setVisibility(View.GONE);
+ } else {
+ mState = ListEditState.SUB_FOLDER;
+ }
+ if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) {
+ //设置文本内容为“通话便签”
+ mTitleBar.setText(R.string.call_record_folder_name);
+ } else {
+ mTitleBar.setText(data.getSnippet());
+ }
+ //将内容展示出来
+ mTitleBar.setVisibility(View.VISIBLE);
+ }
+
+ //界面视图下点击操作
+ public void onClick(View v) {
+ //对点击的id进行区分
+ switch (v.getId()) {
+ //如果按下“新建便签”按钮,新建便签
+ case R.id.btn_new_note:
+ createNewNote();
+ break;
+ default:
+ break;
+ }
+ }
+
+ private void showSoftInput() {
+ //获取输入法服务
+ InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ //如果输入法存在
+ if (inputMethodManager != null) {
+ inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
+ }
+ }
+
+ //隐藏输入键盘
+ private void hideSoftInput(View view) {
+ InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
+ }
+
+ /*
+ * 该方法实现了新建或者修改文件夹的方法
+ * @ create 判断是否为新建文件夹
+ * false - 修改文件夹
+ * true - 新建文件夹
+ * */
+ private void showCreateOrModifyFolderDialog(final boolean create) {
+ final AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ //声明视图,使用样式为dialog_edit_text
+ View view = LayoutInflater.from(this).inflate(R.layout.dialog_edit_text, null);
+ final EditText etName = (EditText) view.findViewById(R.id.et_foler_name);
+ //显示键盘
+ showSoftInput();
+ if (!create) {
+ if (mFocusNoteDataItem != null) {
+ etName.setText(mFocusNoteDataItem.getSnippet());
+ //显示内容“修改文件夹名称”
+ builder.setTitle(getString(R.string.menu_folder_change_name));
+ } else {
+ //错误信息写入日志
+ Log.e(TAG, "The long click data item is null");
+ return;
+ }
+ } else {
+ etName.setText("");
+ //显示内容,“新建文件夹”
+ builder.setTitle(this.getString(R.string.menu_create_folder));
+ }
+
+ //设置ok按钮
+ builder.setPositiveButton(android.R.string.ok, null);
+ //设置“取消”按钮
+ builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ hideSoftInput(etName);
+ }
+ });
+
+ //展示窗体,显示界面
+ final Dialog dialog = builder.setView(view).show();
+ final Button positive = (Button)dialog.findViewById(android.R.id.button1);
+ positive.setOnClickListener(new OnClickListener() {
+ public void onClick(View v) {
+ hideSoftInput(etName);
+ String name = etName.getText().toString();
+ if (DataUtils.checkVisibleFolderName(mContentResolver, name)) {
+ Toast.makeText(NotesListActivity.this, getString(R.string.folder_exist, name),
+ Toast.LENGTH_LONG).show();
+ etName.setSelection(0, etName.length());
+ return;
+ }
+ if (!create) {
+ if (!TextUtils.isEmpty(name)) {
+ ContentValues values = new ContentValues();
+ values.put(NoteColumns.SNIPPET, name);
+ values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER);
+ values.put(NoteColumns.LOCAL_MODIFIED, 1);
+ mContentResolver.update(Notes.CONTENT_NOTE_URI, values, NoteColumns.ID
+ + "=?", new String[] {
+ String.valueOf(mFocusNoteDataItem.getId())
+ });
+ }
+ } else if (!TextUtils.isEmpty(name)) {
+ ContentValues values = new ContentValues();
+ values.put(NoteColumns.SNIPPET, name);
+ values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER);
+ mContentResolver.insert(Notes.CONTENT_NOTE_URI, values);
+ }
+ dialog.dismiss();
+ }
+ });
+
+ if (TextUtils.isEmpty(etName.getText())) {
+ positive.setEnabled(false);
+ }
+ /**
+ * 当未输入名称时,ok键为灰色
+ */
+ etName.addTextChangedListener(new TextWatcher() {
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ //如果输入内容为空
+ if (TextUtils.isEmpty(etName.getText())) {
+ //ok键无效,置为灰色
+ positive.setEnabled(false);
+ } else {
+ //否则,ok键有效
+ positive.setEnabled(true);
+ }
+ }
+
+ public void afterTextChanged(Editable s) {
+ // TODO Auto-generated method stub
+
+ }
+ });
+ }
+
+ @Override
+ public void onBackPressed() {
+ //对当前状态进行选择
+ switch (mState) {
+ //位于子文件夹下
+ case SUB_FOLDER:
+ mCurrentFolderId = Notes.ID_ROOT_FOLDER;
+ //状态置为列表状态
+ mState = ListEditState.NOTE_LIST;
+ startAsyncNotesListQuery();
+ mTitleBar.setVisibility(View.GONE);
+ break;
+ //位于通话记录文件夹下
+ case CALL_RECORD_FOLDER:
+ mCurrentFolderId = Notes.ID_ROOT_FOLDER;
+ mState = ListEditState.NOTE_LIST;
+ mAddNewNote.setVisibility(View.VISIBLE);
+ mTitleBar.setVisibility(View.GONE);
+ startAsyncNotesListQuery();
+ break;
+ //位于便签列表下
+ case NOTE_LIST:
+ super.onBackPressed();
+ break;
+ default:
+ break;
+ }
+ }
+
+ //更新widget的方法,根据appWidgetId设置widget形式
+ private void updateWidget(int appWidgetId, int appWidgetType) {
+ Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
+ if (appWidgetType == Notes.TYPE_WIDGET_2X) {
+ intent.setClass(this, NoteWidgetProvider_2x.class);
+ } else if (appWidgetType == Notes.TYPE_WIDGET_4X) {
+ intent.setClass(this, NoteWidgetProvider_4x.class);
+ } else {
+ Log.e(TAG, "Unspported widget type");
+ return;
+ }
+
+ intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {
+ appWidgetId
+ });
+
+ //将intent的内容广播
+ sendBroadcast(intent);
+ setResult(RESULT_OK, intent);
+ }
+
+ private final OnCreateContextMenuListener mFolderOnCreateContextMenuListener = new OnCreateContextMenuListener() {
+ public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
+ //如果当前便签数据项不为空
+ if (mFocusNoteDataItem != null) {
+ menu.setHeaderTitle(mFocusNoteDataItem.getSnippet());
+ //设置菜单内容
+ menu.add(0, MENU_FOLDER_VIEW, 0, R.string.menu_folder_view);
+ menu.add(0, MENU_FOLDER_DELETE, 0, R.string.menu_folder_delete);
+ menu.add(0, MENU_FOLDER_CHANGE_NAME, 0, R.string.menu_folder_change_name);
+ }
+ }
+ };
+
+ @Override
+ public void onContextMenuClosed(Menu menu) {
+ //如果当前处于便签列表形式
+ if (mNotesListView != null) {
+ //显示菜单栏
+ mNotesListView.setOnCreateContextMenuListener(null);
+ }
+ //调用父类的构造函数
+ super.onContextMenuClosed(menu);
+ }
+
+ @Override
+ public boolean onContextItemSelected(MenuItem item) {
+ if (mFocusNoteDataItem == null) {
+ //长按数据项为空,报错并记入日志
+ Log.e(TAG, "The long click data item is null");
+ return false;
+ }
+ //对item的id进行判断
+ switch (item.getItemId()) {
+ //如果是文件夹,打开文件夹
+ case MENU_FOLDER_VIEW:
+ openFolder(mFocusNoteDataItem);
+ break;
+ //如果是删除文件夹
+ case MENU_FOLDER_DELETE:
+ //声明警示窗口
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ //设置标题
+ builder.setTitle(getString(R.string.alert_title_delete));
+ //设置警告图标
+ builder.setIcon(android.R.drawable.ic_dialog_alert);
+ //设置内容,确认是否删除
+ builder.setMessage(getString(R.string.alert_message_delete_folder));
+ builder.setPositiveButton(android.R.string.ok,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ deleteFolder(mFocusNoteDataItem.getId());
+ }
+ });
+ //取消则不执行任何操作
+ builder.setNegativeButton(android.R.string.cancel, null);
+ builder.show();
+ break;
+ //如果是修改文件夹名称
+ case MENU_FOLDER_CHANGE_NAME:
+ showCreateOrModifyFolderDialog(false);
+ break;
+ default:
+ break;
+ }
+ //操作成功,返回true
+ return true;
+ }
+
+ @Override
+ public boolean onPrepareOptionsMenu(Menu menu) {
+ menu.clear();
+ if (mState == ListEditState.NOTE_LIST) {
+ //显示actionbar
+ getMenuInflater().inflate(R.menu.note_list, menu);
+ // 设置是否同步
+ menu.findItem(R.id.menu_sync).setTitle(
+ GTaskSyncService.isSyncing() ? R.string.menu_sync_cancel : R.string.menu_sync);
+ } else if (mState == ListEditState.SUB_FOLDER) {//如果位于子文件夹下
+ //菜单采用子文件夹下的形式,只有添加便签选项
+ getMenuInflater().inflate(R.menu.sub_folder, menu);
+ } else if (mState == ListEditState.CALL_RECORD_FOLDER) {//如果位于通话记录文件夹下
+ //菜单仅仅提供搜索功能
+ getMenuInflater().inflate(R.menu.call_record_folder, menu);
+ } else {
+ //状态不合法,记入日志
+ Log.e(TAG, "Wrong state:" + mState);
+ }
+ //
+ return true;
+ }
+
+ /*
+ * 该方法实现了对菜单功能的实现
+ * @ item 选中的菜单项
+ * */
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ //对选中的菜单项进行判断
+ switch (item.getItemId()) {
+ //如果按下的是新建文件夹按钮
+ case R.id.menu_new_folder: {
+ //新建文件夹,true - 新建模式
+ showCreateOrModifyFolderDialog(true);
+ break;
+ }
+ //如果按下的是导出文本按钮
+ case R.id.menu_export_text: {
+ //导出文本
+ exportNoteToText();
+ break;
+ }
+ //如果按下的是同步按钮
+ case R.id.menu_sync: {
+ //判断当前是否为同步模式
+ if (isSyncMode()) {
+ //处于同步模式,且确认后直接同步
+ if (TextUtils.equals(item.getTitle(), getString(R.string.menu_sync))) {
+ GTaskSyncService.startSync(this);
+ } else {
+ //处于同步模式,取消同步
+ GTaskSyncService.cancelSync(this);
+ }
+ } else {
+ //不处于同步模式,
+ startPreferenceActivity();
+ }
+ break;
+ }
+ case R.id.menu_setting: {
+ startPreferenceActivity();
+ break;
+ }
+ case R.id.menu_new_note: {
+ createNewNote();
+ break;
+ }
+ case R.id.menu_search:
+ onSearchRequested();
+ break;
+ default:
+ break;
+ }
+ return true;
+ }
+
+ @Override
+ public boolean onSearchRequested() {
+ startSearch(null, false, null /* appData */, false);
+ return true;
+ }
+
+ private void exportNoteToText() {
+ final BackupUtils backup = BackupUtils.getInstance(NotesListActivity.this);
+ new AsyncTask() {
+
+ @Override
+ protected Integer doInBackground(Void... unused) {
+ return backup.exportToText();
+ }
+
+ @Override
+ protected void onPostExecute(Integer result) {
+ if (result == BackupUtils.STATE_SD_CARD_UNMOUONTED) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this);
+ builder.setTitle(NotesListActivity.this
+ .getString(R.string.failed_sdcard_export));
+ builder.setMessage(NotesListActivity.this
+ .getString(R.string.error_sdcard_unmounted));
+ builder.setPositiveButton(android.R.string.ok, null);
+ builder.show();
+ } else if (result == BackupUtils.STATE_SUCCESS) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this);
+ builder.setTitle(NotesListActivity.this
+ .getString(R.string.success_sdcard_export));
+ builder.setMessage(NotesListActivity.this.getString(
+ R.string.format_exported_file_location, backup
+ .getExportedTextFileName(), backup.getExportedTextFileDir()));
+ builder.setPositiveButton(android.R.string.ok, null);
+ builder.show();
+ } else if (result == BackupUtils.STATE_SYSTEM_ERROR) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this);
+ builder.setTitle(NotesListActivity.this
+ .getString(R.string.failed_sdcard_export));
+ builder.setMessage(NotesListActivity.this
+ .getString(R.string.error_sdcard_export));
+ builder.setPositiveButton(android.R.string.ok, null);
+ builder.show();
+ }
+ }
+
+ }.execute();
+ }
+
+ //判断是否位于同步模式的私有方法
+ private boolean isSyncMode() {
+ return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0;
+ }
+
+ private void startPreferenceActivity() {
+ //新建activity,如果有父activity,用父activity,否则新建
+ Activity from = getParent() != null ? getParent() : this;
+ Intent intent = new Intent(from, NotesPreferenceActivity.class);
+ from.startActivityIfNeeded(intent, -1);
+ }
+
+ private class OnListItemClickListener implements OnItemClickListener {
+
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ if (view instanceof NotesListItem) {
+ NoteItemData item = ((NotesListItem) view).getItemData();
+ if (mNotesListAdapter.isInChoiceMode()) {
+ //如果为便签类型
+ if (item.getType() == Notes.TYPE_NOTE) {
+ position = position - mNotesListView.getHeaderViewsCount();
+ mModeCallBack.onItemCheckedStateChanged(null, position, id,
+ !mNotesListAdapter.isSelectedItem(position));
+ }
+ return;
+ }
+
+ //对状态进行选择
+ switch (mState) {
+ //如果为列表状态
+ case NOTE_LIST:
+ //判断是否为文件夹
+ if (item.getType() == Notes.TYPE_FOLDER
+ || item.getType() == Notes.TYPE_SYSTEM) {
+ //是,打开文件夹
+ openFolder(item);
+ } else if (item.getType() == Notes.TYPE_NOTE) {
+ //如果是便签,打开便签
+ openNode(item);
+ } else {
+ //异常处理,将错误类型记入日志
+ Log.e(TAG, "Wrong note type in NOTE_LIST");
+ }
+ break;
+ //如果为子文件夹状态,不执行操作
+ case SUB_FOLDER:
+ //如果为通话记录类型
+ case CALL_RECORD_FOLDER:
+ if (item.getType() == Notes.TYPE_NOTE) {
+ openNode(item);
+ } else {
+ Log.e(TAG, "Wrong note type in SUB_FOLDER");
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ }
+
+ private void startQueryDestinationFolders() {
+ //定义用于在数据库中查询的语句,对type、parent_id、ID进行判断选择
+ String selection = NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>? AND " + NoteColumns.ID + "<>?";
+ selection = (mState == ListEditState.NOTE_LIST) ? selection:
+ "(" + selection + ") OR (" + NoteColumns.ID + "=" + Notes.ID_ROOT_FOLDER + ")";
+
+ //后台查询句柄
+ //结果以最近修改时间排序
+ mBackgroundQueryHandler.startQuery(FOLDER_LIST_QUERY_TOKEN,
+ null,
+ Notes.CONTENT_NOTE_URI,
+ FoldersListAdapter.PROJECTION,
+ selection,
+ new String[] {
+ String.valueOf(Notes.TYPE_FOLDER),
+ String.valueOf(Notes.ID_TRASH_FOLER),
+ String.valueOf(mCurrentFolderId)
+ },
+ NoteColumns.MODIFIED_DATE + " DESC");
+ }
+
+ /*
+ * 该方法实现了长按的操作
+ * @ view 窗口类
+ * @ id
+ * */
+ public boolean onItemLongClick(AdapterView> parent, View view, int position, long id) {
+ //判断窗体是否为列表状态
+ if (view instanceof NotesListItem) {
+ //是,设置焦点便签
+ mFocusNoteDataItem = ((NotesListItem) view).getItemData();
+ if (mFocusNoteDataItem.getType() == Notes.TYPE_NOTE && !mNotesListAdapter.isInChoiceMode()) {
+ if (mNotesListView.startActionMode(mModeCallBack) != null) {
+ mModeCallBack.onItemCheckedStateChanged(null, position, id, true);
+ mNotesListView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
+ } else {
+ //便签活动状态设置失败,记入日志
+ Log.e(TAG, "startActionMode fails");
+ }
+ } else if (mFocusNoteDataItem.getType() == Notes.TYPE_FOLDER) {//如果为文件夹状态
+ //设置窗体内容为文件夹内容
+ mNotesListView.setOnCreateContextMenuListener(mFolderOnCreateContextMenuListener);
+ }
+ }
+ return false;
+ }
+}
diff --git a/src/app/src/main/java/net/micode/notes/ui/TabListener.java b/src/app/src/main/java/net/micode/notes/ui/TabListener.java
new file mode 100644
index 0000000..a3d066f
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/ui/TabListener.java
@@ -0,0 +1,51 @@
+package net.micode.notes.ui;
+
+import android.app.ActionBar;
+import android.app.ActionBar.Tab;
+import android.app.Activity;
+import android.app.Fragment;
+import android.app.FragmentTransaction;
+
+public class TabListener implements ActionBar.TabListener {
+ private Fragment mFragment;
+ private final Activity mActivity;
+ private final String mTag;
+ private final Class mClass;
+
+ /** Constructor used each time a new tab is created.
+ * @param activity The host Activity, used to instantiate the fragment
+ * @param tag The identifier tag for the fragment
+ * @param clz The fragment's Class, used to instantiate the fragment
+ */
+ public TabListener(Activity activity, String tag, Class clz) {
+ mActivity = activity;
+ mTag = tag;
+ mClass = clz;
+ }
+
+ /* The following are each of the ActionBar.TabListener callbacks */
+
+ //该方法在Tab被选中时调用,一般用于实例化fragment
+ public void onTabSelected(Tab tab, FragmentTransaction ft) {
+ // Check if the fragment is already initialized
+ if (mFragment == null) {
+ // If not, instantiate and add it to the activity
+ mFragment = Fragment.instantiate(mActivity, mClass.getName());
+ ft.add(android.R.id.content, mFragment, mTag);
+ } else {
+ // If it exists, simply attach it in order to show it
+ ft.attach(mFragment);
+ }
+ }
+
+ public void onTabUnselected(Tab tab, FragmentTransaction ft) {
+ if (mFragment != null) {
+ // Detach the fragment, because another one is being attached
+ ft.detach(mFragment);
+ }
+ }
+
+ public void onTabReselected(Tab tab, FragmentTransaction ft) {
+ // User selected the already selected tab. Usually do nothing.
+ }
+}
diff --git a/src/app/src/main/java/net/micode/notes/ui/TodoFragment.java b/src/app/src/main/java/net/micode/notes/ui/TodoFragment.java
new file mode 100644
index 0000000..38a22f5
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/ui/TodoFragment.java
@@ -0,0 +1,235 @@
+package net.micode.notes.ui;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.Fragment;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.AdapterView;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ListView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import net.micode.notes.R;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+public class TodoFragment extends Fragment {
+ //fragment view
+ private View mTodoFragmentView;
+ //新建todo按键
+ private Button mAddNewTodo;
+ //用于记录日志信息的标记
+ private static String TAG = "TodoFragment";
+
+ //保存待办内容,String类型的list
+ private List todoListItem = new ArrayList();
+
+ //todo的列表视图
+ private ListView mLvTodo;
+
+ //checkbox的适配器
+ private CheckBoxAdapter mCbAdapter;
+
+ private List> mList;
+
+ private List mListStr = new ArrayList();
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ //创建页面布局,从todo_list.xml
+ mTodoFragmentView = inflater.inflate(R.layout.todo_list, null);
+ //绑定新建待办按钮
+ mAddNewTodo = (Button) mTodoFragmentView.findViewById(R.id.btn_new_todo);
+ //返回布局页面
+ return mTodoFragmentView;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState){
+ super.onCreate(savedInstanceState);
+ Log.i(TAG,"fragment creat successfully");
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState){
+ super.onActivityCreated(savedInstanceState);
+ //绑定新建todo按钮,实现新建todo功能
+ mAddNewTodo.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.btn_new_todo:
+ Log.i(TAG,"creat new todo successully");
+ createNewTodo();
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ );
+ initResources();
+ initViews();
+ }
+
+ //todo:读取文件,初始化mList
+ private void initResources(){
+
+ }
+
+
+ private void createNewTodo(){
+ Log.i(TAG,"creat new todo ing...");
+ View view = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_edit_todo, null);
+
+ final EditText etTodoText = (EditText) view.findViewById(R.id.et_todo_text);
+
+ final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+
+ //显示输入键盘
+ showSoftInput();
+
+ etTodoText.setText("");
+ //显示内容,“新建文件夹”
+ builder.setTitle(this.getString(R.string.create_new_todo));
+
+ builder.setPositiveButton(android.R.string.ok, null);
+ //设置“取消”按钮
+ builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ hideSoftInput(etTodoText);
+ }
+ });
+
+ final Dialog dialog = builder.setView(view).show();
+ final Button positive = (Button)dialog.findViewById(android.R.id.button1);
+ positive.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ hideSoftInput(etTodoText);
+ addNewTodo(etTodoText.getText().toString(), false);
+ dialog.dismiss();
+ }
+ });
+
+ if (TextUtils.isEmpty(etTodoText.getText())) {
+ positive.setEnabled(false);
+ }
+ /**
+ * 当未输入名称时,ok键为灰色
+ */
+ etTodoText.addTextChangedListener(new TextWatcher() {
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ //如果输入内容为空
+ if (TextUtils.isEmpty(etTodoText.getText())) {
+ //ok键无效,置为灰色
+ positive.setEnabled(false);
+ } else {
+ //否则,ok键有效
+ positive.setEnabled(true);
+ }
+ }
+
+ public void afterTextChanged(Editable s) {
+ // TODO Auto-generated method stub
+ }
+ });
+ }
+
+ //显示输入软键盘
+ private void showSoftInput(){
+ //显示键盘
+ InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
+ //如果输入法存在
+ if (inputMethodManager != null) {
+ inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
+ }
+ }
+ //隐藏输入键盘
+ private void hideSoftInput(View view){
+ InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
+
+ inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
+ }
+
+ private void initViews() {
+
+ mLvTodo = (ListView) getActivity().findViewById(R.id.todo_list);
+
+ mList = new ArrayList>();
+
+ addNewTodo(getResources().getString(R.string.todo_welcome),false);
+
+ //初始化数据
+ updateListView();
+
+ }
+
+ private void addNewTodo(String string, boolean isChecked){
+ HashMap map = new HashMap();
+ map.put("name", string + '\n' + getCreatTime());
+ map.put("boolean", isChecked);//初始化为未选
+ mList.add(map);
+ }
+
+ private void updateListView(){
+ try{
+ mCbAdapter = new CheckBoxAdapter(getActivity(),mList);
+ mLvTodo.setAdapter(mCbAdapter);
+ }catch (Exception e){
+ Log.e(TAG,"adapter is null ");
+ }
+
+ mLvTodo.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+
+ @Override
+ public void onItemClick(AdapterView> parent, View view,int position, long id) {
+ CheckBoxAdapter.ViewCache viewCache = (CheckBoxAdapter.ViewCache) view.getTag();
+ viewCache.cb.toggle();
+ mList.get(position).put("boolean", viewCache.cb.isChecked());
+
+ mCbAdapter.notifyDataSetChanged();
+
+ if(viewCache.cb.isChecked()){
+ //被选中状态
+ mListStr.add(mList.get(position).get("name").toString());
+ }else{
+ //从选中状态转化为未选中
+ mListStr.remove(mList.get(position).get("name").toString());
+ }
+ }
+ });
+ }
+
+ private String getCreatTime(){
+ SimpleDateFormat formatter = new SimpleDateFormat ("yyyy年MM月dd日 HH:mm:ss");
+ Date curDate = new Date(System.currentTimeMillis());
+ //获取当前时间
+ return formatter.format(curDate);
+ }
+}
diff --git a/src/app/src/main/java/net/micode/notes/ui/WhiteBoardFragment.java b/src/app/src/main/java/net/micode/notes/ui/WhiteBoardFragment.java
new file mode 100644
index 0000000..d7f9ff1
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/ui/WhiteBoardFragment.java
@@ -0,0 +1,41 @@
+package net.micode.notes.ui;
+
+import android.app.Fragment;
+import android.os.Bundle;
+import android.app.Activity;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.widget.Button;
+
+
+import net.micode.notes.R;
+
+public class WhiteBoardFragment extends Fragment {
+ private Button btn;
+ private View mWbView;
+
+ @Override
+ public View onCreateView(final LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ mWbView = inflater.inflate(R.layout.white_board,null);
+ btn = (Button) mWbView.findViewById(R.id.btn);
+ return mWbView;
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState){
+ super.onActivityCreated(savedInstanceState);
+ btn.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View arg0) {
+
+ }
+ });
+ }
+
+
+}
+
diff --git a/src/app/src/main/java/net/micode/notes/ui/WhiteBoardView.java b/src/app/src/main/java/net/micode/notes/ui/WhiteBoardView.java
new file mode 100644
index 0000000..20de649
--- /dev/null
+++ b/src/app/src/main/java/net/micode/notes/ui/WhiteBoardView.java
@@ -0,0 +1,93 @@
+package net.micode.notes.ui;
+
+import android.R.color;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Paint.Style;
+import android.graphics.Path;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnTouchListener;
+import android.view.SurfaceHolder;
+import android.view.SurfaceHolder.Callback;
+import android.view.SurfaceView;
+
+
+public class WhiteBoardView extends SurfaceView implements Callback,OnTouchListener{
+ //创建画笔对象
+ private Paint paint = new Paint();
+ //创建路径对象
+ private Path path = new Path();
+ public WhiteBoardView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ //添加回调函数
+ getHolder().addCallback(this);
+ //设置画笔颜色
+ paint.setColor(Color.BLUE);
+ //设置画笔粗细
+ paint.setTextSize(40);
+ //清理锯齿
+ paint.setAntiAlias(true);
+ //设置画笔为空心
+ paint.setStyle(Style.STROKE);
+ //添加触摸监听事件
+ setOnTouchListener(this);
+ }
+ //定义绘画方法
+ public void draw() {
+ //添加画布并且锁定
+ Canvas canvas = getHolder().lockCanvas();
+ //初始化画布的颜色为白色
+ canvas.drawColor(Color.WHITE);
+ canvas.drawPath(path, paint);
+
+ //清理画布
+ getHolder().unlockCanvasAndPost(canvas);
+
+ }
+ //定义清除画布方法
+ public void clear() {
+ //路径重置,清除画布
+ path.reset();
+ //如果不再次调用此方法,则清除画布之后,将不能再绘画
+ draw();
+ }
+ @Override
+ public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void surfaceCreated(SurfaceHolder arg0) {
+ // TODO Auto-generated method stub
+ draw();
+ }
+
+ @Override
+ public void surfaceDestroyed(SurfaceHolder arg0) {
+ // TODO Auto-generated method stub
+
+ }
+ @Override
+ public boolean onTouch(View arg0, MotionEvent event) {
+ // TODO Auto-generated method stub
+ //判断动作事件
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN://按下事件
+ path.moveTo(event.getX(), event.getY());//获取X和Y坐标
+ draw();//开始绘制
+ break;
+
+ case MotionEvent.ACTION_MOVE://移动事件
+ path.lineTo(event.getX(), event.getY());//获取移动时的x和y坐标
+ draw();//开始绘制
+ break;
+ }
+ return true;
+ }
+
+}
\ No newline at end of file
diff --git a/src/app/src/main/res/drawable-hdpi/icon_app.png b/src/app/src/main/res/drawable-hdpi/icon_app.png
new file mode 100644
index 0000000..e823b51
Binary files /dev/null and b/src/app/src/main/res/drawable-hdpi/icon_app.png differ
diff --git a/src/app/src/main/res/drawable-hdpi/list_background.png b/src/app/src/main/res/drawable-hdpi/list_background.png
new file mode 100644
index 0000000..dff5522
Binary files /dev/null and b/src/app/src/main/res/drawable-hdpi/list_background.png differ
diff --git a/src/app/src/main/res/drawable-hdpi/new_note_normal.png b/src/app/src/main/res/drawable-hdpi/new_note_normal.png
new file mode 100644
index 0000000..874fb82
Binary files /dev/null and b/src/app/src/main/res/drawable-hdpi/new_note_normal.png differ
diff --git a/src/app/src/main/res/drawable-hdpi/new_note_pressed.png b/src/app/src/main/res/drawable-hdpi/new_note_pressed.png
new file mode 100644
index 0000000..68aae02
Binary files /dev/null and b/src/app/src/main/res/drawable-hdpi/new_note_pressed.png differ
diff --git a/src/app/src/main/res/drawable-hdpi/title_alert.png b/src/app/src/main/res/drawable-hdpi/title_alert.png
new file mode 100644
index 0000000..152d158
Binary files /dev/null and b/src/app/src/main/res/drawable-hdpi/title_alert.png differ
diff --git a/src/app/src/main/res/layout/dialog_edit_todo.xml b/src/app/src/main/res/layout/dialog_edit_todo.xml
new file mode 100644
index 0000000..9317a2c
--- /dev/null
+++ b/src/app/src/main/res/layout/dialog_edit_todo.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/src/main/res/layout/note_list.xml b/src/app/src/main/res/layout/note_list.xml
new file mode 100644
index 0000000..837dfd9
--- /dev/null
+++ b/src/app/src/main/res/layout/note_list.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/src/main/res/layout/todo_list.xml b/src/app/src/main/res/layout/todo_list.xml
new file mode 100644
index 0000000..4b31abd
--- /dev/null
+++ b/src/app/src/main/res/layout/todo_list.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/src/main/res/layout/todo_list_item.xml b/src/app/src/main/res/layout/todo_list_item.xml
new file mode 100644
index 0000000..047c216
--- /dev/null
+++ b/src/app/src/main/res/layout/todo_list_item.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/src/main/res/layout/white_board.xml b/src/app/src/main/res/layout/white_board.xml
new file mode 100644
index 0000000..c783ab6
--- /dev/null
+++ b/src/app/src/main/res/layout/white_board.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/src/main/res/menu/note_list.xml b/src/app/src/main/res/menu/note_list.xml
new file mode 100644
index 0000000..e5d9374
--- /dev/null
+++ b/src/app/src/main/res/menu/note_list.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
diff --git a/src/app/src/main/res/menu/sub_folder.xml b/src/app/src/main/res/menu/sub_folder.xml
new file mode 100644
index 0000000..ae4d889
--- /dev/null
+++ b/src/app/src/main/res/menu/sub_folder.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/src/main/res/values-zh-rCN/strings.xml b/src/app/src/main/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..21636ec
--- /dev/null
+++ b/src/app/src/main/res/values-zh-rCN/strings.xml
@@ -0,0 +1,130 @@
+
+
+
+
+
+ 小米便签
+ 便签2x2
+ 便签4x4
+ 没有关联内容,点击新建便签。
+ 访客模式下,便签内容不可见
+ ...
+ 新建便签
+ 成功删除提醒
+ 创建提醒
+ 已过期
+ yyyyMMdd
+ MM月dd日 kk:mm
+ 知道了
+ 查看
+ 呼叫电话
+ 发送邮件
+ 浏览网页
+ 打开地图
+
+ 字数
+ 新建文件夹
+ 导出文本
+ 同步
+ 取消同步
+ 设置
+ 搜索
+ 删除
+ 移动到文件夹
+ 选中了 %d 项
+ 没有选中项,操作无效
+ 全选
+ 取消全选
+ 文字大小
+ 小
+ 正常
+ 大
+ 超大
+ 进入清单模式
+ 退出清单模式
+ 查看文件夹
+ 刪除文件夹
+ 修改文件夹名称
+ 文件夹 %1$s 已存在,请重新命名
+ 分享
+ 发送到桌面
+ 提醒我
+ 删除提醒
+ 选择文件夹
+ 上一级文件夹
+ 已添加到桌面
+ 删除
+ 确认要删除所选的 %d 条便签吗?
+ 确认要删除该条便签吗?
+ 确认删除文件夹及所包含的便签吗?
+ 已将所选 %1$d 条便签移到 %2$s 文件夹
+
+ SD卡被占用,不能操作
+ 导出文本时发生错误,请检查SD卡
+ 要查看的便签不存在
+ 不能为空便签设置闹钟提醒
+ 不能将空便签发送到桌面
+ 导出成功
+ 导出失败
+ 已将文本文件(%1$s)输出至SD卡(%2$s)目录
+
+ 同步便签...
+ 同步成功
+ 同步失败
+ 同步已取消
+ 与%1$s同步成功
+ 同步失败,请检查网络和帐号设置
+ 同步失败,发生内部错误
+ 同步已取消
+ 登录%1$s...
+ 正在获取服务器便签列表...
+ 正在同步本地便签...
+
+ 设置
+ 同步账号
+ 与google task同步便签记录
+ 上次同步于 %1$s
+ 添加账号
+ 更换账号
+ 删除账号
+ 取消
+ 立即同步
+ 取消同步
+ 当前帐号 %1$s
+ 如更换同步帐号,过去的帐号同步信息将被清空,再次切换的同时可能会造成数据重复
+ 同步便签
+ 请选择google帐号,便签将与该帐号的google task内容同步。
+ 正在同步中,不能修改同步帐号
+ 同步帐号已设置为%1$s
+ 新建便签背景颜色随机
+ 删除
+ 通话便签
+ 请输入名称
+ 正在搜索便签
+ 搜索便签
+ 便签中的文字
+ 便签
+ 设置
+ 取消
+
+ %1$s 条符合“%2$s”的搜索结果
+
+ 新建待办
+ 请输入待办内容
+ 欢迎使用小米Todo !
+
+
diff --git a/src/app/src/main/res/values-zh-rTW/strings.xml b/src/app/src/main/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..8e34a57
--- /dev/null
+++ b/src/app/src/main/res/values-zh-rTW/strings.xml
@@ -0,0 +1,131 @@
+
+
+
+
+
+ 小米便簽
+ 便簽2x2
+ 便簽4x4
+ 沒有關聯內容,點擊新建便簽。
+ 訪客模式下,便籤內容不可見
+ ...
+ 新建便簽
+ 成功刪除提醒
+ 創建提醒
+ 已過期
+ yyyyMMdd
+ MM月dd日 kk:mm
+ 知道了
+ 查看
+ 呼叫電話
+ 發送郵件
+ 浏覽網頁
+ 打開地圖
+ 已將所選 %1$d 便籤移到 %2$s 文件夾
+
+ 新建文件夾
+ 導出文本
+ 同步
+ 取消同步
+ 設置
+ 搜尋
+ 刪除
+ 移動到文件夾
+ 選中了 %d 項
+ 沒有選中項,操作無效
+ 全選
+ 取消全選
+ 文字大小
+ 小
+ 正常
+ 大
+ 超大
+ 進入清單模式
+ 退出清單模式
+ 查看文件夾
+ 刪除文件夾
+ 修改文件夾名稱
+ 文件夾 %1$s 已存在,請重新命名
+ 分享
+ 發送到桌面
+ 提醒我
+ 刪除提醒
+ 選擇文件夾
+ 上一級文件夾
+ 已添加到桌面
+ 刪除
+ 确认要刪除所選的 %d 條便籤嗎?
+ 确认要删除該條便籤嗎?
+ 確認刪除檔夾及所包含的便簽嗎?
+ SD卡被佔用,不能操作
+ 導出TXT時發生錯誤,請檢查SD卡
+ 要查看的便籤不存在
+ 不能爲空便籤設置鬧鐘提醒
+ 不能將空便籤發送到桌面
+ 導出成功
+ 導出失敗
+ 已將文本文件(%1$s)導出至SD(%2$s)目錄
+
+ 同步便簽...
+ 同步成功
+ 同步失敗
+ 同步已取消
+ 與%1$s同步成功
+ 同步失敗,請檢查網絡和帳號設置
+ 同步失敗,發生內部錯誤
+ 同步已取消
+ 登陸%1$s...
+ 正在獲取服務器便籤列表...
+ 正在同步本地便籤...
+
+ 設置
+ 同步賬號
+ 与google task同步便簽記錄
+ 上次同步于 %1$s
+ 添加賬號
+ 更換賬號
+ 刪除賬號
+ 取消
+ 立即同步
+ 取消同步
+ 當前帳號 %1$s
+ 如更換同步帳號,過去的帳號同步信息將被清空,再次切換的同時可能會造成數據重復
+ 同步便簽
+ 請選擇google帳號,便簽將與該帳號的google task內容同步。
+ 正在同步中,不能修改同步帳號
+ 同步帳號已設置為%1$s
+ 新建便籤背景顏色隨機
+
+ 刪除
+ 通話便籤
+ 請輸入名稱
+
+ 正在搜索便籤
+ 搜索便籤
+ 便籤中的文字
+ 便籤
+ 設置
+ 取消
+
+ %1$s 條符合”%2$s“的搜尋結果
+
+ 字數
+ 新建待辦
+ 請輸入待辦内容
+ 歡迎使用小米Todo !
+
+
diff --git a/src/app/src/main/res/values/strings.xml b/src/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..b880e23
--- /dev/null
+++ b/src/app/src/main/res/values/strings.xml
@@ -0,0 +1,139 @@
+
+
+
+
+
+ Mi Notes
+ Notes 2x2
+ Notes 4x4
+ No associated note found, click to create associated note.
+ Privacy mode,can not see note content
+ ...
+ Add note
+ Delete reminder successfully
+ Set reminder
+ Expired
+ yyyyMMdd
+ MMMd kk:mm
+ Got it
+ Take a look
+ Call
+ Send email
+ Browse web
+ Open map
+
+ /MIUI/notes/
+ notes_%s.txt
+
+ (%d)
+ New Folder
+ Export text
+ Sync
+ Cancel syncing
+ Settings
+ Search
+ Delete
+ Move to folder
+ %d selected
+ Nothing selected, the operation is invalid
+ Select all
+ Deselect all
+ Font size
+ Small
+ Medium
+ Large
+ Super
+ Enter check list
+ Leave check list
+ View folder
+ Delete folder
+ Change folder name
+ The folder %1$s exist, please rename
+ Share
+ Send to home
+ Remind me
+ Delete reminder
+ Select folder
+ Parent folder
+ Note added to home
+ Confirm to delete folder and its notes?
+ Delete selected notes
+ Confirm to delete the selected %d notes?
+ Confirm to delete this note?
+ Have moved selected %1$d notes to %2$s folder
+
+ SD card busy, not available now
+ Export failed, please check SD card
+ The note is not exist
+ Sorry, can not set clock on empty note
+ Sorry, can not send and empty note to home
+ Export successful
+ Export fail
+ Export text file (%1$s) to SD (%2$s) directory
+
+ Syncing notes...
+ Sync is successful
+ Sync is failed
+ Sync is canceled
+ Sync is successful with account %1$s
+ Sync failed, please check network and account settings
+ Sync failed, internal error occurs
+ Sync is canceled
+ Logging into %1$s...
+ Getting remote note list...
+ Synchronize local notes with Google Task...
+
+ Settings
+ Sync account
+ Sync notes with google task
+ Last sync time %1$s
+ yyyy-MM-dd hh:mm:ss
+ Add account
+ Change sync account
+ Remove sync account
+ Cancel
+ Sync immediately
+ Cancel syncing
+ Current account %1$s
+ All sync related information will be deleted, which may result in duplicated items sometime
+ Sync notes
+ Please select a google account. Local notes will be synced with google task.
+ Cannot change the account because sync is in progress
+ %1$s has been set as the sync account
+ New note background color random
+
+ Delete
+ Call notes
+ Input name
+
+ Searching Notes
+ Search notes
+ Text in your notes
+ Notes
+ set
+ cancel
+
+ %1$s result for \"%2$s\"
+
+ %1$s results for \"%2$s\"
+
+ Length
+ create new ToDo
+ Input ToDo
+ Welcome to use Mi ToDo !
+
+
diff --git a/src/app/src/main/res/values/styles.xml b/src/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..c1f9414
--- /dev/null
+++ b/src/app/src/main/res/values/styles.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file