diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..b86273d
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
new file mode 100644
index 0000000..b268ef3
--- /dev/null
+++ b/.idea/deploymentTargetSelector.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 74dd639..b2c751a 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,3 @@
-
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2340ec..7027841 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -13,19 +13,25 @@
android:theme="@style/Theme.KomodoHub"
tools:targetApi="31">
-
+ android:label="@string/title_activity_login" >
+
+
+
+
+
-
\ No newline at end of file
diff --git a/app/src/main/java/com/example/komodohub/DatabaseAdapter.java b/app/src/main/java/com/example/komodohub/DatabaseAdapter.java
new file mode 100644
index 0000000..1e9b2cf
--- /dev/null
+++ b/app/src/main/java/com/example/komodohub/DatabaseAdapter.java
@@ -0,0 +1,111 @@
+package com.example.komodohub;
+
+import android.annotation.SuppressLint;
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+
+import androidx.annotation.NonNull;
+
+import com.example.komodohub.models.User;
+
+public class DatabaseAdapter {
+ DatabaseHelper dbHelper;
+
+ public DatabaseAdapter(Context context) {
+ dbHelper = new DatabaseHelper(context);
+ }
+
+ public long insertUser(String username, String password) {
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+
+ ContentValues contentValues = new ContentValues();
+ contentValues.putNull("Id");
+ contentValues.put("Username", username);
+ contentValues.put("Password", password);
+ contentValues.putNull("CommunityId");
+ contentValues.put("IsCommunityOwner", 0);
+ contentValues.put("IsAdmin", 0);
+
+ long id = db.insert("Users", null, contentValues);
+ return id;
+ }
+
+ public User getUserByName(String username)
+ {
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+
+ Cursor c = db.rawQuery("SELECT * FROM Users WHERE Username = ?", new String[] {username});
+ c.moveToFirst();
+
+ @SuppressLint("Range") User newUser = new User(
+ c.getInt(c.getColumnIndex("Id")),
+ c.getString(c.getColumnIndex("Username")),
+ c.getString(c.getColumnIndex("Password")),
+ c.getInt(c.getColumnIndex("CommunityId")),
+ c.getInt(c.getColumnIndex("IsCommunityOwner")) != 0, // != 0 is to convert to a bool
+ c.getInt(c.getColumnIndex("IsAdmin")) != 0);
+
+ c.close();
+
+ return newUser;
+ }
+
+ public int deleteUser(String username) {
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ String[] whereArgs = {username};
+
+ int count = db.delete("Users", "Username" + " = ?", whereArgs);
+ return count;
+ }
+
+
+
+ static class DatabaseHelper extends SQLiteOpenHelper {
+ private Context context;
+ private static final String DATABASE_NAME = "KomodoDB";
+
+ public DatabaseHelper(Context context) {
+ super(context, DATABASE_NAME, null, 1);
+ this.context = context;
+ }
+
+ @Override
+ public void onCreate(@NonNull SQLiteDatabase sqLiteDatabase) {
+ String usersTable = "CREATE TABLE Users(\n" +
+ " Id INTEGER PRIMARY KEY,\n" +
+ " Username TEXT NOT NULL UNIQUE,\n" +
+ " Password TEXT NOT NULL,\n" +
+ " CommunityId INTEGER,\n" +
+ " IsCommunityOwner INTEGER NOT NULL,\n" +
+ " IsAdmin INTEGER NOT NULL\n" +
+ ");";
+
+ String communitiesTable = "CREATE TABLE Communities(\n" +
+ " Id INTEGER PRIMARY KEY,\n" +
+ " Name TEXT NOT NULL UNIQUE\n" +
+ ");\n";
+
+ String resourcesTable = "CREATE TABLE Resources(\n" +
+ " Id INTEGER PRIMARY KEY,\n" +
+ " CreatorId INTEGER NOT NULL,\n" +
+ " DataCreated TEXT NOT NULL,\n" +
+ " Type TEXT NOT NULL,\n" +
+ " Content TEXT NOT NULL\n" +
+ ");";
+
+
+ sqLiteDatabase.execSQL(usersTable);
+ sqLiteDatabase.execSQL(communitiesTable);
+ sqLiteDatabase.execSQL(resourcesTable);
+ }
+
+ @Override
+ public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
+
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/komodohub/LoginActivity.java b/app/src/main/java/com/example/komodohub/LoginActivity.java
new file mode 100644
index 0000000..ca9e4e9
--- /dev/null
+++ b/app/src/main/java/com/example/komodohub/LoginActivity.java
@@ -0,0 +1,105 @@
+package com.example.komodohub;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.RadioButton;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.activity.EdgeToEdge;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.graphics.Insets;
+import androidx.core.view.ViewCompat;
+import androidx.core.view.WindowInsetsCompat;
+import androidx.navigation.NavController;
+import androidx.navigation.Navigation;
+import androidx.navigation.ui.AppBarConfiguration;
+import androidx.navigation.ui.NavigationUI;
+
+import com.example.komodohub.databinding.ActivityMainBinding;
+import com.google.android.material.snackbar.Snackbar;
+
+import org.w3c.dom.Text;
+
+import java.util.Objects;
+
+public class LoginActivity extends AppCompatActivity {
+ private DatabaseAdapter dbAdapter;
+ private TextView usernameBox;
+ private TextView passwordBox;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ dbAdapter = new DatabaseAdapter(LoginActivity.this);
+
+ EdgeToEdge.enable(this);
+
+ setContentView(R.layout.activity_login);
+
+ usernameBox = findViewById(R.id.login_username_box);
+ passwordBox = findViewById(R.id.login_password_box);
+ }
+
+ public void loginButton(View view) {
+ String username = "" + usernameBox.getText();
+ String password = "" + passwordBox.getText();
+
+ if(Objects.equals(username, "") || Objects.equals(password, ""))
+ {
+ ErrorToast("Please enter username and password");
+ }
+
+ var user = dbAdapter.getUserByName(username);
+
+ var userState = UserState.getInstance();
+ userState.setUser(user);
+ userState.setLoggedIn(true);
+
+
+ Intent myIntent = new Intent(this, SearchActivity.class);
+ startActivity(myIntent);
+ }
+
+ public void registerButton(View view) {
+ String username = "" + usernameBox.getText();
+ String password = "" + passwordBox.getText();
+
+ if(Objects.equals(username, "") || Objects.equals(password, ""))
+ {
+ ErrorToast("Please enter a username and password");
+ return;
+ }
+
+ var userId = dbAdapter.insertUser(username, password);
+ var user = dbAdapter.getUserByName(username);
+
+ var userState = UserState.getInstance();
+ userState.setUser(user);
+ userState.setLoggedIn(true);
+
+
+ Intent myIntent = new Intent(this, SearchActivity.class);
+ startActivity(myIntent);
+ }
+
+ public void noAccountButton(View view)
+ {
+ Intent myIntent = new Intent(this, SearchActivity.class);
+ startActivity(myIntent);
+ }
+
+ private void ErrorToast(String msg)
+ {
+ String toast_msg = "Error: ";
+
+ toast_msg = toast_msg + msg;
+
+ Toast t = Toast.makeText(this, toast_msg, Toast.LENGTH_SHORT);
+ t.show();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/komodohub/ProfileActivity.java b/app/src/main/java/com/example/komodohub/ProfileActivity.java
new file mode 100644
index 0000000..c0c6d47
--- /dev/null
+++ b/app/src/main/java/com/example/komodohub/ProfileActivity.java
@@ -0,0 +1,22 @@
+package com.example.komodohub;
+
+import android.os.Bundle;
+
+import androidx.activity.EdgeToEdge;
+import androidx.appcompat.app.AppCompatActivity;
+
+public class ProfileActivity extends AppCompatActivity {
+ private DatabaseAdapter dbAdapter;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ dbAdapter = new DatabaseAdapter(ProfileActivity.this);
+
+ EdgeToEdge.enable(this);
+
+ setContentView(R.layout.activity_profile);
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/komodohub/SearchActivity.java b/app/src/main/java/com/example/komodohub/SearchActivity.java
new file mode 100644
index 0000000..73dadd8
--- /dev/null
+++ b/app/src/main/java/com/example/komodohub/SearchActivity.java
@@ -0,0 +1,28 @@
+package com.example.komodohub;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.activity.EdgeToEdge;
+import androidx.appcompat.app.AppCompatActivity;
+
+import java.util.Objects;
+
+public class SearchActivity extends AppCompatActivity {
+ private DatabaseAdapter dbAdapter;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ dbAdapter = new DatabaseAdapter(SearchActivity.this);
+
+ EdgeToEdge.enable(this);
+
+ setContentView(R.layout.activity_search);
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/komodohub/UserState.java b/app/src/main/java/com/example/komodohub/UserState.java
new file mode 100644
index 0000000..bc99384
--- /dev/null
+++ b/app/src/main/java/com/example/komodohub/UserState.java
@@ -0,0 +1,41 @@
+package com.example.komodohub;
+
+import com.example.komodohub.models.User;
+
+public class UserState {
+ private static final UserState instance;
+
+ private User user;
+
+ public boolean isLoggedIn() {
+ return isLoggedIn;
+ }
+
+ public void setLoggedIn(boolean loggedIn) {
+ isLoggedIn = loggedIn;
+ }
+
+ private boolean isLoggedIn;
+
+
+ public User getUser() {
+ return user;
+ }
+
+ public void setUser(User myVar) {
+ this.user = myVar;
+ }
+
+
+ static {
+ instance = new UserState();
+ }
+
+ private UserState() {
+ }
+
+ public static UserState getInstance() {
+ return UserState.instance;
+ }
+
+}
diff --git a/app/src/main/java/com/example/komodohub/create_tables.sql b/app/src/main/java/com/example/komodohub/create_tables.sql
new file mode 100644
index 0000000..d20a301
--- /dev/null
+++ b/app/src/main/java/com/example/komodohub/create_tables.sql
@@ -0,0 +1,21 @@
+CREATE TABLE Users(
+ Id INTEGER PRIMARY KEY,
+ Username TEXT NOT NULL UNIQUE,
+ Password TEXT NOT NULL,
+ CommunityId INTEGER,
+ IsCommunityOwner INTEGER NOT NULL,
+ IsAdmin INTEGER NOT NULL
+);
+
+CREATE TABLE Communities(
+ Id INTEGER PRIMARY KEY,
+ Name TEXT NOT NULL
+);
+
+CREATE TABLE Resources(
+ Id INTEGER PRIMARY KEY,
+ CreatorId INTEGER NOT NULL,
+ DataCreated TEXT NOT NULL,
+ Type TEXT NOT NULL,
+ Content TEXT NOT NULL
+);
\ No newline at end of file
diff --git a/app/src/main/java/com/example/komodohub/models/Community.java b/app/src/main/java/com/example/komodohub/models/Community.java
new file mode 100644
index 0000000..9fac6dc
--- /dev/null
+++ b/app/src/main/java/com/example/komodohub/models/Community.java
@@ -0,0 +1,11 @@
+package com.example.komodohub.models;
+
+public class Community {
+ public int Id;
+ public String Name;
+
+ public Community(int id, String name) {
+ Id = id;
+ Name = name;
+ }
+}
diff --git a/app/src/main/java/com/example/komodohub/models/Resource.java b/app/src/main/java/com/example/komodohub/models/Resource.java
new file mode 100644
index 0000000..b7890ed
--- /dev/null
+++ b/app/src/main/java/com/example/komodohub/models/Resource.java
@@ -0,0 +1,17 @@
+package com.example.komodohub.models;
+
+public class Resource {
+ public int Id;
+ public int CreatorId;
+ public String DateCreated;
+ public String Type;
+ public String Content;
+
+ public Resource(int id, int creatorId, String dateCreated, String type, String content) {
+ Id = id;
+ CreatorId = creatorId;
+ DateCreated = dateCreated;
+ Type = type;
+ Content = content;
+ }
+}
diff --git a/app/src/main/java/com/example/komodohub/models/User.java b/app/src/main/java/com/example/komodohub/models/User.java
new file mode 100644
index 0000000..a1ef1be
--- /dev/null
+++ b/app/src/main/java/com/example/komodohub/models/User.java
@@ -0,0 +1,20 @@
+package com.example.komodohub.models;
+
+
+public class User {
+ public int Id;
+ public String Username;
+ public String Password;
+ public int CommunityId;
+ public boolean IsCommunityOwner;
+ public boolean IsAdmin;
+
+ public User(int id, String username, String password, int communityId, boolean isCommunityOwner, boolean isAdmin) {
+ Id = id;
+ Username = username;
+ Password = password;
+ CommunityId = communityId;
+ IsCommunityOwner = isCommunityOwner;
+ IsAdmin = isAdmin;
+ }
+}
diff --git a/app/src/main/res/layout/login_page.xml b/app/src/main/res/layout/activity_login.xml
similarity index 85%
rename from app/src/main/res/layout/login_page.xml
rename to app/src/main/res/layout/activity_login.xml
index dea4054..ca05f02 100644
--- a/app/src/main/res/layout/login_page.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -10,6 +10,7 @@
android:layout_width="241dp"
android:layout_height="63dp"
android:layout_marginBottom="48dp"
+ android:onClick="noAccountButton"
android:text="Continue without an account"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@@ -17,8 +18,8 @@