Skip to content

Commit 86c7f63

Browse files
committed
Updates
1 parent 1e12a0c commit 86c7f63

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1156
-180
lines changed

.idea/inspectionProfiles/Project_Default.xml

Lines changed: 41 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/kotlinc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/build.gradle

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ plugins {
33
id 'org.jetbrains.kotlin.android'
44
id 'kotlin-kapt'
55
id 'dagger.hilt.android.plugin'
6-
7-
86
}
97

108
android {
@@ -21,15 +19,18 @@ android {
2119

2220

2321
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
22+
vectorDrawables {
23+
useSupportLibrary true
24+
}
2425
}
2526

2627
buildFeatures{
2728
buildConfig true
2829
viewBinding true
30+
compose true
2931
}
3032

3133

32-
3334
buildTypes {
3435

3536
debug{
@@ -50,6 +51,16 @@ android {
5051
kotlinOptions {
5152
jvmTarget = '17'
5253
}
54+
composeOptions {
55+
kotlinCompilerExtensionVersion '1.4.0'
56+
}
57+
58+
packagingOptions {
59+
resources {
60+
excludes += '/META-INF/{AL2.0,LGPL2.1}'
61+
}
62+
}
63+
5364
}
5465

5566
dependencies {
@@ -69,6 +80,17 @@ dependencies {
6980
//Dagger Hilt
7081
implementation 'com.google.dagger:hilt-android:2.44'
7182
implementation 'androidx.hilt:hilt-common:1.0.0'
83+
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
84+
implementation 'androidx.activity:activity-compose:1.5.1'
85+
implementation platform('androidx.compose:compose-bom:2022.10.00')
86+
implementation 'androidx.compose.ui:ui'
87+
implementation 'androidx.compose.ui:ui-graphics'
88+
implementation 'androidx.compose.ui:ui-tooling-preview'
89+
implementation 'androidx.compose.material3:material3'
90+
androidTestImplementation platform('androidx.compose:compose-bom:2022.10.00')
91+
androidTestImplementation 'androidx.compose.ui:ui-test-junit4'
92+
debugImplementation 'androidx.compose.ui:ui-tooling'
93+
debugImplementation 'androidx.compose.ui:ui-test-manifest'
7294
kapt "com.google.dagger:hilt-android-compiler:2.44.2"
7395

7496

@@ -77,7 +99,7 @@ dependencies {
7799

78100

79101
//Bottom Navigation
80-
def navigation_version = "2.5.3"
102+
def navigation_version = "2.6.0"
81103
implementation "androidx.legacy:legacy-support-v4:1.0.0"
82104
implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version"
83105
implementation "androidx.navigation:navigation-ui-ktx:$navigation_version"
@@ -145,7 +167,11 @@ dependencies {
145167
implementation "com.airbnb.android:lottie:$lottieVersion"
146168

147169
//MultiDex support
148-
implementation 'com.android.support:multidex:1.0.3'
170+
implementation 'androidx.multidex:multidex:2.0.0'
171+
172+
//ViewPager 2
173+
implementation 'androidx.viewpager2:viewpager2:1.1.0-beta02'
174+
149175

150176
//Flexbox
151177
implementation 'com.google.android.flexbox:flexbox:3.0.0'

app/src/main/AndroidManifest.xml

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@
1717
android:supportsRtl="true"
1818
android:theme="@style/O2SplashTheme"
1919
tools:targetApi="31">
20-
20+
<activity
21+
android:name=".UI.CreateSegment.CreateSegmentActivity"
22+
android:exported="false"
23+
android:label="@string/title_activity_create_segment"
24+
android:theme="@style/O2SplashTheme" />
2125
<activity
2226
android:name=".UI.UIComponents.SplashScreen"
2327
android:configChanges="orientation|keyboardHidden|screenSize"
24-
android:exported="true"
25-
/>
26-
28+
android:exported="true" />
2729
<activity
2830
android:name=".UI.CreateTask.CreateTaskActivity"
2931
android:exported="false" />
@@ -36,18 +38,14 @@
3638
<activity
3739
android:name=".UI.Tasks.TaskDetails.TaskDetailActivity"
3840
android:exported="false" />
39-
4041
<activity
4142
android:name=".UI.MainActivity"
42-
android:exported="true" >
43-
43+
android:exported="true">
4444
<intent-filter>
4545
<action android:name="android.intent.action.MAIN" />
4646

4747
<category android:name="android.intent.category.LAUNCHER" />
4848
</intent-filter>
49-
50-
5149
</activity>
5250

5351
<service

app/src/main/java/com/ncs/o2/Constants/Endpoints.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ object Endpoints {
1313
}
1414

1515
object Project{
16+
const val ALL_SEGMENT = "ALL_SEGMENT"
1617
const val SEGMENT = "SEGMENTS"
1718
const val CONTRIBUTERS = "CONTRIBUTERS"
1819
const val PROJECTID = "PROJECT_ID"

app/src/main/java/com/ncs/o2/Domain/Interfaces/Repository.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.ncs.o2.Domain.Interfaces
33
import com.ncs.o2.Domain.Models.ServerResult
44
import com.ncs.o2.Domain.Models.Task
55
import com.ncs.o2.Domain.Models.CurrentUser
6+
import com.ncs.o2.Domain.Models.Segment
67

78
/*
89
File : Repository.kt -> com.ncs.o2.Domain.Interfaces
@@ -24,6 +25,7 @@ Tasks FUTURE ADDITION :
2425
*/
2526

2627
interface Repository {
28+
2729
//Task related
2830
fun postTask(task: Task, serverResult: (ServerResult<Int>)-> Unit)
2931

@@ -32,4 +34,8 @@ interface Repository {
3234

3335
//Project related
3436
fun fetchUserProjectIDs(projectListCallback: (ServerResult<List<String>>) -> Unit)
37+
38+
fun createSegment(segment: Segment, serverResult: (ServerResult<Int>) -> Unit)
39+
40+
fun checkIfSegmentNameExists(fieldName : String, projectID : String, result: (ServerResult<Boolean>) -> Unit)
3541
}

app/src/main/java/com/ncs/o2/Domain/Models/Segment.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.ncs.o2.Domain.Models
22

3+
import com.google.firebase.firestore.Exclude
4+
35
/*
46
File : Segment.kt -> com.ncs.o2.Domain.Models
57
Description : Model class for Segment
@@ -20,6 +22,12 @@ Tasks FUTURE ADDITION :
2022
2123
*/
2224
data class Segment (
23-
val segID : String,
24-
val segName : String,
25+
val SEGMENT_NAME : String="",
26+
val SEGMENT_ID : String="",
27+
val DESCRIPTION : String="",
28+
val TASK_IDS : MutableList<String> = mutableListOf(),
29+
val CONTRIBUTERS : MutableList<String> = mutableListOf(),
30+
val SEGMENT_CREATOR : String="",
31+
val PROJECT_ID: String="",
32+
@Exclude val CREATION_DATETIME : String="",
2533
)

app/src/main/java/com/ncs/o2/Domain/Models/ServerResult.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,6 @@ sealed class ServerResult<out T> {
2323
data class Success<out T>(val data : T) : ServerResult<T>()
2424
object Progress : ServerResult<Nothing>()
2525
data class Failure(val exception: Exception) : ServerResult<Nothing>()
26+
27+
2628
}

app/src/main/java/com/ncs/o2/Domain/Repositories/FirestoreRepository.kt

Lines changed: 83 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@ import android.os.Looper
55
import com.google.firebase.firestore.FirebaseFirestore
66
import com.google.firebase.firestore.Source
77
import com.ncs.o2.Domain.Interfaces.Repository
8+
import com.ncs.o2.Domain.Models.CurrentUser
9+
import com.ncs.o2.Domain.Models.Segment
810
import com.ncs.o2.Domain.Models.ServerResult
911
import com.ncs.o2.Domain.Models.Task
10-
import com.ncs.o2.Domain.Models.CurrentUser
12+
import com.ncs.o2.HelperClasses.ServerExceptions
1113
import com.ncs.versa.Constants.Endpoints
1214
import timber.log.Timber
1315
import javax.inject.Inject
16+
import kotlin.random.Random
1417

1518
/*
1619
File : FirestoreRepository.kt -> com.ncs.o2.UI
@@ -29,38 +32,57 @@ Tasks FEATURE MUST HAVE :
2932
Tasks FUTURE ADDITION :
3033
3134
*/
35+
36+
//klinttest
37+
38+
@Suppress("UNCHECKED_CAST")
3239
class FirestoreRepository @Inject constructor(
3340
private val firestore: FirebaseFirestore
3441
) : Repository {
3542

3643
private val TAG: String = FirestoreRepository::class.java.simpleName
3744

38-
fun getTaskPath(task:Task):String{
45+
fun getTaskPath(task: Task): String {
3946
return Endpoints.PROJECTS +
4047
"/${task.PROJECTID}" +
41-
"/${Endpoints.Project.SEGMENT}"+
42-
"/${task.SEGMENT}"+
43-
"/${Endpoints.SEGMENT.TASKS}"+
44-
"/${task.ID}"+
48+
"/${Endpoints.Project.SEGMENT}" +
49+
"/${task.SEGMENT}" +
50+
"/${Endpoints.SEGMENT.TASKS}" +
51+
"/${task.ID}" +
4552
"/"
4653

4754
}
4855

49-
override fun postTask(task: Task, serverResult: (ServerResult<Int>)-> Unit){
56+
fun getProject(projectID: String): String {
57+
return Endpoints.PROJECTS + "/${projectID}"
58+
}
59+
60+
fun createRandomTaskID(): String {
61+
val random = Random(System.currentTimeMillis())
62+
val randomNumber = random.nextInt(1000, 9999)
63+
return "#T$randomNumber"
64+
}
65+
66+
fun createRandomSegmentID(): String {
67+
val random = Random(System.currentTimeMillis())
68+
val randomNumber = random.nextInt(1000, 9999)
69+
return "#S$randomNumber"
70+
}
71+
72+
override fun postTask(task: Task, serverResult: (ServerResult<Int>) -> Unit) {
5073
serverResult(ServerResult.Progress)
5174
firestore.document(getTaskPath(task))
5275
.set(task)
5376
.addOnSuccessListener {
5477
serverResult(ServerResult.Success(200))
5578
}
56-
.addOnFailureListener{
79+
.addOnFailureListener {
5780
serverResult(ServerResult.Failure(it))
5881
}
5982

60-
6183
}
6284

63-
override fun getUserInfo(serverResult: (ServerResult<CurrentUser?>) -> Unit) {
85+
override fun getUserInfo(serverResult: (ServerResult<CurrentUser?>) -> Unit) {
6486
serverResult(ServerResult.Progress)
6587
Handler(Looper.getMainLooper()).postDelayed({
6688
var currentUser: CurrentUser?
@@ -119,4 +141,55 @@ class FirestoreRepository @Inject constructor(
119141

120142
}
121143

144+
override fun createSegment(segment: Segment, serverResult: (ServerResult<Int>) -> Unit) {
145+
146+
147+
}
148+
149+
override fun checkIfSegmentNameExists(
150+
fieldName: String,
151+
projectID: String,
152+
result: (ServerResult<Boolean>) -> Unit
153+
) {
154+
155+
result(ServerResult.Progress)
156+
157+
firestore.document(getProject(projectID)).get(Source.SERVER)
158+
.addOnSuccessListener { snapshot ->
159+
160+
161+
if (!snapshot.exists() or (snapshot == null)) {
162+
Timber.tag(TAG)
163+
.d("Exception : ${ServerExceptions.projectDoesNotExists.exceptionDescription}")
164+
result(ServerResult.Failure(ServerExceptions.projectDoesNotExists))
165+
return@addOnSuccessListener
166+
}
167+
168+
val segmentsMap: Map<String, String> =
169+
snapshot.get(Endpoints.Project.ALL_SEGMENT) as Map<String, String>
170+
171+
if (segmentsMap.isEmpty()) {
172+
result(ServerResult.Success(false))
173+
Timber.tag(TAG).d("Map is empty")
174+
175+
} else {
176+
val containsValue = segmentsMap.containsValue(fieldName)
177+
if (containsValue) {
178+
Timber.tag(TAG)
179+
.d("Segment name present : ${ServerExceptions.duplicateNameException.exceptionDescription}")
180+
result(ServerResult.Success(true))
181+
} else {
182+
Timber.tag(TAG).d("Segment name original")
183+
result(ServerResult.Success(false))
184+
}
185+
}
186+
187+
}
188+
.addOnFailureListener {
189+
Timber.tag(TAG).d("Firestore Exception : ${it}")
190+
result(ServerResult.Failure(it))
191+
}
192+
}
193+
194+
122195
}

0 commit comments

Comments
 (0)