Skip to content

Commit

Permalink
Merge pull request #30 from batshalregmi/trent-firebase
Browse files Browse the repository at this point in the history
Merging summary view with settings page
  • Loading branch information
patelshubh1022 authored Apr 12, 2024
2 parents 7f0d048 + 5bea20d commit f03259d
Show file tree
Hide file tree
Showing 16 changed files with 538 additions and 294 deletions.
20 changes: 14 additions & 6 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,24 @@
android:supportsRtl="true"
android:theme="@style/Theme.Spotifywrapped"
tools:targetApi="31">
<activity
android:name=".CoreAppViews.SettingsActivity"
android:exported="true"/>
<activity
android:name=".summary.SummarySelectorActivity"
android:exported="true" />
<activity
android:name=".summary.SummaryActivity"
android:exported="true" />
<activity android:name=".CoreAppViews.SettingsActivity"
android:exported="true" />
<activity
android:name=".CoreAppViews.SignUpActivity"
android:exported="true"/>
<activity android:name=".CoreAppViews.MainPageActivity"
android:exported="true"/>
android:exported="true">
<intent-filter>
<data
android:host="auth"
android:scheme="spotifywrapped" />
</intent-filter>
</activity>
<activity
android:name=".CoreAppViews.LoginActivity"
android:exported="true">
Expand All @@ -36,10 +41,13 @@
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".DevStartActivity"
android:exported="true">
</activity>
</application>

</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,22 @@
import android.net.Uri;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.group3.spotifywrapped.Foo;
import com.group3.spotifywrapped.R;
import com.group3.spotifywrapped.database.FirebaseHelper;
import com.group3.spotifywrapped.database.User;

import com.group3.spotifywrapped.summary.SummarySelectorActivity;
import com.spotify.sdk.android.auth.AuthorizationClient;
Expand All @@ -44,15 +39,18 @@ public class LoginActivity extends AppCompatActivity {
"user-read-email",
"user-top-read"
};

public static final int AUTH_TOKEN_REQUEST_CODE = 0;
public static final int AUTH_CODE_REQUEST_CODE = 1;

private static final int SIGN_IN_PROCESSING = 0;
private static final int SIGN_IN_FAIL = 1;
private static final int SIGN_IN_SUCCESS = 2;
private AtomicInteger signInState = new AtomicInteger(SIGN_IN_PROCESSING);
private AtomicBoolean tokenRecieved = new AtomicBoolean(false);

public static AtomicReference<DatabaseReference> activeUser = new AtomicReference<>(null);
public static String token;

private AtomicBoolean tokenRecieved = new AtomicBoolean(false);

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Expand All @@ -71,25 +69,35 @@ public void onClick(View view) {
Toast.makeText(LoginActivity.this, "Password must be 6 characters long", Toast.LENGTH_SHORT).show();
return;
}
FirebaseAuth mAuth = FirebaseAuth.getInstance();
mAuth.signInWithEmailAndPassword(usernameTextField.getText().toString(), passwordTextField.getText().toString()).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
Thread thread = new Thread(new Runnable() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
public void run() {
FirebaseAuth mAuth = FirebaseAuth.getInstance();
mAuth.signInWithEmailAndPassword(usernameTextField.getText().toString(), passwordTextField.getText().toString()).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
activeUser = FirebaseHelper.getUserByFirebaseUser();
getToken();
while(!tokenRecieved.get());
Intent i = new Intent(LoginActivity.this, SummarySelectorActivity.class); //TODO: CHANGE THIS BACK
startActivity(i);
signInState.set(SIGN_IN_SUCCESS);
} else{
Toast.makeText(LoginActivity.this, "Invalid credentials", Toast.LENGTH_SHORT).show();
signInState.set(SIGN_IN_FAIL);
}
});
thread.start();
}
});

while (signInState.get() == SIGN_IN_PROCESSING);
if (signInState.get() == SIGN_IN_SUCCESS) {
signInState.set(SIGN_IN_PROCESSING);
getToken();
while(!tokenRecieved.get());
Intent i = new Intent(LoginActivity.this, SummarySelectorActivity.class);
startActivity(i);
}
signInState.set(SIGN_IN_PROCESSING);
}
});
thread.start();
}
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
Expand All @@ -17,42 +19,117 @@
import com.group3.spotifywrapped.database.FirebaseHelper;
import com.group3.spotifywrapped.database.User;
import com.group3.spotifywrapped.summary.SummarySelectorActivity;
import com.spotify.sdk.android.auth.AuthorizationClient;
import com.spotify.sdk.android.auth.AuthorizationRequest;
import com.spotify.sdk.android.auth.AuthorizationResponse;

import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;


public class SignUpActivity extends AppCompatActivity {
public static final String TAG = "SignUpActivity";

public static final String CLIENT_ID = "9e3e12a5d1424f068a20c6db49de005c";
public static final String REDIRECT_URI = "spotifywrapped://auth";
public static final String[] SCOPES = new String[] {
"user-read-recently-played",
"user-library-read",
"user-read-email",
"user-top-read"
};

public static final int AUTH_TOKEN_REQUEST_CODE = 0;
public static final int AUTH_CODE_REQUEST_CODE = 1;

private static final int SIGN_IN_PROCESSING = 0;
private static final int SIGN_IN_FAIL = 1;
private static final int SIGN_IN_SUCCESS = 2;
private AtomicInteger signInState = new AtomicInteger(SIGN_IN_PROCESSING);
private AtomicBoolean tokenRecieved = new AtomicBoolean(false);

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_up);

