Support for anonymous users

This commit is contained in:
Gilbert Kimutai 2019-04-13 10:00:00 +03:00
parent 13a2ccac2c
commit 3e9ad9fa6a
12 changed files with 181 additions and 39 deletions

View File

@ -13,6 +13,11 @@
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme" android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"> android:usesCleartextTraffic="true">
<activity
android:name=".ui.onboarding.AnonymousSignInActivity"
android:label="@string/title_activity_anonymous_sign_in"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity <activity
android:name=".ui.checkout.CheckoutActivity" android:name=".ui.checkout.CheckoutActivity"
android:label="@string/title_activity_checkout" android:label="@string/title_activity_checkout"

View File

@ -3,12 +3,14 @@ package me.gilo.wc
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.support.v7.app.AppCompatActivity import android.support.v7.app.AppCompatActivity
import com.google.firebase.auth.FirebaseAuth
import me.gilo.raison.ui.user.onboarding.SignInActivity import me.gilo.raison.ui.user.onboarding.SignInActivity
import me.gilo.raison.ui.user.onboarding.SignUpActivity import me.gilo.raison.ui.user.onboarding.SignUpActivity
import me.gilo.wc.ui.customer.BasicCustomerDetailsActivity import me.gilo.wc.ui.customer.BasicCustomerDetailsActivity
import me.gilo.wc.ui.customer.BillingAddressActivity import me.gilo.wc.ui.customer.BillingAddressActivity
import me.gilo.wc.ui.customer.ShippingAddressActivity import me.gilo.wc.ui.customer.ShippingAddressActivity
import me.gilo.wc.ui.home.HomeActivity import me.gilo.wc.ui.home.HomeActivity
import me.gilo.wc.ui.onboarding.AnonymousSignInActivity
import me.gilo.wc.ui.product.ProductActivity import me.gilo.wc.ui.product.ProductActivity
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
@ -19,12 +21,12 @@ class MainActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) setContentView(R.layout.activity_main)
startActivity(Intent(baseContext, HomeActivity::class.java))
// val intent = Intent(baseContext, ProductActivity::class.java) if(FirebaseAuth.getInstance().currentUser != null) {
// intent.putExtra("productId", 63) startActivity(Intent(baseContext, HomeActivity::class.java))
// }else{
// startActivity(intent) startActivity(Intent(baseContext, AnonymousSignInActivity::class.java))
}
finish() finish()

View File

@ -11,6 +11,7 @@ import me.gilo.wc.ui.customer.BillingAddressActivity;
import me.gilo.wc.ui.customer.ProfileActivity; import me.gilo.wc.ui.customer.ProfileActivity;
import me.gilo.wc.ui.customer.ShippingAddressActivity; import me.gilo.wc.ui.customer.ShippingAddressActivity;
import me.gilo.wc.ui.home.HomeActivity; import me.gilo.wc.ui.home.HomeActivity;
import me.gilo.wc.ui.onboarding.AnonymousSignInActivity;
import me.gilo.wc.ui.product.CartActivity; import me.gilo.wc.ui.product.CartActivity;
import me.gilo.wc.ui.product.ProductActivity; import me.gilo.wc.ui.product.ProductActivity;
import me.gilo.wc.ui.product.ShopActivity; import me.gilo.wc.ui.product.ShopActivity;
@ -51,4 +52,7 @@ abstract class ActivitiesModule {
@ContributesAndroidInjector @ContributesAndroidInjector
abstract ProfileActivity contributesProfileActivity(); abstract ProfileActivity contributesProfileActivity();
@ContributesAndroidInjector
abstract AnonymousSignInActivity contributesAnonymousSignInActivity();
} }

View File

