From 086ff84b8a3d6bf48783476e92b6865931b314a4 Mon Sep 17 00:00:00 2001 From: khammami Date: Sun, 1 Jul 2018 11:37:28 +0100 Subject: [PATCH] initial commit --- .gitignore | 10 + app/.gitignore | 1 + app/build.gradle | 73 +++++ app/proguard-rules.pro | 21 ++ .../imerolium/ExampleInstrumentedTest.java | 26 ++ app/src/main/AndroidManifest.xml | 42 +++ .../com/khammami/imerolium/AppExecutors.java | 56 ++++ .../com/khammami/imerolium/BaseActivity.java | 40 +++ .../khammami/imerolium/BasicApplication.java | 43 +++ .../imerolium/data/AppPreferences.java | 55 ++++ .../imerolium/data/AppRepository.java | 226 +++++++++++++ .../imerolium/data/db/AppDatabase.java | 42 +++ .../imerolium/data/db/DateConverter.java | 17 + .../khammami/imerolium/data/db/LabelDao.java | 30 ++ .../khammami/imerolium/data/db/PostDao.java | 41 +++ .../imerolium/data/db/SyncPostTaskDao.java | 28 ++ .../data/net/AppNetworkDataSource.java | 32 ++ .../com/khammami/imerolium/model/Label.java | 86 +++++ .../com/khammami/imerolium/model/Post.java | 158 +++++++++ .../imerolium/model/SyncPostTask.java | 73 +++++ .../com/khammami/imerolium/model/User.java | 69 ++++ .../khammami/imerolium/ui/LoginActivity.java | 164 ++++++++++ .../khammami/imerolium/ui/MainActivity.java | 235 ++++++++++++++ .../khammami/imerolium/ui/PostActivity.java | 302 ++++++++++++++++++ .../imerolium/ui/PostAdapterViewHolder.java | 48 +++ .../imerolium/ui/PostClickCallback.java | 6 + .../imerolium/ui/PostListFragment.java | 133 ++++++++ .../khammami/imerolium/ui/PostsAdapter.java | 141 ++++++++ .../ui/settings/SettingsActivity.java | 34 ++ .../ui/settings/SettingsFragment.java | 31 ++ .../imerolium/ui/view/NavHeaderLayout.java | 44 +++ .../imerolium/utilities/AppUtils.java | 146 +++++++++ .../imerolium/utilities/CircleTransform.java | 47 +++ .../utilities/PeopleServiceHelper.java | 41 +++ .../imerolium/utilities/PeoplesApiAsync.java | 38 +++ .../viewmodel/PostListViewModel.java | 69 ++++ .../imerolium/viewmodel/PostViewModel.java | 37 +++ .../viewmodel/PostViewModelFactory.java | 23 ++ app/src/main/res/drawable-v21/ic_app.xml | 71 ++++ .../drawable-v24/ic_launcher_foreground.xml | 34 ++ .../main/res/drawable/background_splash.xml | 10 + .../drawable/ic_access_time_black_24dp.xml | 9 + .../res/drawable/ic_color_lens_black_24dp.xml | 9 + .../res/drawable/ic_date_range_black_24dp.xml | 9 + .../res/drawable/ic_delete_black_24dp.xml | 9 + .../main/res/drawable/ic_edit_white_24dp.xml | 5 + app/src/main/res/drawable/ic_google_logo.xml | 40 +++ .../res/drawable/ic_journal_black_24dp.xml | 7 + .../res/drawable/ic_launcher_background.xml | 170 ++++++++++ .../res/drawable/ic_settings_black_24dp.xml | 9 + app/src/main/res/drawable/side_nav_bar.xml | 9 + app/src/main/res/layout/activity_login.xml | 53 +++ app/src/main/res/layout/activity_main.xml | 25 ++ app/src/main/res/layout/activity_post.xml | 78 +++++ app/src/main/res/layout/activity_settings.xml | 14 + app/src/main/res/layout/app_bar_main.xml | 33 ++ app/src/main/res/layout/content_main.xml | 12 + .../main/res/layout/fragment_post_list.xml | 25 ++ app/src/main/res/layout/nav_header_main.xml | 38 +++ app/src/main/res/layout/post_list_item.xml | 65 ++++ .../main/res/menu/activity_main_drawer.xml | 21 ++ app/src/main/res/menu/main.xml | 10 + .../res/menu/post_activity_bottom_bar.xml | 32 ++ .../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 -> 1105 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 1411 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 3691 bytes app/src/main/res/mipmap-hdpi/ic_splash.png | Bin 0 -> 2578 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 775 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 1103 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2310 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 1303 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 1967 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 5061 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1884 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 2776 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 7670 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 2561 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 4119 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 10815 bytes app/src/main/res/values-v21/styles.xml | 9 + app/src/main/res/values/arrays.xml | 15 + app/src/main/res/values/colors.xml | 76 +++++ app/src/main/res/values/dimens.xml | 19 ++ .../res/values/ic_launcher_background.xml | 4 + app/src/main/res/values/strings.xml | 38 +++ app/src/main/res/values/styles.xml | 48 +++ app/src/main/res/xml/pref_general.xml | 11 + .../khammami/imerolium/ExampleUnitTest.java | 17 + build.gradle | 30 ++ colorpicker/.gitignore | 2 + colorpicker/Android.mk | 25 ++ colorpicker/build.gradle | 34 ++ colorpicker/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54708 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + colorpicker/gradlew | 172 ++++++++++ colorpicker/gradlew.bat | 84 +++++ colorpicker/local.properties | 8 + colorpicker/project.properties | 15 + colorpicker/src/main/AndroidManifest.xml | 18 ++ .../colorpicker/ColorPickerDialog.java | 213 ++++++++++++ .../colorpicker/ColorPickerPalette.java | 194 +++++++++++ .../colorpicker/ColorPickerSwatch.java | 80 +++++ .../colorpicker/ColorStateDrawable.java | 72 +++++ .../colorpicker/HsvColorComparator.java | 61 ++++ .../ic_colorpicker_swatch_selected.png | Bin 0 -> 2414 bytes .../ic_colorpicker_swatch_selected.png | Bin 0 -> 1662 bytes .../ic_colorpicker_swatch_selected.png | Bin 0 -> 3241 bytes .../main/res/drawable/color_picker_swatch.xml | 16 + .../main/res/layout/color_picker_dialog.xml | 45 +++ .../main/res/layout/color_picker_swatch.xml | 28 ++ .../src/main/res/values-af/strings.xml | 22 ++ .../src/main/res/values-am/strings.xml | 22 ++ .../src/main/res/values-ar/strings.xml | 22 ++ .../src/main/res/values-az/strings.xml | 22 ++ .../src/main/res/values-b+sr+Latn/strings.xml | 22 ++ .../src/main/res/values-be/strings.xml | 22 ++ .../src/main/res/values-bg/strings.xml | 22 ++ .../src/main/res/values-bn/strings.xml | 22 ++ .../src/main/res/values-bs/strings.xml | 22 ++ .../src/main/res/values-ca/strings.xml | 22 ++ .../src/main/res/values-cs/strings.xml | 22 ++ .../src/main/res/values-da/strings.xml | 22 ++ .../src/main/res/values-de/strings.xml | 22 ++ .../src/main/res/values-el/strings.xml | 22 ++ .../src/main/res/values-en-rAU/strings.xml | 22 ++ .../src/main/res/values-en-rGB/strings.xml | 22 ++ .../src/main/res/values-en-rIN/strings.xml | 22 ++ .../src/main/res/values-es-rUS/strings.xml | 22 ++ .../src/main/res/values-es/strings.xml | 22 ++ .../src/main/res/values-et/strings.xml | 22 ++ .../src/main/res/values-eu/strings.xml | 22 ++ .../src/main/res/values-fa/strings.xml | 22 ++ .../src/main/res/values-fi/strings.xml | 22 ++ .../src/main/res/values-fr-rCA/strings.xml | 22 ++ .../src/main/res/values-fr/strings.xml | 22 ++ .../src/main/res/values-gl/strings.xml | 22 ++ .../src/main/res/values-gu/strings.xml | 22 ++ .../src/main/res/values-hi/strings.xml | 22 ++ .../src/main/res/values-hr/strings.xml | 22 ++ .../src/main/res/values-hu/strings.xml | 22 ++ .../src/main/res/values-hy/strings.xml | 22 ++ .../src/main/res/values-in/strings.xml | 22 ++ .../src/main/res/values-is/strings.xml | 22 ++ .../src/main/res/values-it/strings.xml | 22 ++ .../src/main/res/values-iw/strings.xml | 22 ++ .../src/main/res/values-ja/strings.xml | 22 ++ .../src/main/res/values-ka/strings.xml | 22 ++ .../src/main/res/values-kk/strings.xml | 22 ++ .../src/main/res/values-km/strings.xml | 22 ++ .../src/main/res/values-kn/strings.xml | 22 ++ .../src/main/res/values-ko/strings.xml | 22 ++ .../src/main/res/values-ky/strings.xml | 22 ++ .../src/main/res/values-lo/strings.xml | 22 ++ .../src/main/res/values-lt/strings.xml | 22 ++ .../src/main/res/values-lv/strings.xml | 22 ++ .../src/main/res/values-mk/strings.xml | 22 ++ .../src/main/res/values-ml/strings.xml | 22 ++ .../src/main/res/values-mn/strings.xml | 22 ++ .../src/main/res/values-mr/strings.xml | 22 ++ .../src/main/res/values-ms/strings.xml | 22 ++ .../src/main/res/values-my/strings.xml | 22 ++ .../src/main/res/values-nb/strings.xml | 22 ++ .../src/main/res/values-ne/strings.xml | 22 ++ .../src/main/res/values-nl/strings.xml | 22 ++ .../src/main/res/values-pa/strings.xml | 22 ++ .../src/main/res/values-pl/strings.xml | 22 ++ .../src/main/res/values-pt-rPT/strings.xml | 22 ++ .../src/main/res/values-pt/strings.xml | 22 ++ .../src/main/res/values-ro/strings.xml | 22 ++ .../src/main/res/values-ru/strings.xml | 22 ++ .../src/main/res/values-si/strings.xml | 22 ++ .../src/main/res/values-sk/strings.xml | 22 ++ .../src/main/res/values-sl/strings.xml | 22 ++ .../src/main/res/values-sq/strings.xml | 22 ++ .../src/main/res/values-sr/strings.xml | 22 ++ .../src/main/res/values-sv/strings.xml | 22 ++ .../src/main/res/values-sw/strings.xml | 22 ++ .../src/main/res/values-ta/strings.xml | 22 ++ .../src/main/res/values-te/strings.xml | 22 ++ .../src/main/res/values-th/strings.xml | 22 ++ .../src/main/res/values-tl/strings.xml | 22 ++ .../src/main/res/values-tr/strings.xml | 22 ++ .../src/main/res/values-uk/strings.xml | 22 ++ .../src/main/res/values-ur/strings.xml | 22 ++ .../src/main/res/values-uz/strings.xml | 22 ++ .../src/main/res/values-vi/strings.xml | 22 ++ .../src/main/res/values-zh-rCN/strings.xml | 22 ++ .../src/main/res/values-zh-rHK/strings.xml | 22 ++ .../src/main/res/values-zh-rTW/strings.xml | 22 ++ .../src/main/res/values-zu/strings.xml | 22 ++ colorpicker/src/main/res/values/dimens.xml | 21 ++ colorpicker/src/main/res/values/strings.xml | 23 ++ gradle.properties | 13 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54708 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 172 ++++++++++ gradlew.bat | 84 +++++ release/app-release.apk | Bin 0 -> 5649885 bytes release/output.json | 1 + settings.gradle | 2 + 202 files changed, 6937 insertions(+) create mode 100644 .gitignore 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/khammami/imerolium/ExampleInstrumentedTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/khammami/imerolium/AppExecutors.java create mode 100644 app/src/main/java/com/khammami/imerolium/BaseActivity.java create mode 100644 app/src/main/java/com/khammami/imerolium/BasicApplication.java create mode 100644 app/src/main/java/com/khammami/imerolium/data/AppPreferences.java create mode 100644 app/src/main/java/com/khammami/imerolium/data/AppRepository.java create mode 100644 app/src/main/java/com/khammami/imerolium/data/db/AppDatabase.java create mode 100644 app/src/main/java/com/khammami/imerolium/data/db/DateConverter.java create mode 100644 app/src/main/java/com/khammami/imerolium/data/db/LabelDao.java create mode 100644 app/src/main/java/com/khammami/imerolium/data/db/PostDao.java create mode 100644 app/src/main/java/com/khammami/imerolium/data/db/SyncPostTaskDao.java create mode 100644 app/src/main/java/com/khammami/imerolium/data/net/AppNetworkDataSource.java create mode 100644 app/src/main/java/com/khammami/imerolium/model/Label.java create mode 100644 app/src/main/java/com/khammami/imerolium/model/Post.java create mode 100644 app/src/main/java/com/khammami/imerolium/model/SyncPostTask.java create mode 100644 app/src/main/java/com/khammami/imerolium/model/User.java create mode 100644 app/src/main/java/com/khammami/imerolium/ui/LoginActivity.java create mode 100644 app/src/main/java/com/khammami/imerolium/ui/MainActivity.java create mode 100644 app/src/main/java/com/khammami/imerolium/ui/PostActivity.java create mode 100644 app/src/main/java/com/khammami/imerolium/ui/PostAdapterViewHolder.java create mode 100644 app/src/main/java/com/khammami/imerolium/ui/PostClickCallback.java create mode 100644 app/src/main/java/com/khammami/imerolium/ui/PostListFragment.java create mode 100644 app/src/main/java/com/khammami/imerolium/ui/PostsAdapter.java create mode 100644 app/src/main/java/com/khammami/imerolium/ui/settings/SettingsActivity.java create mode 100644 app/src/main/java/com/khammami/imerolium/ui/settings/SettingsFragment.java create mode 100644 app/src/main/java/com/khammami/imerolium/ui/view/NavHeaderLayout.java create mode 100644 app/src/main/java/com/khammami/imerolium/utilities/AppUtils.java create mode 100644 app/src/main/java/com/khammami/imerolium/utilities/CircleTransform.java create mode 100644 app/src/main/java/com/khammami/imerolium/utilities/PeopleServiceHelper.java create mode 100644 app/src/main/java/com/khammami/imerolium/utilities/PeoplesApiAsync.java create mode 100644 app/src/main/java/com/khammami/imerolium/viewmodel/PostListViewModel.java create mode 100644 app/src/main/java/com/khammami/imerolium/viewmodel/PostViewModel.java create mode 100644 app/src/main/java/com/khammami/imerolium/viewmodel/PostViewModelFactory.java create mode 100644 app/src/main/res/drawable-v21/ic_app.xml create mode 100644 app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 app/src/main/res/drawable/background_splash.xml create mode 100644 app/src/main/res/drawable/ic_access_time_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_color_lens_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_date_range_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_delete_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_edit_white_24dp.xml create mode 100644 app/src/main/res/drawable/ic_google_logo.xml create mode 100644 app/src/main/res/drawable/ic_journal_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/drawable/ic_settings_black_24dp.xml create mode 100644 app/src/main/res/drawable/side_nav_bar.xml create mode 100644 app/src/main/res/layout/activity_login.xml create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/activity_post.xml create mode 100644 app/src/main/res/layout/activity_settings.xml create mode 100644 app/src/main/res/layout/app_bar_main.xml create mode 100644 app/src/main/res/layout/content_main.xml create mode 100644 app/src/main/res/layout/fragment_post_list.xml create mode 100644 app/src/main/res/layout/nav_header_main.xml create mode 100644 app/src/main/res/layout/post_list_item.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/post_activity_bottom_bar.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-hdpi/ic_splash.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/arrays.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/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/pref_general.xml create mode 100644 app/src/test/java/com/khammami/imerolium/ExampleUnitTest.java create mode 100644 build.gradle create mode 100644 colorpicker/.gitignore create mode 100644 colorpicker/Android.mk create mode 100644 colorpicker/build.gradle create mode 100644 colorpicker/gradle/wrapper/gradle-wrapper.jar create mode 100644 colorpicker/gradle/wrapper/gradle-wrapper.properties create mode 100644 colorpicker/gradlew create mode 100644 colorpicker/gradlew.bat create mode 100644 colorpicker/local.properties create mode 100644 colorpicker/project.properties create mode 100644 colorpicker/src/main/AndroidManifest.xml create mode 100644 colorpicker/src/main/java/com/android/colorpicker/ColorPickerDialog.java create mode 100644 colorpicker/src/main/java/com/android/colorpicker/ColorPickerPalette.java create mode 100644 colorpicker/src/main/java/com/android/colorpicker/ColorPickerSwatch.java create mode 100644 colorpicker/src/main/java/com/android/colorpicker/ColorStateDrawable.java create mode 100644 colorpicker/src/main/java/com/android/colorpicker/HsvColorComparator.java create mode 100644 colorpicker/src/main/res/drawable-hdpi/ic_colorpicker_swatch_selected.png create mode 100644 colorpicker/src/main/res/drawable-mdpi/ic_colorpicker_swatch_selected.png create mode 100644 colorpicker/src/main/res/drawable-xhdpi/ic_colorpicker_swatch_selected.png create mode 100644 colorpicker/src/main/res/drawable/color_picker_swatch.xml create mode 100644 colorpicker/src/main/res/layout/color_picker_dialog.xml create mode 100644 colorpicker/src/main/res/layout/color_picker_swatch.xml create mode 100644 colorpicker/src/main/res/values-af/strings.xml create mode 100644 colorpicker/src/main/res/values-am/strings.xml create mode 100644 colorpicker/src/main/res/values-ar/strings.xml create mode 100644 colorpicker/src/main/res/values-az/strings.xml create mode 100644 colorpicker/src/main/res/values-b+sr+Latn/strings.xml create mode 100644 colorpicker/src/main/res/values-be/strings.xml create mode 100644 colorpicker/src/main/res/values-bg/strings.xml create mode 100644 colorpicker/src/main/res/values-bn/strings.xml create mode 100644 colorpicker/src/main/res/values-bs/strings.xml create mode 100644 colorpicker/src/main/res/values-ca/strings.xml create mode 100644 colorpicker/src/main/res/values-cs/strings.xml create mode 100644 colorpicker/src/main/res/values-da/strings.xml create mode 100644 colorpicker/src/main/res/values-de/strings.xml create mode 100644 colorpicker/src/main/res/values-el/strings.xml create mode 100644 colorpicker/src/main/res/values-en-rAU/strings.xml create mode 100644 colorpicker/src/main/res/values-en-rGB/strings.xml create mode 100644 colorpicker/src/main/res/values-en-rIN/strings.xml create mode 100644 colorpicker/src/main/res/values-es-rUS/strings.xml create mode 100644 colorpicker/src/main/res/values-es/strings.xml create mode 100644 colorpicker/src/main/res/values-et/strings.xml create mode 100644 colorpicker/src/main/res/values-eu/strings.xml create mode 100644 colorpicker/src/main/res/values-fa/strings.xml create mode 100644 colorpicker/src/main/res/values-fi/strings.xml create mode 100644 colorpicker/src/main/res/values-fr-rCA/strings.xml create mode 100644 colorpicker/src/main/res/values-fr/strings.xml create mode 100644 colorpicker/src/main/res/values-gl/strings.xml create mode 100644 colorpicker/src/main/res/values-gu/strings.xml create mode 100644 colorpicker/src/main/res/values-hi/strings.xml create mode 100644 colorpicker/src/main/res/values-hr/strings.xml create mode 100644 colorpicker/src/main/res/values-hu/strings.xml create mode 100644 colorpicker/src/main/res/values-hy/strings.xml create mode 100644 colorpicker/src/main/res/values-in/strings.xml create mode 100644 colorpicker/src/main/res/values-is/strings.xml create mode 100644 colorpicker/src/main/res/values-it/strings.xml create mode 100644 colorpicker/src/main/res/values-iw/strings.xml create mode 100644 colorpicker/src/main/res/values-ja/strings.xml create mode 100644 colorpicker/src/main/res/values-ka/strings.xml create mode 100644 colorpicker/src/main/res/values-kk/strings.xml create mode 100644 colorpicker/src/main/res/values-km/strings.xml create mode 100644 colorpicker/src/main/res/values-kn/strings.xml create mode 100644 colorpicker/src/main/res/values-ko/strings.xml create mode 100644 colorpicker/src/main/res/values-ky/strings.xml create mode 100644 colorpicker/src/main/res/values-lo/strings.xml create mode 100644 colorpicker/src/main/res/values-lt/strings.xml create mode 100644 colorpicker/src/main/res/values-lv/strings.xml create mode 100644 colorpicker/src/main/res/values-mk/strings.xml create mode 100644 colorpicker/src/main/res/values-ml/strings.xml create mode 100644 colorpicker/src/main/res/values-mn/strings.xml create mode 100644 colorpicker/src/main/res/values-mr/strings.xml create mode 100644 colorpicker/src/main/res/values-ms/strings.xml create mode 100644 colorpicker/src/main/res/values-my/strings.xml create mode 100644 colorpicker/src/main/res/values-nb/strings.xml create mode 100644 colorpicker/src/main/res/values-ne/strings.xml create mode 100644 colorpicker/src/main/res/values-nl/strings.xml create mode 100644 colorpicker/src/main/res/values-pa/strings.xml create mode 100644 colorpicker/src/main/res/values-pl/strings.xml create mode 100644 colorpicker/src/main/res/values-pt-rPT/strings.xml create mode 100644 colorpicker/src/main/res/values-pt/strings.xml create mode 100644 colorpicker/src/main/res/values-ro/strings.xml create mode 100644 colorpicker/src/main/res/values-ru/strings.xml create mode 100644 colorpicker/src/main/res/values-si/strings.xml create mode 100644 colorpicker/src/main/res/values-sk/strings.xml create mode 100644 colorpicker/src/main/res/values-sl/strings.xml create mode 100644 colorpicker/src/main/res/values-sq/strings.xml create mode 100644 colorpicker/src/main/res/values-sr/strings.xml create mode 100644 colorpicker/src/main/res/values-sv/strings.xml create mode 100644 colorpicker/src/main/res/values-sw/strings.xml create mode 100644 colorpicker/src/main/res/values-ta/strings.xml create mode 100644 colorpicker/src/main/res/values-te/strings.xml create mode 100644 colorpicker/src/main/res/values-th/strings.xml create mode 100644 colorpicker/src/main/res/values-tl/strings.xml create mode 100644 colorpicker/src/main/res/values-tr/strings.xml create mode 100644 colorpicker/src/main/res/values-uk/strings.xml create mode 100644 colorpicker/src/main/res/values-ur/strings.xml create mode 100644 colorpicker/src/main/res/values-uz/strings.xml create mode 100644 colorpicker/src/main/res/values-vi/strings.xml create mode 100644 colorpicker/src/main/res/values-zh-rCN/strings.xml create mode 100644 colorpicker/src/main/res/values-zh-rHK/strings.xml create mode 100644 colorpicker/src/main/res/values-zh-rTW/strings.xml create mode 100644 colorpicker/src/main/res/values-zu/strings.xml create mode 100644 colorpicker/src/main/res/values/dimens.xml create mode 100644 colorpicker/src/main/res/values/strings.xml create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 release/app-release.apk create mode 100644 release/output.json 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/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..0161652 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,73 @@ +apply plugin: 'com.android.application' +apply plugin: 'io.fabric' + +repositories { + maven { url 'https://maven.fabric.io/public' } +} + + +android { + compileSdkVersion 28 + defaultConfig { + applicationId "com.khammami.imerolium" + minSdkVersion 16 + targetSdkVersion 28 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + + vectorDrawables.useSupportLibrary = true + + multiDexEnabled true + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(include: ['*.jar'], dir: 'libs') + api project(':colorpicker') + implementation 'com.android.support:multidex:1.0.3' + implementation 'com.android.support:appcompat-v7:28.0.0-alpha3' + implementation 'com.android.support:preference-v7:28.0.0-alpha3' + implementation 'com.android.support:design:28.0.0-alpha3' + implementation 'com.android.support:support-v4:28.0.0-alpha3' + implementation 'com.android.support.constraint:constraint-layout:1.1.2' + + implementation 'com.google.android.gms:play-services-auth:15.0.1' + implementation 'com.google.firebase:firebase-core:16.0.1' + implementation 'com.google.firebase:firebase-auth:16.0.2' + implementation 'com.google.firebase:firebase-firestore:17.0.2' + + implementation "android.arch.lifecycle:runtime:1.1.1" + implementation "android.arch.lifecycle:extensions:1.1.1" + annotationProcessor "android.arch.lifecycle:compiler:1.1.1" + implementation "android.arch.persistence.room:runtime:1.1.1" + annotationProcessor "android.arch.persistence.room:compiler:1.1.1" + + api('com.google.api-client:google-api-client-android:1.23.0') { + exclude group: 'com.google.code.findbugs' + exclude group: 'org.apache.httpcomponents' + exclude group: 'com.google.guava' + } + api('com.google.apis:google-api-services-people:v1-rev168-1.23.0') { + exclude group: 'com.google.code.findbugs' + exclude group: 'org.apache.httpcomponents' + exclude group: 'com.google.guava' + } + + implementation 'com.squareup.picasso:picasso:2.71828' + + 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.crashlytics.sdk.android:crashlytics:2.9.4@aar') { + transitive = true + } +} + +apply plugin: 'com.google.gms.google-services' 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/khammami/imerolium/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/khammami/imerolium/ExampleInstrumentedTest.java new file mode 100644 index 0000000..48bdc2f --- /dev/null +++ b/app/src/androidTest/java/com/khammami/imerolium/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.khammami.imerolium; + +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.khammami.imerolium", appContext.getPackageName()); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..2db7461 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/khammami/imerolium/AppExecutors.java b/app/src/main/java/com/khammami/imerolium/AppExecutors.java new file mode 100644 index 0000000..6609d47 --- /dev/null +++ b/app/src/main/java/com/khammami/imerolium/AppExecutors.java @@ -0,0 +1,56 @@ +package com.khammami.imerolium; + +import android.os.Handler; +import android.os.Looper; +import android.support.annotation.NonNull; + +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; + +public class AppExecutors { + + // For Singleton instantiation + private static final Object LOCK = new Object(); + private static AppExecutors sInstance; + private final Executor diskIO; + private final Executor mainThread; + private final Executor networkIO; + + private AppExecutors(Executor diskIO, Executor networkIO, Executor mainThread) { + this.diskIO = diskIO; + this.networkIO = networkIO; + this.mainThread = mainThread; + } + + public static AppExecutors getInstance() { + if (sInstance == null) { + synchronized (LOCK) { + sInstance = new AppExecutors(Executors.newSingleThreadExecutor(), + Executors.newFixedThreadPool(3), + new MainThreadExecutor()); + } + } + return sInstance; + } + + public Executor diskIO() { + return diskIO; + } + + public Executor mainThread() { + return mainThread; + } + + public Executor networkIO() { + return networkIO; + } + + private static class MainThreadExecutor implements Executor { + private Handler mainThreadHandler = new Handler(Looper.getMainLooper()); + + @Override + public void execute(@NonNull Runnable command) { + mainThreadHandler.post(command); + } + } +} diff --git a/app/src/main/java/com/khammami/imerolium/BaseActivity.java b/app/src/main/java/com/khammami/imerolium/BaseActivity.java new file mode 100644 index 0000000..c61a2a0 --- /dev/null +++ b/app/src/main/java/com/khammami/imerolium/BaseActivity.java @@ -0,0 +1,40 @@ +package com.khammami.imerolium; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.annotation.VisibleForTesting; +import android.support.v7.app.AppCompatActivity; + +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseUser; +import com.khammami.imerolium.ui.LoginActivity; +import com.khammami.imerolium.ui.MainActivity; + +public class BaseActivity extends AppCompatActivity { + + @VisibleForTesting + public FirebaseAuth mAuth; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mAuth = FirebaseAuth.getInstance(); + checkAuth(); + } + + public void checkAuth() { + FirebaseUser currentUser = mAuth.getCurrentUser(); + if (!(this instanceof LoginActivity) && currentUser == null) { + Intent signInIntent = new Intent(this, LoginActivity.class); + startActivity(signInIntent); + finish(); + }else if((this instanceof LoginActivity) && currentUser != null){ + Intent mainIntent = new Intent(this, MainActivity.class); + startActivity(mainIntent); + finish(); + } + } +} diff --git a/app/src/main/java/com/khammami/imerolium/BasicApplication.java b/app/src/main/java/com/khammami/imerolium/BasicApplication.java new file mode 100644 index 0000000..b2363c1 --- /dev/null +++ b/app/src/main/java/com/khammami/imerolium/BasicApplication.java @@ -0,0 +1,43 @@ +package com.khammami.imerolium; + +import android.app.Application; +import android.support.multidex.MultiDexApplication; + +import com.crashlytics.android.Crashlytics; +import com.google.firebase.firestore.FirebaseFirestore; +import com.google.firebase.firestore.FirebaseFirestoreSettings; +import com.khammami.imerolium.data.AppRepository; +import com.khammami.imerolium.data.db.AppDatabase; +import com.khammami.imerolium.data.net.AppNetworkDataSource; + +import io.fabric.sdk.android.Fabric; + +public class BasicApplication extends MultiDexApplication { + private AppExecutors mAppExecutors; + + @Override + public void onCreate() { + super.onCreate(); + + //init fabric + final Fabric fabric = new Fabric.Builder(this) + .kits(new Crashlytics()) + .debuggable(true) + .build(); + Fabric.with(fabric); + + mAppExecutors = AppExecutors.getInstance(); + } + + public AppDatabase getDatabase() { + return AppDatabase.getInstance(this); + } + + public AppNetworkDataSource getNetworkResouce() { + return AppNetworkDataSource.getInstance(this, mAppExecutors); + } + + public AppRepository getRepository() { + return AppRepository.getInstance(getDatabase(), getNetworkResouce(), mAppExecutors); + } +} diff --git a/app/src/main/java/com/khammami/imerolium/data/AppPreferences.java b/app/src/main/java/com/khammami/imerolium/data/AppPreferences.java new file mode 100644 index 0000000..5b451e0 --- /dev/null +++ b/app/src/main/java/com/khammami/imerolium/data/AppPreferences.java @@ -0,0 +1,55 @@ +package com.khammami.imerolium.data; + +import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; +import android.util.Log; + +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseUser; +import com.khammami.imerolium.R; + +public class AppPreferences { + private static final String TAG = AppPreferences.class.getSimpleName(); + + public static final String AGENDA_VIEW = "agenda"; + public static final String QUILT_VIEW = "quilt"; + + public static void setPostListViewType(Context context, String viewType) { + SharedPreferences sp = getUserSharePreferences(context); + SharedPreferences.Editor editor = sp.edit(); + + editor.putString(context.getString(R.string.pref_post_list_view_type_key), viewType); + editor.apply(); + } + + public static String getPostListViewType(Context context) { + SharedPreferences sp = getUserSharePreferences(context); + return sp.getString(context.getString(R.string.pref_post_list_view_type_key), + QUILT_VIEW); + } + + private static SharedPreferences getUserSharePreferences(Context context){ + String userId = FirebaseAuth.getInstance().getUid(); + return context.getSharedPreferences(userId, Context.MODE_PRIVATE); + + } + + public static void setUserPhotoCover(Context context, String photoUrl) { + SharedPreferences sp = getUserSharePreferences(context); + SharedPreferences.Editor editor = sp.edit(); + + editor.putString(context.getString(R.string.pref_user_cover_key), photoUrl); + editor.apply(); + } + + public static String getUserPhotoCover(Context context) { + SharedPreferences sp = getUserSharePreferences(context); + return sp.getString(context.getString(R.string.pref_user_cover_key), ""); + } + + public static boolean isTimeFormat24(Context context) { + SharedPreferences sp = getUserSharePreferences(context); + return sp.getBoolean(context.getString(R.string.pref_time_format_24h_key), false); + } +} diff --git a/app/src/main/java/com/khammami/imerolium/data/AppRepository.java b/app/src/main/java/com/khammami/imerolium/data/AppRepository.java new file mode 100644 index 0000000..53b2025 --- /dev/null +++ b/app/src/main/java/com/khammami/imerolium/data/AppRepository.java @@ -0,0 +1,226 @@ +package com.khammami.imerolium.data; + +import android.arch.lifecycle.LiveData; +import android.arch.lifecycle.MutableLiveData; +import android.arch.lifecycle.Observer; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.util.Log; + +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.OnFailureListener; +import com.google.android.gms.tasks.Task; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.firestore.CollectionReference; +import com.google.firebase.firestore.DocumentReference; +import com.google.firebase.firestore.FirebaseFirestore; +import com.google.firebase.firestore.QuerySnapshot; +import com.google.firebase.firestore.WriteBatch; +import com.khammami.imerolium.AppExecutors; +import com.khammami.imerolium.data.db.AppDatabase; +import com.khammami.imerolium.data.net.AppNetworkDataSource; +import com.khammami.imerolium.model.Post; +import com.khammami.imerolium.model.SyncPostTask; +import com.khammami.imerolium.utilities.AppUtils; + +import java.util.ArrayList; +import java.util.List; + +public class AppRepository { + private static final String TAG = AppRepository.class.getSimpleName(); + private static final String USERS_PATH = "users"; + private static final String POSTS_PATH = "posts"; + + private static final Object LOCK = new Object(); + private static AppRepository sInstance; + private final AppExecutors mExecutors; + private final AppDatabase db; + private final AppNetworkDataSource networkResource; + private final FirebaseFirestore mFirestoreDb; + + private final MutableLiveData> remotePosts = new MutableLiveData<>(); + + private AppRepository(AppDatabase database, AppNetworkDataSource networkResource, AppExecutors executors) { + this.db = database; + this.networkResource = networkResource; + this.mExecutors = executors; + + //firestore init + this.mFirestoreDb = FirebaseFirestore.getInstance(); +} + + public synchronized static AppRepository getInstance( + AppDatabase database, AppNetworkDataSource networkSource, AppExecutors executors) { + Log.d(TAG, "Getting the repository"); + if (sInstance == null) { + synchronized (LOCK) { + sInstance = new AppRepository(database, networkSource, executors); + Log.d(TAG, "Made new repository"); + } + } + return sInstance; + } + + public LiveData> getUserPosts() { + return db.postDao().getUserPostList(getCurrentUserId()); + } + + public void insertPost(final Post post){ + + mExecutors.diskIO().execute(new Runnable() { + @Override + public void run() { + //set post id from firestore + String postId = getNewFireStoreId(post); + post.setId(postId); + + //local + db.postDao().insertPost(post); + + //remote + mFirestoreDb.collection(USERS_PATH).document(post.getUserId()) + .collection(POSTS_PATH).document(postId).set(post) + .addOnFailureListener(new OnFailureListener() { + @Override + public void onFailure(@NonNull Exception e) { + e.printStackTrace(); + db.syncPostDao().insertSyncPostTask( + AppUtils.createSyncPostTask(post, SyncPostTask.DELETE_ACTION)); + } + }); + } + }); + } + + public LiveData getPost(String postId) { + return db.postDao().getPost(postId); + } + + public void updatePost(final Post post) { + mExecutors.diskIO().execute(new Runnable() { + @Override + public void run() { + //local + db.postDao().updatePost(post); + + //remote + getFirestorePostsPath(post.getUserId()).document(post.getId()) + .set(post).addOnFailureListener(new OnFailureListener() { + @Override + public void onFailure(@NonNull Exception e) { + e.printStackTrace(); + db.syncPostDao().insertSyncPostTask( + AppUtils.createSyncPostTask(post, SyncPostTask.SET_ACTION)); + } + }); + } + }); + + } + + public void deletePost(final Post post) { + mExecutors.diskIO().execute(new Runnable() { + @Override + public void run() { + db.postDao().deletePost(post.getId()); + + getFirestorePostsPath(post.getUserId()).document(post.getId()).delete() + .addOnFailureListener(new OnFailureListener() { + @Override + public void onFailure(@NonNull Exception e) { + e.printStackTrace(); + db.syncPostDao().insertSyncPostTask( + AppUtils.createSyncPostTask(post, SyncPostTask.DELETE_ACTION)); + } + }); + } + }); + + } + + public LiveData> fetchPostListFromFirestore(){ + if (getCurrentUserId() != null) { + getFirestorePostsPath(getCurrentUserId()).get() + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + List posts = task.getResult().toObjects(Post.class); + remotePosts.postValue(posts); + } else { + remotePosts.postValue(null); + Log.d(TAG, "Error getting documents: ", task.getException()); + } + } + }); + } + + return remotePosts; + } + + public void updateLocalPost(final List remotePosts) { + mExecutors.diskIO().execute(new Runnable() { + @Override + public void run() { + List localPosts = db.postDao().getPostList(getCurrentUserId()); + //local db empty & remote db contain data + if (remotePosts != null && remotePosts.size() > 0 && localPosts.size() == 0) { + db.postDao().insertPosts(remotePosts); + } + + //remote db empty & local db contain data + if (remotePosts != null && remotePosts.size() == 0 && localPosts.size() > 0) { + ceateFirestoreBatchWrite(localPosts).commit(); + } + + // + if(remotePosts != null && remotePosts.size() > 0 && localPosts.size() > 0){ + //List syncTasks = db.syncPostDao().getSyncPostTasks(getCurrentUserId()); + + List rTmp = new ArrayList<>(remotePosts); + rTmp.removeAll(localPosts); + + //add and update local posts + for (Post p : rTmp){ + Post tmpPost = db.postDao().getPost(p.getId()).getValue(); + if (tmpPost == null){ + db.postDao().insertPost(p); + } else if (p.getUpdatedAt().after(tmpPost.getUpdatedAt())){ + db.postDao().updatePost(p); + } + } + + //batch posts to firestore & firestore rules will take care of add/update data + localPosts.removeAll(remotePosts); + ceateFirestoreBatchWrite(localPosts).commit(); + } + + } + }); + } + + private String getNewFireStoreId(Post post){ + return mFirestoreDb.collection(USERS_PATH).document(post.getUserId()) + .collection(POSTS_PATH) + .document().getId(); + } + + private CollectionReference getFirestorePostsPath(String userId){ + return mFirestoreDb.collection(USERS_PATH).document(userId) + .collection(POSTS_PATH); + } + + private String getCurrentUserId(){ + return FirebaseAuth.getInstance().getUid(); + } + + private WriteBatch ceateFirestoreBatchWrite(List posts){ + WriteBatch batch = mFirestoreDb.batch(); + for (Post p: posts){ + DocumentReference pRef = getFirestorePostsPath(getCurrentUserId()) + .document(p.getId()); + batch.set(pRef, p); + } + return batch; + } +} diff --git a/app/src/main/java/com/khammami/imerolium/data/db/AppDatabase.java b/app/src/main/java/com/khammami/imerolium/data/db/AppDatabase.java new file mode 100644 index 0000000..d11e16e --- /dev/null +++ b/app/src/main/java/com/khammami/imerolium/data/db/AppDatabase.java @@ -0,0 +1,42 @@ +package com.khammami.imerolium.data.db; + +import android.arch.persistence.room.Database; +import android.arch.persistence.room.Room; +import android.arch.persistence.room.RoomDatabase; +import android.arch.persistence.room.TypeConverters; +import android.content.Context; +import android.util.Log; + +import com.khammami.imerolium.model.Label; +import com.khammami.imerolium.model.Post; +import com.khammami.imerolium.model.SyncPostTask; + +@Database(entities = {Post.class, Label.class, SyncPostTask.class}, version = 1, exportSchema = false) +@TypeConverters(DateConverter.class) +public abstract class AppDatabase extends RoomDatabase { + + private static final String LOG_TAG = AppDatabase.class.getSimpleName(); + private static final String DATABASE_NAME = "journal_app"; + + // For Singleton instantiation + private static final Object LOCK = new Object(); + private static AppDatabase sInstance; + + public static AppDatabase getInstance(Context context) { + Log.d(LOG_TAG, "Getting the database"); + if (sInstance == null) { + synchronized (LOCK) { + sInstance = Room.databaseBuilder(context.getApplicationContext(), + AppDatabase.class, AppDatabase.DATABASE_NAME).build(); + Log.d(LOG_TAG, "Made new database"); + } + } + return sInstance; + } + + public abstract PostDao postDao(); + + public abstract LabelDao labelDao(); + + public abstract SyncPostTaskDao syncPostDao(); +} diff --git a/app/src/main/java/com/khammami/imerolium/data/db/DateConverter.java b/app/src/main/java/com/khammami/imerolium/data/db/DateConverter.java new file mode 100644 index 0000000..411e7ea --- /dev/null +++ b/app/src/main/java/com/khammami/imerolium/data/db/DateConverter.java @@ -0,0 +1,17 @@ +package com.khammami.imerolium.data.db; + +import android.arch.persistence.room.TypeConverter; + +import java.util.Date; + +public class DateConverter { + @TypeConverter + public static Date toDate(Long timestamp) { + return timestamp == null ? null : new Date(timestamp); + } + + @TypeConverter + public static Long toTimestamp(Date date) { + return date == null ? null : date.getTime(); + } +} diff --git a/app/src/main/java/com/khammami/imerolium/data/db/LabelDao.java b/app/src/main/java/com/khammami/imerolium/data/db/LabelDao.java new file mode 100644 index 0000000..047e4a1 --- /dev/null +++ b/app/src/main/java/com/khammami/imerolium/data/db/LabelDao.java @@ -0,0 +1,30 @@ +package com.khammami.imerolium.data.db; + +import android.arch.lifecycle.LiveData; +import android.arch.persistence.room.Dao; +import android.arch.persistence.room.Insert; +import android.arch.persistence.room.OnConflictStrategy; +import android.arch.persistence.room.Query; +import android.arch.persistence.room.Update; + +import com.khammami.imerolium.model.Label; + +import java.util.List; + +@Dao +public interface LabelDao { + @Query("SELECT * FROM labels WHERE userId = :userId") + LiveData> getUserLabelList(String userId); + + @Query("SELECT * FROM labels WHERE id = :labelId") + LiveData