EditText username = findViewById(R.id.username);
EditText password = findViewById(R.id.password);
EditText confirmPassword = findViewById(R.id.confirmPassword);
EditText email = findViewById(R.id.email);
EditText name = findViewById(R.id.name);
EditText usernameTextField = findViewById(R.id.username);
EditText passwordTextField = findViewById(R.id.password);
EditText confirmPasswordTextField = findViewById(R.id.confirmPassword);
EditText emailTextField = findViewById(R.id.email);
EditText nameTextField = findViewById(R.id.name);
Button createAccountButton = findViewById(R.id.createAccount);

createAccountButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FirebaseAuth.getInstance().createUserWithEmailAndPassword(email.getText().toString(), password.getText().toString()).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
Thread thread = new Thread(new Runnable() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
User newUser = new User();
newUser.userUid = FirebaseAuth.getInstance().getUid();
newUser.username = username.getText().toString();
newUser.name = name.getText().toString();
LoginActivity.activeUser.set(FirebaseHelper.addUser(newUser));
public void run() {
Log.d(TAG, String.format("Registering new user using\nemail: %s\npassword: %s", emailTextField.getText().toString(), passwordTextField.getText().toString()));
FirebaseAuth.getInstance().createUserWithEmailAndPassword(emailTextField.getText().toString(), passwordTextField.getText().toString()).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
User newUser = new User();
newUser.userUid = FirebaseAuth.getInstance().getUid();
newUser.username = usernameTextField.getText().toString();
newUser.name = nameTextField.getText().toString();
Log.d(TAG, "adding new user to database");
LoginActivity.activeUser.set(FirebaseHelper.addUser(newUser));
Log.d(TAG, "Finished adding new user to database");
signInState.set(SIGN_IN_SUCCESS);
} else {
Toast.makeText(SignUpActivity.this, "Failed to sign up", Toast.LENGTH_SHORT).show();
signInState.set(SIGN_IN_FAIL);
}
}
});

while (signInState.get() == SIGN_IN_PROCESSING);
if (signInState.get() == SIGN_IN_SUCCESS) {
signInState.set(SIGN_IN_PROCESSING);
Log.d(TAG, "Getting token");
getToken();
while(!tokenRecieved.get());
Log.d(TAG, "Token recieved: " + LoginActivity.token);
Intent i = new Intent(SignUpActivity.this, SummarySelectorActivity.class);
startActivity(i);
} else {
Toast.makeText(SignUpActivity.this, "Failed to sign up", Toast.LENGTH_SHORT).show();
}
signInState.set(SIGN_IN_PROCESSING);
}
});
thread.start();
}
});
}

public void getToken() {
final AuthorizationRequest request = getAuthenticationRequest(AuthorizationResponse.Type.TOKEN);
AuthorizationClient.openLoginActivity(SignUpActivity.this, AUTH_TOKEN_REQUEST_CODE, request);
}

private AuthorizationRequest getAuthenticationRequest(AuthorizationResponse.Type type) {
return new AuthorizationRequest.Builder(CLIENT_ID, type, getRedirectUri().toString())
.setShowDialog(false)
.setScopes(SCOPES)
.setCampaign("your-campaign-token")
.build();
}

private Uri getRedirectUri() {
return Uri.parse(REDIRECT_URI);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
final AuthorizationResponse response = AuthorizationClient.getResponse(resultCode, data);

if (AUTH_TOKEN_REQUEST_CODE == requestCode) {
//Log.d("LoginActivity", "Response: " + response.getAccessToken());
LoginActivity.token = response.getAccessToken();
tokenRecieved.set(true);
}
}
}
15 changes: 0 additions & 15 deletions app/src/main/java/com/group3/spotifywrapped/Foo.java

This file was deleted.

36 changes: 14 additions & 22 deletions app/src/main/java/com/group3/spotifywrapped/database/Artist.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,36 +17,28 @@
import java.io.IOException;
import java.util.Comparator;

public class Artist {
public class Artist extends SpotifyItem{
private static final String TAG = "Artist";

public String name;
private String profilePictureUrl;
private Drawable profilePicture;

public Artist() {}
public Artist(String name, String profilePictureUrl) {
this.name = name;
setProfilePictureUrl(profilePictureUrl);
public Artist() {
super(SpotifyItem.ARTIST, null, null, null);
}

public static Artist parseFromJSON(JSONObject src) throws Exception {
Artist newArtist = new Artist();
newArtist.name = src.getString("name");
newArtist.profilePictureUrl = src.getJSONArray("images").getJSONObject(0).getString("url");
return newArtist;
public Artist(String spotifyId, String name, String imageUrl) {
super(SpotifyItem.ARTIST, spotifyId, name, imageUrl);
}

public String getProfilePictureUrl() { return profilePictureUrl; }
public void setProfilePictureUrl(String profilePictureUrl) {
this.profilePictureUrl = profilePictureUrl;
public static Artist parseFromJSON(JSONObject src) {
Artist temp = new Artist();
try {
this.profilePicture = SpotifyApiHelper.loadImageFromURL(profilePictureUrl);
} catch (IOException e) {
Log.e(TAG, e.toString());
temp.spotifyId = src.getString("id");
temp.name = src.getString("name");
temp.setImageUrl(src.getJSONArray("images").getJSONObject(0).getString("url"));
return temp;
} catch (JSONException e) {
Log.e(TAG, "Failed to parse Artist from JSON: " + e.toString());
}
return temp;
}
public Drawable getProfilePicture() { return profilePicture; }

@Override
public String toString() {
Expand Down
Loading

0 comments on commit f03259d

Please sign in to comment.