diff --git a/src/components/Switch/Switch.js b/src/components/Switch/Switch.js
deleted file mode 100644
index 31a0b4bc..00000000
--- a/src/components/Switch/Switch.js
+++ /dev/null
@@ -1,49 +0,0 @@
-import React from 'react';
-import { Pressable, StyleSheet, View, Text } from 'react-native';
-import color from 'color';
-import { Switch, List } from 'react-native-paper';
-
-const SwitchSetting = ({ label, description, onPress, theme, icon, value }) => (
-
-
- {icon && (
-
- )}
-
-
- {label}
-
- {description && (
- {description}
- )}
-
-
-
-
-);
-
-export default SwitchSetting;
-
-const styles = StyleSheet.create({
- container: {
- paddingHorizontal: 16,
- flexDirection: 'row',
- justifyContent: 'space-between',
- },
-});
diff --git a/src/components/Switch/Switch.tsx b/src/components/Switch/Switch.tsx
new file mode 100644
index 00000000..83c712c6
--- /dev/null
+++ b/src/components/Switch/Switch.tsx
@@ -0,0 +1,82 @@
+import React from 'react';
+import { Pressable, StyleSheet, View, Text } from 'react-native';
+import color from 'color';
+import { Switch, List } from 'react-native-paper';
+import { MD3ThemeType } from '@theme/types';
+
+interface SwitchProps {
+ label: string;
+ description?: string;
+ onPress: () => void;
+ theme: MD3ThemeType;
+ icon?: string;
+ value: boolean;
+}
+
+const SwitchSetting: React.FC = ({
+ label,
+ description,
+ onPress,
+ theme,
+ icon,
+ value,
+}) => {
+ const styles = StyleSheet.create({
+ container: {
+ paddingHorizontal: 16,
+ flexDirection: 'row',
+ justifyContent: 'space-between',
+ paddingVertical: description ? 16 : 12,
+ },
+ row: {
+ flexDirection: 'row',
+ flex: 1,
+ },
+ icon: {
+ margin: 0,
+ },
+ textContainer: {
+ marginLeft: icon && 16,
+ },
+ text: {
+ fontSize: 16,
+ flex: 1,
+ textAlignVertical: 'center',
+ },
+ switch: { marginLeft: 8 },
+ });
+
+ return (
+
+
+ {icon && (
+
+ )}
+
+
+ {label}
+
+ {description && (
+
+ {description}
+
+ )}
+
+
+
+
+ );
+};
+
+export default SwitchSetting;
diff --git a/src/navigators/MoreStack.js b/src/navigators/MoreStack.js
index cc6afc55..87f02c45 100644
--- a/src/navigators/MoreStack.js
+++ b/src/navigators/MoreStack.js
@@ -9,7 +9,7 @@ import TrackerSettings from '../screens/settings/SettingsTrackerScreen';
import ReaderSettings from '../screens/settings/SettingsReaderScreen/SettingsReaderScreen';
import BackupSettings from '../screens/settings/SettingsBackupScreen';
import AdvancedSettings from '../screens/settings/SettingsAdvancedScreen';
-import GeneralSettings from '../screens/settings/SettingsGeneralScreen';
+import GeneralSettings from '../screens/settings/SettingsGeneralScreen/SettingsGeneralScreen';
import DownloadQueue from '../screens/more/DownloadQueueScreen';
import Downloads from '../screens/more/DownloadsScreen';
import AppearanceSettings from '../screens/settings/SettingsAppearanceScreen';
diff --git a/src/screens/library/constants/constants.ts b/src/screens/library/constants/constants.ts
index f6e54656..3a12628a 100644
--- a/src/screens/library/constants/constants.ts
+++ b/src/screens/library/constants/constants.ts
@@ -44,27 +44,27 @@ export enum LibrarySortOrder {
export const librarySortOrderList = [
{
- label: 'Alphabetically',
+ label: getString('libraryScreen.bottomSheet.sortOrders.alphabetically'),
ASC: LibrarySortOrder.Alphabetically_ASC,
DESC: LibrarySortOrder.Alphabetically_DESC,
},
{
- label: 'Last Read',
+ label: getString('libraryScreen.bottomSheet.sortOrders.lastRead'),
ASC: LibrarySortOrder.LastRead_ASC,
DESC: LibrarySortOrder.LastRead_DESC,
},
{
- label: 'Unread',
+ label: getString('libraryScreen.bottomSheet.sortOrders.unread'),
ASC: LibrarySortOrder.Unread_ASC,
DESC: LibrarySortOrder.Unread_DESC,
},
{
- label: 'Downloaded',
+ label: getString('libraryScreen.bottomSheet.sortOrders.download'),
ASC: LibrarySortOrder.Downloaded_ASC,
DESC: LibrarySortOrder.Downloaded_DESC,
},
{
- label: 'Total chapters',
+ label: getString('libraryScreen.bottomSheet.sortOrders.totalChapters'),
ASC: LibrarySortOrder.TotalChapters_ASC,
DESC: LibrarySortOrder.TotalChapters_DESC,
},
diff --git a/src/screens/reader/components/ReaderBottomSheet/ReaderBottomSheet.tsx b/src/screens/reader/components/ReaderBottomSheet/ReaderBottomSheet.tsx
index 1371ea48..8a2b5f44 100644
--- a/src/screens/reader/components/ReaderBottomSheet/ReaderBottomSheet.tsx
+++ b/src/screens/reader/components/ReaderBottomSheet/ReaderBottomSheet.tsx
@@ -99,7 +99,7 @@ const GeneralTab: React.FC = () => {
theme={theme}
/>
dispatch(
setAppSettings(
@@ -112,7 +112,7 @@ const GeneralTab: React.FC = () => {
theme={theme}
/>
dispatch(setAppSettings('useVolumeButtons', !useVolumeButtons))
}
diff --git a/src/screens/reader/components/ReaderBottomSheet/ReaderFontPicker.tsx b/src/screens/reader/components/ReaderBottomSheet/ReaderFontPicker.tsx
index a46f7023..f9131e72 100644
--- a/src/screens/reader/components/ReaderBottomSheet/ReaderFontPicker.tsx
+++ b/src/screens/reader/components/ReaderBottomSheet/ReaderFontPicker.tsx
@@ -1,5 +1,5 @@
import React from 'react';
-import { Pressable, ScrollView, StyleSheet, Text, View } from 'react-native';
+import { Pressable, StyleSheet, Text, View } from 'react-native';
import color from 'color';
import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
@@ -9,6 +9,7 @@ import { useTheme } from '@hooks/useTheme';
import { setReaderSettings } from '../../../../redux/settings/settings.actions';
import { Font, readerFonts } from '../../../../utils/constants/readerConstants';
+import { FlatList } from 'react-native-gesture-handler';
const ReaderFontPicker = () => {
const dispatch = useAppDispatch();
@@ -23,61 +24,66 @@ const ReaderFontPicker = () => {
{getString('readerScreen.bottomSheet.fontStyle')}
-
- {readerFonts.map(item => (
-
-
- dispatch(setReaderSettings('fontFamily', item.fontFamily))
- }
- android_ripple={{
- color: color(theme.primary).alpha(0.12).string(),
- }}
- >
- {isSelected(item) ? (
-
- ) : null}
-
- {item.name}
-
-
-
- ))}
-
+ />
);
+ interface FontChipProps {
+ item: Font;
+ }
+
+ function FontChipItem({ item }: FontChipProps) {
+ return (
+
+
+ dispatch(setReaderSettings('fontFamily', item.fontFamily))
+ }
+ android_ripple={{
+ color: color(theme.primary).alpha(0.12).string(),
+ }}
+ >
+ {isSelected(item) ? (
+
+ ) : null}
+
+ {item.name}
+
+
+
+ );
+ }
};
export default ReaderFontPicker;
-
const styles = StyleSheet.create({
container: {
borderRadius: 8,
@@ -85,12 +91,13 @@ const styles = StyleSheet.create({
marginHorizontal: 6,
},
content: {
+ flexGrow: 1,
flexDirection: 'row',
- alignItems: 'center',
- borderRadius: 8,
- paddingVertical: 4,
+ paddingVertical: 1,
+ justifyContent: 'center',
paddingHorizontal: 10,
minHeight: 32,
+ alignItems: 'center',
},
row: {
flexDirection: 'row',
@@ -102,9 +109,6 @@ const styles = StyleSheet.create({
title: {
marginRight: 16,
},
- scrollContainer: {
- alignItems: 'center',
- },
label: {
fontSize: 16,
},
diff --git a/src/screens/settings/SettingsGeneralScreen.js b/src/screens/settings/SettingsGeneralScreen.js
deleted file mode 100644
index 30ac197c..00000000
--- a/src/screens/settings/SettingsGeneralScreen.js
+++ /dev/null
@@ -1,192 +0,0 @@
-import React from 'react';
-import { ScrollView } from 'react-native';
-
-import { useDispatch, useSelector } from 'react-redux';
-
-import SwitchSetting from '../../components/Switch/Switch';
-import DisplayModeModal from '../more/components/DisplayModeModal';
-import GridSizeModal from '../more/components/GridSizeModal';
-
-import { useSettings } from '../../hooks/reduxHooks';
-import { useTheme } from '@hooks/useTheme';
-import { setAppSettings } from '../../redux/settings/settings.actions';
-import { SHOW_LAST_UPDATE_TIME } from '../../redux/updates/updates.types';
-import DefaultChapterSortModal from './components/DefaultChapterSortModal';
-import {
- DisplayModes,
- displayModesList,
-} from '@screens/library/constants/constants';
-import { useLibrarySettings } from '@hooks/useSettings';
-import useBoolean from '@hooks/useBoolean';
-import { Appbar, List } from '@components';
-
-const GenralSettings = ({ navigation }) => {
- const theme = useTheme();
- const dispatch = useDispatch();
-
- const { displayMode = DisplayModes.Comfortable, novelsPerRow = 3 } =
- useLibrarySettings();
-
- const {
- updateLibraryOnLaunch = false,
- downloadNewChapters = false,
- onlyUpdateOngoingNovels = false,
- defaultChapterSort = 'ORDER BY chapterId ASC',
- refreshNovelMetadata = false,
- disableHapticFeedback = false,
- useLibraryFAB = false,
- } = useSettings();
-
- const { showLastUpdateTime = true } = useSelector(
- state => state.updatesReducer,
- );
-
- /**
- * Display Mode Modal
- */
- const displayModalRef = useBoolean();
-
- /**
- * Grid Size Modal
- */
- const gridSizeModalRef = useBoolean();
-
- const defaultChapterSortModal = useBoolean();
-
- return (
- <>
-
-
-
- Display
-
-
-
- Library
-
- dispatch(
- setAppSettings('updateLibraryOnLaunch', !updateLibraryOnLaunch),
- )
- }
- theme={theme}
- />
-
- dispatch(setAppSettings('useLibraryFAB', !useLibraryFAB))
- }
- theme={theme}
- />
-
- Novel
-
-
- Global update
-
- dispatch(
- setAppSettings(
- 'onlyUpdateOngoingNovels',
- !onlyUpdateOngoingNovels,
- ),
- )
- }
- theme={theme}
- />
-
- dispatch(
- setAppSettings('refreshNovelMetadata', !refreshNovelMetadata),
- )
- }
- theme={theme}
- />
-
- dispatch({
- type: SHOW_LAST_UPDATE_TIME,
- payload: !showLastUpdateTime,
- })
- }
- theme={theme}
- />
-
- Auto-download
-
- dispatch(
- setAppSettings('downloadNewChapters', !downloadNewChapters),
- )
- }
- theme={theme}
- />
-
- General
-
- dispatch(
- setAppSettings('disableHapticFeedback', !disableHapticFeedback),
- )
- }
- theme={theme}
- />
-
-
-
-
-
- >
- );
-};
-
-export default GenralSettings;
diff --git a/src/screens/settings/SettingsGeneralScreen/SettingsGeneralScreen.tsx b/src/screens/settings/SettingsGeneralScreen/SettingsGeneralScreen.tsx
new file mode 100644
index 00000000..6e0a5bfe
--- /dev/null
+++ b/src/screens/settings/SettingsGeneralScreen/SettingsGeneralScreen.tsx
@@ -0,0 +1,328 @@
+import React from 'react';
+import { ScrollView } from 'react-native';
+
+import { useDispatch, useSelector } from 'react-redux';
+
+import SwitchSetting from '../../../components/Switch/Switch';
+import DisplayModeModal from './modals/DisplayModeModal';
+import GridSizeModal from './modals/GridSizeModal';
+
+import { useSettings } from '../../../hooks/reduxHooks';
+import { useTheme } from '@hooks/useTheme';
+import { setAppSettings } from '../../../redux/settings/settings.actions';
+import { SHOW_LAST_UPDATE_TIME } from '../../../redux/updates/updates.types';
+import DefaultChapterSortModal from '../components/DefaultChapterSortModal';
+import {
+ DisplayModes,
+ displayModesList,
+ LibrarySortOrder,
+} from '@screens/library/constants/constants';
+import { useLibrarySettings } from '@hooks/useSettings';
+import useBoolean from '@hooks/useBoolean';
+import { Appbar, List } from '@components';
+import NovelSortModal from './modals/NovelSortModal';
+import NovelBadgesModal from './modals/NovelBadgesModal';
+import { RootState } from '@redux/store';
+import { NavigationState } from '@react-navigation/native';
+import { getString } from '@strings/translations';
+
+interface GenralSettingsProps {
+ navigation: NavigationState;
+}
+
+const GenralSettings: React.FC = ({ navigation }) => {
+ const theme = useTheme();
+ const dispatch = useDispatch();
+
+ const {
+ displayMode = DisplayModes.Comfortable,
+ novelsPerRow = 3,
+ showDownloadBadges = true,
+ showNumberOfNovels = false,
+ showUnreadBadges = true,
+ sortOrder = LibrarySortOrder.DateAdded_DESC,
+ } = useLibrarySettings();
+
+ const sortOrderDisplay: string[] = sortOrder.split(' ');
+ const sortOrderNameMap = new Map([
+ ['lastReadAt', 'libraryScreen.bottomSheet.sortOrders.lastRead'],
+ ['novels.novelName', 'libraryScreen.bottomSheet.sortOrders.alphabetically'],
+ ['novels.unread', 'libraryScreen.bottomSheet.sortOrders.unread'],
+ ['chaptersDownloaded', 'libraryScreen.bottomSheet.sortOrders.download'],
+ ['novelId', 'libraryScreen.bottomSheet.sortOrders.dateAdded'],
+ ['chaptersUnread', 'libraryScreen.bottomSheet.sortOrders.totalChapters'],
+ ]);
+
+ const {
+ updateLibraryOnLaunch = false,
+ downloadNewChapters = false,
+ onlyUpdateOngoingNovels = false,
+ defaultChapterSort = 'ORDER BY chapterId ASC',
+ refreshNovelMetadata = false,
+ disableHapticFeedback = false,
+ useLibraryFAB = false,
+ } = useSettings();
+
+ const { showLastUpdateTime = true } = useSelector(
+ (state: RootState) => state.updatesReducer,
+ );
+
+ const generateNovelBadgesDescription = () => {
+ let res = [];
+ if (showDownloadBadges) {
+ res.push('Download');
+ }
+ if (showUnreadBadges) {
+ res.push('Unread');
+ }
+ if (showNumberOfNovels) {
+ res.push('Number of Items');
+ }
+ return res.join(', ');
+ };
+
+ /**
+ * Display Mode Modal
+ */
+ const displayModalRef = useBoolean();
+
+ /**
+ * Grid Size Modal
+ */
+ const gridSizeModalRef = useBoolean();
+
+ /**
+ * Novel Badges Modal
+ */
+ const novelBadgesModalRef = useBoolean();
+ const novelBadgesDescription = generateNovelBadgesDescription();
+ /**
+ * Novel Sort Modal
+ */
+ const novelSortModalRef = useBoolean();
+ /**
+ * Chapter Sort Modal
+ */
+ const defaultChapterSortModal = useBoolean();
+ return (
+ <>
+
+
+
+
+ {getString(
+ 'moreScreen.settingsScreen.generalSettingsScreen.display',
+ )}
+
+
+
+
+
+
+ {getString('library')}
+
+ dispatch(
+ setAppSettings('updateLibraryOnLaunch', !updateLibraryOnLaunch),
+ )
+ }
+ theme={theme}
+ />
+
+ dispatch(setAppSettings('useLibraryFAB', !useLibraryFAB))
+ }
+ theme={theme}
+ />
+
+
+ {getString('moreScreen.settingsScreen.generalSettingsScreen.novel')}
+
+
+
+
+ {getString(
+ 'moreScreen.settingsScreen.generalSettingsScreen.globalUpdate',
+ )}
+
+
+ dispatch(
+ setAppSettings(
+ 'onlyUpdateOngoingNovels',
+ !onlyUpdateOngoingNovels,
+ ),
+ )
+ }
+ theme={theme}
+ />
+
+ dispatch(
+ setAppSettings('refreshNovelMetadata', !refreshNovelMetadata),
+ )
+ }
+ theme={theme}
+ />
+
+ dispatch({
+ type: SHOW_LAST_UPDATE_TIME,
+ payload: !showLastUpdateTime,
+ })
+ }
+ theme={theme}
+ />
+
+
+ {getString(
+ 'moreScreen.settingsScreen.generalSettingsScreen.autoDownload',
+ )}
+
+
+ dispatch(
+ setAppSettings('downloadNewChapters', !downloadNewChapters),
+ )
+ }
+ theme={theme}
+ />
+
+
+ {getString('moreScreen.settingsScreen.generalSettings')}
+
+
+ dispatch(
+ setAppSettings('disableHapticFeedback', !disableHapticFeedback),
+ )
+ }
+ theme={theme}
+ />
+
+
+
+
+
+
+
+ >
+ );
+};
+
+export default GenralSettings;
diff --git a/src/screens/more/components/DisplayModeModal.js b/src/screens/settings/SettingsGeneralScreen/modals/DisplayModeModal.tsx
similarity index 60%
rename from src/screens/more/components/DisplayModeModal.js
rename to src/screens/settings/SettingsGeneralScreen/modals/DisplayModeModal.tsx
index 9d0c391b..54cd8f5b 100644
--- a/src/screens/more/components/DisplayModeModal.js
+++ b/src/screens/settings/SettingsGeneralScreen/modals/DisplayModeModal.tsx
@@ -1,13 +1,24 @@
-import { displayModesList } from '@screens/library/constants/constants';
+import {
+ DisplayModes,
+ displayModesList,
+} from '@screens/library/constants/constants';
import React from 'react';
-import { StyleSheet } from 'react-native';
+import { Text, StyleSheet } from 'react-native';
import { Portal, Modal, overlay } from 'react-native-paper';
-import { RadioButton } from '../../../components/RadioButton/RadioButton';
+import { RadioButton } from '../../../../components/RadioButton/RadioButton';
import { useLibrarySettings } from '@hooks/useSettings';
+import { MD3ThemeType } from '@theme/types';
-const DisplayModeModal = ({
+interface DisplayModeModalProps {
+ displayMode: DisplayModes;
+ displayModalVisible: boolean;
+ hideDisplayModal: () => void;
+ theme: MD3ThemeType;
+}
+
+const DisplayModeModal: React.FC = ({
theme,
displayMode,
hideDisplayModal,
@@ -25,6 +36,9 @@ const DisplayModeModal = ({
{ backgroundColor: overlay(2, theme.surface) },
]}
>
+
+ Display Mode
+
{displayModesList.map(mode => (
void;
+ theme: MD3ThemeType;
+}
+
+const GridSizeModal: React.FC = ({
novelsPerRow,
gridSizeModalVisible,
hideGridSizeModal,
@@ -41,16 +49,20 @@ const GridSizeModal = ({
>
{`${novelsPerRow} per row`}
- {Object.keys(gridSizes).map(item => (
- setLibrarySettings({ novelsPerRow: item })}
- theme={theme}
- style={{ paddingHorizontal: 20 }}
- />
- ))}
+ {Object.keys(gridSizes).map(item => {
+ let it = Number(item);
+ return (
+ setLibrarySettings({ novelsPerRow: it })}
+ theme={theme}
+ style={styles.radiobutton}
+ />
+ );
+ })}
);
@@ -78,4 +90,5 @@ const styles = StyleSheet.create({
width: '100%',
height: 40,
},
+ radiobutton: { paddingHorizontal: 20 },
});
diff --git a/src/screens/settings/SettingsGeneralScreen/modals/NovelBadgesModal.tsx b/src/screens/settings/SettingsGeneralScreen/modals/NovelBadgesModal.tsx
new file mode 100644
index 00000000..185517f7
--- /dev/null
+++ b/src/screens/settings/SettingsGeneralScreen/modals/NovelBadgesModal.tsx
@@ -0,0 +1,102 @@
+import React from 'react';
+import { Text, StyleSheet } from 'react-native';
+
+import { Portal, Modal, overlay } from 'react-native-paper';
+
+import { useLibrarySettings } from '@hooks/useSettings';
+import { Checkbox } from '@components';
+import { getString } from '@strings/translations';
+import { MD3ThemeType } from '@theme/types';
+
+interface NovelBadgesModalProps {
+ novelBadgesModalVisible: boolean;
+ hideNovelBadgesModal: () => void;
+ theme: MD3ThemeType;
+}
+
+const NovelBadgesModal: React.FC = ({
+ novelBadgesModalVisible,
+ hideNovelBadgesModal,
+ theme,
+}) => {
+ const {
+ showDownloadBadges = true,
+ showNumberOfNovels = false,
+ showUnreadBadges = true,
+ setLibrarySettings,
+ } = useLibrarySettings();
+ return (
+
+
+
+ {getString('libraryScreen.bottomSheet.display.badges')}
+
+
+ setLibrarySettings({
+ showDownloadBadges: !showDownloadBadges,
+ })
+ }
+ theme={theme}
+ />
+
+ setLibrarySettings({
+ showUnreadBadges: !showUnreadBadges,
+ })
+ }
+ theme={theme}
+ />
+
+ setLibrarySettings({
+ showNumberOfNovels: !showNumberOfNovels,
+ })
+ }
+ theme={theme}
+ />
+
+
+ );
+};
+
+export default NovelBadgesModal;
+
+const styles = StyleSheet.create({
+ container: {
+ paddingVertical: 24,
+ margin: 20,
+ borderRadius: 28,
+ },
+ modalHeader: {
+ paddingHorizontal: 24,
+ fontSize: 24,
+ marginBottom: 10,
+ },
+ modalDescription: {
+ paddingHorizontal: 24,
+ fontSize: 16,
+ marginBottom: 16,
+ },
+ slider: {
+ width: '100%',
+ height: 40,
+ },
+ sectionHeader: {
+ padding: 16,
+ paddingBottom: 8,
+ },
+});
diff --git a/src/screens/settings/SettingsGeneralScreen/modals/NovelSortModal.tsx b/src/screens/settings/SettingsGeneralScreen/modals/NovelSortModal.tsx
new file mode 100644
index 00000000..0257731e
--- /dev/null
+++ b/src/screens/settings/SettingsGeneralScreen/modals/NovelSortModal.tsx
@@ -0,0 +1,92 @@
+import React from 'react';
+import { Text, StyleSheet } from 'react-native';
+
+import { Portal, Modal, overlay } from 'react-native-paper';
+
+import { useLibrarySettings } from '@hooks/useSettings';
+import {
+ LibrarySortOrder,
+ librarySortOrderList,
+} from '@screens/library/constants/constants';
+import { MD3ThemeType } from '@theme/types';
+import { FlashList } from '@shopify/flash-list';
+import { SortItem } from '@components/Checkbox/Checkbox';
+
+interface NovelSortModalProps {
+ novelSortModalVisible: boolean;
+ hideNovelSortModal: () => void;
+ theme: MD3ThemeType;
+}
+
+const NovelSortModal: React.FC = ({
+ novelSortModalVisible,
+ hideNovelSortModal,
+ theme,
+}) => {
+ const { sortOrder = LibrarySortOrder.DateAdded_DESC, setLibrarySettings } =
+ useLibrarySettings();
+ return (
+
+
+
+ Sort Order
+
+ (
+
+ setLibrarySettings({
+ sortOrder: sortOrder === item.ASC ? item.DESC : item.ASC,
+ })
+ }
+ />
+ )}
+ />
+
+
+ );
+};
+
+export default NovelSortModal;
+
+const styles = StyleSheet.create({
+ container: {
+ paddingVertical: 24,
+ margin: 20,
+ borderRadius: 28,
+ height: 397.8,
+ },
+ modalHeader: {
+ paddingHorizontal: 24,
+ fontSize: 24,
+ marginBottom: 10,
+ },
+ modalDescription: {
+ paddingHorizontal: 24,
+ fontSize: 16,
+ marginBottom: 16,
+ },
+ slider: {
+ width: '100%',
+ height: 40,
+ },
+});
diff --git a/src/screens/settings/SettingsReaderScreen/SettingsReaderScreen.tsx b/src/screens/settings/SettingsReaderScreen/SettingsReaderScreen.tsx
index 115a388a..42e39533 100644
--- a/src/screens/settings/SettingsReaderScreen/SettingsReaderScreen.tsx
+++ b/src/screens/settings/SettingsReaderScreen/SettingsReaderScreen.tsx
@@ -185,7 +185,7 @@ const SettingsReaderScreen = () => {
theme={theme}
/>
dispatch(setAppSettings('useVolumeButtons', !useVolumeButtons))
@@ -202,7 +202,7 @@ const SettingsReaderScreen = () => {
/>
{swipeGestures ? (
diff --git a/strings/languages/en/strings.json b/strings/languages/en/strings.json
index d3b2a497..005078f3 100644
--- a/strings/languages/en/strings.json
+++ b/strings/languages/en/strings.json
@@ -33,7 +33,10 @@
"sortOrders": {
"dateAdded": "Date added",
"alphabetically": "Alphabetically",
- "totalChapters": "Total chapters"
+ "totalChapters": "Total chapters",
+ "download": "Downloaded",
+ "unread": "Unread",
+ "lastRead": "Last Read"
},
"display": {
"displayMode": "Display mode",
@@ -88,7 +91,10 @@
"showProgressPercentage": "Show progress percentage",
"swipeGestures": "Swipe left or right to navigate between chapters",
"allowTextSelection": "Allow text selection",
- "useChapterDrawerSwipeNavigation": "Swipe right to open drawer"
+ "useChapterDrawerSwipeNavigation": "Swipe right to open drawer",
+ "removeExtraSpacing":"Remove extra paragraph spacing",
+ "volumeButtonsScroll":"Volume buttons scroll",
+ "showSwipeMargins": "Show swipe margins"
},
"drawer": {
"scrollToCurrentChapter": "Scroll to current chapter",
@@ -124,7 +130,29 @@
"settings": "Settings",
"settingsScreen": {
"generalSettings": "General",
- "generalSettingsScreen": {},
+ "generalSettingsScreen": {
+ "display": "Display",
+ "displayMode": "Display Mode",
+ "itemsPerRow":"Items per row",
+ "itemsPerRowLibrary":"Items per row in library",
+ "novelBadges":"Novel Badges",
+ "novelSort":"Novel Sort",
+ "updateLibrary":"Update library on launch",
+ "useFAB":"Use FAB in Library",
+ "novel": "Novel",
+ "chapterSort": "Default chapter sort",
+ "bySource": "By source",
+ "asc": "(Ascending)",
+ "desc":"(Descending)",
+ "globalUpdate": "Global update",
+ "updateOngoing": "Only update ongoing novels",
+ "refreshMetadata":"Automatically refresh metadata",
+ "refreshMetadataDescription":"Check for new cover and details when updating library",
+ "updateTime":"Show last update time",
+ "autoDownload":"Auto-download",
+ "downloadNewChapters":"Download new chapters",
+ "disableHapticFeedback": "Disable haptic feedback"
+ },
"readerSettings": {
"title": "Reader",
"readerTheme": "Reader theme",
diff --git a/strings/types/index.ts b/strings/types/index.ts
index c28970fa..2ba3af16 100644
--- a/strings/types/index.ts
+++ b/strings/types/index.ts
@@ -31,6 +31,9 @@ export interface StringMap {
'libraryScreen.bottomSheet.sortOrders.dateAdded': 'string';
'libraryScreen.bottomSheet.sortOrders.alphabetically': 'string';
'libraryScreen.bottomSheet.sortOrders.totalChapters': 'string';
+ 'libraryScreen.bottomSheet.sortOrders.lastRead': 'string';
+ 'libraryScreen.bottomSheet.sortOrders.unread': 'string';
+ 'libraryScreen.bottomSheet.sortOrders.download': 'string';
'libraryScreen.bottomSheet.display.displayMode': 'string';
'libraryScreen.bottomSheet.display.compact': 'string';
'libraryScreen.bottomSheet.display.comfortable': 'string';
@@ -73,6 +76,9 @@ export interface StringMap {
'readerScreen.bottomSheet.swipeGestures': 'string';
'readerScreen.bottomSheet.allowTextSelection': 'string';
'readerScreen.bottomSheet.useChapterDrawerSwipeNavigation': 'string';
+ 'readerScreen.bottomSheet.removeExtraSpacing': 'string';
+ 'readerScreen.bottomSheet.volumeButtonsScroll': 'string';
+ 'readerScreen.bottomSheet.showSwipeMargins': 'string';
'readerScreen.drawer.scrollToCurrentChapter': 'string';
'readerScreen.drawer.scrollToTop': 'string';
'readerScreen.drawer.scrollToBottom': 'string';
@@ -94,6 +100,26 @@ export interface StringMap {
'more': 'string';
'moreScreen.settings': 'string';
'moreScreen.settingsScreen.generalSettings': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.display': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.displayMode': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.itemsPerRowLibrary': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.itemsPerRow': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.novelBadges': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.novelSort': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.updateLibrary': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.useFAB': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.novel': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.chapterSort': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.asc': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.desc': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.globalUpdate': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.updateOngoing': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.refreshMetadata': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.refreshMetadataDescription': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.autoDownload': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.downloadNewChapters': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.disableHapticFeedback': 'string';
+ 'moreScreen.settingsScreen.generalSettingsScreen.updateTime': 'string';
'moreScreen.settingsScreen.readerSettings.title': 'string';
'moreScreen.settingsScreen.readerSettings.readerTheme': 'string';
'moreScreen.settingsScreen.readerSettings.preset': 'string';