From 1b9588781c2a2e8c052f41e55cbbaa8b58cae323 Mon Sep 17 00:00:00 2001 From: Matthew Date: Wed, 20 Nov 2024 17:39:33 +0000 Subject: [PATCH] database working + added more activities --- .idea/compiler.xml | 6 + .idea/deploymentTargetSelector.xml | 10 ++ .idea/misc.xml | 1 - app/src/main/AndroidManifest.xml | 20 ++-- .../example/komodohub/DatabaseAdapter.java | 111 ++++++++++++++++++ .../com/example/komodohub/LoginActivity.java | 105 +++++++++++++++++ .../example/komodohub/ProfileActivity.java | 22 ++++ .../com/example/komodohub/SearchActivity.java | 28 +++++ .../java/com/example/komodohub/UserState.java | 41 +++++++ .../com/example/komodohub/create_tables.sql | 21 ++++ .../example/komodohub/models/Community.java | 11 ++ .../example/komodohub/models/Resource.java | 17 +++ .../com/example/komodohub/models/User.java | 20 ++++ .../{login_page.xml => activity_login.xml} | 17 +-- app/src/main/res/layout/activity_profile.xml | 20 ++++ app/src/main/res/layout/activity_search.xml | 67 +++++++++++ 16 files changed, 502 insertions(+), 15 deletions(-) create mode 100644 .idea/compiler.xml create mode 100644 .idea/deploymentTargetSelector.xml create mode 100644 app/src/main/java/com/example/komodohub/DatabaseAdapter.java create mode 100644 app/src/main/java/com/example/komodohub/LoginActivity.java create mode 100644 app/src/main/java/com/example/komodohub/ProfileActivity.java create mode 100644 app/src/main/java/com/example/komodohub/SearchActivity.java create mode 100644 app/src/main/java/com/example/komodohub/UserState.java create mode 100644 app/src/main/java/com/example/komodohub/create_tables.sql create mode 100644 app/src/main/java/com/example/komodohub/models/Community.java create mode 100644 app/src/main/java/com/example/komodohub/models/Resource.java create mode 100644 app/src/main/java/com/example/komodohub/models/User.java rename app/src/main/res/layout/{login_page.xml => activity_login.xml} (85%) create mode 100644 app/src/main/res/layout/activity_profile.xml create mode 100644 app/src/main/res/layout/activity_search.xml 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 @@