1 year ago
#329642
Ghulam Rasool
I tried saving shared preferences at 2 places, One is working other is not. Why it so?
I am stuck in a strange problem that is when i save data from 1 activity (Parent Page) it saves data. and on reload app it loads the saved preferences and user don't have to sign in again and again. But when i tried to do this with child it didn't helped :(
Here is my code for Parent:
class SignIn : AppCompatActivity() {
private val sharedPrefFile = Common.APP_NAME
private var auth: FirebaseAuth = Firebase.auth
private lateinit var usertype: String
val db = Firebase.firestore
lateinit var etEmail: String
lateinit var etPassword: String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sign_in)
getData()
_sign_in_as.setText("signing in as " + usertype)
//SignIn button
_btn_sign_in.setOnClickListener{
etEmail = _sign_in_email.text.toString()
etPassword =_sign_in_password.text.toString()
AuthenticateUser(etEmail,etPassword)
}
//Signup Link
_sign_in_screen_sign_up_link.setOnClickListener{
//Creating Intent
val intent = Intent(this, ParentSignup::class.java)
startActivity(intent)
}
}
private fun AuthenticateUser(email: String, password: String){
_progressBar.visibility= View.VISIBLE
_progressBar.visibility= View.INVISIBLE
auth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
// Sign in success, update UI with the signed-in user's information
Log.d(TAG, "signInWithEmail:success")
db.collection(USER_COLLECTION)
.whereEqualTo(USER_EMAIL,email)
.get()
.addOnSuccessListener { documents ->
for (document in documents){
val intent = Intent(this, TabbedActivity::class.java)
//Saving UserType in Shared Preferences
val sharedPreferences: SharedPreferences = getSharedPreferences(sharedPrefFile, Context.MODE_PRIVATE)
val sharedPref: SharedPreferences.Editor = sharedPreferences.edit()
//Email
sharedPref.putString(USER_EMAIL, document.data[USER_EMAIL].toString())
sharedPref.apply()
//username
sharedPref.putString(USER_NAME, document.data[USER_NAME].toString())
sharedPref.apply()
//number
sharedPref.putString(USER_PHONE, document.data[USER_PHONE].toString())
sharedPref.apply()
//number
sharedPref.putString(Common.LOGIN_STATUS, Common.LOGGED_IN)
sharedPref.apply()
Common.userName = document.data[USER_NAME].toString()
Common.userEmail = document.data[USER_EMAIL].toString()
Common.userPhone = document.data[USER_PHONE].toString()
startActivity(intent)
finishAffinity()
}
}
} else {
_progressBar.visibility= View.INVISIBLE
// If sign in fails, display a message to the user.
Log.w(TAG, "signInWithEmail:failure", task.exception)
Toast.makeText(baseContext, "Authentication failed." + (task.getException()?.message
?: ""),
Toast.LENGTH_SHORT).show()
}
}
}
fun getData(){
val sharedPreferences: SharedPreferences = getSharedPreferences(sharedPrefFile, Context.MODE_PRIVATE)
val sharedPref: SharedPreferences = sharedPreferences
usertype = sharedPref.getString(USER_TYPE, "").toString()
}
}
Here is code for Child:
class ChildSignup : AppCompatActivity() {
private val sharedPrefFile = Common.APP_NAME
private lateinit var auth: FirebaseAuth
val db = Firebase.firestore
private val TAG = "testTag"
private lateinit var code: String
@RequiresApi(Build.VERSION_CODES.O)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_child_signup)
auth = Firebase.auth
//Linking Parent Email
_btn_link_child.setOnClickListener {
verifyParentEmail()
}
//Verifying Email
_btn_sign_up_verify.setOnClickListener{
saveInSharedPreferences()
linkChild()
}
_child_sign_up_parent_link.setOnClickListener{
val intent = Intent(this, SignIn::class.java)
startActivity(intent)
finishAffinity()
}
}
private fun saveInSharedPreferences() {
//Saving UserType in Shared Preferences
val sharedPreferences: SharedPreferences = getSharedPreferences(sharedPrefFile, Context.MODE_PRIVATE)
val sharedPref: SharedPreferences.Editor = sharedPreferences.edit()
//Email
sharedPref.putString(USER_EMAIL, _link_child_email.text.toString())
sharedPref.apply()
//username
sharedPref.putString(USER_NAME, _link_child_name.text.toString())
sharedPref.apply()
//number
sharedPref.putString(USER_PHONE, "03154970584")
sharedPref.apply()
//number
sharedPref.putString(LOGIN_STATUS, LOGGED_IN)
sharedPref.apply()
//userType
sharedPref.putString(USER_TYPE, USER_TYPE_CHILD)
sharedPref.apply()
Common.userType = USER_TYPE_CHILD
Common.userEmail = _link_child_email.text.toString()
Common.userName = _link_child_name.text.toString()
Toast.makeText(this, sharedPreferences.getString(USER_EMAIL, ""), Toast.LENGTH_SHORT).show()
Toast.makeText(this, sharedPreferences.getString(USER_NAME, ""), Toast.LENGTH_SHORT).show()
Toast.makeText(this, sharedPreferences.getString(USER_TYPE, ""), Toast.LENGTH_SHORT).show()
}
private fun verifyParentEmail() {
var flag = false
code =(100000..999999).random().toString()
Log.d("TAG:", code)
Toast.makeText(this, code, Toast.LENGTH_LONG).show()
auth.fetchSignInMethodsForEmail(_link_child_email.text.toString()).addOnSuccessListener(this) { task ->
if (!task.signInMethods?.isEmpty()!!){
db.collection(LINKED_CHILDS)
.whereEqualTo(USER_EMAIL,_link_child_email.text.toString())
.get()
.addOnSuccessListener { documents ->
for (document in documents){
if (document[USER_NAME] == _link_child_name.text.toString()){
flag = true
}
}
if (flag == true){
Toast.makeText(this, "This child is already linked with this parent!\nPlease verify code to continue", Toast.LENGTH_SHORT)
.show()
}
sendEmail(_link_child_email.text.toString(),
_link_child_name.text.toString(),
code,
"Email Verification Code"
)
_child_signup_verify_layout.isVisible = true
}
}
else{
Toast.makeText(this, "No Such parent found", Toast.LENGTH_SHORT)
.show()
}
}
}
@RequiresApi(Build.VERSION_CODES.O)
private fun linkChild() {
if (_sign_up_six_digit_code.text.toString() == code){
saveToCloud()
}
}
@RequiresApi(Build.VERSION_CODES.O)
private fun saveToCloud() {
val thread = Thread {
try {
//Your code goes here
val user = hashMapOf(
USER_TYPE to USER_TYPE_CHILD,
USER_EMAIL to _link_child_email.text.toString(),
USER_NAME to _link_child_name.text.toString(),
TOKEN to "" ,
DATE to LocalDate.now().toString(),
DAY to LocalDate.now().dayOfWeek.toString()
)
db.collection(Common.LINKED_CHILDS).add(user).addOnSuccessListener { documentReference ->
Log.d(TAG, "DocumentSnapshot added with ID: ${documentReference.id}")
//Moving to Next Screen
val intent = Intent(this, TabbedActivity::class.java)
// intent.putExtra(USER_TYPE, USER_TYPE_CHILD)
startActivity(intent)
// finishAffinity()
}.addOnFailureListener { e ->
Log.w(TAG, "Error adding document", e)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
thread.start()
Log.d("Thread status: ", "Started")
}
}
And I am checking preferences here:
class MainActivity : AppCompatActivity() {
private val sharedPrefFile = Common.APP_NAME
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val sharedPreferences: SharedPreferences = getSharedPreferences(sharedPrefFile, Context.MODE_PRIVATE)
//UserType
Toast.makeText(this, sharedPreferences.getString(USER_TYPE, "1"), Toast.LENGTH_SHORT).show()
Toast.makeText(this, sharedPreferences.getString(USER_EMAIL, "2"), Toast.LENGTH_SHORT).show()
Toast.makeText(this, sharedPreferences.getString(USER_NAME, "3"), Toast.LENGTH_SHORT).show()
if (sharedPreferences.getString(USER_TYPE, "") == "" || sharedPreferences.getString(
USER_EMAIL, "") == "" || sharedPreferences.getString(USER_NAME, "") == ""){
Handler(Looper.getMainLooper()).postDelayed({
val intent = Intent(this, WelcomeScreen::class.java)
startActivity(intent)
finish()
},2000)
}
else{
userType = sharedPreferences.getString(USER_TYPE, "").toString()
userEmail = sharedPreferences.getString(USER_EMAIL, "").toString()
userName = sharedPreferences.getString(USER_NAME, "").toString()
val intent = Intent(this, TabbedActivity::class.java)
startActivity(intent)
finishAffinity()
}
}
}
android
kotlin
sharedpreferences
parental-control
0 Answers
Your Answer