@ -38,6 +38,17 @@ public class FirebaseUserRepository extends FirebaseRepository {
} }
public CompletionGenericLiveData<AuthResult> anonymousSignIn() {
final CompletionGenericLiveData<AuthResult> completion = new CompletionGenericLiveData();
FirebaseAuth auth = FirebaseAuth.getInstance();
auth.signInAnonymously().addOnCompleteListener(completion);
return completion;
}
public CompletionGenericLiveData<AuthResult> signUp(String email, String password) { public CompletionGenericLiveData<AuthResult> signUp(String email, String password) {
final CompletionGenericLiveData<AuthResult> completion = new CompletionGenericLiveData(); final CompletionGenericLiveData<AuthResult> completion = new CompletionGenericLiveData();

View File

@ -0,0 +1,70 @@
package me.gilo.wc.ui.onboarding
import android.arch.lifecycle.Observer
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.support.design.widget.Snackbar
import android.support.v7.app.AppCompatActivity
import android.widget.Toast
import io.github.inflationx.viewpump.ViewPumpContextWrapper
import me.gilo.wc.R
import kotlinx.android.synthetic.main.activity_anonymous_sign_in.*
import kotlinx.android.synthetic.main.content_sign_in.*
import me.gilo.raison.ui.user.onboarding.SignUpActivity
import me.gilo.wc.common.BaseActivity
import me.gilo.wc.common.Status
import me.gilo.wc.ui.WooDroidActivity
import me.gilo.wc.ui.home.HomeActivity
import me.gilo.wc.ui.state.ProgressDialogFragment
import me.gilo.wc.viewmodels.UserViewModel
import java.util.regex.Matcher
import java.util.regex.Pattern
class AnonymousSignInActivity : WooDroidActivity<UserViewModel>() {
override lateinit var viewModel : UserViewModel
override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_anonymous_sign_in)
viewModel = getViewModel(UserViewModel::class.java)
anonymousSignIn()
}
private fun anonymousSignIn() {
viewModel.anonymousSignIn().observe(this, Observer {
response->
when (response!!.status()){
Status.LOADING ->{
showLoading("Setting you up with an account", "This will only take a short while")
}
Status.SUCCESS ->{
stopShowingLoading()
startActivity(Intent(baseContext, HomeActivity::class.java))
}
Status.ERROR ->{
stopShowingLoading()
Toast.makeText(baseContext, "Something went wrong", Toast.LENGTH_LONG).show()
}
Status.EMPTY ->{
stopShowingLoading()
}
}
})
}
}

View File

