~repos /only-bible-app

#kotlin#android#ios

git clone https://pyrossh.dev/repos/only-bible-app.git
Discussions: https://groups.google.com/g/rust-embed-devs

The only bible app you will ever need. No ads. No in-app purchases. No distractions.


b9339f06 Peter John

1 year ago
add signingConfigs
.gitignore CHANGED
@@ -1,5 +1,6 @@
1
1
  *.iml
2
2
  .gradle
3
+ .kotlin
3
4
  /local.properties
4
5
  /.idea/caches
5
6
  /.idea/libraries
@@ -9,7 +10,10 @@
9
10
  /.idea/assetWizardSettings.xml
10
11
  .DS_Store
11
12
  /build
13
+ /app/release
12
14
  /captures
13
15
  .externalNativeBuild
14
16
  .cxx
15
17
  local.properties
18
+ keystore.properties
19
+ upload-keystore.jks
.idea/deploymentTargetSelector.xml CHANGED
@@ -16,6 +16,9 @@
16
16
  <SelectionState runConfigName="PreviewAlignStart">
17
17
  <option name="selectionMode" value="DROPDOWN" />
18
18
  </SelectionState>
19
+ <SelectionState runConfigName="app-release">
20
+ <option name="selectionMode" value="DROPDOWN" />
21
+ </SelectionState>
19
22
  </selectionStates>
20
23
  </component>
21
24
  </project>
