From 8cb5216d8ecbe0871264d546a35b9d415dac6bd9 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Tue, 18 Oct 2022 18:44:08 +0100 Subject: [PATCH] Add settings module, refactor top bar --- app/build.gradle.kts | 1 + .../apps/nowinandroid/ui/NavigationTest.kt | 43 +++++++++++++++++++ .../apps/nowinandroid/ui/NiaAppStateTest.kt | 13 ++++++ .../navigation/TopLevelDestination.kt | 13 ++++-- .../samples/apps/nowinandroid/ui/NiaApp.kt | 20 +++++++++ .../apps/nowinandroid/ui/NiaAppState.kt | 6 ++- build.gradle.kts | 1 + .../nowinandroid/data/user_preferences.proto | 5 ++- .../core/designsystem/component/TopAppBar.kt | 4 +- .../core/designsystem/icon/NiaIcons.kt | 2 + .../src/main/res/values/strings.xml | 1 + .../navigation/NiaNavigationDestination.kt | 0 .../feature/bookmarks/BookmarksScreen.kt | 15 ------- .../bookmarks/src/main/res/values/strings.xml | 2 +- .../feature/foryou/ForYouScreen.kt | 15 ------- .../foryou/src/main/res/values/strings.xml | 1 - .../feature/interests/InterestsScreen.kt | 14 ------ .../interests/src/main/res/values/strings.xml | 2 + feature/settings/.gitignore | 1 + feature/settings/build.gradle.kts | 24 +++++++++++ feature/settings/proguard-rules.pro | 21 +++++++++ feature/settings/src/main/AndroidManifest.xml | 19 ++++++++ .../settings/src/main/res/values/strings.xml | 19 ++++++++ settings.gradle.kts | 1 + 24 files changed, 189 insertions(+), 54 deletions(-) create mode 100644 core/navigation/src/main/java/com/google/samples/apps/nowinandroid/core/navigation/NiaNavigationDestination.kt create mode 100644 feature/settings/.gitignore create mode 100644 feature/settings/build.gradle.kts create mode 100644 feature/settings/proguard-rules.pro create mode 100644 feature/settings/src/main/AndroidManifest.xml create mode 100644 feature/settings/src/main/res/values/strings.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3ef79890e..f7d561dbc 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -82,6 +82,7 @@ dependencies { implementation(project(":feature:foryou")) implementation(project(":feature:bookmarks")) implementation(project(":feature:topic")) + implementation(project(":feature:settings")) implementation(project(":core:common")) implementation(project(":core:ui")) diff --git a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt index 184d48507..abbf774fe 100644 --- a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt +++ b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt @@ -16,17 +16,22 @@ package com.google.samples.apps.nowinandroid.ui +import androidx.compose.ui.test.assertCountEquals import androidx.compose.ui.test.assertIsOn import androidx.compose.ui.test.assertIsSelected import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick import androidx.test.espresso.Espresso import androidx.test.espresso.NoActivityResumedException import com.google.samples.apps.nowinandroid.MainActivity +import com.google.samples.apps.nowinandroid.R +import com.google.samples.apps.nowinandroid.feature.bookmarks.R as BookmarksR import com.google.samples.apps.nowinandroid.feature.foryou.R as FeatureForyouR import com.google.samples.apps.nowinandroid.feature.interests.R as FeatureInterestsR +import com.google.samples.apps.nowinandroid.feature.settings.R as SettingsR import dagger.hilt.android.testing.BindValue import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidTest @@ -67,6 +72,9 @@ class NavigationTest { private lateinit var forYou: String private lateinit var interests: String private lateinit var sampleTopic: String + private lateinit var appName: String + private lateinit var saved: String + private lateinit var settings: String @Before fun setup() { @@ -77,6 +85,9 @@ class NavigationTest { forYou = getString(FeatureForyouR.string.for_you) interests = getString(FeatureInterestsR.string.interests) sampleTopic = "Headlines" + appName = getString(R.string.app_name) + saved = getString(BookmarksR.string.saved) + settings = getString(SettingsR.string.top_app_bar_action_icon_description) } } @@ -146,6 +157,38 @@ class NavigationTest { } } + @Test + fun topLevelDestinations_showTopBarWithTitle() { + composeTestRule.apply { + + // Verify that the top bar contains the app name on the first screen. + onNodeWithText(appName).assertExists() + + // Go to the bookmarks tab, verify that the top bar contains the app name. + onNodeWithText(saved).performClick() + onNodeWithText(appName).assertExists() + + // Go to the interests tab, verify that the top bar contains "Interests". This means + // we'll have 2 elements with the text "Interests" on screen. One in the top bar, and + // one in the bottom navigation. + onNodeWithText(interests).performClick() + onAllNodesWithText(interests).assertCountEquals(2) + } + } + + @Test + fun topLevelDestinations_showSettingsIcon() { + composeTestRule.apply { + onNodeWithContentDescription(settings).assertExists() + + onNodeWithText(saved).performClick() + onNodeWithContentDescription(settings).assertExists() + + onNodeWithText(interests).performClick() + onNodeWithContentDescription(settings).assertExists() + } + } + /* * There should always be at most one instance of a top-level destination at the same time. */ diff --git a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt index c2e17700f..f6361d844 100644 --- a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt +++ b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt @@ -87,6 +87,19 @@ class NiaAppStateTest { assertTrue(state.topLevelDestinations[2].name.contains("interests", true)) } + @Test + fun niaAppState_showTopBarForTopLevelDestinations() { + composeTestRule.setContent { + val navController = rememberTestNavController() + state = rememberNiaAppState( + windowSizeClass = getCompactWindowClass(), + navController = navController + ) + + // Do nothing - we should already be + } + } + @Test fun niaAppState_showBottomBar_compact() { composeTestRule.setContent { diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt b/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt index 566997920..247b2934b 100644 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt +++ b/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt @@ -23,6 +23,7 @@ import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.feature.bookmarks.R as bookmarksR import com.google.samples.apps.nowinandroid.feature.foryou.R as forYouR import com.google.samples.apps.nowinandroid.feature.interests.R as interestsR +import com.google.samples.apps.nowinandroid.R /** * Type for the top level destinations in the application. Each of these destinations @@ -32,21 +33,25 @@ import com.google.samples.apps.nowinandroid.feature.interests.R as interestsR enum class TopLevelDestination( val selectedIcon: Icon, val unselectedIcon: Icon, - val iconTextId: Int + val iconTextId: Int, + val titleTextId: Int ) { FOR_YOU( selectedIcon = DrawableResourceIcon(NiaIcons.Upcoming), unselectedIcon = DrawableResourceIcon(NiaIcons.UpcomingBorder), - iconTextId = forYouR.string.for_you + iconTextId = forYouR.string.for_you, + titleTextId = R.string.app_name ), BOOKMARKS( selectedIcon = DrawableResourceIcon(NiaIcons.Bookmarks), unselectedIcon = DrawableResourceIcon(NiaIcons.BookmarksBorder), - iconTextId = bookmarksR.string.saved + iconTextId = bookmarksR.string.saved, + titleTextId = bookmarksR.string.saved ), INTERESTS( selectedIcon = ImageVectorIcon(NiaIcons.Grid3x3), unselectedIcon = ImageVectorIcon(NiaIcons.Grid3x3), - iconTextId = interestsR.string.interests + iconTextId = interestsR.string.interests, + titleTextId = interestsR.string.interests ) } diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt b/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt index 01c72499a..f28824c5a 100644 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt +++ b/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt @@ -32,6 +32,7 @@ import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.windowsizeclass.WindowSizeClass import androidx.compose.runtime.Composable import androidx.compose.ui.ExperimentalComposeUiApi @@ -49,8 +50,11 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaNavig import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaNavigationBarItem import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaNavigationRail import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaNavigationRailItem +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopAppBar import com.google.samples.apps.nowinandroid.core.designsystem.icon.Icon.DrawableResourceIcon import com.google.samples.apps.nowinandroid.core.designsystem.icon.Icon.ImageVectorIcon +import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons +import com.google.samples.apps.nowinandroid.feature.settings.R as settingsR import com.google.samples.apps.nowinandroid.navigation.NiaNavHost import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination @@ -78,6 +82,22 @@ fun NiaApp( containerColor = Color.Transparent, contentColor = MaterialTheme.colorScheme.onBackground, contentWindowInsets = WindowInsets(0, 0, 0, 0), + topBar = { + val destination = appState.topLevelDestinations[appState.currentDestination?.route] + if (appState.shouldShowTopBar && destination != null) { + NiaTopAppBar( + titleRes = destination.titleTextId, + actionIcon = NiaIcons.Settings, + actionIconContentDescription = stringResource( + id = settingsR.string.top_app_bar_action_icon_description + ), + colors = TopAppBarDefaults.centerAlignedTopAppBarColors( + containerColor = Color.Transparent + ), + onActionClick = { /*openAccountDialog = true*/ } + ) + } + }, bottomBar = { if (appState.shouldShowBottomBar) { NiaBottomBar( diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt b/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt index 04e2f395f..250bdf5d1 100644 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt +++ b/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt @@ -59,6 +59,9 @@ class NiaAppState( @Composable get() = navController .currentBackStackEntryAsState().value?.destination + val shouldShowTopBar: Boolean + @Composable get() = (currentDestination?.route in topLevelDestinations) + val shouldShowBottomBar: Boolean get() = windowSizeClass.widthSizeClass == WindowWidthSizeClass.Compact || windowSizeClass.heightSizeClass == WindowHeightSizeClass.Compact @@ -67,7 +70,8 @@ class NiaAppState( get() = !shouldShowBottomBar /** - * Top level destinations to be used in the BottomBar and NavRail + * Map of top level destinations to be used in the TopBar, BottomBar and NavRail. The key is the + * route. */ val topLevelDestinations: List = TopLevelDestination.values().asList() diff --git a/build.gradle.kts b/build.gradle.kts index 6f6d375d7..c663aadc9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,4 +31,5 @@ plugins { alias(libs.plugins.kotlin.serialization) apply false alias(libs.plugins.hilt) apply false alias(libs.plugins.secrets) apply false + id("org.jetbrains.kotlin.android") version "1.7.10" apply false } \ No newline at end of file diff --git a/core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto b/core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto index c20dc4adb..f0eca3d32 100644 --- a/core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto +++ b/core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto @@ -40,6 +40,7 @@ message UserPreferences { map followed_topic_ids = 13; map followed_author_ids = 14; map bookmarked_news_resource_ids = 15; - ThemeBrandProto theme_brand = 12; - DarkThemeConfigProto dark_theme_config = 13; + + ThemeBrandProto theme_brand = 16; + DarkThemeConfigProto dark_theme_config = 17; } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBar.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBar.kt index d82c86989..20cc5c06b 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBar.kt +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBar.kt @@ -32,7 +32,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.tooling.preview.Preview +import com.google.samples.apps.nowinandroid.core.designsystem.R @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -97,7 +99,7 @@ fun NiaTopAppBar( } }, colors = colors, - modifier = modifier + modifier = modifier, ) } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/icon/NiaIcons.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/icon/NiaIcons.kt index b6c06c8ee..c5367425d 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/icon/NiaIcons.kt +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/icon/NiaIcons.kt @@ -32,6 +32,7 @@ import androidx.compose.material.icons.rounded.Grid3x3 import androidx.compose.material.icons.rounded.Person import androidx.compose.material.icons.rounded.PlayArrow import androidx.compose.material.icons.rounded.Search +import androidx.compose.material.icons.rounded.Settings import androidx.compose.material.icons.rounded.ShortText import androidx.compose.material.icons.rounded.Tag import androidx.compose.material.icons.rounded.ViewDay @@ -64,6 +65,7 @@ object NiaIcons { val Person = Icons.Rounded.Person val PlayArrow = Icons.Rounded.PlayArrow val Search = Icons.Rounded.Search + val Settings = Icons.Rounded.Settings val ShortText = Icons.Rounded.ShortText val Tag = Icons.Rounded.Tag val Upcoming = R.drawable.ic_upcoming diff --git a/core/designsystem/src/main/res/values/strings.xml b/core/designsystem/src/main/res/values/strings.xml index 5d1158888..3cc19c6ef 100644 --- a/core/designsystem/src/main/res/values/strings.xml +++ b/core/designsystem/src/main/res/values/strings.xml @@ -18,4 +18,5 @@ Follow Unfollow Browse topic + Screen title diff --git a/core/navigation/src/main/java/com/google/samples/apps/nowinandroid/core/navigation/NiaNavigationDestination.kt b/core/navigation/src/main/java/com/google/samples/apps/nowinandroid/core/navigation/NiaNavigationDestination.kt new file mode 100644 index 000000000..e69de29bb diff --git a/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt b/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt index 849291df3..b7618dbb2 100644 --- a/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt +++ b/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt @@ -34,7 +34,6 @@ import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Scaffold -import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier @@ -46,8 +45,6 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaLoadingWheel -import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopAppBar -import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState import com.google.samples.apps.nowinandroid.core.ui.TrackScrollJank import com.google.samples.apps.nowinandroid.core.ui.newsFeed @@ -74,18 +71,6 @@ fun BookmarksScreen( modifier: Modifier = Modifier ) { Scaffold( - topBar = { - NiaTopAppBar( - titleRes = R.string.top_app_bar_title_saved, - actionIcon = NiaIcons.AccountCircle, - actionIconContentDescription = stringResource( - id = R.string.top_app_bar_action_menu - ), - colors = TopAppBarDefaults.centerAlignedTopAppBarColors( - containerColor = Color.Transparent - ) - ) - }, containerColor = Color.Transparent, contentWindowInsets = WindowInsets(0, 0, 0, 0) ) { innerPadding -> diff --git a/feature/bookmarks/src/main/res/values/strings.xml b/feature/bookmarks/src/main/res/values/strings.xml index bf59e2ec8..996c23dc2 100644 --- a/feature/bookmarks/src/main/res/values/strings.xml +++ b/feature/bookmarks/src/main/res/values/strings.xml @@ -17,7 +17,7 @@ Saved Loading saved… - Saved + Saved Search Menu \ No newline at end of file diff --git a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt b/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt index c482f0edf..a2aabcdc7 100644 --- a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt +++ b/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt @@ -63,7 +63,6 @@ import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Surface import androidx.compose.material3.Text -import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -93,7 +92,6 @@ import coil.compose.AsyncImage import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaFilledButton import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaOverlayLoadingWheel import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaToggleButton -import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopAppBar import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.domain.model.FollowableAuthor @@ -173,19 +171,6 @@ internal fun ForYouScreen( Scaffold( snackbarHost = { SnackbarHost(snackbarHostState) }, - topBar = { - NiaTopAppBar( - titleRes = R.string.top_app_bar_title, - actionIcon = NiaIcons.AccountCircle, - actionIconContentDescription = stringResource( - id = R.string.for_you_top_app_bar_action_my_account - ), - colors = TopAppBarDefaults.centerAlignedTopAppBarColors( - containerColor = Color.Transparent - ), - onActionClick = { openAccountDialog = true } - ) - }, containerColor = Color.Transparent, contentWindowInsets = WindowInsets(0, 0, 0, 0) ) { innerPadding -> diff --git a/feature/foryou/src/main/res/values/strings.xml b/feature/foryou/src/main/res/values/strings.xml index e8f432bf7..5a66a0645 100644 --- a/feature/foryou/src/main/res/values/strings.xml +++ b/feature/foryou/src/main/res/values/strings.xml @@ -22,7 +22,6 @@ What are you interested in? Updates from topics you follow will appear here. Follow some things to get started. Now in Android - My account Search ⚠️ You aren’t connected to the internet diff --git a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt b/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt index d92579723..ab50ea0b6 100644 --- a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt +++ b/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt @@ -19,12 +19,10 @@ package com.google.samples.apps.nowinandroid.feature.interests import androidx.compose.foundation.layout.Column import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Text -import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi @@ -33,8 +31,6 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaBackg import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaLoadingWheel import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTab import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTabRow -import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopAppBar -import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.domain.model.FollowableAuthor import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic @@ -90,16 +86,6 @@ internal fun InterestsScreen( modifier = modifier, horizontalAlignment = Alignment.CenterHorizontally ) { - NiaTopAppBar( - titleRes = R.string.interests, - actionIcon = NiaIcons.MoreVert, - actionIconContentDescription = stringResource( - id = R.string.interests_top_app_bar_action_menu - ), - colors = TopAppBarDefaults.centerAlignedTopAppBarColors( - containerColor = Color.Transparent - ) - ) when (uiState) { InterestsUiState.Loading -> NiaLoadingWheel( diff --git a/feature/interests/src/main/res/values/strings.xml b/feature/interests/src/main/res/values/strings.xml index e265c1e9e..d1c46a28d 100644 --- a/feature/interests/src/main/res/values/strings.xml +++ b/feature/interests/src/main/res/values/strings.xml @@ -15,6 +15,7 @@ limitations under the License. --> + Interests Topics People @@ -22,6 +23,7 @@ "No available data" Follow interest button Unfollow interest button + Interests Menu Search diff --git a/feature/settings/.gitignore b/feature/settings/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/feature/settings/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/feature/settings/build.gradle.kts b/feature/settings/build.gradle.kts new file mode 100644 index 000000000..dc88a74de --- /dev/null +++ b/feature/settings/build.gradle.kts @@ -0,0 +1,24 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +plugins { + id("nowinandroid.android.feature") + id("nowinandroid.android.library.compose") + id("nowinandroid.android.library.jacoco") +} + +android { + namespace = "com.google.samples.apps.nowinandroid.feature.settings" +} diff --git a/feature/settings/proguard-rules.pro b/feature/settings/proguard-rules.pro new file mode 100644 index 000000000..481bb4348 --- /dev/null +++ b/feature/settings/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 \ No newline at end of file diff --git a/feature/settings/src/main/AndroidManifest.xml b/feature/settings/src/main/AndroidManifest.xml new file mode 100644 index 000000000..ec921f928 --- /dev/null +++ b/feature/settings/src/main/AndroidManifest.xml @@ -0,0 +1,19 @@ + + + + + \ No newline at end of file diff --git a/feature/settings/src/main/res/values/strings.xml b/feature/settings/src/main/res/values/strings.xml new file mode 100644 index 000000000..415c11e1d --- /dev/null +++ b/feature/settings/src/main/res/values/strings.xml @@ -0,0 +1,19 @@ + + + + Settings + \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index c6e2d3bf5..d8ff0162c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -51,6 +51,7 @@ include(":feature:foryou") include(":feature:interests") include(":feature:bookmarks") include(":feature:topic") +include(":feature:settings") include(":lint") include(":sync:work") include(":sync:sync-test")