@ -11,19 +11,20 @@ import kotlinx.android.synthetic.main.content_sign_in.*
import me.gilo.wc.R import me.gilo.wc.R
import me.gilo.wc.common.BaseActivity import me.gilo.wc.common.BaseActivity
import me.gilo.wc.common.Status import me.gilo.wc.common.Status
import me.gilo.wc.ui.WooDroidActivity
import me.gilo.wc.ui.home.HomeActivity import me.gilo.wc.ui.home.HomeActivity
import me.gilo.wc.ui.state.ProgressDialogFragment import me.gilo.wc.ui.state.ProgressDialogFragment
import me.gilo.wc.viewmodels.CustomerViewModel
import me.gilo.wc.viewmodels.UserViewModel import me.gilo.wc.viewmodels.UserViewModel
import org.json.JSONObject import org.json.JSONObject
import java.util.regex.Matcher import java.util.regex.Matcher
import java.util.regex.Pattern import java.util.regex.Pattern
class SignInActivity : BaseActivity() { class SignInActivity : WooDroidActivity<UserViewModel>() {
lateinit var viewModel : UserViewModel override lateinit var viewModel : UserViewModel
val TAG = this::getLocalClassName
private lateinit var progressDialog: ProgressDialogFragment private lateinit var progressDialog: ProgressDialogFragment
private val pattern = Pattern.compile(EMAIL_PATTERN) private val pattern = Pattern.compile(EMAIL_PATTERN)
@ -107,17 +108,6 @@ class SignInActivity : BaseActivity() {
return matcher!!.matches() return matcher!!.matches()
} }
private fun showLoading(title: String, message: String) {
val manager = supportFragmentManager
progressDialog = ProgressDialogFragment.newInstance(title, message)
progressDialog.isCancelable = false
progressDialog.show(manager, "progress")
}
private fun stopShowingLoading() {
progressDialog.dismiss()
}
companion object { companion object {
private const val EMAIL_PATTERN = "^[a-zA-Z0-9#_~!$&'()*+,;=:.\"(),:;<>@\\[\\]\\\\]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$" private const val EMAIL_PATTERN = "^[a-zA-Z0-9#_~!$&'()*+,;=:.\"(),:;<>@\\[\\]\\\\]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$"
} }

View File

@ -13,15 +13,16 @@ import me.gilo.wc.common.BaseActivity
import me.gilo.wc.common.Status import me.gilo.wc.common.Status
import me.gilo.wc.models.User import me.gilo.wc.models.User
import me.gilo.wc.ui.WooDroidActivity
import me.gilo.wc.ui.home.HomeActivity import me.gilo.wc.ui.home.HomeActivity
import me.gilo.wc.ui.state.ProgressDialogFragment import me.gilo.wc.ui.state.ProgressDialogFragment
import me.gilo.wc.viewmodels.UserViewModel import me.gilo.wc.viewmodels.UserViewModel
import java.util.regex.Matcher import java.util.regex.Matcher
import java.util.regex.Pattern import java.util.regex.Pattern
class SignUpActivity : BaseActivity() { class SignUpActivity : WooDroidActivity<UserViewModel>() {
lateinit var viewModel : UserViewModel override lateinit var viewModel : UserViewModel
val TAG = this::getLocalClassName val TAG = this::getLocalClassName
private lateinit var progressDialog: ProgressDialogFragment private lateinit var progressDialog: ProgressDialogFragment
@ -186,17 +187,6 @@ class SignUpActivity : BaseActivity() {
return matcher!!.matches() return matcher!!.matches()
} }
private fun showLoading(title: String, message: String) {
val manager = supportFragmentManager
progressDialog = ProgressDialogFragment.newInstance(title, message)
progressDialog.isCancelable = false
progressDialog.show(manager, "progress")
}
private fun stopShowingLoading() {
progressDialog.dismiss()
}
companion object { companion object {
private const val EMAIL_PATTERN = "^[a-zA-Z0-9#_~!$&'()*+,;=:.\"(),:;<>@\\[\\]\\\\]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$" private const val EMAIL_PATTERN = "^[a-zA-Z0-9#_~!$&'()*+,;=:.\"(),:;<>@\\[\\]\\\\]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$"
} }

View File

@ -29,6 +29,10 @@ public final class UserViewModel extends ViewModel {
return firebaseUserRepository.login(username, password); return firebaseUserRepository.login(username, password);
} }
public CompletionGenericLiveData<AuthResult> anonymousSignIn() {
return firebaseUserRepository.anonymousSignIn();
}
public CompletionGenericLiveData<AuthResult> firebaseLogin(String email, String password) { public CompletionGenericLiveData<AuthResult> firebaseLogin(String email, String password) {
return firebaseUserRepository.login(email, password); return firebaseUserRepository.login(email, password);
} }

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.onboarding.AnonymousSignInActivity">
<android.support.design.widget.AppBarLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_anonymous_sign_in"/>
</android.support.design.widget.CoordinatorLayout>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView <android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
@ -9,10 +9,36 @@
android:layout_margin="16dp" android:layout_margin="16dp"
> >
<TextView
android:id="@+id/tvText"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</android.support.v4.widget.NestedScrollView> <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginTop="8dp"
app:layout_constraintTop_toTopOf="parent"
android:id="@+id/imageView2"/>
<TextView
android:id="@+id/tvSplashText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Loading"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@+id/imageView2"/>
</android.support.constraint.ConstraintLayout>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_anonymous_sign_in"
tools:context=".ui.onboarding.AnonymousSignInActivity">
</android.support.constraint.ConstraintLayout>

View File

@ -45,5 +45,6 @@
</string> </string>
<string name="title_activity_cart">CartActivity</string> <string name="title_activity_cart">CartActivity</string>
<string name="title_activity_checkout">CheckoutActivity</string> <string name="title_activity_checkout">CheckoutActivity</string>
<string name="title_activity_anonymous_sign_in">AnonymousSignInActivity</string>
</resources> </resources>