Feat(profile): access basically done

This commit is contained in:
minhtrannhat 2023-11-05 18:05:38 -05:00
parent f9eec3ec44
commit f19f09027f
Signed by: minhtrannhat
GPG Key ID: E13CFA85C53F8062
4 changed files with 52 additions and 26 deletions

View File

@ -29,7 +29,6 @@ android {
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.10.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'

View File

@ -74,14 +74,13 @@ public class AccessDBHelper extends SQLiteOpenHelper {
String[] columns = {"access_id", "profile_id", "access_type", "timestamp"};
String selection = "profile_id = ?";
String[] selectionArgs = {String.valueOf(profileID)};
String orderBy = "timestamp";
String orderBy = "timestamp DESC"; // sort by Latest Access First
cursor = db.query(AccessContract.AccessEntry.TABLE_NAME, columns, selection, selectionArgs, null, null, orderBy);
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
// int accessID = cursor.getInt(cursor.getColumnIndexOrThrow("access_id"));
int _profileID = cursor.getInt(cursor.getColumnIndexOrThrow("profile_id"));
String accessType = cursor.getString(cursor.getColumnIndexOrThrow("access_type"));
String timestamp = cursor.getString(cursor.getColumnIndexOrThrow("timestamp"));

View File

@ -14,12 +14,16 @@ import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import com.example.coen390_assignment2.Controllers.AccessDBHelper;
import com.example.coen390_assignment2.Controllers.StudentProfileDBHelper;
import com.example.coen390_assignment2.Models.Access;
import com.example.coen390_assignment2.Models.AccessType;
import com.example.coen390_assignment2.Models.StudentProfile;
import com.example.coen390_assignment2.Models.StudentProfileIDComparator;
import com.example.coen390_assignment2.Models.StudentProfileSurnameComparator;
import com.example.coen390_assignment2.R;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@ -27,6 +31,8 @@ public class MainActivity extends AppCompatActivity {
protected StudentProfileDBHelper studentProfileDBHelper;
protected AccessDBHelper accessDBHelper;
protected Toolbar toolbar;
protected Button showDialogButton;
@ -50,6 +56,8 @@ public class MainActivity extends AppCompatActivity {
studentProfileDBHelper = new StudentProfileDBHelper(getApplicationContext());
accessDBHelper = new AccessDBHelper(getApplicationContext());
initAddProfileActionButton(showDialogButton);
// surname when true, ID when false
@ -86,6 +94,9 @@ public class MainActivity extends AppCompatActivity {
intent.putExtra("gpa", clickedProfile.getGPA());
intent.putExtra("dateCreated", clickedProfile.getProfileCreationDate().toString());
// create an Access entry
createAccessOpened(clickedProfile.getProfileID(), AccessType.OPENED, LocalDateTime.now());
// Start the ProfileActivity
startActivity(intent);
}
@ -119,13 +130,13 @@ public class MainActivity extends AppCompatActivity {
profileNameDisplayMode = false;
onStart();
return true;
return false;
} else if (id == R.id.toggle_profiles_display_mode && toggle.getTitle() == "By Surname"){
profileNameDisplayMode = true;
onStart();
return true;
return false;
}
return super.onOptionsItemSelected(item);
@ -173,4 +184,9 @@ public class MainActivity extends AppCompatActivity {
}
});
}
protected void createAccessOpened(long profileID, AccessType accessType, LocalDateTime timestamp){
Access access = new Access(profileID, accessType, timestamp);
accessDBHelper.insertAccess(access, getApplicationContext());
}
}

View File

@ -1,25 +1,27 @@
package com.example.coen390_assignment2.Views;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.activity.OnBackPressedCallback;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import com.example.coen390_assignment2.Controllers.AccessDBHelper;
import com.example.coen390_assignment2.Models.Access;
import com.example.coen390_assignment2.Models.AccessType;
import com.example.coen390_assignment2.R;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class ProfileActivity extends AppCompatActivity {
@ -59,6 +61,18 @@ public class ProfileActivity extends AppCompatActivity {
setTitle("Profile Activity");
OnBackPressedCallback callback = new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
Log.d("ProfileActivity", "handleOnBackPressed: Pressed");
createAccessClosed(profileId, AccessType.CLOSED, LocalDateTime.now());
finish();
}
};
// Add the callback to the back button dispatcher
getOnBackPressedDispatcher().addCallback(this, callback);
// Retrieve the extra data from the Intent
Intent intent = getIntent();
@ -86,9 +100,13 @@ public class ProfileActivity extends AppCompatActivity {
}
@Override
protected void onStart() {
super.onStart();
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
createAccessClosed(profileId, AccessType.CLOSED, LocalDateTime.now());
return false;
}
return super.onOptionsItemSelected(item);
}
protected String[] accessListFromProfileIDToString(List<Access> accessList) {
@ -101,18 +119,12 @@ public class ProfileActivity extends AppCompatActivity {
formattedAccessStrings.add(formattedAccessString);
}
// Sort the list of formatted String representations based on the timestamp
formattedAccessStrings.sort(new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
// Extract the timestamps from the strings and compare them
LocalDateTime timestamp1 = LocalDateTime.parse(s1.split(" ")[0], formatter);
LocalDateTime timestamp2 = LocalDateTime.parse(s2.split(" ")[0], formatter);
return timestamp1.compareTo(timestamp2);
}
});
// Convert the sorted formatted String list back to a String array
return formattedAccessStrings.toArray(new String[0]);
}
protected void createAccessClosed(long profileId, AccessType accessType, LocalDateTime timestamp) {
Access access = new Access(profileId, accessType, timestamp);
dbHelper.insertAccess(access, getApplicationContext());
}
}