.idea/runConfigurations/app.xml ADDED
@@ -0,0 +1,68 @@
1
+ <component name="ProjectRunConfigurationManager">
2
+ <configuration default="false" name="app" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
3
+ <module name="BibleApp.app.main" />
4
+ <option name="DEPLOY" value="true" />
5
+ <option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
6
+ <option name="DEPLOY_AS_INSTANT" value="false" />
7
+ <option name="ARTIFACT_NAME" value="" />
8
+ <option name="PM_INSTALL_OPTIONS" value="" />
9
+ <option name="ALL_USERS" value="false" />
10
+ <option name="ALWAYS_INSTALL_WITH_PM" value="false" />
11
+ <option name="CLEAR_APP_STORAGE" value="false" />
12
+ <option name="DYNAMIC_FEATURES_DISABLED_LIST" value="" />
13
+ <option name="ACTIVITY_EXTRA_FLAGS" value="" />
14
+ <option name="MODE" value="default_activity" />
15
+ <option name="CLEAR_LOGCAT" value="false" />
16
+ <option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" />
17
+ <option name="TARGET_SELECTION_MODE" value="DEVICE_AND_SNAPSHOT_COMBO_BOX" />
18
+ <option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
19
+ <option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
20
+ <option name="DEBUGGER_TYPE" value="Auto" />
21
+ <Auto>
22
+ <option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
23
+ <option name="SHOW_STATIC_VARS" value="true" />
24
+ <option name="WORKING_DIR" value="" />
25
+ <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
26
+ <option name="SHOW_OPTIMIZED_WARNING" value="true" />
27
+ <option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
28
+ <option name="DEBUG_SANDBOX_SDK" value="false" />
29
+ </Auto>
30
+ <Hybrid>
31
+ <option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
32
+ <option name="SHOW_STATIC_VARS" value="true" />
33
+ <option name="WORKING_DIR" value="" />
34
+ <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
35
+ <option name="SHOW_OPTIMIZED_WARNING" value="true" />
36
+ <option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
37
+ <option name="DEBUG_SANDBOX_SDK" value="false" />
38
+ </Hybrid>
39
+ <Java>
40
+ <option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
41
+ <option name="DEBUG_SANDBOX_SDK" value="false" />
42
+ </Java>
43
+ <Native>
44
+ <option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
45
+ <option name="SHOW_STATIC_VARS" value="true" />
46
+ <option name="WORKING_DIR" value="" />
47
+ <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
48
+ <option name="SHOW_OPTIMIZED_WARNING" value="true" />
49
+ <option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
50
+ <option name="DEBUG_SANDBOX_SDK" value="false" />
51
+ </Native>
52
+ <Profilers>
53
+ <option name="ADVANCED_PROFILING_ENABLED" value="false" />
54
+ <option name="STARTUP_PROFILING_ENABLED" value="false" />
55
+ <option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
56
+ <option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Java/Kotlin Method Sample (legacy)" />
57
+ <option name="STARTUP_NATIVE_MEMORY_PROFILING_ENABLED" value="false" />
58
+ <option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" />
59
+ </Profilers>
60
+ <option name="DEEP_LINK" value="" />
61
+ <option name="ACTIVITY_CLASS" value="" />
62
+ <option name="SEARCH_ACTIVITY_IN_GLOBAL_SCOPE" value="false" />
63
+ <option name="SKIP_ACTIVITY_VALIDATION" value="false" />
64
+ <method v="2">
65
+ <option name="Android.Gradle.BeforeRunTask" enabled="true" />
66
+ </method>
67
+ </configuration>
68
+ </component>
.idea/runConfigurations/app_release.xml ADDED
@@ -0,0 +1,68 @@
1
+ <component name="ProjectRunConfigurationManager">
2
+ <configuration default="false" name="app-release" type="AndroidRunConfigurationType" factoryName="Android App">
3
+ <module name="BibleApp.app.main" />
4
+ <option name="DEPLOY" value="true" />
5
+ <option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
6
+ <option name="DEPLOY_AS_INSTANT" value="false" />
7
+ <option name="ARTIFACT_NAME" value="" />
8
+ <option name="PM_INSTALL_OPTIONS" value="" />
9
+ <option name="ALL_USERS" value="false" />
10
+ <option name="ALWAYS_INSTALL_WITH_PM" value="false" />
11
+ <option name="CLEAR_APP_STORAGE" value="false" />
12
+ <option name="DYNAMIC_FEATURES_DISABLED_LIST" value="" />
13
+ <option name="ACTIVITY_EXTRA_FLAGS" value="" />
14
+ <option name="MODE" value="default_activity" />
15
+ <option name="CLEAR_LOGCAT" value="false" />
16
+ <option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" />
17
+ <option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" />
18
+ <option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
19
+ <option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
20
+ <option name="DEBUGGER_TYPE" value="Auto" />
21
+ <Auto>
22
+ <option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
23
+ <option name="SHOW_STATIC_VARS" value="true" />
24
+ <option name="WORKING_DIR" value="" />
25
+ <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
26
+ <option name="SHOW_OPTIMIZED_WARNING" value="true" />
27
+ <option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
28
+ <option name="DEBUG_SANDBOX_SDK" value="false" />
29
+ </Auto>
30
+ <Hybrid>
31
+ <option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
32
+ <option name="SHOW_STATIC_VARS" value="true" />
33
+ <option name="WORKING_DIR" value="" />
34
+ <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
35
+ <option name="SHOW_OPTIMIZED_WARNING" value="true" />
36
+ <option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
37
+ <option name="DEBUG_SANDBOX_SDK" value="false" />
38
+ </Hybrid>
39
+ <Java>
40
+ <option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
41
+ <option name="DEBUG_SANDBOX_SDK" value="false" />
42
+ </Java>
43
+ <Native>
44
+ <option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
45
+ <option name="SHOW_STATIC_VARS" value="true" />
46
+ <option name="WORKING_DIR" value="" />
47
+ <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
48
+ <option name="SHOW_OPTIMIZED_WARNING" value="true" />
49
+ <option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
50
+ <option name="DEBUG_SANDBOX_SDK" value="false" />
51
+ </Native>
52
+ <Profilers>
53
+ <option name="ADVANCED_PROFILING_ENABLED" value="false" />
54
+ <option name="STARTUP_PROFILING_ENABLED" value="false" />
55
+ <option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
56
+ <option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Java/Kotlin Method Sample (legacy)" />
57
+ <option name="STARTUP_NATIVE_MEMORY_PROFILING_ENABLED" value="false" />
58
+ <option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" />
59
+ </Profilers>
60
+ <option name="DEEP_LINK" value="" />
61
+ <option name="ACTIVITY_CLASS" value="" />
62
+ <option name="SEARCH_ACTIVITY_IN_GLOBAL_SCOPE" value="false" />
63
+ <option name="SKIP_ACTIVITY_VALIDATION" value="false" />
64
+ <method v="2">
65
+ <option name="Android.Gradle.BeforeRunTask" enabled="true" />
66
+ </method>
67
+ </configuration>
68
+ </component>
app/build.gradle.kts CHANGED
@@ -1,4 +1,11 @@
1
+
1
2
  import com.android.build.gradle.tasks.asJavaVersion
3
+ import java.io.FileInputStream
4
+ import java.util.Properties
5
+
6
+ val keystorePropertiesFile = rootProject.file("keystore.properties")
7
+ val keystoreProperties = Properties()
8
+ keystoreProperties.load(FileInputStream(keystorePropertiesFile))
2
9
 
