diff --git a/.idea/.name b/.idea/.name deleted file mode 100644 index da26bbe..0000000 --- a/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -News \ No newline at end of file diff --git a/README.md b/README.md index 08292b0..d617d64 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ ## Screenshots - + ## Config diff --git a/app/build.gradle b/app/build.gradle index 8a96c34..2d745c0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -27,7 +27,7 @@ android { compileSdk 31 defaultConfig { - applicationId "com.mohammadfayaz.news" + applicationId "in.mohammadfayaz.hn" minSdk 21 targetSdk 31 versionCode 1 @@ -71,11 +71,8 @@ dependencies { implementation(libs.bundles.mikepenz) implementation(libs.bundles.androidxViews) implementation(libs.bundles.androidxCache) - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.0' - implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0' - kapt(libs.bundles.kapt) + kapt(libs.bundles.kapt) testImplementation(libs.bundles.testDependencies) kaptTest(libs.bundles.daggerTestsAnnotation) diff --git a/app/src/androidTest/java/com/mohammadfayaz/hn/data/sources/local/LocalIdsSourceTest.kt b/app/src/androidTest/java/com/mohammadfayaz/hn/data/sources/local/LocalIdsSourceTest.kt new file mode 100644 index 0000000..9bf85bf --- /dev/null +++ b/app/src/androidTest/java/com/mohammadfayaz/hn/data/sources/local/LocalIdsSourceTest.kt @@ -0,0 +1,84 @@ +package com.mohammadfayaz.hn.data.sources.local + +import androidx.arch.core.executor.testing.InstantTaskExecutorRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.google.common.truth.Truth.assertWithMessage +import com.mohammadfayaz.hn.data.sources.local.source.IdsLocalSource +import com.mohammadfayaz.hn.di.DatabaseModule +import com.mohammadfayaz.hn.domain.models.StoryIdModel +import com.mohammadfayaz.hn.domain.models.StoryType +import com.mohammadfayaz.hn.utils.DbConstants.FAKE_DB +import com.mohammadfayaz.hn.utils.SourceConstants.FAKE_LOCAL_IDS +import dagger.hilt.android.testing.HiltAndroidRule +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules +import kotlinx.coroutines.runBlocking +import org.junit.* +import org.junit.runner.RunWith +import org.junit.runners.MethodSorters +import javax.inject.Inject +import javax.inject.Named + +@HiltAndroidTest +@UninstallModules(DatabaseModule::class) +@RunWith(AndroidJUnit4::class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +class LocalIdsSourceTest { + @get:Rule + var hiltRule = HiltAndroidRule(this) + + @get:Rule + var instantTaskExecutorRule = InstantTaskExecutorRule() + + @Inject + @Named(FAKE_DB) + lateinit var db: HackerNewsDB + + @Inject + @Named(FAKE_LOCAL_IDS) + lateinit var idsLocalSource: IdsLocalSource + + private val items = mutableListOf() + + @Before + fun init() { + hiltRule.inject() + + items.add(StoryIdModel(1, StoryType.SHOW)) + items.add(StoryIdModel(2, StoryType.ASK)) + items.add(StoryIdModel(3, StoryType.TOP)) + items.add(StoryIdModel(4, StoryType.SHOW)) + items.add(StoryIdModel(5, StoryType.JOB)) + } + + private fun matchItemsCount(type: StoryType, count: Int) = runBlocking { + val items = idsLocalSource.getIdsByStoryType(type) + assertWithMessage("There should be exactly $count story ids of type ${type.string}") + .that(items.size) + .isEqualTo(count) + } + + @Test + fun aThereShouldNotBeAnyItems() = runBlocking { + StoryType.values().asList().forEach { + matchItemsCount(it, 0) + } + } + + @Test + fun bInsertFewStoryIds(): Unit = runBlocking { + idsLocalSource.putIds(items) + + StoryType.values().asList().forEach { type -> + val selected = items.filter { + it.type == type + } + matchItemsCount(type, selected.count()) + } + } + + @After + fun tearDownDb() { + db.close() + } +} diff --git a/app/src/androidTest/java/com/mohammadfayaz/hn/data/sources/local/LocalStorySourceTest.kt b/app/src/androidTest/java/com/mohammadfayaz/hn/data/sources/local/LocalStorySourceTest.kt new file mode 100644 index 0000000..2a8650e --- /dev/null +++ b/app/src/androidTest/java/com/mohammadfayaz/hn/data/sources/local/LocalStorySourceTest.kt @@ -0,0 +1,68 @@ +package com.mohammadfayaz.hn.data.sources.local + +import androidx.arch.core.executor.testing.InstantTaskExecutorRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.google.common.truth.Truth.assertThat +import com.mohammadfayaz.hn.data.sources.local.source.StoriesLocalSource +import com.mohammadfayaz.hn.di.DatabaseModule +import com.mohammadfayaz.hn.domain.models.StoryModel +import com.mohammadfayaz.hn.domain.models.StoryType +import com.mohammadfayaz.hn.utils.DbConstants +import com.mohammadfayaz.hn.utils.SourceConstants +import dagger.hilt.android.testing.HiltAndroidRule +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules +import kotlinx.coroutines.runBlocking +import org.junit.* +import org.junit.runner.RunWith +import org.junit.runners.MethodSorters +import javax.inject.Inject +import javax.inject.Named +import kotlin.random.Random + +@HiltAndroidTest +@UninstallModules(DatabaseModule::class) +@RunWith(AndroidJUnit4::class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +class LocalStorySourceTest { + + @get:Rule + var hiltRule = HiltAndroidRule(this) + + @get:Rule + var instantTaskExecutorRule = InstantTaskExecutorRule() + + @Inject + @Named(DbConstants.FAKE_DB) + lateinit var db: HackerNewsDB + + @Inject + @Named(SourceConstants.FAKE_LOCAL_STORIES) + lateinit var storiesLocalSource: StoriesLocalSource + + @Before + fun init() { + hiltRule.inject() + } + + @Test + fun storiesTest() = runBlocking { + for (i in 0..6) { + val id = Random.nextInt(0, 100) + val randomTypeIndex = Random.nextInt(0, StoryType.values().size) + val type = StoryType.values()[randomTypeIndex] + + storiesLocalSource.put(StoryModel(id, "story"), type) + + val story = storiesLocalSource.getById(id) + assertThat(story).isNotEqualTo(null) + assertThat(story?.id).isEqualTo(id) + assertThat(story?.storyType).isEqualTo(type) + } + } + + @After + fun tearDownDb() { + db.close() + } +} diff --git a/app/src/androidTest/java/com/mohammadfayaz/hn/db/DatabaseTest.kt b/app/src/androidTest/java/com/mohammadfayaz/hn/db/DatabaseTest.kt deleted file mode 100644 index 2015eec..0000000 --- a/app/src/androidTest/java/com/mohammadfayaz/hn/db/DatabaseTest.kt +++ /dev/null @@ -1,68 +0,0 @@ -package com.mohammadfayaz.hn.db - -import androidx.arch.core.executor.testing.InstantTaskExecutorRule -import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.google.common.truth.Truth.assertThat -import com.mohammadfayaz.hn.data.sources.local.HackerNewsDB -import com.mohammadfayaz.hn.data.sources.local.dao.IdsDao -import com.mohammadfayaz.hn.data.sources.local.source.IdsLocalSource -import com.mohammadfayaz.hn.di.DatabaseModule -import com.mohammadfayaz.hn.domain.models.StoryIdModel -import com.mohammadfayaz.hn.domain.models.StoryType -import dagger.hilt.android.testing.HiltAndroidRule -import dagger.hilt.android.testing.HiltAndroidTest -import dagger.hilt.android.testing.UninstallModules -import kotlinx.coroutines.runBlocking -import org.junit.After -import org.junit.Before -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith -import javax.inject.Inject -import javax.inject.Named - -@HiltAndroidTest -@UninstallModules(DatabaseModule::class) -@RunWith(AndroidJUnit4::class) -class DatabaseTest { - @get:Rule - var hiltRule = HiltAndroidRule(this) - - @get:Rule - var instantTaskExecutorRule = InstantTaskExecutorRule() - - @Inject - @Named("fake_db") - lateinit var database: HackerNewsDB - - private lateinit var idsDao: IdsDao - private lateinit var idsLocalSource: IdsLocalSource - - @Before - fun init() { - hiltRule.inject() - - idsDao = database.idsDao() - idsLocalSource = IdsLocalSource(idsDao) - } - - @Test - fun insertFewStoryIds(): Unit = runBlocking { - val items = mutableListOf() - items.add(StoryIdModel(1, StoryType.SHOW)) - items.add(StoryIdModel(2, StoryType.SHOW)) - items.add(StoryIdModel(3, StoryType.SHOW)) - items.add(StoryIdModel(4, StoryType.SHOW)) - items.add(StoryIdModel(5, StoryType.SHOW)) - idsLocalSource.putIds(items) - - val getItems = idsLocalSource.getIdsByStoryType(StoryType.SHOW) - assertThat(getItems.size).isEqualTo(items.size) - assertThat(getItems).containsAtLeast(items[0], items[1]) - } - - @After - fun tearDown() { - database.close() - } -} diff --git a/app/src/androidTest/java/com/mohammadfayaz/hn/di/FakeDatabaseModule.kt b/app/src/androidTest/java/com/mohammadfayaz/hn/di/FakeDatabaseModule.kt index 03ab270..6f47cd6 100644 --- a/app/src/androidTest/java/com/mohammadfayaz/hn/di/FakeDatabaseModule.kt +++ b/app/src/androidTest/java/com/mohammadfayaz/hn/di/FakeDatabaseModule.kt @@ -2,21 +2,44 @@ package com.mohammadfayaz.hn.di import android.content.Context import com.mohammadfayaz.hn.data.sources.local.HackerNewsDB +import com.mohammadfayaz.hn.data.sources.local.dao.CommentsDao +import com.mohammadfayaz.hn.data.sources.local.dao.FavouritesDao +import com.mohammadfayaz.hn.data.sources.local.dao.IdsDao +import com.mohammadfayaz.hn.data.sources.local.dao.StoryDao +import com.mohammadfayaz.hn.utils.DbConstants.FAKE_COMMENTS_DAO +import com.mohammadfayaz.hn.utils.DbConstants.FAKE_DB +import com.mohammadfayaz.hn.utils.DbConstants.FAKE_FAVOURITES_DAO +import com.mohammadfayaz.hn.utils.DbConstants.FAKE_IDS_DAO +import com.mohammadfayaz.hn.utils.DbConstants.FAKE_STORY_DAO import dagger.Module import dagger.Provides import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import dagger.hilt.testing.TestInstallIn import javax.inject.Named -import javax.inject.Singleton @Module @TestInstallIn(components = [SingletonComponent::class], replaces = [DatabaseModule::class]) object FakeDatabaseModule { @Provides - @Singleton - @Named("fake_db") + @Named(FAKE_DB) fun provideDatabase(@ApplicationContext context: Context) = HackerNewsDB.getInstance(context, true) + + @Provides + @Named(FAKE_STORY_DAO) + fun provideStoryDao(@Named(FAKE_DB) db: HackerNewsDB): StoryDao = db.storyDao() + + @Provides + @Named(FAKE_IDS_DAO) + fun provideIdsDao(@Named(FAKE_DB) db: HackerNewsDB): IdsDao = db.idsDao() + + @Provides + @Named(FAKE_FAVOURITES_DAO) + fun provideFavouritesDao(@Named(FAKE_DB) db: HackerNewsDB): FavouritesDao = db.favouritesDao() + + @Provides + @Named(FAKE_COMMENTS_DAO) + fun provideCommentsDao(@Named(FAKE_DB) db: HackerNewsDB): CommentsDao = db.commentsDao() } diff --git a/app/src/androidTest/java/com/mohammadfayaz/hn/di/LocalSources.kt b/app/src/androidTest/java/com/mohammadfayaz/hn/di/LocalSources.kt new file mode 100644 index 0000000..4b6ba75 --- /dev/null +++ b/app/src/androidTest/java/com/mohammadfayaz/hn/di/LocalSources.kt @@ -0,0 +1,28 @@ +package com.mohammadfayaz.hn.di + +import com.mohammadfayaz.hn.data.sources.local.dao.IdsDao +import com.mohammadfayaz.hn.data.sources.local.dao.StoryDao +import com.mohammadfayaz.hn.data.sources.local.source.IdsLocalSource +import com.mohammadfayaz.hn.data.sources.local.source.StoriesLocalSource +import com.mohammadfayaz.hn.utils.DbConstants.FAKE_IDS_DAO +import com.mohammadfayaz.hn.utils.DbConstants.FAKE_STORY_DAO +import com.mohammadfayaz.hn.utils.SourceConstants.FAKE_LOCAL_IDS +import com.mohammadfayaz.hn.utils.SourceConstants.FAKE_LOCAL_STORIES +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Named + +@Module +@InstallIn(SingletonComponent::class) +object LocalSources { + + @Provides + @Named(FAKE_LOCAL_IDS) + fun provideIdsLocalSource(@Named(FAKE_IDS_DAO) idsDao: IdsDao) = IdsLocalSource(idsDao) + + @Provides + @Named(FAKE_LOCAL_STORIES) + fun provideStoriesLocalSource(@Named(FAKE_STORY_DAO) dao: StoryDao) = StoriesLocalSource(dao) +} diff --git a/app/src/androidTest/java/com/mohammadfayaz/hn/utils/DbConstants.kt b/app/src/androidTest/java/com/mohammadfayaz/hn/utils/DbConstants.kt new file mode 100644 index 0000000..75452c2 --- /dev/null +++ b/app/src/androidTest/java/com/mohammadfayaz/hn/utils/DbConstants.kt @@ -0,0 +1,9 @@ +package com.mohammadfayaz.hn.utils + +object DbConstants { + const val FAKE_DB: String = "fake_db" + const val FAKE_STORY_DAO: String = "fake_story_dao" + const val FAKE_IDS_DAO: String = "fake_ids_dao" + const val FAKE_FAVOURITES_DAO: String = "fake_favourites_dao" + const val FAKE_COMMENTS_DAO: String = "fake_comments_dao" +} diff --git a/app/src/androidTest/java/com/mohammadfayaz/hn/utils/SourceConstants.kt b/app/src/androidTest/java/com/mohammadfayaz/hn/utils/SourceConstants.kt new file mode 100644 index 0000000..67d6e73 --- /dev/null +++ b/app/src/androidTest/java/com/mohammadfayaz/hn/utils/SourceConstants.kt @@ -0,0 +1,6 @@ +package com.mohammadfayaz.hn.utils + +object SourceConstants { + const val FAKE_LOCAL_IDS = "l_ids" + const val FAKE_LOCAL_STORIES = "l_stories" +} diff --git a/app/src/main/java/com/mohammadfayaz/hn/ui/adapters/comments/CommentListAdapter.kt b/app/src/main/java/com/mohammadfayaz/hn/ui/adapters/comments/CommentListAdapter.kt index 6818d9e..4cae439 100644 --- a/app/src/main/java/com/mohammadfayaz/hn/ui/adapters/comments/CommentListAdapter.kt +++ b/app/src/main/java/com/mohammadfayaz/hn/ui/adapters/comments/CommentListAdapter.kt @@ -40,7 +40,7 @@ class CommentListAdapter : binding.apply { authorNameTextView.text = story.by commentTextView.text = HtmlCompat.fromHtml(story.text, HtmlCompat.FROM_HTML_MODE_COMPACT) - timeTextView.text = AppDateTimeUtils.formatDate(story.time) + timeTextView.text = AppDateTimeUtils.whenDidThisHappen(story.time) } } } diff --git a/app/src/main/java/com/mohammadfayaz/hn/ui/adapters/stories/StoryListAdapter.kt b/app/src/main/java/com/mohammadfayaz/hn/ui/adapters/stories/StoryListAdapter.kt index 0cb81bd..7e5aa3c 100644 --- a/app/src/main/java/com/mohammadfayaz/hn/ui/adapters/stories/StoryListAdapter.kt +++ b/app/src/main/java/com/mohammadfayaz/hn/ui/adapters/stories/StoryListAdapter.kt @@ -63,7 +63,7 @@ class StoryListAdapter constructor(private val listener: StoryItemClickListener) scoreTextView.text = story.score.toString() commentsTextView.text = story.kids?.size.toString() storyTypeTextView.text = story.storyType.string.uppercase() - timeTextView.text = AppDateTimeUtils.formatDate(story.time) + timeTextView.text = AppDateTimeUtils.whenDidThisHappen(story.time) } } } diff --git a/app/src/main/java/com/mohammadfayaz/hn/ui/stories/ask/detail/AskStoryDetailFragment.kt b/app/src/main/java/com/mohammadfayaz/hn/ui/stories/ask/detail/AskStoryDetailFragment.kt index 45560d5..5a73c51 100644 --- a/app/src/main/java/com/mohammadfayaz/hn/ui/stories/ask/detail/AskStoryDetailFragment.kt +++ b/app/src/main/java/com/mohammadfayaz/hn/ui/stories/ask/detail/AskStoryDetailFragment.kt @@ -92,7 +92,7 @@ class AskStoryDetailFragment : Fragment() { } else { descriptionTextView.gone() } - timeTextView.text = AppDateTimeUtils.formatDate(storyItem.time) + timeTextView.text = AppDateTimeUtils.whenDidThisHappen(storyItem.time) scoreTextView.text = storyItem.score.toString() commentsTextView.text = storyItem.kids?.size.toString() diff --git a/app/src/main/java/com/mohammadfayaz/hn/utils/AppDateTimeUtils.kt b/app/src/main/java/com/mohammadfayaz/hn/utils/AppDateTimeUtils.kt index c789564..67b315c 100644 --- a/app/src/main/java/com/mohammadfayaz/hn/utils/AppDateTimeUtils.kt +++ b/app/src/main/java/com/mohammadfayaz/hn/utils/AppDateTimeUtils.kt @@ -1,15 +1,67 @@ package com.mohammadfayaz.hn.utils -import org.joda.time.format.DateTimeFormat - object AppDateTimeUtils { - const val DEF_TIME_MULTIPLY: Long = 1000L + private const val ONE_SECOND = 1000L + private const val ONE_MIN: Long = 60 * ONE_SECOND + + private const val ONE_HOUR: Long = 60 * ONE_MIN + private const val TWO_HOURS: Long = 2 * ONE_HOUR + + private const val ONE_DAY: Long = 24 * ONE_HOUR + private const val TWO_DAYS: Long = 2 * ONE_DAY + + private const val ONE_WEEK: Long = 7 * ONE_DAY + private const val TWO_WEEKS: Long = 2 * ONE_WEEK - fun formatDate(time: Long?): String { + private const val ONE_MONTH: Long = 30 * ONE_DAY + private const val TWO_MONTHS: Long = 2 * ONE_MONTH + private const val ONE_YEAR: Long = 365 * ONE_DAY + private const val TWO_YEARS: Long = 2 * ONE_YEAR + + const val DEF_TIME_MULTIPLY: Long = ONE_SECOND + + // need to think of a better algorithm + fun whenDidThisHappen(time: Long?): String { if (time != null) { - val format = DateTimeFormat.forPattern("dd-MM-yyyy") - return format.print(time) + + val diff: Long = System.currentTimeMillis() - time + + val result: String + if (diff <= ONE_MIN) { + result = "1 min" + } else if (diff < ONE_HOUR) { + val howManyMins = diff / ONE_MIN + result = "$howManyMins mins" + } else if (diff in (ONE_HOUR + 1) until TWO_HOURS) { + result = "1 hr" + } else if (diff in (ONE_HOUR + 1) until ONE_DAY) { + val howManyHours = diff / ONE_HOUR + result = "$howManyHours hrs" + } else if (diff in (ONE_DAY + 1) until TWO_DAYS) { + result = "1 day" + } else if (diff in (ONE_DAY + 1) until ONE_WEEK) { + val howManyDays = diff / ONE_DAY + result = "$howManyDays days" + } else if (diff in (ONE_WEEK + 1) until TWO_WEEKS) { + result = "1 week" + } else if (diff in (TWO_WEEKS) until ONE_MONTH) { + val howManyWeeks = diff / ONE_WEEK + result = "$howManyWeeks weeks" + } else if (diff in (ONE_MONTH + 1) until TWO_MONTHS) { + result = "1 month" + } else if (diff in (TWO_MONTHS) until ONE_YEAR) { + val howManyMonths = diff / ONE_MONTH + result = "$howManyMonths months" + } else if (diff < ONE_YEAR && diff < TWO_YEARS) { + result = "1 year" + } else { + val howManyYears = diff / ONE_YEAR + result = "$howManyYears years" + } + return result +// val format = DateTimeFormat.forPattern("dd-MM-yyyy") +// return format.print(time) } return "" } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 08e0f3b..0afb407 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,5 +1,5 @@ - Hacker News + HackerNews Show Stories Top Stories Jobs @@ -12,9 +12,9 @@ Retry Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\'s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of \"de Finibus Bonorum et Malorum\" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, \"Lorem ipsum dolor sit amet..\", comes from a line in section 1.10.32. The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from \"de Finibus Bonorum et Malorum\" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham. Save as Favourite - STORY - Comments + STORY + Comments Here goes the description of the question - posted by - VIEW COMMENTS + posted by + VIEW COMMENTS diff --git a/screenshots/S1.png b/screenshots/S1.png new file mode 100644 index 0000000..51ae56a Binary files /dev/null and b/screenshots/S1.png differ diff --git a/screenshots/S2.png b/screenshots/S2.png new file mode 100644 index 0000000..2307140 Binary files /dev/null and b/screenshots/S2.png differ diff --git a/screenshots/S3.png b/screenshots/S3.png new file mode 100644 index 0000000..5d9bcba Binary files /dev/null and b/screenshots/S3.png differ diff --git a/screenshots/S4.png b/screenshots/S4.png new file mode 100644 index 0000000..4739e5a Binary files /dev/null and b/screenshots/S4.png differ diff --git a/screenshots/S5.png b/screenshots/S5.png new file mode 100644 index 0000000..e317ad7 Binary files /dev/null and b/screenshots/S5.png differ diff --git a/screenshots/S6.png b/screenshots/S6.png new file mode 100644 index 0000000..f05812f Binary files /dev/null and b/screenshots/S6.png differ diff --git a/screenshots/Screenshot_1642326281.png b/screenshots/Screenshot_1642326281.png deleted file mode 100644 index 01cc8dc..0000000 Binary files a/screenshots/Screenshot_1642326281.png and /dev/null differ diff --git a/screenshots/Screenshot_1642326294.png b/screenshots/Screenshot_1642326294.png deleted file mode 100644 index 9cf09fd..0000000 Binary files a/screenshots/Screenshot_1642326294.png and /dev/null differ diff --git a/screenshots/Screenshot_1642327163.png b/screenshots/Screenshot_1642327163.png deleted file mode 100644 index 88bdef6..0000000 Binary files a/screenshots/Screenshot_1642327163.png and /dev/null differ diff --git a/screenshots/Screenshot_1642327175.png b/screenshots/Screenshot_1642327175.png deleted file mode 100644 index 6bc4f4f..0000000 Binary files a/screenshots/Screenshot_1642327175.png and /dev/null differ diff --git a/screenshots/Screenshot_1642327181.png b/screenshots/Screenshot_1642327181.png deleted file mode 100644 index 2ce5c17..0000000 Binary files a/screenshots/Screenshot_1642327181.png and /dev/null differ diff --git a/screenshots/Screenshot_1642327190.png b/screenshots/Screenshot_1642327190.png deleted file mode 100644 index 6c2d2e6..0000000 Binary files a/screenshots/Screenshot_1642327190.png and /dev/null differ diff --git a/screenshots/Screenshot_1642327197.png b/screenshots/Screenshot_1642327197.png deleted file mode 100644 index 14a49e6..0000000 Binary files a/screenshots/Screenshot_1642327197.png and /dev/null differ diff --git a/screenshots/Screenshot_1642327210.png b/screenshots/Screenshot_1642327210.png deleted file mode 100644 index d38c0db..0000000 Binary files a/screenshots/Screenshot_1642327210.png and /dev/null differ diff --git a/settings.gradle b/settings.gradle index 67d5f1a..038c0c9 100644 --- a/settings.gradle +++ b/settings.gradle @@ -6,7 +6,7 @@ dependencyResolutionManagement { // jcenter() // Warning: this repository is going to shut down soon } } -rootProject.name = "News" +rootProject.name = "HackerNews" include ':app' enableFeaturePreview("VERSION_CATALOGS")