From b581dead46783550ebd561366351eb7119a1bb89 Mon Sep 17 00:00:00 2001 From: Prerak Mann Date: Thu, 31 May 2018 01:14:36 +0530 Subject: [PATCH] Version 1.0 basic activity do app, 3 widgets note,image,list --- .gitignore | 10 + .idea/assetWizardSettings.xml | 96 +++ .idea/caches/build_file_checksums.ser | Bin 0 -> 533 bytes .idea/codeStyles/Project.xml | 29 + .idea/gradle.xml | 18 + .idea/misc.xml | 34 ++ .idea/runConfigurations.xml | 12 + .idea/vcs.xml | 6 + app/.gitignore | 1 + app/build.gradle | 46 ++ app/proguard-rules.pro | 21 + .../activitydo/ExampleInstrumentedTest.java | 26 + app/src/main/AndroidManifest.xml | 63 ++ app/src/main/ic_launcher-web.png | Bin 0 -> 22546 bytes .../com/pkmnapps/activitydo/HomeFragment.java | 354 +++++++++++ .../activitydo/ImageViewFullscreen.java | 169 ++++++ .../com/pkmnapps/activitydo/ListActivity.java | 150 +++++ .../com/pkmnapps/activitydo/MConstants.java | 22 + .../com/pkmnapps/activitydo/MainActivity.java | 151 +++++ .../com/pkmnapps/activitydo/NoteActivity.java | 77 +++ .../com/pkmnapps/activitydo/TaskActivity.java | 573 ++++++++++++++++++ .../activitydo/adapters/ActivityAdapter.java | 105 ++++ .../adapters/ActivityContentAdapter.java | 159 +++++ .../adapters/ColorThemeAdapter.java | 56 ++ .../adapters/InViewListAdapter.java | 59 ++ .../activitydo/adapters/ListAdapter.java | 103 ++++ .../contentproviders/ImageProvider.java | 131 ++++ .../custominterfaces/HomeFragInterace.java | 11 + .../ListActivityInterface.java | 8 + .../TaskActivityInterface.java | 9 + .../activitydo/databasehelpers/DBHelper.java | 152 +++++ .../databasehelpers/DBHelperImage.java | 116 ++++ .../databasehelpers/DBHelperList.java | 133 ++++ .../databasehelpers/DBHelperListItems.java | 126 ++++ .../databasehelpers/DBHelperText.java | 136 +++++ .../databasehelpers/DBHelperWidgets.java | 80 +++ .../activitydo/dataclasses/ActivityData.java | 71 +++ .../activitydo/dataclasses/AudioWidget.java | 21 + .../activitydo/dataclasses/DateWidget.java | 21 + .../activitydo/dataclasses/ImageWidget.java | 37 ++ .../activitydo/dataclasses/ListItem.java | 45 ++ .../activitydo/dataclasses/ListWidget.java | 36 ++ .../dataclasses/SimpleTextWidget.java | 45 ++ .../activitydo/dataclasses/Widget.java | 42 ++ .../res/drawable/ic_add_box_black_24dp.xml | 5 + .../main/res/drawable/ic_close_black_24dp.xml | 9 + .../main/res/drawable/ic_edit_black_24dp.xml | 9 + .../main/res/drawable/ic_home_black_24dp.xml | 9 + .../main/res/drawable/ic_image_black_24dp.xml | 9 + .../drawable/ic_keyboard_voice_black_24dp.xml | 9 + .../main/res/drawable/ic_label_white_24dp.xml | 5 + .../main/res/drawable/ic_list_black_24dp.xml | 9 + .../res/drawable/ic_mode_edit_black_24dp.xml | 5 + .../main/res/drawable/ic_star_black_24dp.xml | 9 + .../drawable/ic_star_border_black_24dp.xml | 9 + app/src/main/res/drawable/pinselector.xml | 5 + app/src/main/res/drawable/side_nav_bar.xml | 9 + .../layout/activity_image_view_fullscreen.xml | 40 ++ app/src/main/res/layout/activity_list.xml | 24 + app/src/main/res/layout/activity_main.xml | 25 + app/src/main/res/layout/activity_note.xml | 25 + app/src/main/res/layout/activity_task.xml | 26 + app/src/main/res/layout/app_bar_main.xml | 25 + app/src/main/res/layout/audio_record_view.xml | 25 + app/src/main/res/layout/color_circle.xml | 9 + app/src/main/res/layout/content_list.xml | 44 ++ app/src/main/res/layout/content_main.xml | 18 + app/src/main/res/layout/content_note.xml | 35 ++ app/src/main/res/layout/content_task.xml | 28 + app/src/main/res/layout/fragment_home.xml | 26 + app/src/main/res/layout/image_widget_view.xml | 19 + app/src/main/res/layout/nav_header_main.xml | 36 ++ .../main/res/layout/new_activity_alertbox.xml | 42 ++ .../res/layout/recycler_activity_layout.xml | 54 ++ .../res/layout/recycler_in_view_list_view.xml | 21 + .../res/layout/recycler_list_in_task_view.xml | 37 ++ .../res/layout/recycler_listitem_layout.xml | 28 + app/src/main/res/layout/simple_note_view.xml | 36 ++ .../main/res/menu/activity_main_drawer.xml | 33 + app/src/main/res/menu/main.xml | 10 + app/src/main/res/menu/menu_note.xml | 4 + app/src/main/res/menu/menu_task_activity.xml | 18 + app/src/main/res/menu/widget_menu.xml | 18 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2025 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 2988 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4012 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1435 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 1936 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2529 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2848 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 4193 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 5675 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 4422 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 7055 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 8788 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 6064 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 10519 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 12698 bytes app/src/main/res/values-v21/styles.xml | 8 + app/src/main/res/values/attrs.xml | 12 + app/src/main/res/values/colors.xml | 17 + app/src/main/res/values/dimens.xml | 8 + app/src/main/res/values/drawables.xml | 8 + .../res/values/ic_launcher_background.xml | 4 + app/src/main/res/values/strings.xml | 21 + app/src/main/res/values/styles.xml | 66 ++ app/src/main/res/xml/file_paths.xml | 4 + .../pkmnapps/activitydo/ExampleUnitTest.java | 17 + build.gradle | 28 + gradle.properties | 13 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54708 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 172 ++++++ gradlew.bat | 84 +++ settings.gradle | 1 + 117 files changed, 4846 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/assetWizardSettings.xml create mode 100644 .idea/caches/build_file_checksums.ser create mode 100644 .idea/codeStyles/Project.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 .idea/vcs.xml create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/com/pkmnapps/activitydo/ExampleInstrumentedTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/ic_launcher-web.png create mode 100644 app/src/main/java/com/pkmnapps/activitydo/HomeFragment.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/ImageViewFullscreen.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/ListActivity.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/MConstants.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/MainActivity.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/NoteActivity.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/TaskActivity.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/adapters/ActivityAdapter.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/adapters/ActivityContentAdapter.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/adapters/ColorThemeAdapter.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/adapters/InViewListAdapter.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/adapters/ListAdapter.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/contentproviders/ImageProvider.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/custominterfaces/HomeFragInterace.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/custominterfaces/ListActivityInterface.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/custominterfaces/TaskActivityInterface.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelper.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperImage.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperList.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperListItems.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperText.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperWidgets.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/dataclasses/ActivityData.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/dataclasses/AudioWidget.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/dataclasses/DateWidget.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/dataclasses/ImageWidget.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/dataclasses/ListItem.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/dataclasses/ListWidget.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/dataclasses/SimpleTextWidget.java create mode 100644 app/src/main/java/com/pkmnapps/activitydo/dataclasses/Widget.java create mode 100644 app/src/main/res/drawable/ic_add_box_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_close_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_edit_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_home_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_image_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_keyboard_voice_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_label_white_24dp.xml create mode 100644 app/src/main/res/drawable/ic_list_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_mode_edit_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_star_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_star_border_black_24dp.xml create mode 100644 app/src/main/res/drawable/pinselector.xml create mode 100644 app/src/main/res/drawable/side_nav_bar.xml create mode 100644 app/src/main/res/layout/activity_image_view_fullscreen.xml create mode 100644 app/src/main/res/layout/activity_list.xml create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/activity_note.xml create mode 100644 app/src/main/res/layout/activity_task.xml create mode 100644 app/src/main/res/layout/app_bar_main.xml create mode 100644 app/src/main/res/layout/audio_record_view.xml create mode 100644 app/src/main/res/layout/color_circle.xml create mode 100644 app/src/main/res/layout/content_list.xml create mode 100644 app/src/main/res/layout/content_main.xml create mode 100644 app/src/main/res/layout/content_note.xml create mode 100644 app/src/main/res/layout/content_task.xml create mode 100644 app/src/main/res/layout/fragment_home.xml create mode 100644 app/src/main/res/layout/image_widget_view.xml create mode 100644 app/src/main/res/layout/nav_header_main.xml create mode 100644 app/src/main/res/layout/new_activity_alertbox.xml create mode 100644 app/src/main/res/layout/recycler_activity_layout.xml create mode 100644 app/src/main/res/layout/recycler_in_view_list_view.xml create mode 100644 app/src/main/res/layout/recycler_list_in_task_view.xml create mode 100644 app/src/main/res/layout/recycler_listitem_layout.xml create mode 100644 app/src/main/res/layout/simple_note_view.xml create mode 100644 app/src/main/res/menu/activity_main_drawer.xml create mode 100644 app/src/main/res/menu/main.xml create mode 100644 app/src/main/res/menu/menu_note.xml create mode 100644 app/src/main/res/menu/menu_task_activity.xml create mode 100644 app/src/main/res/menu/widget_menu.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/values-v21/styles.xml create mode 100644 app/src/main/res/values/attrs.xml create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/dimens.xml create mode 100644 app/src/main/res/values/drawables.xml create mode 100644 app/src/main/res/values/ic_launcher_background.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/styles.xml create mode 100644 app/src/main/res/xml/file_paths.xml create mode 100644 app/src/test/java/com/pkmnapps/activitydo/ExampleUnitTest.java create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5edb4ee --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +*.iml +.gradle +/local.properties +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +.DS_Store +/build +/captures +.externalNativeBuild diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml new file mode 100644 index 0000000..b3900d1 --- /dev/null +++ b/.idea/assetWizardSettings.xml @@ -0,0 +1,96 @@ + + + + + + \ No newline at end of file diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser new file mode 100644 index 0000000000000000000000000000000000000000..dc5e54f8e81c55d039f85cf3e334d2b85194fed6 GIT binary patch literal 533 zcmZ4UmVvdnh`~NNKUXg?FQq6yGexf?KR>5fFEb@IQ7^qHF(oHeub?PDD>b=9F91S2 zm1gFoxMk*~I%lLNXBU^|7Q2L-Ts|(GuF1r}nf0c10S!18}mhbLxkeX0=^7o4WADqX^$ zqMwnUo2p-sotvi*)vJ#Pn1a-zlFZcN(n5wh1~!lZS7du`_A_i^dD*}@7SabKs-LIB!?;2D9 E0G=JahyVZp literal 0 HcmV?d00001 diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..30aa626 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..7ac24c7 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..99202cc --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..823380a --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,46 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 27 + defaultConfig { + applicationId "com.pkmnapps.activitydo" + minSdkVersion 19 + targetSdkVersion 27 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + multiDexEnabled true + + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.android.support:appcompat-v7:27.1.1' + implementation 'com.android.support:design:27.1.1' + implementation 'com.android.support.constraint:constraint-layout:1.1.0' + implementation 'com.android.support:support-v4:27.1.1' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + + implementation 'com.android.support:recyclerview-v7:27.1.1' + implementation 'com.android.support:cardview-v7:27.1.1' + + implementation 'com.flipboard:bottomsheet-core:1.5.3' + implementation 'com.flipboard:bottomsheet-commons:1.5.3' + + implementation 'com.github.bumptech.glide:glide:4.7.1' + annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1' + + implementation 'com.github.chrisbanes:PhotoView:2.0.0' + + implementation 'com.android.support:multidex:1.0.3' + +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/app/src/androidTest/java/com/pkmnapps/activitydo/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/pkmnapps/activitydo/ExampleInstrumentedTest.java new file mode 100644 index 0000000..1c2cc31 --- /dev/null +++ b/app/src/androidTest/java/com/pkmnapps/activitydo/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.pkmnapps.activitydo; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.pkmnapps.activitydo", appContext.getPackageName()); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..6a694dc --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/ic_launcher-web.png b/app/src/main/ic_launcher-web.png new file mode 100644 index 0000000000000000000000000000000000000000..3cc05a9ffc019e82610f67d827d58caa4f0b5cdf GIT binary patch literal 22546 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 literal 0 HcmV?d00001 diff --git a/app/src/main/java/com/pkmnapps/activitydo/HomeFragment.java b/app/src/main/java/com/pkmnapps/activitydo/HomeFragment.java new file mode 100644 index 0000000..60bab78 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/HomeFragment.java @@ -0,0 +1,354 @@ +package com.pkmnapps.activitydo; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; + +import android.graphics.Color; +import android.net.Uri; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v7.widget.DefaultItemAnimator; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.helper.ItemTouchHelper; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ListView; + + +import com.pkmnapps.activitydo.adapters.ActivityAdapter; +import com.pkmnapps.activitydo.adapters.ColorThemeAdapter; +import com.pkmnapps.activitydo.custominterfaces.HomeFragInterace; +import com.pkmnapps.activitydo.databasehelpers.DBHelper; +import com.pkmnapps.activitydo.dataclasses.ActivityData; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Random; + + +/** + * A simple {@link Fragment} subclass. + * Activities that contain this fragment must implement the + * {@link HomeFragment.OnFragmentInteractionListener} interface + * to handle interaction events. + * Use the {@link HomeFragment#newInstance} factory method to + * create an instance of this fragment. + */ + +public class HomeFragment extends Fragment implements HomeFragInterace{ + View view; + List activityDataList; + ActivityAdapter activityAdapter; + RecyclerView recyclerView; + DBHelper dbHelper; + View dialogView; + String colorTheme = MConstants.colors[0]; + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + + private OnFragmentInteractionListener mListener; + + public HomeFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment HomeFragment. + */ + // TODO: Rename and change types and number of parameters + public static HomeFragment newInstance(String param1, String param2) { + HomeFragment fragment = new HomeFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + mParam1 = getArguments().getString(ARG_PARAM1); + mParam2 = getArguments().getString(ARG_PARAM2); + } + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + view = inflater.inflate(R.layout.fragment_home, container, false); + + getActivity().setTitle("Home"); + + activityDataList = new ArrayList<>(); + activityAdapter = new ActivityAdapter(activityDataList,HomeFragment.this); + + recyclerView = (RecyclerView)view.findViewById(R.id.recycler_view); + RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(view.getContext()); + recyclerView.setLayoutManager(mLayoutManager); + recyclerView.setItemAnimator(new DefaultItemAnimator()); + recyclerView.setNestedScrollingEnabled(false); + dbHelper = new DBHelper(getContext()); + ItemTouchHelper.Callback itcallback = new ItemTouchHelper.Callback() {//for sorting + @Override + public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { + + return makeFlag(ItemTouchHelper.ACTION_STATE_DRAG, + ItemTouchHelper.DOWN | ItemTouchHelper.UP); + } + @Override + public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { + // get the viewHolder's and target's positions in your adapter data, swap them + Collections.swap(activityDataList, viewHolder.getAdapterPosition(), target.getAdapterPosition()); +// activityDataList.get(viewHolder.getAdapterPosition()).setSortOrder(target.getAdapterPosition()); +// activityDataList.get(target.getAdapterPosition()).setSortOrder(viewHolder.getAdapterPosition()); + //s + // and notify the adapter that its dataset has changed + activityAdapter.notifyItemMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition()); + return true; + } + @Override + public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { + } + + @Override + public void onMoved(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, int fromPos, RecyclerView.ViewHolder target, int toPos, int x, int y) { + super.onMoved(recyclerView, viewHolder, fromPos, target, toPos, x, y); + dbHelper.updateAllSortOrders(activityDataList); + } + }; + ItemTouchHelper.Callback itcallbackswipe = new ItemTouchHelper.Callback() { + @Override + public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { + return makeFlag(ItemTouchHelper.ACTION_STATE_SWIPE,ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT); + + } + + @Override + public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { + return false; + } + + @Override + public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { + displayDeleteDialog(activityDataList.get(viewHolder.getAdapterPosition())); + } + + }; + ItemTouchHelper itemTouchHelperSwipe = new ItemTouchHelper(itcallbackswipe); + + ItemTouchHelper itemTouchHelper = new ItemTouchHelper(itcallback); + itemTouchHelper.attachToRecyclerView(recyclerView); + itemTouchHelperSwipe.attachToRecyclerView(recyclerView) + ; + Button addNewButton = (Button)view.findViewById(R.id.addNewButton); + addNewButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(final View v) { + //open a popup for adding new + final AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + LayoutInflater inflater = LayoutInflater.from(getContext()); + dialogView = inflater.inflate(R.layout.new_activity_alertbox,null); + builder.setView(dialogView); + + changeColorTheme(new Random().nextInt(MConstants.colors.length));//gives random number from 0 to max(excluding) + + final RecyclerView recyclerView = (RecyclerView)dialogView.findViewById(R.id.recycler_view); + RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(view.getContext(),LinearLayoutManager.HORIZONTAL,false); + recyclerView.setLayoutManager(mLayoutManager); + recyclerView.setItemAnimator(new DefaultItemAnimator()); + recyclerView.setNestedScrollingEnabled(false); + + recyclerView.setAdapter(new ColorThemeAdapter(HomeFragment.this)); + + builder.setPositiveButton("Add", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + String id,name,color; + //add to list + EditText nameEdiText = (EditText)dialogView.findViewById(R.id.nameEditText); + + id = String.valueOf(System.currentTimeMillis()); + name = nameEdiText.getText().toString(); + color = colorTheme; + if(!name.equals("")) { + ActivityData a = new ActivityData(id, name, color, false,0); + activityDataList.add(0,a); + //add to database + dbHelper.insertActivity(a); + //update UI + activityAdapter.notifyDataSetChanged(); + } + } + }); + AlertDialog dialog = builder.create(); + dialog.show(); + } + }); + + return view; + } + + @Override + public void onStart() { + super.onStart(); + //clear-up previous data if any... + activityDataList.clear(); + //add from database here + activityDataList.addAll(dbHelper.getAllActivitiesAsList()); + //sort the list here... + activityAdapter.notifyDataSetChanged(); + recyclerView.setAdapter(activityAdapter); + } + + // TODO: Rename method, update argument and hook method into UI event + public void onButtonPressed(Uri uri) { + if (mListener != null) { + mListener.onFragmentInteraction(uri); + } + } + + @Override + public void onAttach(Context context) { + super.onAttach(context); + if (context instanceof OnFragmentInteractionListener) { + mListener = (OnFragmentInteractionListener) context; + } else { + throw new RuntimeException(context.toString() + + " must implement OnFragmentInteractionListener"); + } + } + + @Override + public void onDetach() { + super.onDetach(); + mListener = null; + } + + /** + * This interface must be implemented by activities that contain this + * fragment to allow an interaction in this fragment to be communicated + * to the activity and potentially other fragments contained in that + * activity. + *

+ * See the Android Training lesson Communicating with Other Fragments for more information. + */ + public interface OnFragmentInteractionListener { + // TODO: Update argument type and name + void onFragmentInteraction(Uri uri); + } + + @Override + public void displayEditDialog(final ActivityData activityData) { + //open a popup for adding new + final AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + LayoutInflater inflater = LayoutInflater.from(getContext()); + dialogView = inflater.inflate(R.layout.new_activity_alertbox,null); + builder.setView(dialogView); + + changeColorTheme(activityData.getColor()); + + RecyclerView recyclerView = (RecyclerView)dialogView.findViewById(R.id.recycler_view); + RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(view.getContext(),LinearLayoutManager.HORIZONTAL,false); + recyclerView.setLayoutManager(mLayoutManager); + recyclerView.setItemAnimator(new DefaultItemAnimator()); + recyclerView.setNestedScrollingEnabled(false); + + recyclerView.setAdapter(new ColorThemeAdapter(HomeFragment.this)); + + final EditText nameEdiText = (EditText)dialogView.findViewById(R.id.nameEditText); + + nameEdiText.setText(activityData.getName()); + + builder.setPositiveButton("Edit", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + String name,color; + + name = nameEdiText.getText().toString(); + color = colorTheme; + if(!name.equals("")) { + activityData.setName(name); + activityData.setColor(color); + //add to database + dbHelper.updateActivity(activityData); + //update UI + activityAdapter.notifyDataSetChanged(); + } + } + }); + builder.setNeutralButton("Delete", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + displayDeleteDialog(activityData); + } + }); + builder.setNegativeButton("Cancel",null); + AlertDialog dialog = builder.create(); + dialog.show(); + } + + @Override + public void displayDeleteDialog(final ActivityData activityData) { + AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + builder.setTitle("Delete '"+activityData.getName()+"' ?"); + builder.setPositiveButton("Delete", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + //delete from database + new DBHelper(getContext()).deleteActivity(activityData.getId()); + //delete from list + activityDataList.remove(activityData); + activityAdapter.notifyDataSetChanged(); + //also remove from pinned menu if it exists + updatePinnedMenu(); + } + }); + builder.setOnCancelListener(new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface dialog) { + activityAdapter.notifyDataSetChanged(); + } + }); + builder.show(); + } + + @Override + public void changeColorTheme(int pos) { + //save to variable + colorTheme = MConstants.colors[pos]; + //change indicator in view + dialogView.setBackgroundColor(Color.parseColor(colorTheme)); + + } + + private void changeColorTheme(String colorTheme){ + dialogView.setBackgroundColor(Color.parseColor(colorTheme)); + } + + public void updatePinnedMenu(){ + ((MainActivity)getActivity()).menuAddPinned(); + } +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/ImageViewFullscreen.java b/app/src/main/java/com/pkmnapps/activitydo/ImageViewFullscreen.java new file mode 100644 index 0000000..5dbb503 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/ImageViewFullscreen.java @@ -0,0 +1,169 @@ +package com.pkmnapps.activitydo; + +import android.annotation.SuppressLint; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.view.View; + +import com.bumptech.glide.Glide; +import com.github.chrisbanes.photoview.PhotoView; + +import java.io.File; + +/** + * An example full-screen activity that shows and hides the system UI (i.e. + * status bar and navigation/system bar) with user interaction. + */ +public class ImageViewFullscreen extends AppCompatActivity { + /** + * Whether or not the system UI should be auto-hidden after + * {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds. + */ + private static final boolean AUTO_HIDE = false; + + /** + * If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after + * user interaction before hiding the system UI. + */ + private static final int AUTO_HIDE_DELAY_MILLIS = 3000; + + /** + * Some older devices needs a small delay between UI widget updates + * and a change of the status and navigation bar. + */ + private static final int UI_ANIMATION_DELAY = 300; + private final Handler mHideHandler = new Handler(); + private View mContentView; + private final Runnable mHidePart2Runnable = new Runnable() { + @SuppressLint("InlinedApi") + @Override + public void run() { + // Delayed removal of status and navigation bar + + // Note that some of these constants are new as of API 16 (Jelly Bean) + // and API 19 (KitKat). It is safe to use them, as they are inlined + // at compile-time and do nothing on earlier devices. + mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE + | View.SYSTEM_UI_FLAG_FULLSCREEN + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); + } + }; + private View mControlsView; + private final Runnable mShowPart2Runnable = new Runnable() { + @Override + public void run() { + // Delayed display of UI elements + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.show(); + } + mControlsView.setVisibility(View.VISIBLE); + } + }; + private boolean mVisible; + private final Runnable mHideRunnable = new Runnable() { + @Override + public void run() { + hide(); + } + }; + /** + * Touch listener to use for in-layout UI controls to delay hiding the + * system UI. This is to prevent the jarring behavior of controls going away + * while interacting with activity UI. + */ + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_image_view_fullscreen); + + mVisible = true; + mControlsView = findViewById(R.id.fullscreen_content_controls); + mContentView = findViewById(R.id.image); + + + // Set up the user interaction to manually show or hide the system UI. + mContentView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + toggle(); + } + }); + + // Upon interacting with UI controls, delay any scheduled hide() + // operations to prevent the jarring behavior of controls going away + // while interacting with the UI. + + PhotoView photoView = (PhotoView)mContentView; + + Glide.with(this) + .load(Uri.parse(getIntent().getStringExtra("image"))) + .into(photoView); + + + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + + // Trigger the initial hide() shortly after the activity has been + // created, to briefly hint to the user that UI controls + // are available. + if(AUTO_HIDE) + delayedHide(100); + } + + private void toggle() { + if (mVisible) { + hide(); + } else { + show(); + } + } + + private void hide() { + // Hide UI first + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.hide(); + } + mControlsView.setVisibility(View.GONE); + mVisible = false; + + // Schedule a runnable to remove the status and navigation bar after a delay + mHideHandler.removeCallbacks(mShowPart2Runnable); + mHideHandler.postDelayed(mHidePart2Runnable, UI_ANIMATION_DELAY); + } + + @SuppressLint("InlinedApi") + private void show() { + // Show the system bar + mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); + mVisible = true; + + // Schedule a runnable to display UI elements after a delay + mHideHandler.removeCallbacks(mHidePart2Runnable); + mHideHandler.postDelayed(mShowPart2Runnable, UI_ANIMATION_DELAY); + } + + /** + * Schedules a call to hide() in delay milliseconds, canceling any + * previously scheduled calls. + */ + private void delayedHide(int delayMillis) { + mHideHandler.removeCallbacks(mHideRunnable); + mHideHandler.postDelayed(mHideRunnable, delayMillis); + } + + +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/ListActivity.java b/app/src/main/java/com/pkmnapps/activitydo/ListActivity.java new file mode 100644 index 0000000..fda5ca9 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/ListActivity.java @@ -0,0 +1,150 @@ +package com.pkmnapps.activitydo; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.DefaultItemAnimator; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.KeyEvent; +import android.view.MenuItem; +import android.view.View; +import android.view.WindowManager; +import android.view.inputmethod.EditorInfo; +import android.widget.EditText; +import android.widget.TextView; + +import com.pkmnapps.activitydo.adapters.ListAdapter; +import com.pkmnapps.activitydo.custominterfaces.ListActivityInterface; +import com.pkmnapps.activitydo.databasehelpers.DBHelperList; +import com.pkmnapps.activitydo.databasehelpers.DBHelperListItems; +import com.pkmnapps.activitydo.dataclasses.ListItem; +import com.pkmnapps.activitydo.dataclasses.ListWidget; + +import java.util.ArrayList; +import java.util.List; + +public class ListActivity extends AppCompatActivity implements ListActivityInterface { + String lid,head;//lid is recieved + EditText headE; + Intent data; + + List listItems; + ListAdapter listAdapter; + RecyclerView recyclerView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_list); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); + + final TextView addItem = (TextView)findViewById(R.id.addItemTextView); + + lid = getIntent().getStringExtra("lid"); + head = getIntent().getStringExtra("head"); + data = getIntent(); + + headE = (EditText)findViewById(R.id.head_editText); + headE.setText(head); + + addItem.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //add list + newListItem(); + } + }); + recyclerView = (RecyclerView)findViewById(R.id.recycler_view); + RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(ListActivity.this); + recyclerView.setLayoutManager(mLayoutManager); + recyclerView.setItemAnimator(new DefaultItemAnimator()); + recyclerView.setNestedScrollingEnabled(false); + //recyclerView.setItemViewCacheSize(100); + recyclerView.setOnKeyListener(new View.OnKeyListener() { + @Override + public boolean onKey(View v, int keyCode, KeyEvent event) { + + return false; + } + }); + loadData(); + + listAdapter = new ListAdapter(listItems, ListActivity.this); + recyclerView.setAdapter(listAdapter); + + + + setResult(Activity.RESULT_OK,data); + } + + @Override + public void onBackPressed() { + clearFocus(); + super.onBackPressed(); + } + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + // app icon in action bar clicked; goto parent activity. + onBackPressed(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + @Override + protected void onPause() {//will run always no-matter how activity is closed + clearFocus(); + //save data on pause activity + head = headE.getText().toString(); + + new DBHelperList(ListActivity.this).updateHead(lid,head); + DBHelperListItems dbHelperListItems = new DBHelperListItems(ListActivity.this); + //save listitems + for (ListItem listItem : listItems) { + if (dbHelperListItems.updateActivity(listItem)==0) + dbHelperListItems.insertListItem(listItem); + } + + super.onPause(); + } + + @Override + public void deleteListItem(ListItem listItem) { + listItems.remove(listItem); + } + + @Override + public void newListItem() { + //save previous list first + + listItems.add(new ListItem(String.valueOf(System.currentTimeMillis()), lid,"",false)); + listAdapter.notifyDataSetChanged(); + } + + public void loadData(){ + listItems = new ArrayList<>(); + DBHelperListItems dbHelperListItems = new DBHelperListItems(ListActivity.this); + listItems = dbHelperListItems.getAllListItemsAsList(lid); + } + + public void clearFocus(){ + View current = getCurrentFocus(); + if (current != null) { + current.clearFocus(); + } + } + + +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/MConstants.java b/app/src/main/java/com/pkmnapps/activitydo/MConstants.java new file mode 100644 index 0000000..8157c3a --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/MConstants.java @@ -0,0 +1,22 @@ +package com.pkmnapps.activitydo; + +public class MConstants { + public static String[] colors = {"#3f79b4","#50933c","#afaf41","#af4541","#673a9e"}; + public static final int textW = 1; + public static final int listW = 2; + public static final int imageW = 3; + public static final int audioW = 4; + + + public static final int REQUEST_STORAGE = 0; + public static final int REQUEST_IMAGE_CAPTURE = 1; + public static final int REQUEST_LOAD_IMAGE = 2; + + public static final int REQUEST_NEW_NOTE = 3; + + public static final int REQUEST_NEW_LIST = 4; + + +} + + diff --git a/app/src/main/java/com/pkmnapps/activitydo/MainActivity.java b/app/src/main/java/com/pkmnapps/activitydo/MainActivity.java new file mode 100644 index 0000000..36873d5 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/MainActivity.java @@ -0,0 +1,151 @@ +package com.pkmnapps.activitydo; + +import android.content.Intent; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.PorterDuff; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Bundle; +import android.support.design.widget.NavigationView; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.view.GravityCompat; +import android.support.v4.widget.DrawerLayout; +import android.support.v7.app.ActionBarDrawerToggle; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.Menu; +import android.view.MenuItem; +import android.view.SubMenu; + +import com.pkmnapps.activitydo.databasehelpers.DBHelper; +import com.pkmnapps.activitydo.dataclasses.ActivityData; + + +public class MainActivity extends AppCompatActivity + implements NavigationView.OnNavigationItemSelectedListener, + HomeFragment.OnFragmentInteractionListener +{ + boolean home = true; + NavigationView navigationView; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( + this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); + drawer.addDrawerListener(toggle); + toggle.syncState(); + + navigationView = (NavigationView) findViewById(R.id.nav_view); + navigationView.setNavigationItemSelectedListener(this); + + menuAddPinned(); + + navigationView.setCheckedItem(R.id.nav_home); + //Set home fragment to load first here + FragmentManager fragmentManager = getSupportFragmentManager(); + FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); + fragmentTransaction.replace(R.id.fragment_parent_main,new HomeFragment(),"back").commit(); + + } + + public void menuAddPinned(){ + //add items to nav menu + Menu menu = navigationView.getMenu(); + SubMenu subMenu = menu.findItem(R.id.nav_pinned).getSubMenu(); + subMenu.clear(); + Drawable d = getResources().getDrawable(R.drawable.ic_label_white_24dp); + for(final ActivityData a:new DBHelper(MainActivity.this).getAllActivitiesAsList()){ + if(a.getPinned()) {//only pinned + subMenu.add(a.getName()).setIcon(d).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + //open that activity + //open openActivity and send this data to it + Bundle bundle = new Bundle(); + bundle.putString("name", a.getName()); + bundle.putString("id", a.getId()); + bundle.putString("color", a.getColor()); + bundle.putBoolean("pinned", a.getPinned()); + + Intent i = new Intent(MainActivity.this, TaskActivity.class); + i.putExtra("activityData", bundle); + startActivity(i); + return false; + } + }); + } + } + } + + @Override + public void onBackPressed() { + DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + if (drawer.isDrawerOpen(GravityCompat.START)) { + drawer.closeDrawer(GravityCompat.START); + } else { + if(home) + super.onBackPressed(); + else { + //load home frag here + //Set home fragment to load here + navigationView.setCheckedItem(R.id.nav_home); + } + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + + //noinspection SimplifiableIfStatement + if (id == R.id.action_settings) { + return true; + } + + return super.onOptionsItemSelected(item); + } + + @SuppressWarnings("StatementWithEmptyBody") + @Override + public boolean onNavigationItemSelected(MenuItem item) { + FragmentManager fragmentManager = getSupportFragmentManager(); + FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); + + // Handle navigation view item clicks here. + int id = item.getItemId(); + home = false; + if (id == R.id.nav_home) { + home = true; + fragmentTransaction.replace(R.id.fragment_parent_main,new HomeFragment()).commit(); + } + else if(id == R.id.nav_share){ + + } + + DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + drawer.closeDrawer(GravityCompat.START); + return true; + } + + @Override + public void onFragmentInteraction(Uri uri) { + + } +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/NoteActivity.java b/app/src/main/java/com/pkmnapps/activitydo/NoteActivity.java new file mode 100644 index 0000000..4746cfa --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/NoteActivity.java @@ -0,0 +1,77 @@ +package com.pkmnapps.activitydo; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.os.PersistableBundle; +import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.EditText; + +import com.pkmnapps.activitydo.databasehelpers.DBHelperText; +import com.pkmnapps.activitydo.dataclasses.SimpleTextWidget; + +public class NoteActivity extends AppCompatActivity { + String uid,head,body; + EditText headE,bodyE; + Intent data; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_note); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + uid = getIntent().getStringExtra("uid"); + head = getIntent().getStringExtra("head"); + body = getIntent().getStringExtra("body"); + data = getIntent(); + + headE = (EditText)findViewById(R.id.note_head_editText); + bodyE = (EditText)findViewById(R.id.note_body_editText); + headE.setText(head); + bodyE.setText(body); + + setResult(Activity.RESULT_OK,data); + + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_task_activity, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + // app icon in action bar clicked; goto parent activity. + this.finish(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + @Override + protected void onPause() { + head = headE.getText().toString(); + body = bodyE.getText().toString(); + DBHelperText dbHelperText = new DBHelperText(NoteActivity.this); + //save to database + dbHelperText.updateHeadBody(uid, head, body); + + super.onPause(); + } + + +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/TaskActivity.java b/app/src/main/java/com/pkmnapps/activitydo/TaskActivity.java new file mode 100644 index 0000000..e48f14c --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/TaskActivity.java @@ -0,0 +1,573 @@ +package com.pkmnapps.activitydo; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.Rect; +import android.net.Uri; +import android.os.Bundle; +import android.os.Environment; +import android.provider.MediaStore; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.FileProvider; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.DefaultItemAnimator; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.Toolbar; +import android.support.v7.widget.helper.ItemTouchHelper; +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.widget.Button; +import android.widget.EditText; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.bumptech.glide.Glide; +import com.flipboard.bottomsheet.BottomSheetLayout; +import com.flipboard.bottomsheet.commons.ImagePickerSheetView; +import com.flipboard.bottomsheet.commons.MenuSheetView; +import com.pkmnapps.activitydo.adapters.ActivityContentAdapter; +import com.pkmnapps.activitydo.custominterfaces.TaskActivityInterface; +import com.pkmnapps.activitydo.databasehelpers.DBHelper; +import com.pkmnapps.activitydo.databasehelpers.DBHelperImage; +import com.pkmnapps.activitydo.databasehelpers.DBHelperList; +import com.pkmnapps.activitydo.databasehelpers.DBHelperListItems; +import com.pkmnapps.activitydo.databasehelpers.DBHelperText; +import com.pkmnapps.activitydo.databasehelpers.DBHelperWidgets; +import com.pkmnapps.activitydo.dataclasses.ActivityData; +import com.pkmnapps.activitydo.dataclasses.ImageWidget; +import com.pkmnapps.activitydo.dataclasses.ListWidget; +import com.pkmnapps.activitydo.dataclasses.SimpleTextWidget; +import com.pkmnapps.activitydo.dataclasses.Widget; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import static com.pkmnapps.activitydo.MConstants.REQUEST_LOAD_IMAGE; +import static com.pkmnapps.activitydo.MConstants.REQUEST_STORAGE; + +public class TaskActivity extends AppCompatActivity implements TaskActivityInterface{ + public ActivityData activityData; + BottomSheetLayout bottomSheetLayout; + View currentSheetView; + RecyclerView recyclerView; + ActivityContentAdapter activityContentAdapter; + List widgets; + Uri cameraImageUri = null; + ImageView selectedImage; + String tempUid; + DBHelperWidgets dbHelperWidgets; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Bundle bundle = getIntent().getBundleExtra("activityData"); + activityData = new ActivityData(bundle.getString("id"),bundle.getString("name"),bundle.getString("color"),bundle.getBoolean("pinned"),0); + + setTheme(colorTheme(activityData.getColor())); + + setContentView(R.layout.activity_task); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + toolbar.setTitle(activityData.getName()); + setSupportActionBar(toolbar); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + dbHelperWidgets = new DBHelperWidgets(TaskActivity.this); + + bottomSheetLayout = (BottomSheetLayout)findViewById(R.id.bottomsheet); + selectedImage =(ImageView)findViewById(R.id.imageView); + setUpRecyclerView(); + initialiseRecyclerViewData(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_task_activity, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + // app icon in action bar clicked; goto parent activity. + this.finish(); + return true; + case R.id.action_add_widget: + displayWidgetChoser(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + @Override + public void onBackPressed() { + if(bottomSheetLayout.isSheetShowing()){ + bottomSheetLayout.dismissSheet(); + } + else + super.onBackPressed(); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + Log.w("n",String.valueOf(requestCode)); + Log.w("n",String.valueOf(resultCode)); + if (resultCode == Activity.RESULT_OK) { + Uri selectedImage = null; + if (requestCode == REQUEST_LOAD_IMAGE && data != null) { //image from gallery + selectedImage = data.getData(); + if (selectedImage != null) { + addImageWidget(selectedImage); + } else { + genericError(); + } + } else if (requestCode == MConstants.REQUEST_IMAGE_CAPTURE) {//image from camera + // Do something with imagePath + selectedImage = cameraImageUri; + if (selectedImage != null) { + addImageWidget(selectedImage); + } else { + genericError(); + } + } else if(requestCode == MConstants.REQUEST_NEW_NOTE && data != null){ + + //save note + String uid = data.getStringExtra("uid"); + int index = data.getIntExtra("index",-1000); + DBHelperText dbHelperText = new DBHelperText(TaskActivity.this); + + //update note + SimpleTextWidget s; + if(index==-1000) {//for new note + s = dbHelperText.getTextWidget(uid); + if(s!=null) + widgets.add(0,new Widget(MConstants.textW,s,uid,0)); + } + else{//for edited note + s = dbHelperText.getTextWidget(uid); + if(s!=null) { + widgets.set(index, new Widget(MConstants.textW, s,uid,index));//replacing widget + }else { + widgets.remove(index);//delete as it doesnt exist + } + } + //update UI + dbHelperWidgets.updateAllWidgetSortOrders(widgets); + activityContentAdapter.notifyDataSetChanged(); + + } else if(requestCode == MConstants.REQUEST_NEW_LIST && data != null){ + DBHelperList dbHelperList = new DBHelperList(TaskActivity.this); + String lid = data.getStringExtra("lid"); + ListWidget listWidget = dbHelperList.getListWidget(lid); + + int index = data.getIntExtra("index",-1000); + if(index==-1000) {//new list + widgets.add(0,new Widget(MConstants.listW, listWidget,lid,0)); + } + else {//edit list + widgets.set(index, new Widget(MConstants.listW, listWidget,lid,index)); + } + //update ui + dbHelperWidgets.updateAllWidgetSortOrders(widgets); + activityContentAdapter.notifyDataSetChanged(); + } + } + } + + public void displayWidgetChoser(){ + //show bottomsheet + MenuSheetView menuSheetView = + new MenuSheetView(TaskActivity.this, MenuSheetView.MenuType.LIST, "Chose widget", new MenuSheetView.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + if (bottomSheetLayout.isSheetShowing()) { + bottomSheetLayout.dismissSheet(); + } + switch (item.getItemId()){ + case R.id.item_note: + createNote(); + return true; + case R.id.item_list: + createList(); + return true; + case R.id.item_image: + if (checkNeedsPermission()) { + requestStoragePermission(); + } else { + createImageSheet(); + } + return true; + } + + return true; + } + }); + menuSheetView.inflateMenu(R.menu.widget_menu); + bottomSheetLayout.showWithSheetView(menuSheetView); + } + + public void initialiseRecyclerViewData(){ + + DBHelperWidgets dbHelperWidgets = new DBHelperWidgets(TaskActivity.this); + + //add all simpleTextWidgets + DBHelperText dbHelperText = new DBHelperText(TaskActivity.this); + for (SimpleTextWidget o :dbHelperText.getAllTextsAsList(activityData.getId())) { + if(o!=null) { + widgets.add(new Widget(MConstants.textW,o,o.getUid(),dbHelperWidgets.getSortValue(o.getUid()))); + } + } + //add all lists + DBHelperList dbHelperList = new DBHelperList(TaskActivity.this); + for(ListWidget o:dbHelperList.getAllListAsList(activityData.getId())){ + if(o!=null) { + widgets.add(new Widget(MConstants.listW, o,o.getUid(),dbHelperWidgets.getSortValue(o.getUid()))); + } + } + + //add all image widgets + DBHelperImage dbHelperImage = new DBHelperImage(TaskActivity.this); + for(ImageWidget o:dbHelperImage.getAllImagesAsList(activityData.getId())){ + if(o!=null) + widgets.add(new Widget(MConstants.imageW,o,o.getUid(),dbHelperWidgets.getSortValue(o.getUid()))); + } + sortWidgetList(); + //sort the list + activityContentAdapter.notifyDataSetChanged(); + } + public void sortWidgetList(){ + Boolean swap; + for(int i = 0;iwidgets.get(j+1).getSortOrder()){ + Widget temp = widgets.get(j); + widgets.set(j,widgets.get(j+1)); + widgets.set(j+1,temp); + swap = true; + } + } + if(!swap) + break; + } + } + public void setUpRecyclerView(){ + recyclerView = (RecyclerView)findViewById(R.id.recycler_view); + RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(TaskActivity.this,LinearLayoutManager.VERTICAL,false); + recyclerView.setLayoutManager(mLayoutManager); + recyclerView.setItemAnimator(new DefaultItemAnimator()); + recyclerView.setNestedScrollingEnabled(false); + ItemTouchHelper.Callback itcallback = new ItemTouchHelper.Callback() {//for sorting + @Override + public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { + return makeFlag(ItemTouchHelper.ACTION_STATE_DRAG, + ItemTouchHelper.DOWN | ItemTouchHelper.UP); + } + + @Override + public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { + // get the viewHolder's and target's positions in your adapter data, swap them + Collections.swap(widgets, viewHolder.getAdapterPosition(), target.getAdapterPosition()); +// widgets.get(viewHolder.getAdapterPosition()).setSortOrder(target.getAdapterPosition()); +// widgets.get(target.getAdapterPosition()).setSortOrder(viewHolder.getAdapterPosition()); + //s + // and notify the adapter that its dataset has changed + activityContentAdapter.notifyItemMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition()); + return true; + } + + @Override + public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { + + } + + @Override + public void onMoved(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, int fromPos, RecyclerView.ViewHolder target, int toPos, int x, int y) { + super.onMoved(recyclerView, viewHolder, fromPos, target, toPos, x, y); + dbHelperWidgets.updateAllWidgetSortOrders(widgets); + } + }; + ItemTouchHelper.Callback itcallbackswipe = new ItemTouchHelper.Callback() { + @Override + public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { + return makeFlag(ItemTouchHelper.ACTION_STATE_SWIPE,ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT); + + } + + @Override + public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { + return false; + } + + @Override + public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { + deleteWidget(widgets.get(viewHolder.getAdapterPosition())); + } + }; + ItemTouchHelper itemTouchHelperSwipe = new ItemTouchHelper(itcallbackswipe); + ItemTouchHelper itemTouchHelper = new ItemTouchHelper(itcallback); + itemTouchHelper.attachToRecyclerView(recyclerView); + itemTouchHelperSwipe.attachToRecyclerView(recyclerView); + + widgets = new ArrayList<>(); + activityContentAdapter = new ActivityContentAdapter(widgets,TaskActivity.this); + + recyclerView.setAdapter(activityContentAdapter); + } + + public int colorTheme(String colorName){ + switch (colorName){ + case "#3f79b4": + return R.style.AppTheme_NoActionBar_blue; + case "#50933c": + return R.style.AppTheme_NoActionBar_green; + case "#afaf41": + return R.style.AppTheme_NoActionBar_yellow; + case "#af4541": + return R.style.AppTheme_NoActionBar_red; + case "#673a9e": + return R.style.AppTheme_NoActionBar_purple; + + default: + return R.style.AppTheme_NoActionBar; + + } + } + + public void createNote() { + Intent intent = new Intent(TaskActivity.this,NoteActivity.class); + String uid = String.valueOf(System.currentTimeMillis()); + intent.putExtra("uid",uid); + new DBHelperText(TaskActivity.this).insertText(uid,activityData.getId(),"",""); + startActivityForResult(intent,MConstants.REQUEST_NEW_NOTE); + } + public void createList() { + Intent intent = new Intent(TaskActivity.this,ListActivity.class); + String lid = String.valueOf(System.currentTimeMillis()); + intent.putExtra("lid",lid); + intent.putExtra("aid",activityData.getId()); + //create a list in database + new DBHelperList(TaskActivity.this).insertList(lid,activityData.getId(),""); + startActivityForResult(intent,MConstants.REQUEST_NEW_LIST); + } + public void createImageSheet() { + ImagePickerSheetView sheetView = new ImagePickerSheetView.Builder(this) + .setMaxItems(30) + .setShowCameraOption(createCameraIntent() != null) + .setShowPickerOption(createPickIntent() != null) + .setImageProvider(new ImagePickerSheetView.ImageProvider() { + @Override + public void onProvideImage(ImageView imageView, Uri imageUri, int size) {//feeds image to sheet views + Glide.with(TaskActivity.this) + .load(imageUri) + .into(imageView); + } + }) + .setOnTileSelectedListener(new ImagePickerSheetView.OnTileSelectedListener() { + @Override + public void onTileSelected(ImagePickerSheetView.ImagePickerTile selectedTile) { + bottomSheetLayout.dismissSheet(); + tempUid = String.valueOf(System.currentTimeMillis());//do not remove this + if (selectedTile.isCameraTile()) { + dispatchTakePictureIntent(); + } else if (selectedTile.isPickerTile()) { + startActivityForResult(createPickIntent(), REQUEST_LOAD_IMAGE); + } else if (selectedTile.isImageTile()) { + if(selectedTile.getImageUri()!=null) + addImageWidget(selectedTile.getImageUri()); + } else { + genericError(); + } + } + }) + .setTitle("Choose an image...") + .create(); + + bottomSheetLayout.showWithSheetView(sheetView); + } + + private boolean checkNeedsPermission() { + return ActivityCompat.checkSelfPermission(TaskActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED; + } + + private void requestStoragePermission() { + if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE); + } else { + // Eh, prompt anyway + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE); + } + } + @Override + + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + if (requestCode == REQUEST_STORAGE) { + if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + createImageSheet(); + } else { + // Permission denied + Toast.makeText(this, "Permission denied :/", Toast.LENGTH_SHORT).show(); + } + } else { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + } + } + + private void addImageWidget(Uri selectedImageUri) { + //save image uri to image database + ImageWidget imageWidget = new ImageWidget(tempUid,activityData.getId(),selectedImageUri.toString()); + DBHelperImage dbHelperImage = new DBHelperImage(TaskActivity.this); + dbHelperImage.insertImage(imageWidget); + + //show in widgets + widgets.add(0,new Widget(MConstants.imageW,imageWidget,tempUid,0)); + //update UI + dbHelperWidgets.updateAllWidgetSortOrders(widgets); + activityContentAdapter.notifyDataSetChanged(); + } + + @Nullable + private Intent createPickIntent() { + Intent picImageIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + if (picImageIntent.resolveActivity(getPackageManager()) != null) { + return picImageIntent; + } else { + return null; + } + } + @Nullable + private Intent createCameraIntent() { + Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + if (takePictureIntent.resolveActivity(getPackageManager()) != null) { + return takePictureIntent; + } else { + return null; + } + } + + private void dispatchTakePictureIntent() { + Intent takePictureIntent = createCameraIntent(); + // Ensure that there's a camera activity to handle the intent + if (takePictureIntent != null) { + try { + File imageFile = createImageFile(); + // Save a file: path for use with ACTION_VIEW intents + cameraImageUri = FileProvider.getUriForFile(TaskActivity.this,"com.pkmnapps.activitydo.fileprovider",imageFile); + + takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, cameraImageUri); + startActivityForResult(takePictureIntent, MConstants.REQUEST_IMAGE_CAPTURE); + } catch (Exception e) { + // Error occurred while creating the File + genericError("Could not create imageFile for camera"); + } + } + } + + private void genericError() { + genericError(null); + } + + private void genericError(String message) { + Toast.makeText(this, message == null ? "Something went wrong." : message, Toast.LENGTH_SHORT).show(); + } + + private File createImageFile() { + // Create an image file name + String imageFileName = tempUid + ".jpg"; + return new File(this.getExternalFilesDir(Environment.DIRECTORY_PICTURES),imageFileName); + } + + + @SuppressLint("ClickableViewAccessibility") + public void createAudio() { + currentSheetView = LayoutInflater.from(TaskActivity.this).inflate(R.layout.audio_record_view,bottomSheetLayout,false); + bottomSheetLayout.showWithSheetView(currentSheetView); + final ImageButton imageButton = (ImageButton)currentSheetView.findViewById(R.id.recButton); + final TextView textView = (TextView)currentSheetView.findViewById(R.id.recText); + + } + + + @Override + public void editWidget(final Widget widget) { + + switch (widget.getType()) { + case MConstants.textW: + final SimpleTextWidget simpleTextWidget = (SimpleTextWidget)widget.getObject(); + Intent intent = new Intent(TaskActivity.this,NoteActivity.class); + intent.putExtra("uid",simpleTextWidget.getUid()); + intent.putExtra("head",simpleTextWidget.getHead()); + intent.putExtra("body",simpleTextWidget.getBody()); + intent.putExtra("index",widgets.indexOf(widget)); + startActivityForResult(intent,MConstants.REQUEST_NEW_NOTE); + break; + case MConstants.listW: + final ListWidget listWidget = (ListWidget) widget.getObject(); + Intent intent2 = new Intent(TaskActivity.this,ListActivity.class); + intent2.putExtra("lid",listWidget.getUid()); + intent2.putExtra("head",listWidget.getHead()); + intent2.putExtra("index",widgets.indexOf(widget)); + intent2.putExtra("edit","1"); + startActivityForResult(intent2,MConstants.REQUEST_NEW_LIST); + break; + + } + + + } + + public void deleteWidget(final Widget widget){ + //show dialog + AlertDialog.Builder builder = new AlertDialog.Builder(TaskActivity.this); + builder.setTitle("Delete ?"); + builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + //delete from list + widgets.remove(widget); + activityContentAdapter.notifyDataSetChanged(); + dbHelperWidgets.updateAllWidgetSortOrders(widgets); + //delete rom database + switch (widget.getType()){ + case MConstants.textW: + new DBHelperText(TaskActivity.this).deleteText(((SimpleTextWidget)widget.getObject()).getUid()); + break; + case MConstants.listW: + new DBHelperList(TaskActivity.this).deleteList(((ListWidget)widget.getObject()).getUid()); + break; + case MConstants.imageW: + new DBHelperImage(TaskActivity.this).deleteImage(((ImageWidget)widget.getObject()).getUid()); + break; + case MConstants.audioW: + break; + } + } + }); + builder.setOnCancelListener(new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface dialog) { + activityContentAdapter.notifyDataSetChanged(); + } + }); + builder.show(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/pkmnapps/activitydo/adapters/ActivityAdapter.java b/app/src/main/java/com/pkmnapps/activitydo/adapters/ActivityAdapter.java new file mode 100644 index 0000000..2b3b829 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/adapters/ActivityAdapter.java @@ -0,0 +1,105 @@ +package com.pkmnapps.activitydo.adapters; + + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.ImageButton; +import android.widget.TextView; + +import com.pkmnapps.activitydo.databasehelpers.DBHelper; +import com.pkmnapps.activitydo.R; +import com.pkmnapps.activitydo.TaskActivity; +import com.pkmnapps.activitydo.custominterfaces.HomeFragInterace; +import com.pkmnapps.activitydo.dataclasses.ActivityData; + +import java.util.List; + +public class ActivityAdapter extends RecyclerView.Adapter { + + private List activityDataList; + private HomeFragInterace homeFrag; + public class MyViewHolder extends RecyclerView.ViewHolder { + public TextView name; + public CheckBox pinned; + public ImageButton edit; + public View v; + + public MyViewHolder(View view) { + super(view); + name = (TextView)view.findViewById(R.id.nameTextView); + pinned = (CheckBox)view.findViewById(R.id.pinCheckBox); + v = (View)view.findViewById(R.id.colorView); + edit = (ImageButton)view.findViewById(R.id.edit_button); + } + } + + public ActivityAdapter(List activityDataList,HomeFragInterace homeFrag) { + this.activityDataList = activityDataList; + this.homeFrag = homeFrag; + } + + @NonNull + @Override + public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View itemView = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.recycler_activity_layout, parent, false); + + return new MyViewHolder(itemView); + } + + @Override + public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) { + final ActivityData activityData = activityDataList.get(position); + holder.pinned.setChecked(activityData.getPinned()); + holder.name.setText(activityData.getName()); + holder.v.setBackgroundColor(Color.parseColor(activityData.getColor())); + holder.pinned.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + DBHelper dbHelper = new DBHelper(holder.itemView.getContext()); + if(holder.pinned.isChecked()){ + dbHelper.pinActivity(activityData.getId(),1); + } + else{ + dbHelper.pinActivity(activityData.getId(),0); + } + homeFrag.updatePinnedMenu(); + } + }); + holder.edit.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + homeFrag.displayEditDialog(activityData); + } + }); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //open openActivity and send this data to it + Bundle bundle = new Bundle(); + bundle.putString("name",activityData.getName()); + bundle.putString("id",activityData.getId()); + bundle.putString("color",activityData.getColor()); + bundle.putBoolean("pinned",activityData.getPinned()); + + Intent i = new Intent(holder.itemView.getContext(), TaskActivity.class); + i.putExtra("activityData",bundle); + holder.itemView.getContext().startActivity(i); + } + }); + } + + @Override + public int getItemCount() { + return activityDataList.size(); + } + + +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/adapters/ActivityContentAdapter.java b/app/src/main/java/com/pkmnapps/activitydo/adapters/ActivityContentAdapter.java new file mode 100644 index 0000000..c8ce998 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/adapters/ActivityContentAdapter.java @@ -0,0 +1,159 @@ +package com.pkmnapps.activitydo.adapters; + +import android.content.Intent; +import android.net.Uri; +import android.support.annotation.NonNull; +import android.support.v7.widget.DefaultItemAnimator; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.pkmnapps.activitydo.ImageViewFullscreen; +import com.pkmnapps.activitydo.MConstants; +import com.pkmnapps.activitydo.R; +import com.pkmnapps.activitydo.custominterfaces.TaskActivityInterface; +import com.pkmnapps.activitydo.databasehelpers.DBHelperListItems; +import com.pkmnapps.activitydo.dataclasses.ImageWidget; +import com.pkmnapps.activitydo.dataclasses.ListWidget; +import com.pkmnapps.activitydo.dataclasses.SimpleTextWidget; +import com.pkmnapps.activitydo.dataclasses.Widget; + +import java.util.List; + +public class ActivityContentAdapter extends RecyclerView.Adapter{ + + List widgets; + TaskActivityInterface taskActivityInterface; + public class MyTextViewHolder extends RecyclerView.ViewHolder { + public TextView head,body; + public MyTextViewHolder(View view) { + super(view); + head = (TextView)view.findViewById(R.id.head_textView); + body = (TextView)view.findViewById(R.id.body_textView); + } + } + public class MyListViewHolder extends RecyclerView.ViewHolder { + public TextView head; + public RecyclerView recyclerView; + public MyListViewHolder(View view) { + super(view); + head = (TextView)view.findViewById(R.id.head_textView); + recyclerView = (RecyclerView)view.findViewById(R.id.recycler_view); + } + } + public class MyImageViewHolder extends RecyclerView.ViewHolder { + public ImageView imageView; + public MyImageViewHolder(View view) { + super(view); + imageView = (ImageView)view.findViewById(R.id.widget_imageView); + } + } + public class MyAudioViewHolder extends RecyclerView.ViewHolder { + + public MyAudioViewHolder(View view) { + super(view); + + } + } + + public ActivityContentAdapter(List widgets, TaskActivityInterface taskActivityInterface) { + this.widgets = widgets; + this.taskActivityInterface = taskActivityInterface; + } + + @NonNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View v; + switch (viewType){ + case MConstants.textW: + v = LayoutInflater.from(parent.getContext()).inflate(R.layout.simple_note_view, parent, false); + return new MyTextViewHolder(v); + case MConstants.listW: + v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_list_in_task_view, parent, false); + return new MyListViewHolder(v); + case MConstants.imageW: + v = LayoutInflater.from(parent.getContext()).inflate(R.layout.image_widget_view, parent, false); + return new MyImageViewHolder(v); + case MConstants.audioW: + return null; + default: + return null; + } + } + + @Override + public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) { + int type = getItemViewType(position); + final Object widget = widgets.get(position).getObject(); + if(widget!=null && type!=0){ + switch (type){ + case MConstants.textW: + final SimpleTextWidget t = (SimpleTextWidget)widget; + ((MyTextViewHolder)holder).head.setText(t.getHead()); + ((MyTextViewHolder)holder).body.setText(t.getBody()); + ((MyTextViewHolder)holder).itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + taskActivityInterface.editWidget(widgets.get(holder.getAdapterPosition())); + } + }); + break; + case MConstants.listW: + final ListWidget l = (ListWidget)widget; + ((MyListViewHolder)holder).head.setText(l.getHead()); + RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(((MyListViewHolder)holder).itemView.getContext(),LinearLayoutManager.VERTICAL,false); + ((MyListViewHolder)holder).recyclerView.setLayoutManager(mLayoutManager); + ((MyListViewHolder)holder).recyclerView.setItemAnimator(new DefaultItemAnimator()); + ((MyListViewHolder)holder).recyclerView.setNestedScrollingEnabled(false); + ((MyListViewHolder)holder).recyclerView + .setAdapter(new InViewListAdapter(new DBHelperListItems(((MyListViewHolder)holder).itemView.getContext()) + .get3ListItemsAsList(l.getUid()))); + ((MyListViewHolder)holder).recyclerView.setLayoutFrozen(true); + + ((MyListViewHolder)holder).itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + taskActivityInterface.editWidget(widgets.get(holder.getAdapterPosition())); + } + }); + break; + case MConstants.imageW: + final ImageWidget i = (ImageWidget)widget; + + Glide.with(((MyImageViewHolder)holder).imageView.getContext()) + .load(Uri.parse(i.getImageUri())) + .into(((MyImageViewHolder)holder).imageView); + ((MyImageViewHolder)holder).itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //open it in fullscreen + Intent intent = new Intent(((MyImageViewHolder)holder).itemView.getContext(), ImageViewFullscreen.class); + intent.putExtra("image", i.getImageUri()); + ((MyImageViewHolder)holder).itemView.getContext().startActivity(intent); + } + }); + break; + case MConstants.audioW: + break; + } + } + } + + @Override + public int getItemCount() { + return widgets.size(); + } + + @Override + public int getItemViewType(int position) { + return widgets.get(position).getType(); + } + + +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/adapters/ColorThemeAdapter.java b/app/src/main/java/com/pkmnapps/activitydo/adapters/ColorThemeAdapter.java new file mode 100644 index 0000000..20f4ee5 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/adapters/ColorThemeAdapter.java @@ -0,0 +1,56 @@ +package com.pkmnapps.activitydo.adapters; + +import android.graphics.Color; +import android.support.annotation.NonNull; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + + +import com.pkmnapps.activitydo.MConstants; +import com.pkmnapps.activitydo.R; +import com.pkmnapps.activitydo.custominterfaces.HomeFragInterace; + +public class ColorThemeAdapter extends RecyclerView.Adapter { + + HomeFragInterace homeFragInterace; + + public class MyViewHolder extends RecyclerView.ViewHolder { + public MyViewHolder(View view) { + super(view); + } + } + + public ColorThemeAdapter(HomeFragInterace homeFragInterace) { + this.homeFragInterace = homeFragInterace; + } + + @NonNull + @Override + public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View itemView = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.color_circle, parent, false); + + return new MyViewHolder(itemView); + } + + @Override + public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) { + holder.itemView.setBackgroundColor(Color.parseColor(MConstants.colors[holder.getAdapterPosition()])); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + homeFragInterace.changeColorTheme(holder.getAdapterPosition()); + } + }); + } + + @Override + public int getItemCount() { + return MConstants.colors.length; + } + + +} + diff --git a/app/src/main/java/com/pkmnapps/activitydo/adapters/InViewListAdapter.java b/app/src/main/java/com/pkmnapps/activitydo/adapters/InViewListAdapter.java new file mode 100644 index 0000000..31c5a21 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/adapters/InViewListAdapter.java @@ -0,0 +1,59 @@ +package com.pkmnapps.activitydo.adapters; + +import android.support.annotation.NonNull; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.ImageButton; +import android.widget.TextView; + +import com.pkmnapps.activitydo.R; +import com.pkmnapps.activitydo.custominterfaces.ListActivityInterface; +import com.pkmnapps.activitydo.dataclasses.ListItem; + +import java.util.List; + +public class InViewListAdapter extends RecyclerView.Adapter { + + private List listItems; + + public class MyViewHolder extends RecyclerView.ViewHolder { + public CheckBox checkBox; + public TextView textView; + public MyViewHolder(View view) { + super(view); + checkBox = (CheckBox)view.findViewById(R.id.checkBox); + textView = (TextView)view.findViewById(R.id.contentTextView); + } + } + + public InViewListAdapter(List listItems) { + this.listItems = listItems; + } + + @NonNull + @Override + public InViewListAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View itemView = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.recycler_in_view_list_view, parent, false); + + return new InViewListAdapter.MyViewHolder(itemView); + } + + @Override + public void onBindViewHolder(@NonNull final InViewListAdapter.MyViewHolder holder, final int position) { + final ListItem listItem = listItems.get(position); + + holder.checkBox.setChecked(listItem.getChecked()); + holder.textView.setText(listItem.getContent()); + } + + @Override + public int getItemCount() { + return listItems.size(); + } + +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/adapters/ListAdapter.java b/app/src/main/java/com/pkmnapps/activitydo/adapters/ListAdapter.java new file mode 100644 index 0000000..89772aa --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/adapters/ListAdapter.java @@ -0,0 +1,103 @@ +package com.pkmnapps.activitydo.adapters; + +import android.support.annotation.NonNull; +import android.support.v7.widget.RecyclerView; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.Log; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.ImageButton; +import android.widget.TextView; + +import com.pkmnapps.activitydo.R; + +import com.pkmnapps.activitydo.custominterfaces.ListActivityInterface; +import com.pkmnapps.activitydo.databasehelpers.DBHelperList; +import com.pkmnapps.activitydo.databasehelpers.DBHelperListItems; +import com.pkmnapps.activitydo.dataclasses.ListItem; + +import java.util.List; + +public class ListAdapter extends RecyclerView.Adapter { + + private List listItems; + ListActivityInterface listActivityInterface; + + public class MyViewHolder extends RecyclerView.ViewHolder { + public EditText content; + public CheckBox checked; + public ImageButton delete; + public MyViewHolder(View view) { + super(view); + content = (EditText) view.findViewById(R.id.contentEditText); + checked = (CheckBox)view.findViewById(R.id.checkbox); + delete = (ImageButton)view.findViewById(R.id.deleteButton); + } + } + + public ListAdapter(List listItems, ListActivityInterface listActivityInterface) { + this.listItems = listItems; + this.listActivityInterface = listActivityInterface; + } + + @NonNull + @Override + public ListAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View itemView = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.recycler_listitem_layout, parent, false); + + return new ListAdapter.MyViewHolder(itemView); + } + + @Override + public void onBindViewHolder(@NonNull final ListAdapter.MyViewHolder holder, final int position) { + final ListItem listItem = listItems.get(position); + + holder.content.setText(listItem.getContent()); + holder.checked.setChecked(listItem.getChecked()); + holder.checked.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(holder.checked.isChecked()) + listItem.setChecked(true); + else + listItem.setChecked(false); + } + }); + holder.delete.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //remove from database if exists + new DBHelperListItems(holder.itemView.getContext()).deleteListItem(listItem.getUid()); + listItems.remove(listItem); + listActivityInterface.deleteListItem(listItem); + notifyDataSetChanged(); + } + }); + holder.content.setOnFocusChangeListener(new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + if(!hasFocus) { + listItem.setContent(holder.content.getText().toString()); + holder.delete.setVisibility(View.INVISIBLE); + } + else {//gained focus + holder.delete.setVisibility(View.VISIBLE); + } + } + }); + } + + @Override + public int getItemCount() { + return listItems.size(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/pkmnapps/activitydo/contentproviders/ImageProvider.java b/app/src/main/java/com/pkmnapps/activitydo/contentproviders/ImageProvider.java new file mode 100644 index 0000000..a7d0745 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/contentproviders/ImageProvider.java @@ -0,0 +1,131 @@ +package com.pkmnapps.activitydo.contentproviders; + +import android.content.ContentProvider; +import android.content.ContentValues; +import android.database.Cursor; +import android.net.Uri; +import android.os.ParcelFileDescriptor; + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.HashMap; + +public class ImageProvider extends ContentProvider { + + public static final Uri CONTENT_URI = Uri.parse("content://com.pkmnapps.activitydo/"); + + private static final HashMap MIME_TYPES = new HashMap(); + + static { + + MIME_TYPES.put(".jpg", "image/jpeg"); + + MIME_TYPES.put(".jpeg", "image/jpeg"); + + } + + @Override + + public boolean onCreate() { + + try { + + File mFile = new File(getContext().getFilesDir(), "newImage.jpg"); + + if(!mFile.exists()) { + + mFile.createNewFile(); + + } + + getContext().getContentResolver().notifyChange(CONTENT_URI, null); + + return (true); + + } catch (Exception e) { + + e.printStackTrace(); + + return false; + + } + + } + + @Override + + public String getType(Uri uri) { + + String path = uri.toString(); + + for (String extension : MIME_TYPES.keySet()) { + + if (path.endsWith(extension)) { + + return (MIME_TYPES.get(extension)); + + } + + } + + return (null); + + } + + @Override + + public ParcelFileDescriptor openFile(Uri uri, String mode) + + throws FileNotFoundException { + + File f = new File(getContext().getFilesDir(), "newImage.jpg"); + + if (f.exists()) { + + return (ParcelFileDescriptor.open(f, + + ParcelFileDescriptor.MODE_READ_WRITE)); + + } + + throw new FileNotFoundException(uri.getPath()); + + } + + @Override + + public Cursor query(Uri url, String[] projection, String selection, + + String[] selectionArgs, String sort) { + + throw new RuntimeException("Operation not supported"); + + } + + @Override + + public Uri insert(Uri uri, ContentValues initialValues) { + + throw new RuntimeException("Operation not supported"); + + } + + @Override + + public int update(Uri uri, ContentValues values, String where, + + String[] whereArgs) { + + throw new RuntimeException("Operation not supported"); + + } + + @Override + + public int delete(Uri uri, String where, String[] whereArgs) { + + throw new RuntimeException("Operation not supported"); + + } + +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/custominterfaces/HomeFragInterace.java b/app/src/main/java/com/pkmnapps/activitydo/custominterfaces/HomeFragInterace.java new file mode 100644 index 0000000..37609f6 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/custominterfaces/HomeFragInterace.java @@ -0,0 +1,11 @@ +package com.pkmnapps.activitydo.custominterfaces; + +import com.pkmnapps.activitydo.dataclasses.ActivityData; + +public interface HomeFragInterace { + + void displayEditDialog(final ActivityData activityData); + void displayDeleteDialog(final ActivityData activityData); + void changeColorTheme(int pos); + void updatePinnedMenu(); +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/custominterfaces/ListActivityInterface.java b/app/src/main/java/com/pkmnapps/activitydo/custominterfaces/ListActivityInterface.java new file mode 100644 index 0000000..ce41523 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/custominterfaces/ListActivityInterface.java @@ -0,0 +1,8 @@ +package com.pkmnapps.activitydo.custominterfaces; + +import com.pkmnapps.activitydo.dataclasses.ListItem; + +public interface ListActivityInterface { + void deleteListItem(ListItem listItem); + void newListItem(); +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/custominterfaces/TaskActivityInterface.java b/app/src/main/java/com/pkmnapps/activitydo/custominterfaces/TaskActivityInterface.java new file mode 100644 index 0000000..c73be00 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/custominterfaces/TaskActivityInterface.java @@ -0,0 +1,9 @@ +package com.pkmnapps.activitydo.custominterfaces; + +import com.pkmnapps.activitydo.dataclasses.Widget; + +public interface TaskActivityInterface { + + void editWidget(Widget widget); + void deleteWidget(Widget widget); +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelper.java b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelper.java new file mode 100644 index 0000000..4557e12 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelper.java @@ -0,0 +1,152 @@ +package com.pkmnapps.activitydo.databasehelpers; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +import com.pkmnapps.activitydo.dataclasses.ActivityData; +import com.pkmnapps.activitydo.dataclasses.ListWidget; + +import java.util.ArrayList; +import java.util.List; + +public class DBHelper extends SQLiteOpenHelper { + public static final String DATABASE_NAME = "activity.db"; + + + public static final String HOME_TABLE_NAME = "home"; + + public static final String HOME_COLUMN_ID = "id"; + public static final String HOME_COLUMN_NAME = "name"; + public static final String HOME_COLUMN_COLOR = "color"; + public static final String HOME_COLUMN_PINNED = "pinned"; + public static final String HOME_COLUMN_SORT = "sort"; + Context context; + public DBHelper(Context context) { + super(context, DATABASE_NAME , null, 1); + this.context = context; + } + + @Override + public void onCreate(SQLiteDatabase db) { + // TODO Auto-generated method stub + db.execSQL( + "create table "+HOME_TABLE_NAME + + " (id integer primary key, name text, color text, pinned integer, sort integer) " + ); + } + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + // TODO Auto-generated method stub + db.execSQL("DROP TABLE IF EXISTS pinnedevents"); + onCreate(db); + } + + public boolean insertActivity (String id, String name, String descp, String color, String image, int pinned, int sort) { + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_ID, id); + contentValues.put(HOME_COLUMN_NAME, name); + contentValues.put(HOME_COLUMN_COLOR, color); + contentValues.put(HOME_COLUMN_PINNED, pinned); + contentValues.put(HOME_COLUMN_SORT, sort); + db.insert(HOME_TABLE_NAME, null, contentValues); + return true; + } + public boolean insertActivity (ActivityData activityData) { + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_ID, activityData.getId()); + contentValues.put(HOME_COLUMN_NAME, activityData.getName()); + contentValues.put(HOME_COLUMN_COLOR, activityData.getColor()); + contentValues.put(HOME_COLUMN_PINNED, activityData.getPinned()); + contentValues.put(HOME_COLUMN_SORT, activityData.getSortOrder()); + db.insert(HOME_TABLE_NAME, null, contentValues); + return true; + } + + public int deleteActivity(String id){ + //delete stuff from all databases + new DBHelperText(context).deleteAllTexts(id); + new DBHelperImage(context).deleteAllImages(id);//also deletes files in storage + new DBHelperList(context).deleteAllLists(id);//also deletes from list-items database + + SQLiteDatabase db = this.getWritableDatabase(); + return db.delete(HOME_TABLE_NAME, + "id = ? ", + new String[] { id }); + } + public List getAllActivitiesAsList(){ + List activityDataList = new ArrayList<>(); + + SQLiteDatabase db = this.getReadableDatabase(); + Cursor res = db.rawQuery( "select * from "+HOME_TABLE_NAME, null ); + res.moveToFirst(); + + ActivityData a; + while(!res.isAfterLast()){ + int sort = res.getInt(res.getColumnIndex(HOME_COLUMN_SORT)); + a = new ActivityData(res.getString(res.getColumnIndex(HOME_COLUMN_ID)), + res.getString(res.getColumnIndex(HOME_COLUMN_NAME)), + res.getString(res.getColumnIndex(HOME_COLUMN_COLOR)), + res.getInt(res.getColumnIndex(HOME_COLUMN_PINNED)) == 1, + sort); + activityDataList.add(0,a); + res.moveToNext(); + } + //sorting this list + Boolean swap; + for(int i=0;iactivityDataList.get(j+1).getSortOrder()){ + swap = true; + ActivityData temp = activityDataList.get(j); + activityDataList.set(j,activityDataList.get(j+1)); + activityDataList.set(j+1,temp); + } + } + if(!swap) + break; + } + res.close(); + return activityDataList; + } + public void pinActivity(String id,int bool1or0){ + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put("pinned",bool1or0); + db.update(HOME_TABLE_NAME,contentValues,"id = ?",new String[]{id}); + } + public void updateActivity(String id ,String name, String descp, String color, String image, int pinned){ + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_NAME, name); + contentValues.put(HOME_COLUMN_COLOR, color); + contentValues.put(HOME_COLUMN_PINNED, pinned); + db.update(HOME_TABLE_NAME,contentValues,"id = ?", new String[]{id}); + } + public void updateActivity(ActivityData activityData){ + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_NAME, activityData.getName()); + contentValues.put(HOME_COLUMN_COLOR, activityData.getColor()); + contentValues.put(HOME_COLUMN_PINNED, activityData.getPinned()); + db.update(HOME_TABLE_NAME,contentValues,"id = ?", new String[]{activityData.getId()}); + } + public void updateSort(String id, int sort){ + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_SORT, sort); + db.update(HOME_TABLE_NAME,contentValues,"id = ?", new String[]{id}); + } + public void updateAllSortOrders(List activityDataList){ + SQLiteDatabase db = this.getWritableDatabase(); + for(ActivityData a:activityDataList){ + updateSort(a.getId(),activityDataList.indexOf(a)); + } + } + +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperImage.java b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperImage.java new file mode 100644 index 0000000..6129fec --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperImage.java @@ -0,0 +1,116 @@ +package com.pkmnapps.activitydo.databasehelpers; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.net.Uri; +import android.os.Environment; + +import com.bumptech.glide.Glide; +import com.pkmnapps.activitydo.TaskActivity; +import com.pkmnapps.activitydo.dataclasses.ImageWidget; +import com.pkmnapps.activitydo.dataclasses.SimpleTextWidget; + +import java.io.File; +import java.io.FileInputStream; +import java.util.ArrayList; +import java.util.List; + +public class DBHelperImage extends SQLiteOpenHelper { + public static final String DATABASE_NAME = "image.db"; + + public static final String HOME_TABLE_NAME = "image"; + + public static final String HOME_COLUMN_ID = "id"; + public static final String HOME_COLUMN_AID = "aid";//activityid + public static final String HOME_COLUMN_UID = "uid";//uniqueid + public static final String HOME_COLUMN_URI = "uri"; + Context context; + public DBHelperImage(Context context) { + super(context, DATABASE_NAME , null, 1); + this.context = context; + } + + @Override + public void onCreate(SQLiteDatabase db) { + // TODO Auto-generated method stub + db.execSQL( + "create table "+HOME_TABLE_NAME + + " (id integer primary key, aid text, uid text, uri text) " + ); + } + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + // TODO Auto-generated method stub + db.execSQL("DROP TABLE IF EXISTS image"); + onCreate(db); + } + + public boolean insertImage (String uid, String aid, String uri) { + insertWidgetForSort(uid); + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_AID, aid); + contentValues.put(HOME_COLUMN_UID, uid); + contentValues.put(HOME_COLUMN_URI, uri); + db.insert(HOME_TABLE_NAME, null, contentValues); + return true; + } + public boolean insertImage (ImageWidget imageWidget) { + insertWidgetForSort(imageWidget.getUid()); + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_AID, imageWidget.getAid()); + contentValues.put(HOME_COLUMN_UID, imageWidget.getUid()); + contentValues.put(HOME_COLUMN_URI, imageWidget.getImageUri()); + db.insert(HOME_TABLE_NAME, null, contentValues); + return true; + } + + public int deleteImage(String uid){ + deleteWidgetinSort(uid); + File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES),(uid+".jpg")); + if(file.exists()) + file.delete(); + SQLiteDatabase db = this.getWritableDatabase(); + return db.delete(HOME_TABLE_NAME, + "uid = ? ", + new String[] { uid }); + } + + public void deleteAllImages(String aid){ + for (ImageWidget i:getAllImagesAsList(aid)){ + deleteImage(i.getUid()); + } + } + + public List getAllImagesAsList(String aid){ + List imageWidgets = new ArrayList<>(); + + SQLiteDatabase db = this.getReadableDatabase(); + Cursor res = db.rawQuery( "select * from "+HOME_TABLE_NAME +" where aid=?", new String[]{aid}); + res.moveToFirst(); + + ImageWidget a; + while(!res.isAfterLast()){ + a = new ImageWidget(res.getString(res.getColumnIndex(HOME_COLUMN_UID)), + res.getString(res.getColumnIndex(HOME_COLUMN_AID)), + res.getString(res.getColumnIndex(HOME_COLUMN_URI))); + + imageWidgets.add(a); + res.moveToNext(); + } + res.close(); + return imageWidgets; + } + + private void insertWidgetForSort(String uid){//call this in every insert method + new DBHelperWidgets(context).insertWidget(uid,0); + } + private void deleteWidgetinSort(String uid){//call this in every delete method + new DBHelperWidgets(context).deleteWidget(uid); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperList.java b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperList.java new file mode 100644 index 0000000..6a3515d --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperList.java @@ -0,0 +1,133 @@ +package com.pkmnapps.activitydo.databasehelpers; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.util.Log; + +import com.pkmnapps.activitydo.dataclasses.ListWidget; + +import java.util.ArrayList; +import java.util.List; + +public class DBHelperList extends SQLiteOpenHelper { + public static final String DATABASE_NAME = "list.db"; + + public static final String HOME_TABLE_NAME = "list"; + + public static final String HOME_COLUMN_ID = "id"; + public static final String HOME_COLUMN_AID = "aid";//activityid + public static final String HOME_COLUMN_UID = "uid";//uniqueid + public static final String HOME_COLUMN_HEAD = "head"; + + Context context; + + public DBHelperList(Context context) { + super(context, DATABASE_NAME , null, 1); + this.context = context; + } + + @Override + public void onCreate(SQLiteDatabase db) { + // TODO Auto-generated method stub + db.execSQL( + "create table "+HOME_TABLE_NAME + + " (id integer primary key, aid text, uid text, head text) " + ); + } + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + // TODO Auto-generated method stub + db.execSQL("DROP TABLE IF EXISTS list"); + onCreate(db); + } + + public boolean insertList (String uid, String aid, String head) { + insertWidgetForSort(uid); + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_AID, aid); + contentValues.put(HOME_COLUMN_UID, uid); + contentValues.put(HOME_COLUMN_HEAD, head); + db.insert(HOME_TABLE_NAME, null, contentValues); + return true; + } + public boolean insertList (ListWidget listWidget) { + insertWidgetForSort(listWidget.getUid()); + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_AID, listWidget.getAid()); + contentValues.put(HOME_COLUMN_UID, listWidget.getUid()); + contentValues.put(HOME_COLUMN_HEAD, listWidget.getHead()); + db.insert(HOME_TABLE_NAME, null, contentValues); + return true; + } + + public int deleteList(String uid){ + deleteWidgetinSort(uid); + //also delete from second database + new DBHelperListItems(context).deleteAllListItem(uid); + SQLiteDatabase db = this.getWritableDatabase(); + return db.delete(HOME_TABLE_NAME, + "uid = ? ", + new String[] { uid }); + } + public void deleteAllLists(String aid){ + for(ListWidget l:getAllListAsList(aid)){ + deleteList(l.getUid()); + } + } + + public ListWidget getListWidget(String lid){ + ListWidget listWidget; + SQLiteDatabase db = this.getReadableDatabase(); + Cursor res = db.rawQuery( "select * from "+HOME_TABLE_NAME +" where uid=?", new String[]{lid}); + res.moveToFirst(); + listWidget = new ListWidget(res.getString(res.getColumnIndex(HOME_COLUMN_UID)), + res.getString(res.getColumnIndex(HOME_COLUMN_AID)), + res.getString(res.getColumnIndex(HOME_COLUMN_HEAD))); + res.close(); + return listWidget; + } + + public List getAllListAsList(String aid){ + List listWidgets = new ArrayList<>(); + + SQLiteDatabase db = this.getReadableDatabase(); + Cursor res = db.rawQuery( "select * from "+HOME_TABLE_NAME +" where aid=?", new String[]{aid}); + res.moveToFirst(); + + ListWidget a; + while(!res.isAfterLast()){ + a = new ListWidget(res.getString(res.getColumnIndex(HOME_COLUMN_UID)), + res.getString(res.getColumnIndex(HOME_COLUMN_AID)), + res.getString(res.getColumnIndex(HOME_COLUMN_HEAD))); + listWidgets.add(a); + res.moveToNext(); + } + res.close(); + return listWidgets; + } + + public void updateActivity(ListWidget listWidget){ + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_HEAD, listWidget.getHead()); + db.update(HOME_TABLE_NAME,contentValues,"uid = ?", new String[]{listWidget.getUid()}); + } + public void updateHead(String lid, String head){ + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_HEAD, head); + db.update(HOME_TABLE_NAME,contentValues,"uid = ?", new String[]{lid}); + } + + private void insertWidgetForSort(String uid){//call this in every insert method + new DBHelperWidgets(context).insertWidget(uid,0); + } + private void deleteWidgetinSort(String uid){//call this in every delete method + new DBHelperWidgets(context).deleteWidget(uid); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperListItems.java b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperListItems.java new file mode 100644 index 0000000..275eb33 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperListItems.java @@ -0,0 +1,126 @@ +package com.pkmnapps.activitydo.databasehelpers; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +import com.pkmnapps.activitydo.dataclasses.ListItem; +import com.pkmnapps.activitydo.dataclasses.ListWidget; + +import java.util.ArrayList; +import java.util.List; + +public class DBHelperListItems extends SQLiteOpenHelper { + public static final String DATABASE_NAME = "listitem.db"; + + public static final String HOME_TABLE_NAME = "listitem"; + + public static final String HOME_COLUMN_ID = "id"; + public static final String HOME_COLUMN_UID = "uid";//uniqueid + public static final String HOME_COLUMN_LID = "lid";//listId + public static final String HOME_COLUMN_AID = "aid";//activityid + public static final String HOME_COLUMN_CONTENT = "content"; + public static final String HOME_COLUMN_CHECK = "checker"; + + public DBHelperListItems(Context context) { + super(context, DATABASE_NAME , null, 1); + } + + @Override + public void onCreate(SQLiteDatabase db) { + // TODO Auto-generated method stub + db.execSQL( + "create table "+HOME_TABLE_NAME + + " (id integer primary key, uid text, lid text, content text, checker integer) " + ); + } + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + // TODO Auto-generated method stub + db.execSQL("DROP TABLE IF EXISTS listitem"); + onCreate(db); + } + + public boolean insertListItem (String uid, String lid, String content, Boolean check) { + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_UID, uid); + contentValues.put(HOME_COLUMN_LID, lid); + contentValues.put(HOME_COLUMN_CONTENT, content); + contentValues.put(HOME_COLUMN_CHECK, check?1:0); + db.insert(HOME_TABLE_NAME, null, contentValues); + return true; + } + public boolean insertListItem (ListItem listItem) { + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_UID, listItem.getUid()); + contentValues.put(HOME_COLUMN_LID, listItem.getLid()); + contentValues.put(HOME_COLUMN_CONTENT, listItem.getContent()); + contentValues.put(HOME_COLUMN_CHECK, listItem.getChecked()?1:0); + db.insert(HOME_TABLE_NAME, null, contentValues); + return true; + } + + public int deleteListItem(String uid){ + SQLiteDatabase db = this.getWritableDatabase(); + return db.delete(HOME_TABLE_NAME, + "uid = ? ", + new String[] { uid }); + } + public int deleteAllListItem(String lid){ + SQLiteDatabase db = this.getWritableDatabase(); + return db.delete(HOME_TABLE_NAME, + "lid = ? ", + new String[] { lid }); + } + + public List getAllListItemsAsList(String lid){ + List listItems = new ArrayList<>(); + + SQLiteDatabase db = this.getReadableDatabase(); + Cursor res = db.rawQuery( "select * from "+HOME_TABLE_NAME +" where lid=?", new String[]{lid}); + res.moveToFirst(); + + ListItem a; + while(!res.isAfterLast()){ + a = new ListItem(res.getString(res.getColumnIndex(HOME_COLUMN_UID)), + res.getString(res.getColumnIndex(HOME_COLUMN_LID)), + res.getString(res.getColumnIndex(HOME_COLUMN_CONTENT)), + res.getInt(res.getColumnIndex(HOME_COLUMN_CHECK)) == 1); + listItems.add(a); + res.moveToNext(); + } + res.close(); + return listItems; + } + public List get3ListItemsAsList(String lid){ + List listItems = new ArrayList<>(); + + SQLiteDatabase db = this.getReadableDatabase(); + Cursor res = db.rawQuery( "select * from "+HOME_TABLE_NAME +" where lid=? LIMIT 3", new String[]{lid}); + res.moveToFirst(); + + ListItem a; + while(!res.isAfterLast()){ + a = new ListItem(res.getString(res.getColumnIndex(HOME_COLUMN_UID)), + res.getString(res.getColumnIndex(HOME_COLUMN_LID)), + res.getString(res.getColumnIndex(HOME_COLUMN_CONTENT)), + res.getInt(res.getColumnIndex(HOME_COLUMN_CHECK)) == 1); + listItems.add(a); + res.moveToNext(); + } + res.close(); + return listItems; + } + + public int updateActivity(ListItem listItem){ + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_CHECK, listItem.getChecked()?1:0); + contentValues.put(HOME_COLUMN_CONTENT, listItem.getContent()); + return db.update(HOME_TABLE_NAME,contentValues,"uid = ?", new String[]{listItem.getUid()}); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperText.java b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperText.java new file mode 100644 index 0000000..2810f56 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperText.java @@ -0,0 +1,136 @@ +package com.pkmnapps.activitydo.databasehelpers; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +import com.pkmnapps.activitydo.dataclasses.SimpleTextWidget; + +import java.util.ArrayList; +import java.util.List; + +public class DBHelperText extends SQLiteOpenHelper{ + public static final String DATABASE_NAME = "text.db"; + + public static final String HOME_TABLE_NAME = "text"; + + public static final String HOME_COLUMN_ID = "id"; + public static final String HOME_COLUMN_AID = "aid";//activityid + public static final String HOME_COLUMN_UID = "uid";//uniqueid + public static final String HOME_COLUMN_HEAD = "head"; + public static final String HOME_COLUMN_BODY = "body"; + + Context context; + public DBHelperText(Context context) { + super(context, DATABASE_NAME , null, 1); + this.context = context; + } + + @Override + public void onCreate(SQLiteDatabase db) { + // TODO Auto-generated method stub + db.execSQL( + "create table "+HOME_TABLE_NAME + + " (id integer primary key, aid text, uid text, head text, body text) " + ); + } + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + // TODO Auto-generated method stub + db.execSQL("DROP TABLE IF EXISTS text"); + onCreate(db); + } + + public boolean insertText (String uid, String aid, String head, String body) { + insertWidgetForSort(uid); + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_AID, aid); + contentValues.put(HOME_COLUMN_UID, uid); + contentValues.put(HOME_COLUMN_HEAD, head); + contentValues.put(HOME_COLUMN_BODY, body); + db.insert(HOME_TABLE_NAME, null, contentValues); + return true; + } + public boolean insertText (SimpleTextWidget simpleTextWidget) { + insertWidgetForSort(simpleTextWidget.getUid()); + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_AID, simpleTextWidget.getAid()); + contentValues.put(HOME_COLUMN_UID, simpleTextWidget.getUid()); + contentValues.put(HOME_COLUMN_HEAD, simpleTextWidget.getHead()); + contentValues.put(HOME_COLUMN_BODY, simpleTextWidget.getBody()); + db.insert(HOME_TABLE_NAME, null, contentValues); + return true; + } + + public int deleteText(String uid){ + deleteWidgetinSort(uid); + SQLiteDatabase db = this.getWritableDatabase(); + return db.delete(HOME_TABLE_NAME, + "uid = ? ", + new String[] { uid }); + } + public int deleteAllTexts(String aid){ + SQLiteDatabase db = this.getWritableDatabase(); + return db.delete(HOME_TABLE_NAME, + "aid = ? ", + new String[] { aid }); + } + public SimpleTextWidget getTextWidget(String uid){ + SimpleTextWidget s; + SQLiteDatabase db = this.getReadableDatabase(); + Cursor res = db.rawQuery( "select * from "+HOME_TABLE_NAME +" where uid=?", new String[]{uid}); + res.moveToFirst(); + s = new SimpleTextWidget(res.getString(res.getColumnIndex(HOME_COLUMN_UID)), + res.getString(res.getColumnIndex(HOME_COLUMN_AID)), + res.getString(res.getColumnIndex(HOME_COLUMN_HEAD)), + res.getString(res.getColumnIndex(HOME_COLUMN_BODY))); + res.close(); + return s; + } + + public List getAllTextsAsList(String aid){ + List simpleTextWidgets = new ArrayList<>(); + + SQLiteDatabase db = this.getReadableDatabase(); + Cursor res = db.rawQuery( "select * from "+HOME_TABLE_NAME +" where aid=?", new String[]{aid}); + res.moveToFirst(); + + SimpleTextWidget a; + while(!res.isAfterLast()){ + a = new SimpleTextWidget(res.getString(res.getColumnIndex(HOME_COLUMN_UID)), + res.getString(res.getColumnIndex(HOME_COLUMN_AID)), + res.getString(res.getColumnIndex(HOME_COLUMN_HEAD)), + res.getString(res.getColumnIndex(HOME_COLUMN_BODY))); + simpleTextWidgets.add(a); + res.moveToNext(); + } + res.close(); + return simpleTextWidgets; + } + + public void updateActivity(SimpleTextWidget simpleTextWidget){ + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_HEAD, simpleTextWidget.getHead()); + contentValues.put(HOME_COLUMN_BODY, simpleTextWidget.getBody()); + db.update(HOME_TABLE_NAME,contentValues,"uid = ?", new String[]{simpleTextWidget.getUid()}); + } + public void updateHeadBody(String uid, String head, String body){ + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_HEAD, head); + contentValues.put(HOME_COLUMN_BODY, body); + db.update(HOME_TABLE_NAME,contentValues,"uid = ?", new String[]{uid}); + } + + private void insertWidgetForSort(String uid){//call this in every insert method + new DBHelperWidgets(context).insertWidget(uid,0); + } + private void deleteWidgetinSort(String uid){//call this in every delete method + new DBHelperWidgets(context).deleteWidget(uid); + } +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperWidgets.java b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperWidgets.java new file mode 100644 index 0000000..53c4f05 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperWidgets.java @@ -0,0 +1,80 @@ +package com.pkmnapps.activitydo.databasehelpers; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +import com.pkmnapps.activitydo.dataclasses.Widget; + +import java.util.ArrayList; +import java.util.List; + +public class DBHelperWidgets extends SQLiteOpenHelper { + public static final String DATABASE_NAME = "widget.db"; + + public static final String HOME_TABLE_NAME = "widget"; + + public static final String HOME_COLUMN_ID = "id"; + public static final String HOME_COLUMN_UID = "uid";//uniqueid + public static final String HOME_COLUMN_SORT = "sort";//order + Context context; + public DBHelperWidgets(Context context) { + super(context, DATABASE_NAME , null, 1); + this.context = context; + } + + @Override + public void onCreate(SQLiteDatabase db) { + // TODO Auto-generated method stub + db.execSQL( + "create table "+HOME_TABLE_NAME + + " (id integer primary key, aid text, uid text, sort integer) " + ); + } + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + // TODO Auto-generated method stub + db.execSQL("DROP TABLE IF EXISTS widget"); + onCreate(db); + } + + public boolean insertWidget (String uid, int sortOrder) { + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_UID, uid); + contentValues.put(HOME_COLUMN_SORT, sortOrder); + db.insert(HOME_TABLE_NAME, null, contentValues); + return true; + } + public int getSortValue(String uid){ + int sort; + SQLiteDatabase db = this.getReadableDatabase(); + Cursor res = db.rawQuery( "select * from "+HOME_TABLE_NAME +" where uid=?", new String[]{uid}); + res.moveToFirst(); + sort = res.getInt(res.getColumnIndex(HOME_COLUMN_SORT)); + res.close(); + return sort; + } + private void updateSort(String uid,int sortOrder){ + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(HOME_COLUMN_SORT, sortOrder); + db.update(HOME_TABLE_NAME,contentValues,"uid = ?", new String[]{uid}); + } + + public int deleteWidget(String uid){//call from all databases when deleting something + SQLiteDatabase db = this.getWritableDatabase(); + return db.delete(HOME_TABLE_NAME, + "uid = ? ", + new String[] { uid }); + } + public void updateAllWidgetSortOrders(List widgets){//call when deleting and when adding new widgets + SQLiteDatabase db = this.getWritableDatabase(); + for(Widget a:widgets){ + updateSort(a.getUid(),widgets.indexOf(a)); + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ActivityData.java b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ActivityData.java new file mode 100644 index 0000000..3cbcf53 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ActivityData.java @@ -0,0 +1,71 @@ +package com.pkmnapps.activitydo.dataclasses; + +import android.graphics.Bitmap; +import android.graphics.Color; + +import java.util.Date; + +public class ActivityData { + private String name,id; + private String color; + private Boolean pinned; + private int sortOrder; + + public ActivityData() { + } + + public ActivityData(String id, String name, String color) { + this.name = name; + this.id = id; + this.color = color; + this.pinned = false; + } + + public ActivityData(String id, String name, String color, Boolean pinned, int sortOrder ) { + this.name = name; + this.id = id; + this.color = color; + this.pinned = pinned; + this.sortOrder = sortOrder; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getColor() { + return color; + } + + public void setColor(String color) { + this.color = color; + } + + public Boolean getPinned() { + return pinned; + } + + public void setPinned(Boolean pinned) { + this.pinned = pinned; + } + + public int getSortOrder() { + return sortOrder; + } + + public void setSortOrder(int sortOrder) { + this.sortOrder = sortOrder; + } +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/dataclasses/AudioWidget.java b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/AudioWidget.java new file mode 100644 index 0000000..b2894c7 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/AudioWidget.java @@ -0,0 +1,21 @@ +package com.pkmnapps.activitydo.dataclasses; + +public class AudioWidget { + String uid,aid; + + public String getUid() { + return uid; + } + + public void setUid(String uid) { + this.uid = uid; + } + + public String getAid() { + return aid; + } + + public void setAid(String aid) { + this.aid = aid; + } +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/dataclasses/DateWidget.java b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/DateWidget.java new file mode 100644 index 0000000..cbc4365 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/DateWidget.java @@ -0,0 +1,21 @@ +package com.pkmnapps.activitydo.dataclasses; + +public class DateWidget { + String uid,aid; + + public String getUid() { + return uid; + } + + public void setUid(String uid) { + this.uid = uid; + } + + public String getAid() { + return aid; + } + + public void setAid(String aid) { + this.aid = aid; + } +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ImageWidget.java b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ImageWidget.java new file mode 100644 index 0000000..25fbe36 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ImageWidget.java @@ -0,0 +1,37 @@ +package com.pkmnapps.activitydo.dataclasses; + +public class ImageWidget { + String uid,aid; + String imageUri; + + + public ImageWidget(String uid, String aid, String imageUri) { + this.uid = uid; + this.aid = aid; + this.imageUri = imageUri; + } + + public String getImageUri() { + return imageUri; + } + + public void setImageUri(String imageUri) { + this.imageUri = imageUri; + } + + public String getUid() { + return uid; + } + + public void setUid(String uid) { + this.uid = uid; + } + + public String getAid() { + return aid; + } + + public void setAid(String aid) { + this.aid = aid; + } +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ListItem.java b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ListItem.java new file mode 100644 index 0000000..e570cbf --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ListItem.java @@ -0,0 +1,45 @@ +package com.pkmnapps.activitydo.dataclasses; + +public class ListItem { + String uid, content, lid; + Boolean checked; + + public ListItem(String uid, String lid, String content, Boolean checked) { + this.uid = uid; + this.lid = lid; + this.content = content; + this.checked = checked; + } + + public String getLid() { + return lid; + } + + public void setLid(String lid) { + this.lid = lid; + } + + public String getUid() { + return uid; + } + + public void setUid(String uid) { + this.uid = uid; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public Boolean getChecked() { + return checked; + } + + public void setChecked(Boolean checked) { + this.checked = checked; + } +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ListWidget.java b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ListWidget.java new file mode 100644 index 0000000..81fc904 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ListWidget.java @@ -0,0 +1,36 @@ +package com.pkmnapps.activitydo.dataclasses; + +public class ListWidget { + String uid,aid;//uid is unique id, lid is list id, aid is activity id + String head; + + public ListWidget(String uid, String aid, String head) { + this.uid = uid; + this.aid = aid; + this.head = head; + } + + public String getUid() { + return uid; + } + + public void setUid(String uid) { + this.uid = uid; + } + + public String getAid() { + return aid; + } + + public void setAid(String aid) { + this.aid = aid; + } + + public String getHead() { + return head; + } + + public void setHead(String head) { + this.head = head; + } +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/dataclasses/SimpleTextWidget.java b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/SimpleTextWidget.java new file mode 100644 index 0000000..0b0a731 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/SimpleTextWidget.java @@ -0,0 +1,45 @@ +package com.pkmnapps.activitydo.dataclasses; + +public class SimpleTextWidget { + String aid,uid; + String head,body; + + public SimpleTextWidget(String uid, String aid, String head, String body) { + this.aid = aid;//aid is of activity + this.uid = uid;//uid is unique aid of this element + this.head = head; + this.body = body; + } + + public String getAid() { + return aid; + } + + public void setAid(String aid) { + this.aid = aid; + } + + public String getHead() { + return head; + } + + public void setHead(String head) { + this.head = head; + } + + public String getBody() { + return body; + } + + public void setBody(String body) { + this.body = body; + } + + public String getUid() { + return uid; + } + + public void setUid(String uid) { + this.uid = uid; + } +} diff --git a/app/src/main/java/com/pkmnapps/activitydo/dataclasses/Widget.java b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/Widget.java new file mode 100644 index 0000000..e53f98f --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/Widget.java @@ -0,0 +1,42 @@ +package com.pkmnapps.activitydo.dataclasses; + +import android.content.Context; + +import com.pkmnapps.activitydo.databasehelpers.DBHelperWidgets; + +public class Widget { + int type; + Object object; + int sortOrder; + String uid; + public Widget(int type, Object object, String uid, int sortOrder) { + this.type = type; + this.object = object; + this.uid = uid; + this.sortOrder = sortOrder; + } + + public int getType() { + return type; + } + + public Object getObject() { + return object; + } + + public int getSortOrder() { + return sortOrder; + } + + public void setSortOrder(int sortOrder) { + this.sortOrder = sortOrder; + } + + public String getUid() { + return uid; + } + + public void setUid(String uid) { + this.uid = uid; + } +} diff --git a/app/src/main/res/drawable/ic_add_box_black_24dp.xml b/app/src/main/res/drawable/ic_add_box_black_24dp.xml new file mode 100644 index 0000000..b2780f1 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_box_black_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_close_black_24dp.xml b/app/src/main/res/drawable/ic_close_black_24dp.xml new file mode 100644 index 0000000..a4c503c --- /dev/null +++ b/app/src/main/res/drawable/ic_close_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_edit_black_24dp.xml b/app/src/main/res/drawable/ic_edit_black_24dp.xml new file mode 100644 index 0000000..93f1e63 --- /dev/null +++ b/app/src/main/res/drawable/ic_edit_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_black_24dp.xml b/app/src/main/res/drawable/ic_home_black_24dp.xml new file mode 100644 index 0000000..70fb291 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_image_black_24dp.xml b/app/src/main/res/drawable/ic_image_black_24dp.xml new file mode 100644 index 0000000..cdb4937 --- /dev/null +++ b/app/src/main/res/drawable/ic_image_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_keyboard_voice_black_24dp.xml b/app/src/main/res/drawable/ic_keyboard_voice_black_24dp.xml new file mode 100644 index 0000000..e4c8cd0 --- /dev/null +++ b/app/src/main/res/drawable/ic_keyboard_voice_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_label_white_24dp.xml b/app/src/main/res/drawable/ic_label_white_24dp.xml new file mode 100644 index 0000000..73b2849 --- /dev/null +++ b/app/src/main/res/drawable/ic_label_white_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_list_black_24dp.xml b/app/src/main/res/drawable/ic_list_black_24dp.xml new file mode 100644 index 0000000..f3010aa --- /dev/null +++ b/app/src/main/res/drawable/ic_list_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mode_edit_black_24dp.xml b/app/src/main/res/drawable/ic_mode_edit_black_24dp.xml new file mode 100644 index 0000000..7a51289 --- /dev/null +++ b/app/src/main/res/drawable/ic_mode_edit_black_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_star_black_24dp.xml b/app/src/main/res/drawable/ic_star_black_24dp.xml new file mode 100644 index 0000000..5bcb347 --- /dev/null +++ b/app/src/main/res/drawable/ic_star_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_star_border_black_24dp.xml b/app/src/main/res/drawable/ic_star_border_black_24dp.xml new file mode 100644 index 0000000..9dbef57 --- /dev/null +++ b/app/src/main/res/drawable/ic_star_border_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/pinselector.xml b/app/src/main/res/drawable/pinselector.xml new file mode 100644 index 0000000..4dc1fe2 --- /dev/null +++ b/app/src/main/res/drawable/pinselector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/side_nav_bar.xml b/app/src/main/res/drawable/side_nav_bar.xml new file mode 100644 index 0000000..b811d09 --- /dev/null +++ b/app/src/main/res/drawable/side_nav_bar.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_image_view_fullscreen.xml b/app/src/main/res/layout/activity_image_view_fullscreen.xml new file mode 100644 index 0000000..acab303 --- /dev/null +++ b/app/src/main/res/layout/activity_image_view_fullscreen.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_list.xml b/app/src/main/res/layout/activity_list.xml new file mode 100644 index 0000000..16212f4 --- /dev/null +++ b/app/src/main/res/layout/activity_list.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..a61d8a6 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/app/src/main/res/layout/activity_note.xml b/app/src/main/res/layout/activity_note.xml new file mode 100644 index 0000000..da0eacf --- /dev/null +++ b/app/src/main/res/layout/activity_note.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_task.xml b/app/src/main/res/layout/activity_task.xml new file mode 100644 index 0000000..8ac2a8f --- /dev/null +++ b/app/src/main/res/layout/activity_task.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml new file mode 100644 index 0000000..1b78829 --- /dev/null +++ b/app/src/main/res/layout/app_bar_main.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/audio_record_view.xml b/app/src/main/res/layout/audio_record_view.xml new file mode 100644 index 0000000..a17671c --- /dev/null +++ b/app/src/main/res/layout/audio_record_view.xml @@ -0,0 +1,25 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/color_circle.xml b/app/src/main/res/layout/color_circle.xml new file mode 100644 index 0000000..395e7d7 --- /dev/null +++ b/app/src/main/res/layout/color_circle.xml @@ -0,0 +1,9 @@ + + diff --git a/app/src/main/res/layout/content_list.xml b/app/src/main/res/layout/content_list.xml new file mode 100644 index 0000000..e080d73 --- /dev/null +++ b/app/src/main/res/layout/content_list.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml new file mode 100644 index 0000000..4a374bf --- /dev/null +++ b/app/src/main/res/layout/content_main.xml @@ -0,0 +1,18 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/content_note.xml b/app/src/main/res/layout/content_note.xml new file mode 100644 index 0000000..8811152 --- /dev/null +++ b/app/src/main/res/layout/content_note.xml @@ -0,0 +1,35 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/content_task.xml b/app/src/main/res/layout/content_task.xml new file mode 100644 index 0000000..2890b53 --- /dev/null +++ b/app/src/main/res/layout/content_task.xml @@ -0,0 +1,28 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml new file mode 100644 index 0000000..0257883 --- /dev/null +++ b/app/src/main/res/layout/fragment_home.xml @@ -0,0 +1,26 @@ + + + + +