3
10
  plugins {
4
11
  alias(libs.plugins.android.application)
@@ -15,7 +22,7 @@ android {
15
22
 
16
23
  defaultConfig {
17
24
  applicationId = "dev.pyrossh.onlyBible"
18
- minSdk = 33
25
+ minSdk = 32
19
26
  targetSdk = 34
20
27
  versionCode = 1
21
28
  versionName = "1.0"
@@ -26,9 +33,20 @@ android {
26
33
  }
27
34
  }
28
35
 
36
+ signingConfigs {
37
+ create("release") {
38
+ keyAlias = keystoreProperties["keyAlias"] as String
39
+ keyPassword = keystoreProperties["keyPassword"] as String
40
+ storeFile = file(keystoreProperties["storeFile"] as String)
41
+ storePassword = keystoreProperties["storePassword"] as String
42
+ }
43
+ }
44
+
29
45
  buildTypes {
30
46
  release {
47
+ signingConfig = signingConfigs.getByName("release")
31
- isMinifyEnabled = false
48
+ isMinifyEnabled = true
49
+ isShrinkResources = true
32
50
  proguardFiles(
33
51
  getDefaultProguardFile("proguard-android-optimize.txt"),
34
52
  "proguard-rules.pro"
@@ -36,8 +54,8 @@ android {
36
54
  }
37
55
  }
38
56
  compileOptions {
39
- sourceCompatibility = JavaLanguageVersion.of(11).asJavaVersion()
57
+ sourceCompatibility = JavaLanguageVersion.of(17).asJavaVersion()
40
- targetCompatibility = JavaLanguageVersion.of(11).asJavaVersion()
58
+ targetCompatibility = JavaLanguageVersion.of(17).asJavaVersion()
41
59
  }
42
60
  buildFeatures {
43
61
  compose = true
@@ -49,7 +67,7 @@ android {
49
67
  }
50
68
  }
51
69
  kotlinOptions {
52
- jvmTarget = JavaLanguageVersion.of(11).toString()
70
+ jvmTarget = JavaLanguageVersion.of(17).toString()
53
71
  }
54
72
  androidResources {
55
73
  generateLocaleConfig = true
app/src/main/AndroidManifest.xml CHANGED
@@ -1,5 +1,7 @@
1
1
  <?xml version="1.0" encoding="utf-8"?>
2
2
  <manifest xmlns:android="http://schemas.android.com/apk/res/android">
3
+ <uses-permission android:name="android.permission.INTERNET" />
4
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3
5
  <application
4
6
  android:allowBackup="true"
5
7
  android:dataExtractionRules="@xml/data_extraction_rules"
app/src/main/java/dev/pyrossh/onlyBible/AppHost.kt CHANGED
@@ -9,19 +9,20 @@ import androidx.compose.foundation.layout.fillMaxSize
9
9
  import androidx.compose.material3.CircularProgressIndicator
10
10
  import androidx.compose.runtime.Composable
11
11
  import androidx.compose.runtime.SideEffect
12
+ import androidx.compose.runtime.collectAsState
13
+ import androidx.compose.runtime.getValue
12
14
  import androidx.compose.ui.Alignment
13
15
  import androidx.compose.ui.Modifier
14
16
  import androidx.compose.ui.draw.alpha
15
- import androidx.lifecycle.viewmodel.compose.viewModel
16
17
  import androidx.navigation.compose.NavHost
17
18
  import androidx.navigation.compose.composable
18
19
  import androidx.navigation.compose.rememberNavController
19
20
  import androidx.navigation.toRoute
20
- import dev.pyrossh.onlyBible.domain.Verse
21
21
 
22
22
  @Composable
23
23
  fun AppHost(model: AppViewModel) {
24
24
  val navController = rememberNavController()
25
+ val verses by model.verses.collectAsState()
25
26
  val navigateToChapter = { props: ChapterScreenProps ->
26
27
  model.resetScrollState()
27
28
  navController.navigate(props)
@@ -76,7 +77,7 @@ fun AppHost(model: AppViewModel) {
76
77
  if (model.isLoading) it.alpha(0.5f) else it
77
78
  }
78
79
  ) {
79
- if (model.verses.value.isNotEmpty()) {
80
+ if (verses.isNotEmpty()) {
80
81
  AppDrawer(model = model, navigateToChapter = navigateToChapter) { openDrawer ->
81
82
  NavHost(
82
83
  navController = navController,
@@ -90,14 +91,13 @@ fun AppHost(model: AppViewModel) {
90
91
  tween(400),
91
92
  )
92
93
  },
93
- // exitTransition = {
94
+ exitTransition = {
94
- // fadeOut()
95
- // val props = this.targetState.toRoute<ChapterScreenProps>()
95
+ val props = this.targetState.toRoute<ChapterScreenProps>()
96
- // slideOutOfContainer(
96
+ slideOutOfContainer(
97
- // Dir.valueOf(props.dir).slideDirection(),
97
+ Dir.valueOf(props.dir).slideDirection(),
98
- // tween(400),
98
+ tween(400),
99
- // )
99
+ )
100
- // },
100
+ },
101
101
  popEnterTransition = {
102
102
  slideIntoContainer(
103
103
  AnimatedContentTransitionScope.SlideDirection.Right,