Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
likorn
/
vocabulary_notebook
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
e5deb43a
authored
Apr 30, 2019
by
Paktalin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Major refactoring in FirestoreManager
parent
c370f256
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
71 additions
and
91 deletions
app/src/main/java/com/paktalin/vocabularynotebook/firestore/FirestoreManager.kt
app/src/main/java/com/paktalin/vocabularynotebook/firestore/Model.kt
app/src/main/java/com/paktalin/vocabularynotebook/firestore/MyUserManager.kt
app/src/main/java/com/paktalin/vocabularynotebook/ui/activities/LogInActivity.kt
app/src/main/java/com/paktalin/vocabularynotebook/ui/activities/MainActivity.kt
app/src/main/java/com/paktalin/vocabularynotebook/utils/ActivityUtil.kt
app/src/main/java/com/paktalin/vocabularynotebook/firestore/FirestoreManager.kt
View file @
e5deb43a
package
com.paktalin.vocabularynotebook.firestore
import
android.content.Context
import
com.google.firebase.auth.FirebaseUser
import
com.google.firebase.firestore.*
import
com.google.firebase.firestore.DocumentReference
import
com.google.firebase.firestore.FirebaseFirestore
import
com.google.firebase.firestore.Query
import
com.google.firebase.firestore.QuerySnapshot
import
com.paktalin.vocabularynotebook.appsetup.ConfiguredFirestore
import
com.paktalin.vocabularynotebook.entities.UserPojo
import
com.paktalin.vocabularynotebook.entities.VocabularyPojo
import
com.paktalin.vocabularynotebook.entities.WordPojo
import
com.paktalin.vocabularynotebook.ui.activities.LogInActivity
import
com.paktalin.vocabularynotebook.ui.activities.MainActivity
import
com.paktalin.vocabularynotebook.utils.Log
import
com.paktalin.vocabularynotebook.utils.s
aveVocabularyId
import
com.paktalin.vocabularynotebook.utils.s
tartActivity
import
com.paktalin.vocabularynotebook.vocabulary.ModifiedVocabulary.Label
import
java.util.*
class
FirestoreManager
{
private
val
db
:
FirebaseFirestore
=
ConfiguredFirestore
.
instance
private
val
vocabularyCollection
=
db
.
collection
(
VOCABULARIES
)
private
val
wordsCollection
=
vocabularyCollection
.
document
(
vocabularyId
!!
).
collection
(
WORDS
)
private
val
wordsCollection
=
db
.
collection
(
VOCABULARIES
).
document
(
vocabularyId
!!
).
collection
(
WORDS
)
fun
extractVocabularyId
(
onSuccess
:
()
->
Unit
,
showToastNoWords
:
()
->
Unit
,
removeProgressBar
:
()
->
Unit
,
mainActivity
:
Context
)
{
userDocument
(
Model
.
userId
)
?.
get
()
?.
addOnSuccessListener
{
snapshot
->
removeProgressBar
()
if
(
snapshot
.
get
(
VOCABULARIES
)
!=
null
)
{
setVocabularyID
(
snapshot
,
mainActivity
)
onSuccess
()
}
else
{
Log
.
w
(
TAG
,
"There's no collection \"vocabularies\""
)
showToastNoWords
()
fun
extractVocabularyId
(
onSuccess
:
(
String
?)
->
Unit
)
{
Log
.
d
(
TAG
,
"userId: $userId"
)
userDocument
(
userId
)
?.
get
()
?.
addOnSuccessListener
{
user
->
onSuccess
((
user
.
get
(
VOCABULARIES
)
as
List
<
DocumentReference
>?)
?.
get
(
0
)
?.
id
)
}
}
fun
extractVocabulary
(
onComplete
:
(
QuerySnapshot
?)
->
Unit
)
{
vocabularyId
?.
let
{
vocabId
->
db
.
collection
(
VOCABULARIES
)
.
document
(
vocabId
)
.
collection
(
WORDS
)
.
orderBy
(
"time"
,
Query
.
Direction
.
DESCENDING
).
get
()
.
addOnCompleteListener
{
t
->
onComplete
(
t
.
result
)
}
}
}
fun
addNewUser
(
firebaseUser
:
FirebaseUser
?,
logInActivity
:
LogInActivity
)
{
//todo addAll condition to writing to the db in Firebase Console (request.auth.uid)
vocabularyCollection
.
add
(
VocabularyPojo
(
null
))
db
.
collection
(
VOCABULARIES
)
.
add
(
VocabularyPojo
(
null
))
.
addOnSuccessListener
{
firstVocabularyRef
->
Log
.
d
(
TAG
,
"VocabularyPojo successfully created: "
+
firstVocabularyRef
.
path
)
setNewUserWithVocabularyData
(
firebaseUser
,
firstVocabularyRef
,
logInActivity
)
...
...
@@ -57,13 +61,6 @@ class FirestoreManager {
batch
.
commit
()
}
fun
extractVocabulary
(
onComplete
:
(
querySnapshot
:
QuerySnapshot
?)
->
Unit
)
{
vocabularyDocument
().
collection
(
WORDS
)
.
orderBy
(
"time"
,
Query
.
Direction
.
DESCENDING
)
.
get
()
.
addOnCompleteListener
{
t
->
onComplete
(
t
.
result
)
}
}
private
fun
setNewUserWithVocabularyData
(
firebaseUser
:
FirebaseUser
?,
firstVocabularyRef
:
DocumentReference
,
logInActivity
:
LogInActivity
)
{
...
...
@@ -72,34 +69,24 @@ class FirestoreManager {
userDocument
(
firebaseUser
?.
uid
)
?.
set
(
user
)
?.
addOnSuccessListener
{
Log
.
i
(
TAG
,
"Successfully added user to the collection"
)
logInActivity
.
startUserActivity
(
)
startActivity
(
logInActivity
,
MainActivity
::
class
.
java
)
}
?.
addOnFailureListener
{
exception
->
Log
.
w
(
TAG
,
"addUser:failure"
,
exception
)
}
}
private
fun
setVocabularyID
(
snapshot
:
DocumentSnapshot
,
context
:
Context
)
{
val
vocabularies
:
List
<
DocumentReference
>
=
snapshot
.
get
(
VOCABULARIES
)
as
List
<
DocumentReference
>
val
vocabulary
=
vocabularyCollection
.
document
(
vocabularies
[
0
].
id
)
saveVocabularyId
(
context
,
vocabulary
.
id
)
vocabularyId
=
vocabulary
.
id
}
private
fun
userDocument
(
userId
:
String
?):
DocumentReference
?
{
return
userId
?.
let
{
db
.
collection
(
USERS
).
document
(
it
)
}
}
private
fun
vocabularyDocument
():
DocumentReference
{
return
vocabularyCollection
.
document
(
vocabularyId
!!
)
}
companion
object
{
private
const
val
USERS
=
"users"
private
const
val
WORDS
=
"words"
private
const
val
VOCABULARIES
=
"vocabularies"
const
val
VOCABULARIES
=
"vocabularies"
private
const
val
TAG
=
"VN/FirestoreManager"
var
vocabularyId
:
String
?
=
null
var
userId
:
String
?
=
null
}
}
\ No newline at end of file
app/src/main/java/com/paktalin/vocabularynotebook/firestore/Model.kt
deleted
100644 → 0
View file @
c370f256
package
com.paktalin.vocabularynotebook.firestore
import
com.paktalin.vocabularynotebook.entities.UserPojo
import
com.paktalin.vocabularynotebook.entities.VocabularyPojo
import
com.paktalin.vocabularynotebook.entities.WordPojo
class
Model
{
lateinit
var
user
:
UserPojo
lateinit
var
vocabularyPojo
:
VocabularyPojo
lateinit
var
words
:
MutableList
<
WordPojo
>
companion
object
{
var
userId
:
String
?
=
null
}
}
\ No newline at end of file
app/src/main/java/com/paktalin/vocabularynotebook/firestore/MyUserManager.kt
View file @
e5deb43a
...
...
@@ -11,8 +11,7 @@ class MyUserManager {
companion
object
{
private
const
val
TAG
=
"VN/MyUserManager"
private
var
auth
:
FirebaseAuth
?
=
FirebaseAuth
.
getInstance
()
private
var
user
:
FirebaseUser
?
=
auth
?.
currentUser
internal
var
auth
:
FirebaseAuth
?
=
FirebaseAuth
.
getInstance
()
fun
logIn
(
username
:
String
,
password
:
String
,
onComplete
:
()
->
Unit
,
...
...
@@ -22,13 +21,13 @@ class MyUserManager {
?.
addOnCompleteListener
{
onComplete
()
}
?.
addOnSuccessListener
{
Log
.
d
(
TAG
,
"Successfully signed in"
)
FirestoreManager
.
userId
=
auth
?.
currentUser
?.
uid
onSuccess
()
}
?.
addOnFailureListener
{
e
->
Log
.
w
(
TAG
,
"signInWithEmail:failure"
,
e
)
onFailure
()
}
Model
.
userId
=
this
.
user
?.
uid
}
fun
signUp
(
username
:
String
,
password
:
String
,
...
...
@@ -40,14 +39,14 @@ class MyUserManager {
?.
addOnCompleteListener
{
onComplete
()
}
?.
addOnSuccessListener
{
Log
.
d
(
TAG
,
"Successfully signed up a new user"
)
FirestoreManager
().
addNewUser
(
user
,
logInActivity
)
FirestoreManager
().
addNewUser
(
auth
?.
currentUser
,
logInActivity
)
FirestoreManager
.
userId
=
auth
?.
currentUser
?.
uid
onSuccess
()
}
?.
addOnFailureListener
{
e
->
Log
.
d
(
TAG
,
"createUserWithEmail:failure"
,
e
.
fillInStackTrace
())
onFailure
()
}
Model
.
userId
=
this
.
user
?.
uid
}
fun
deleteUser
(
user
:
FirebaseUser
?)
{
...
...
@@ -57,7 +56,7 @@ class MyUserManager {
}
fun
userLoggedIn
():
Boolean
{
return
u
ser
!=
null
return
auth
?.
currentU
ser
!=
null
}
fun
logOut
()
{
...
...
app/src/main/java/com/paktalin/vocabularynotebook/ui/activities/LogInActivity.kt
View file @
e5deb43a
...
...
@@ -3,6 +3,7 @@ package com.paktalin.vocabularynotebook.ui.activities
import
android.os.Bundle
import
androidx.appcompat.app.AppCompatActivity
import
com.paktalin.vocabularynotebook.R
import
com.paktalin.vocabularynotebook.firestore.FirestoreManager
import
com.paktalin.vocabularynotebook.firestore.MyUserManager
import
com.paktalin.vocabularynotebook.utils.*
import
kotlinx.android.synthetic.main.activity_log_in.*
...
...
@@ -18,16 +19,20 @@ class LogInActivity : AppCompatActivity() {
override
fun
onStart
()
{
super
.
onStart
()
if
(
MyUserManager
.
userLoggedIn
())
startActivity
(
this
,
MainActivity
::
class
.
java
)
if
(
MyUserManager
.
userLoggedIn
())
{
startActivity
(
this
@LogInActivity
,
MainActivity
::
class
.
java
)
FirestoreManager
.
userId
=
MyUserManager
.
auth
?.
currentUser
?.
uid
}
}
private
fun
login
()
{
getValidUsernameAndPassword
()
?.
let
{
(
u
,
p
)
->
Log
.
d
(
TAG
,
"Logging in: username $u"
)
addProgressBar
(
supportFragmentManager
,
R
.
id
.
container_login
)
MyUserManager
.
logIn
(
u
,
p
,
onComplete
=
{
removeProgressBar
(
supportFragmentManager
)
},
onSuccess
=
{
startActivity
(
this
,
MainActivity
::
class
.
java
)
},
onFailure
=
{
shortToast
(
this
,
getString
(
R
.
string
.
toast_auth_failed
))
})
onSuccess
=
{
startActivity
(
this
@LogInActivity
,
MainActivity
::
class
.
java
)
},
onFailure
=
{
shortToast
(
this
@LogInActivity
,
getString
(
R
.
string
.
toast_auth_failed
))
})
}
}
...
...
@@ -37,19 +42,14 @@ class LogInActivity : AppCompatActivity() {
MyUserManager
.
signUp
(
u
,
p
,
onComplete
=
{
removeProgressBar
(
supportFragmentManager
)
},
onSuccess
=
{
shortToast
(
this
,
resources
.
getString
(
R
.
string
.
toast_successful_sign_up
))
startActivity
(
this
,
MainActivity
::
class
.
java
)
shortToast
(
this
@LogInActivity
,
resources
.
getString
(
R
.
string
.
toast_successful_sign_up
))
startActivity
(
this
@LogInActivity
,
MainActivity
::
class
.
java
)
},
onFailure
=
{
shortToast
(
this
,
resources
.
getString
(
R
.
string
.
toast_sign_up_failed
))
},
logInActivity
=
this
)
onFailure
=
{
shortToast
(
this
@LogInActivity
,
resources
.
getString
(
R
.
string
.
toast_sign_up_failed
))
},
logInActivity
=
this
@LogInActivity
)
}
}
fun
startUserActivity
()
{
Log
.
d
(
TAG
,
"Logged in successfully"
)
startActivity
(
this
@LogInActivity
,
MainActivity
::
class
.
java
)
}
private
fun
getValidUsernameAndPassword
():
Pair
<
String
,
String
>?
{
val
username
=
etUsername
!!
.
text
.
toString
()
val
password
=
etPassword
!!
.
text
.
toString
()
...
...
app/src/main/java/com/paktalin/vocabularynotebook/ui/activities/MainActivity.kt
View file @
e5deb43a
...
...
@@ -10,6 +10,7 @@ import android.view.inputmethod.InputMethodManager
import
androidx.appcompat.app.AppCompatActivity
import
androidx.appcompat.widget.SearchView
import
androidx.recyclerview.selection.Selection
import
com.google.firebase.firestore.QuerySnapshot
import
com.paktalin.vocabularynotebook.R
import
com.paktalin.vocabularynotebook.firestore.FirestoreManager
import
com.paktalin.vocabularynotebook.firestore.MyUserManager
...
...
@@ -33,6 +34,7 @@ class MainActivity : AppCompatActivity() {
private
var
tagFragment
=
TagFragment
()
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
if
(
savedInstanceState
==
null
)
Log
.
d
(
TAG
,
"null state"
)
super
.
onCreate
(
savedInstanceState
)
setContentView
(
R
.
layout
.
activity_main
)
FirestoreManager
.
vocabularyId
=
getSavedVocabularyIdFromPreferences
(
this
@MainActivity
)
...
...
@@ -49,7 +51,8 @@ class MainActivity : AppCompatActivity() {
searchView
=
menu
!!
.
findItem
(
R
.
id
.
search
).
actionView
as
SearchView
// extract vocabulary data only after searchView is initialized,
// since it needs to be called in the VocabularyAdapter initialization
setUpVocabularyAdapter
()
Log
.
d
(
TAG
,
"onCreateOptionsMenu"
)
extractVocabularyId
()
return
true
}
...
...
@@ -74,7 +77,7 @@ class MainActivity : AppCompatActivity() {
MyUserManager
.
logOut
()
startActivity
(
this
@MainActivity
,
LogInActivity
::
class
.
java
)
}
drawerLayout
!!
.
closeDrawers
()
drawerLayout
.
closeDrawers
()
true
}
}
...
...
@@ -84,23 +87,34 @@ class MainActivity : AppCompatActivity() {
swipeRefresh
.
setColorSchemeResources
(
R
.
color
.
colorAccent
)
}
private
fun
setUpVocabularyAdapter
()
{
private
fun
extractVocabularyId
()
{
Log
.
d
(
TAG
,
"extracting vocabulary id"
)
addProgressBar
(
supportFragmentManager
,
R
.
id
.
container_main
)
FirestoreManager
().
extractVocabularyId
(
onSuccess
=
{
FirestoreManager
().
extractVocabulary
{
querySnapshot
->
run
{
if
(
querySnapshot
!=
null
&&
!
querySnapshot
.
isEmpty
)
{
onSuccess
=
{
vocabularyId
->
extractVocabularyWithId
(
vocabularyId
)
})
}
private
fun
extractVocabularyWithId
(
vocabularyId
:
String
?)
{
Log
.
d
(
TAG
,
"vocabularyId: $vocabularyId"
)
removeProgressBar
(
supportFragmentManager
)
if
(
vocabularyId
==
null
)
{
shortToast
(
this
,
getString
(
R
.
string
.
toast_empty_vocabulary
))
return
}
saveVocabularyId
(
this
,
vocabularyId
)
FirestoreManager
.
vocabularyId
=
vocabularyId
FirestoreManager
().
extractVocabulary
(
onComplete
=
{
querySnapshot
->
setUpVocabularyAdapter
(
querySnapshot
)
})
}
private
fun
setUpVocabularyAdapter
(
querySnapshot
:
QuerySnapshot
?)
{
if
(
querySnapshot
==
null
||
querySnapshot
.
isEmpty
)
{
shortToast
(
this
,
getString
(
R
.
string
.
toast_empty_vocabulary
))
return
}
vocabularyAdapter
=
VocabularyAdapter
(
VocabSet
.
createFromSnapshot
(
querySnapshot
),
this
@MainActivity
)
recyclerView
.
adapter
=
vocabularyAdapter
setUpSelectionTracker
()
}
else
showToastNoWords
()
}
}
},
showToastNoWords
=
{
shortToast
(
this
,
getString
(
R
.
string
.
toast_empty_vocabulary
))
},
removeProgressBar
=
{
removeProgressBar
(
supportFragmentManager
)
},
mainActivity
=
this
)
}
...
...
@@ -125,10 +139,6 @@ class MainActivity : AppCompatActivity() {
imm
.
hideSoftInputFromWindow
(
view
.
windowToken
,
0
)
}
private
fun
showToastNoWords
()
{
shortToast
(
this
,
getString
(
R
.
string
.
toast_empty_vocabulary
))
}
private
fun
setUpSelectionTracker
()
{
vocabularyAdapter
?.
selectionTracker
=
MySelectionTracker
().
apply
{
init
(
recyclerView
)
...
...
app/src/main/java/com/paktalin/vocabularynotebook/utils/ActivityUtil.kt
View file @
e5deb43a
...
...
@@ -63,6 +63,7 @@ fun shortToast(context: Context, text: String) {
}
fun
startActivity
(
context
:
Context
,
cls
:
Class
<*>)
{
Log
.
d
(
"VN/ActivityUtil"
,
"starting activity $cls"
)
context
.
startActivity
(
Intent
(
context
,
cls
))
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment