diff --git a/.idea/misc.xml b/.idea/misc.xml index e0d5b93..99202cc 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -5,26 +5,22 @@ diff --git a/app/build.gradle b/app/build.gradle index 8e06b2a..45bc5c0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -28,6 +28,8 @@ dependencies { implementation 'com.squareup.picasso:picasso:2.71828' implementation 'com.android.volley:volley:1.1.1' implementation 'com.android.support:recyclerview-v7:28.0.0' + implementation 'com.jakewharton:butterknife:6.1.0' + annotationProcessor 'com.jakewharton:butterknife:6.1.0' implementation 'com.github.ivbaranov:materialfavoritebutton:0.1.4' implementation 'com.google.android.gms:play-services-ads:17.1.1' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4023e35..f3b441f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,8 +2,6 @@ - - + + + + + + + + + + + + @@ -34,8 +49,13 @@ + android:parentActivityName=".activities.MainActivity" /> + + + + + + + + - \ No newline at end of file + diff --git a/app/src/main/java/AndroidManifest.xml b/app/src/main/java/AndroidManifest.xml new file mode 100644 index 0000000..a5773aa --- /dev/null +++ b/app/src/main/java/AndroidManifest.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/readybrains/coindesk/activities/LoginActivity.java b/app/src/main/java/com/readybrains/coindesk/activities/LoginActivity.java new file mode 100644 index 0000000..9d61342 --- /dev/null +++ b/app/src/main/java/com/readybrains/coindesk/activities/LoginActivity.java @@ -0,0 +1,153 @@ +package com.readybrains.coindesk.activities; + +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.google.android.gms.ads.AdRequest; +import com.google.android.gms.ads.AdView; +import com.google.android.gms.ads.MobileAds; +import com.readybrains.coindesk.R; + +import butterknife.ButterKnife; +import butterknife.InjectView; + +public class LoginActivity extends AppCompatActivity { + private static final String TAG = "LoginActivity"; + private static final int REQUEST_SIGNUP = 0; + private AdView mAdView; + + @InjectView(R.id.input_email) EditText _emailText; + @InjectView(R.id.input_password) EditText _passwordText; + + @InjectView(R.id.btn_login) Button _loginButton; + @InjectView(R.id.link_signup) TextView _signupLink; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.login); + MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713."); + mAdView = findViewById(R.id.adView); + AdRequest adRequest = new AdRequest.Builder().build(); + mAdView.loadAd(adRequest); + ButterKnife.inject(this); + + _loginButton.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + login(); + } + }); + + _signupLink.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // Start the Signup activity + Intent intent = new Intent(getApplicationContext(), SignUpActivity.class); + startActivityForResult(intent, REQUEST_SIGNUP); + finish(); + overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out); + } + }); + } + + public void login() { + Log.d(TAG, "Login"); + + if (!validate()) { + onLoginFailed(); + return; + } + + _loginButton.setEnabled(false); + + final ProgressDialog progressDialog = new ProgressDialog(LoginActivity.this, + R.style.AppTheme_Dark_Dialog); + progressDialog.setIndeterminate(true); + progressDialog.setMessage("Authenticating..."); + progressDialog.show(); + + + String email = _emailText.getText().toString(); + String password = _passwordText.getText().toString(); + + // TODO: Implement your own authentication logic here. + + + new android.os.Handler().postDelayed( + new Runnable() { + public void run() { + // On complete call either onLoginSuccess or onLoginFailed + onLoginSuccess(); + Intent i = new Intent(LoginActivity.this, MainActivity.class); + startActivity(i); + // onLoginFailed(); + progressDialog.dismiss(); + } + }, 3000); + } + + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == REQUEST_SIGNUP) { + if (resultCode == RESULT_OK) { + + // TODO: Implement successful signup logic here + // By default we just finish the Activity and log them in automatically + this.finish(); + } + } + } + + @Override + public void onBackPressed() { + // Disable going back to the MainActivity + moveTaskToBack(true); + } + + public void onLoginSuccess() { + _loginButton.setEnabled(true); + finish(); + } + + public void onLoginFailed() { + Toast.makeText(getBaseContext(), "Login failed", Toast.LENGTH_LONG).show(); + + _loginButton.setEnabled(true); + } + + public boolean validate() { + boolean valid = true; + + String email = _emailText.getText().toString(); + String password = _passwordText.getText().toString(); + + if (email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) { + _emailText.setError("enter a valid email address"); + valid = false; + } else { + _emailText.setError(null); + } + + if (password.isEmpty() || password.length() < 4 || password.length() > 10) { + _passwordText.setError("between 4 and 10 alphanumeric characters"); + valid = false; + } else { + _passwordText.setError(null); + } + + return valid; + } +} diff --git a/app/src/main/java/com/readybrains/coindesk/activities/SignUpActivity.java b/app/src/main/java/com/readybrains/coindesk/activities/SignUpActivity.java new file mode 100644 index 0000000..ac0e529 --- /dev/null +++ b/app/src/main/java/com/readybrains/coindesk/activities/SignUpActivity.java @@ -0,0 +1,171 @@ +package com.readybrains.coindesk.activities; + +import android.app.ProgressDialog; +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import com.readybrains.coindesk.R; + +import butterknife.ButterKnife; +import butterknife.InjectView; + +public class SignUpActivity extends AppCompatActivity { + private static final String TAG = "SignupActivity"; + @InjectView(R.id.input_name) + EditText _nameText; + @InjectView(R.id.input_address) + EditText _addressText; + @InjectView(R.id.input_email) + EditText _emailText; + @InjectView(R.id.input_mobile) + EditText _mobileText; + @InjectView(R.id.input_password) + EditText _passwordText; + @InjectView(R.id.input_reEnterPassword) + EditText _reEnterPasswordText; + @InjectView(R.id.btn_signup) + Button _signupButton; + @InjectView(R.id.link_login) + TextView _loginLink; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_signup); + ButterKnife.inject(this); + + _signupButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + signup(); + } + }); + + _loginLink.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // Finish the registration screen and return to the Login activity + Intent intent = new Intent(getApplicationContext(), LoginActivity.class); + startActivity(intent); + finish(); + + } + }); + } + + public void signup() { + Log.d(TAG, "Signup"); + + if (!validate()) { + onSignupFailed(); + return; + } + + _signupButton.setEnabled(false); + + final ProgressDialog progressDialog = new ProgressDialog(SignUpActivity.this, + R.style.AppTheme_Dark_Dialog); + progressDialog.setIndeterminate(true); + progressDialog.setMessage("Creating Account..."); + progressDialog.show(); + + String name = _nameText.getText().toString(); + String address = _addressText.getText().toString(); + String email = _emailText.getText().toString(); + String mobile = _mobileText.getText().toString(); + String password = _passwordText.getText().toString(); + String reEnterPassword = _reEnterPasswordText.getText().toString(); + + + new android.os.Handler().postDelayed( + new Runnable() { + public void run() { + // On complete call either onSignupSuccess or onSignupFailed + // depending on success + onSignupSuccess(); + // onSignupFailed(); + progressDialog.dismiss(); + } + }, 3000); + } + + + public void onSignupSuccess() { + _signupButton.setEnabled(true); + setResult(RESULT_OK, null); + finish(); + } + + public void onSignupFailed() { + Toast.makeText(getBaseContext(), "Login failed", Toast.LENGTH_LONG).show(); + + _signupButton.setEnabled(true); + } + + public boolean validate() { + boolean valid = true; + + String name = _nameText.getText().toString(); + String address = _addressText.getText().toString(); + String email = _emailText.getText().toString(); + String mobile = _mobileText.getText().toString(); + String password = _passwordText.getText().toString(); + String reEnterPassword = _reEnterPasswordText.getText().toString(); + + if (name.isEmpty() || name.length() < 3) { + _nameText.setError("at least 3 characters"); + valid = false; + } else { + _nameText.setError(null); + } + + if (address.isEmpty()) { + _addressText.setError("Enter Valid Address"); + valid = false; + } else { + _addressText.setError(null); + } + + + if (email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) { + _emailText.setError("enter a valid email address"); + valid = false; + } else { + _emailText.setError(null); + } + + if (mobile.isEmpty() || mobile.length() != 10) { + _mobileText.setError("Enter Valid Mobile Number"); + valid = false; + } else { + _mobileText.setError(null); + } + + if (password.isEmpty() || password.length() < 4 || password.length() > 10) { + _passwordText.setError("between 4 and 10 alphanumeric characters"); + valid = false; + } else { + _passwordText.setError(null); + } + + if (reEnterPassword.isEmpty() || reEnterPassword.length() < 4 || reEnterPassword.length() > 10 || !(reEnterPassword.equals(password))) { + _reEnterPasswordText.setError("Password Do not match"); + valid = false; + } else { + _reEnterPasswordText.setError(null); + } + + return valid; + } +} + diff --git a/app/src/main/java/com/readybrains/coindesk/fragments/NewsFragment.java b/app/src/main/java/com/readybrains/coindesk/fragments/NewsFragment.java index bf65c11..991ac48 100644 --- a/app/src/main/java/com/readybrains/coindesk/fragments/NewsFragment.java +++ b/app/src/main/java/com/readybrains/coindesk/fragments/NewsFragment.java @@ -90,7 +90,7 @@ public void onRefresh() { } private void parseJSON() { - String url = "http://devendra8112.pythonanywhere.com/api/get_news/"; + String url = "https://min-api.cryptocompare.com/data/v2/news/?lang=EN&api_key=77e21907a80700fb0fcee2f5690baa7183392fbdb72569bf52a004ef3b4b40cc"; JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener() { diff --git a/app/src/main/res/anim/push_left_in.xml b/app/src/main/res/anim/push_left_in.xml new file mode 100644 index 0000000..b686855 --- /dev/null +++ b/app/src/main/res/anim/push_left_in.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/push_left_out.xml b/app/src/main/res/anim/push_left_out.xml new file mode 100644 index 0000000..449e950 --- /dev/null +++ b/app/src/main/res/anim/push_left_out.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/logo.png b/app/src/main/res/drawable/logo.png new file mode 100644 index 0000000..db3fe93 Binary files /dev/null and b/app/src/main/res/drawable/logo.png differ diff --git a/app/src/main/res/layout/activity_signup.xml b/app/src/main/res/layout/activity_signup.xml new file mode 100644 index 0000000..f06cf50 --- /dev/null +++ b/app/src/main/res/layout/activity_signup.xml @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/login.xml b/app/src/main/res/layout/login.xml new file mode 100644 index 0000000..ac96f00 --- /dev/null +++ b/app/src/main/res/layout/login.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 405c5f6..9a925ff 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -2,6 +2,20 @@ #0077b5 #0077b5 - #0077b5 + #D81B60 + #E43F3F + #E12929 + #CC1D1D + #FFFFFF + + #000000 + #222222 + #333333 + #777777 + #888888 + #999999 + #AAAAAA + #CCCCCC #4d4d4d + #FFFFFF diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index a702118..03702fe 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -8,6 +8,37 @@ @color/colorAccent + + + + + + + + +