diff --git a/app/build.gradle b/app/build.gradle
index cd14f28..2b9bf3a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -11,8 +11,8 @@ android {
applicationId "com.iyxan23.sketch.collab"
minSdkVersion 22
targetSdkVersion 30
- versionCode 1
- versionName "0.1-alpha"
+ versionCode 2
+ versionName "0.1-alpha1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ffa365e..6339cb1 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -39,7 +39,7 @@
android:name=".online.UploadActivity"
android:theme="@style/Theme.SketchCollab.NoActionBar" />
task_proj =
+ database.collection(is_project_public ? "projects" : "userdata/" + author + "/projects").document(project_key)
+ .get(Source.SERVER); // Don't get the cache :/
+
+ // Wait for the task to finish, i don't want to query a lot of tasks in a short amount of time
+ DocumentSnapshot project_data = Tasks.await(task_proj);
+
+ // Check if task is successful or not
+ if (!task_proj.isSuccessful()) {
+ assert task_proj.getException() != null; // Exception shouldn't be null if the task is not successful
+
+ Toast.makeText(MainActivity.this, "Error: " + task_proj.getException().getMessage(), Toast.LENGTH_LONG).show();
+ return;
+ }
+
+ assert project_data != null; // This shouldn't be null
+
+ ArrayList members = (ArrayList) project_data.get("members");
+
+ // Fallback to an empty arraylist if members is null / doesn't exist
+ // (To avoid NPE)
+ members = members == null ? new ArrayList<>() : members;
+
+ // Check if user is an author / a member of this project
+ if (!author.equals(auth.getUid()) && !members.contains(auth.getUid())) {
// Hmm, the user "stole" another user's project
// Let's skip this one :e_sweat_smile:
// =========================================================================
@@ -241,7 +267,7 @@ private void initialize() {
.get(Source.SERVER); // Don't get the cache :/
// Wait for the task to finish, i don't want to query a lot of tasks in a short amount of time
- QuerySnapshot snapshot = Tasks.await(task);
+ QuerySnapshot commit_snapshot = Tasks.await(task);
// Check if task is successful or not
if (!task.isSuccessful()) {
@@ -251,15 +277,15 @@ private void initialize() {
return;
}
- assert snapshot != null; // snapshot shouldn't be null
+ assert commit_snapshot != null; // snapshot shouldn't be null
- Log.d("MainActivity", "documents: " + snapshot.getDocuments());
+ Log.d("MainActivity", "documents: " + commit_snapshot.getDocuments());
Log.d("MainActivity", "project_key: " + project_key);
// Check if the project doesn't exists in the database.
- if (snapshot.getDocuments().size() == 0) continue;
+ if (commit_snapshot.getDocuments().size() == 0) continue;
- DocumentSnapshot commit_info = snapshot.getDocuments().get(0);
+ DocumentSnapshot commit_info = commit_snapshot.getDocuments().get(0);
if (!project_commit.equals(commit_info.getId())) {
// Hmm, looks like this man's project has an older commit, tell him to update his project
@@ -280,13 +306,13 @@ private void initialize() {
// Alright looks like he's got some local updates with the same head commit
// Fetch the project
- Task project_data =
+ Task project_snapshot =
database.collection(is_project_public ? "projects" : "userdata/" + author + "/projects").document(project_key).collection("snapshot")
.get(Source.SERVER); // Don't get the cache :/
// Wait for the task to finish, i don't want to query a lot of tasks in a short amount of time,
// it can cause some performance issues
- QuerySnapshot project_data_snapshot = Tasks.await(project_data);
+ QuerySnapshot project_data_snapshot = Tasks.await(project_snapshot);
SketchwareProject head_project = querySnapshotToSketchwareProject(project_data_snapshot);
// Add this to the changed sketchcollab sketchware projects arraylist
diff --git a/app/src/main/java/com/iyxan23/sketch/collab/online/BrowseActivity.java b/app/src/main/java/com/iyxan23/sketch/collab/online/BrowseActivity.java
index 2c3974c..624e282 100644
--- a/app/src/main/java/com/iyxan23/sketch/collab/online/BrowseActivity.java
+++ b/app/src/main/java/com/iyxan23/sketch/collab/online/BrowseActivity.java
@@ -14,7 +14,6 @@
import com.google.android.gms.tasks.Tasks;
import com.google.firebase.Timestamp;
import com.google.firebase.firestore.CollectionReference;
-import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;
diff --git a/app/src/main/java/com/iyxan23/sketch/collab/online/EditProjectActivity.java b/app/src/main/java/com/iyxan23/sketch/collab/online/EditProjectActivity.java
index d10fbac..f4ef8f8 100644
--- a/app/src/main/java/com/iyxan23/sketch/collab/online/EditProjectActivity.java
+++ b/app/src/main/java/com/iyxan23/sketch/collab/online/EditProjectActivity.java
@@ -36,6 +36,8 @@ protected void onCreate(Bundle savedInstanceState) {
members = getIntent().getParcelableArrayListExtra("members");
members_before.addAll(members);
+ update_members_text();
+
TextInputEditText description_edit = findViewById(R.id.description_edit_project_text);
description_edit.setText(description_before);
}
@@ -127,7 +129,7 @@ protected void onActivityResult(int requestCode, int resultCode, @Nullable @org.
if (requestCode == MEMBER_USER_PICK_REQ_CODE) {
if (resultCode == Activity.RESULT_OK) {
- members.addAll( Objects.requireNonNull(data) .getParcelableArrayListExtra("selected_users"));
+ members = Objects.requireNonNull(data) .getParcelableArrayListExtra("selected_users");
update_members_text();
}
diff --git a/app/src/main/java/com/iyxan23/sketch/collab/online/UploadActivity.java b/app/src/main/java/com/iyxan23/sketch/collab/online/UploadActivity.java
index b2d2866..ab5e02d 100644
--- a/app/src/main/java/com/iyxan23/sketch/collab/online/UploadActivity.java
+++ b/app/src/main/java/com/iyxan23/sketch/collab/online/UploadActivity.java
@@ -224,6 +224,29 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
upload_batch
.commit()
.addOnSuccessListener(result -> {
+ // Add a custom key to the sketchware project named "sk-colab-key": "(pushkey)" and "sk-collab-owner": "(uid)"
+ try {
+ swProj.mysc_project = Util.encrypt(
+ new JSONObject(
+ Util.decrypt(swProj.mysc_project)
+ )
+ .put("sk-collab-key", projectRefDoc.getId()) // The document id (location of the project)
+ .put("sk-collab-owner", auth.getUid()) // The owner of the project (used to access private projects)
+ .put("sk-collab-latest-commit", "initial") // The latest commit id of this project
+ .put("sk-collab-project-visibility", isPrivate.isChecked() ? "private" : "public") // The project visibility. Don't worry, it's used to determine where is the project located in the database
+ .toString()
+ .getBytes()
+ );
+ swProj.applyChanges();
+ } catch (JSONException | IOException e) {
+ // This shouldn't happen
+ e.printStackTrace();
+ Toast.makeText(UploadActivity.this, "An error occured while applying the key: " + e.getMessage(), Toast.LENGTH_LONG).show();
+
+ // Stop
+ return;
+ }
+
Toast.makeText(UploadActivity.this, "Project Uploaded", Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
finish();
diff --git a/app/src/main/java/com/iyxan23/sketch/collab/online/ViewOnlineProjectActivity.java b/app/src/main/java/com/iyxan23/sketch/collab/online/ViewOnlineProjectActivity.java
index a19b3a2..fa6ec96 100644
--- a/app/src/main/java/com/iyxan23/sketch/collab/online/ViewOnlineProjectActivity.java
+++ b/app/src/main/java/com/iyxan23/sketch/collab/online/ViewOnlineProjectActivity.java
@@ -3,6 +3,7 @@
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
+import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
@@ -39,6 +40,8 @@
public class ViewOnlineProjectActivity extends AppCompatActivity {
+ private static final String TAG = "ViewOnlineProjectActivi";
+
private ActivityViewOnlineProjectBinding binding;
private String description_;
@@ -134,6 +137,8 @@ protected void onCreate(Bundle savedInstanceState) {
})
*/
.addOnSuccessListener(result -> {
+ Log.d(TAG, "onCreate: Fetch success");
+
DocumentSnapshot project_data = tmp[0];
DocumentSnapshot uploader_userdata = tmp[1];
DocumentSnapshot latest_commit = result.getDocuments().get(0);
@@ -168,15 +173,15 @@ protected void onCreate(Bundle savedInstanceState) {
commit_start_id.setText(first_commit_id);
description_textview.setText(description);
+ Log.d(TAG, "onCreate: Fetching members");
fetchMembers(members_);
-
- // Hide the progressbar
- findViewById(R.id.progress_project).setVisibility(View.GONE);
})
.addOnFailureListener(e -> Toast.makeText(this, "Error while fetching: " + e.getMessage(), Toast.LENGTH_LONG).show());
}
private void fetchMembers(List members_) {
+ Log.d(TAG, "fetchMembers: members_: " + members_);
+
// Check if members_ is null bruh
if (members_ == null) {
// kekw we're outta here
@@ -191,6 +196,8 @@ private void fetchMembers(List members_) {
if (cached_names.containsKey(uid)) {
username = cached_names.get(uid);
+ Log.d(TAG, "fetchMembers: Username already cached: " + uid + "; value: " + username);
+
} else {
// Fetch it's username
Task userdata_fetch = userdata.document(uid).get();
@@ -208,6 +215,8 @@ private void fetchMembers(List members_) {
username = user.getString("name");
+ Log.d(TAG, "fetchMembers: Username fetched, uid: " + uid + ", name: " + username);
+
cached_names.put(uid, username);
} catch (ExecutionException | InterruptedException e) {
@@ -218,8 +227,26 @@ private void fetchMembers(List members_) {
}
}
+ Log.d(TAG, "fetchMembers: Add member: " + username + " (" + uid + ")");
members.add(new Userdata(username, uid));
}
+
+ // Update the textview
+ runOnUiThread(() -> {
+ TextView members_list = findViewById(R.id.members_list);
+ members_list.setText("");
+
+ boolean is_start = false;
+
+ for (Userdata member_userdata: members) {
+ members_list.append((is_start ? ", " : "") + member_userdata.getName());
+
+ is_start = true;
+ }
+
+ // Hide the progressbar
+ findViewById(R.id.progress_project).setVisibility(View.GONE);
+ });
}).start();
}
diff --git a/app/src/main/java/com/iyxan23/sketch/collab/SketchwareProjectsListActivity.java b/app/src/main/java/com/iyxan23/sketch/collab/pman/SketchwareProjectsListActivity.java
similarity index 95%
rename from app/src/main/java/com/iyxan23/sketch/collab/SketchwareProjectsListActivity.java
rename to app/src/main/java/com/iyxan23/sketch/collab/pman/SketchwareProjectsListActivity.java
index 477b252..24355f6 100644
--- a/app/src/main/java/com/iyxan23/sketch/collab/SketchwareProjectsListActivity.java
+++ b/app/src/main/java/com/iyxan23/sketch/collab/pman/SketchwareProjectsListActivity.java
@@ -1,4 +1,4 @@
-package com.iyxan23.sketch.collab;
+package com.iyxan23.sketch.collab.pman;
import android.os.Bundle;
import android.view.View;
@@ -8,6 +8,8 @@
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+import com.iyxan23.sketch.collab.R;
+import com.iyxan23.sketch.collab.Util;
import com.iyxan23.sketch.collab.adapters.SketchwareProjectAdapter;
import com.iyxan23.sketch.collab.models.SketchwareProject;
diff --git a/app/src/main/res/layout/activity_sketchware_projects_list.xml b/app/src/main/res/layout/activity_sketchware_projects_list.xml
index 1e3f863..b98504d 100644
--- a/app/src/main/res/layout/activity_sketchware_projects_list.xml
+++ b/app/src/main/res/layout/activity_sketchware_projects_list.xml
@@ -5,7 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorBackground"
- tools:context=".SketchwareProjectsListActivity">
+ tools:context=".pman.SketchwareProjectsListActivity">