() {{
+ put("data", Blob.fromBytes(swProj.mysc_project));
+ put("shasum", Util.sha512(swProj.mysc_project));
+ }}
+ );
+ // Upload project datas ===============================================================/
+
+ // Upload the first initial commit data
+ upload_batch.set(commitRef.document("initial"), commit_data);
+
+ // Commit the upload!
+ upload_batch
+ .commit()
+ .addOnSuccessListener(result -> {
+ Toast.makeText(UploadActivity.this, "Project Uploaded", Toast.LENGTH_SHORT).show();
+ progressDialog.dismiss();
+ finish();
+ })
+ .addOnFailureListener(e -> {
+ Toast.makeText(UploadActivity.this, "An error occured: " + e.getMessage(), Toast.LENGTH_LONG).show();
+ progressDialog.dismiss();
+ });
+
+ /*
projectRef
.add(data)
.addOnCompleteListener(task -> {
@@ -256,36 +373,75 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
finish();
} else {
// Sad, it failed
- Toast.makeText(UploadActivity.this, "An error occured while uploading: " + task.getException().getMessage(), Toast.LENGTH_LONG).show();
+ Toast.makeText(UploadActivity.this, "An error occured while uploading: " + task1.getException().getMessage(), Toast.LENGTH_LONG).show();
}
});
});
+ */
+ });
+ }
- /*
- projectReference
- .child(pushKey)
- .setValue(data)
- .addOnSuccessListener(unused ->
- // Update the commit informations
- commitsReference
- .child(pushKey)
- .child("initial")
- .setValue(commit_data)
- .addOnSuccessListener(unused1 -> {
- progressDialog.dismiss();
+ public void show_help(View view) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle("Help");
+ builder.setMessage(
+ Html.fromHtml(
+ "Member:" +
+ "Members are users that can directly make changes to your project. This can include your Team, Friends, Partner, and etc.
" +
+ "NOTE: Non-Member(s) can also make changes to your project. But, You / Your project's member(s) will need to review the changes manually
" +
- Toast.makeText(UploadActivity.this, "Project Uploaded", Toast.LENGTH_LONG).show();
- finish();
- }).addOnFailureListener(e -> {
- progressDialog.dismiss();
- Toast.makeText(UploadActivity.this, "An error occured: " + e.getMessage(), Toast.LENGTH_LONG).show();
- })
- ).addOnFailureListener(e -> {
- progressDialog.dismiss();
- Toast.makeText(UploadActivity.this, "An error occured: " + e.getMessage(), Toast.LENGTH_LONG).show();
- });
+ "Open Source:" +
+ "Enabled: People can view your project and your project's source code, only selected member(s) can make changes.
" +
+ "Disabled: People cannot view or view your project's source code, only selected member(s) can view / make changes to your project.
" +
- */
- });
+ "Private:" +
+ "Enabled: Only YOU can view / edit the project, members are disabled in this private mode.
" +
+ "Disabled: People can view / make changes / contribute to your project depending if it's open source or not.
" +
+
+ "Still need help? Ask it on https://github.com/Iyxan23/sk-collab/issues
"
+ )
+ );
+
+ builder.create().show();
+ }
+
+ final int MEMBER_USER_PICK_REQ_CODE = 20;
+ ArrayList members = new ArrayList<>();
+
+ TextView members_list;
+
+ public void add_member_click(View view) {
+ view.setEnabled(false);
+
+ Intent pick_user_intent = new Intent(this, UserPicker.class);
+ pick_user_intent.putExtra("initial_data", members);
+ startActivityForResult(pick_user_intent, MEMBER_USER_PICK_REQ_CODE);
+
+ view.setEnabled(true);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable @org.jetbrains.annotations.Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+
+ if (requestCode == MEMBER_USER_PICK_REQ_CODE) {
+ if (resultCode == Activity.RESULT_OK) {
+ members = data.getParcelableArrayListExtra("selected_users");
+
+ Log.d("UploadActivity", "onActivityResult: " + members);
+
+ if (members.size() == 0) {
+ members_list.setText("None, Click the Add button to add Member(s)");
+ return;
+ }
+
+ boolean is_first = false;
+ for (Userdata userdata: members) {
+ members_list.setText((!is_first ? "" : members_list.getText() + ", ") + userdata.getName());
+
+ is_first = true;
+ }
+ }
+ }
}
}
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 7972991..a19b3a2 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
@@ -1,47 +1,41 @@
package com.iyxan23.sketch.collab.online;
-import android.app.Notification;
-import android.app.NotificationChannel;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.app.ProgressDialog;
-import android.content.DialogInterface;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
+import android.view.View;
+import android.widget.TextView;
+import android.widget.Toast;
-import com.google.android.gms.tasks.Continuation;
-import com.google.android.gms.tasks.Task;
-import com.google.android.material.appbar.CollapsingToolbarLayout;
-import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton;
-import com.google.android.material.floatingactionbutton.FloatingActionButton;
-
-import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
-import android.view.View;
-import android.widget.TextView;
-import android.widget.Toast;
-
+import com.google.android.gms.tasks.Task;
+import com.google.android.gms.tasks.Tasks;
+import com.google.android.material.appbar.CollapsingToolbarLayout;
+import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton;
+import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.firebase.auth.FirebaseAuth;
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;
-import com.google.firebase.firestore.QuerySnapshot;
import com.iyxan23.sketch.collab.R;
import com.iyxan23.sketch.collab.Util;
import com.iyxan23.sketch.collab.databinding.ActivityViewOnlineProjectBinding;
import com.iyxan23.sketch.collab.models.SketchwareProject;
+import com.iyxan23.sketch.collab.models.Userdata;
import com.iyxan23.sketch.collab.services.CloneService;
-import org.jetbrains.annotations.NotNull;
import org.json.JSONException;
import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.ExecutionException;
public class ViewOnlineProjectActivity extends AppCompatActivity {
@@ -52,6 +46,10 @@ public class ViewOnlineProjectActivity extends AppCompatActivity {
String project_key;
String project_name;
+ HashMap cached_names = new HashMap<>();
+
+ ArrayList members = new ArrayList<>();
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -60,7 +58,11 @@ protected void onCreate(Bundle savedInstanceState) {
setContentView(binding.getRoot());
Toolbar toolbar = binding.toolbar;
+
setSupportActionBar(toolbar);
+
+ Objects.requireNonNull(getSupportActionBar());
+
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
@@ -79,6 +81,7 @@ protected void onCreate(Bundle savedInstanceState) {
Intent i = new Intent(this, EditProjectActivity.class);
i.putExtra("description", description_);
i.putExtra("project_key", project_key);
+ i.putExtra("members", members);
startActivity(i);
});
@@ -130,10 +133,10 @@ protected void onCreate(Bundle savedInstanceState) {
return project_commits.orderBy("timestamp", Query.Direction.ASCENDING).limit(1).get();
})
*/
- .addOnCompleteListener(task -> {
+ .addOnSuccessListener(result -> {
DocumentSnapshot project_data = tmp[0];
DocumentSnapshot uploader_userdata = tmp[1];
- DocumentSnapshot latest_commit = task.getResult().getDocuments().get(0);
+ DocumentSnapshot latest_commit = result.getDocuments().get(0);
TextView commit_end = findViewById(R.id.commit_end);
TextView commit_end_id = findViewById(R.id.commit_end_id);
@@ -150,6 +153,9 @@ protected void onCreate(Bundle savedInstanceState) {
String first_commit_id = "initial";
String first_commit_message = "Initial Commit";
+ List members_ = (List) project_data.get("members");
+ // Aahhh, we need to fetch the member's usernames, k hold on
+
project_name = name;
description_ = description;
@@ -162,9 +168,59 @@ protected void onCreate(Bundle savedInstanceState) {
commit_start_id.setText(first_commit_id);
description_textview.setText(description);
+ 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_) {
+ // Check if members_ is null bruh
+ if (members_ == null) {
+ // kekw we're outta here
+ return;
+ }
+
+ CollectionReference userdata = FirebaseFirestore.getInstance().collection("userdata");
+
+ new Thread(() -> {
+ for (String uid : members_) {
+ String username;
+ if (cached_names.containsKey(uid)) {
+ username = cached_names.get(uid);
+
+ } else {
+ // Fetch it's username
+ Task userdata_fetch = userdata.document(uid).get();
+
+ try {
+ Tasks.await(userdata_fetch);
+
+ if (!userdata_fetch.isSuccessful()) {
+ runOnUiThread(() -> Toast.makeText(this, "Error while fetching userdata: " + userdata_fetch.getException().getMessage(), Toast.LENGTH_LONG).show());
+
+ return;
+ }
+
+ DocumentSnapshot user = userdata_fetch.getResult();
+
+ username = user.getString("name");
+
+ cached_names.put(uid, username);
+
+ } catch (ExecutionException | InterruptedException e) {
+ e.printStackTrace();
+ runOnUiThread(() -> Toast.makeText(this, "Error while fetching userdata: " + e.getMessage(), Toast.LENGTH_LONG).show());
+
+ return;
+ }
+ }
+
+ members.add(new Userdata(username, uid));
+ }
+ }).start();
}
// onClick for the "Browse Code" button
@@ -194,6 +250,7 @@ public void cloneOnClick(View v) {
dialog.dismiss();
do_clone();
});
+
AlertDialog exists_dialog = exists_dialog_builder.create();
new Thread(() -> {
diff --git a/app/src/main/java/com/iyxan23/sketch/collab/pickers/UserPicker.java b/app/src/main/java/com/iyxan23/sketch/collab/pickers/UserPicker.java
new file mode 100644
index 0000000..2f04ca0
--- /dev/null
+++ b/app/src/main/java/com/iyxan23/sketch/collab/pickers/UserPicker.java
@@ -0,0 +1,250 @@
+package com.iyxan23.sketch.collab.pickers;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import android.util.Pair;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.google.android.gms.tasks.Tasks;
+import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton;
+import com.google.firebase.firestore.CollectionReference;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
+import com.google.firebase.firestore.Query;
+import com.google.firebase.firestore.QuerySnapshot;
+import com.iyxan23.sketch.collab.R;
+import com.iyxan23.sketch.collab.models.Userdata;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.ExecutionException;
+
+public class UserPicker extends AppCompatActivity {
+
+ List users;
+
+ FirebaseFirestore firestore = FirebaseFirestore.getInstance();
+ CollectionReference users_collection = firestore.collection("userdata");
+
+ ArrayList initial_data = new ArrayList<>();
+
+ RecyclerView users_rv;
+ UserAdapter adapter;
+
+ // TODO: PAGINATION
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_user_picker);
+
+ Intent intent = getIntent();
+
+ initial_data = intent.getParcelableArrayListExtra("initial_data");
+
+ ExtendedFloatingActionButton efab = findViewById(R.id.button2);
+
+ users_rv = findViewById(R.id.recycler_view_user_picker);
+
+ // Shrink / expand the ExtendedFloatingActionButton according to the scroll activity
+ // https://stackoverflow.com/questions/56822412/shrink-and-extend-function-on-new-extendedfloatingactionbutton-in-material-compo
+ users_rv.addOnScrollListener(new RecyclerView.OnScrollListener() {
+ @Override
+ public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
+ if (newState == RecyclerView.SCROLL_STATE_IDLE) {
+ efab.extend();
+ }
+
+ super.onScrollStateChanged(recyclerView, newState);
+ }
+
+ @Override
+ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
+ if (dy > 0 || dy < 0 && efab.isExtended()) {
+ efab.shrink();
+ }
+ }
+ });
+
+ // Run these in a new thread
+ new Thread(() -> {
+ try {
+ // Load users
+ load_users();
+
+ // And bind the view, (set recyclerview adapter, update some stuff)
+ runOnUiThread(this::bind_views);
+ } catch (ExecutionException | InterruptedException e) {
+ runOnUiThread(() -> Toast.makeText(this, "Error while fetching: " + e.getMessage(), Toast.LENGTH_LONG).show());
+ }
+ }).start();
+ }
+
+ private void load_users() throws ExecutionException, InterruptedException {
+ QuerySnapshot res = Tasks.await(users_collection.orderBy("name", Query.Direction.ASCENDING).get());
+ users = res.getDocuments();
+ }
+
+ private void bind_views() {
+ adapter = new UserAdapter((ArrayList) users, this);
+
+ Log.d("UserPicker", "bind_views: initial_data: " + initial_data);
+
+ if (initial_data != null) {
+ adapter.picked_users.addAll(initial_data);
+ adapter.notifyDataSetChanged();
+ }
+
+ users_rv.setLayoutManager(new LinearLayoutManager(this));
+ users_rv.setAdapter(adapter);
+ }
+
+ public void update_count() {
+ TextView count_selected = findViewById(R.id.count_selected);
+
+ count_selected.setText(adapter.picked_users.size() + " selected");
+ }
+
+ public void done_button_click(View view) {
+ Intent resultIntent = new Intent();
+
+ // Remove ANY duplicates
+ Set userdatas = new HashSet<>(adapter.picked_users);
+ adapter.picked_users.clear();
+ adapter.picked_users.addAll(userdatas);
+
+ resultIntent.putExtra("selected_users", adapter.picked_users);
+ setResult(Activity.RESULT_OK, resultIntent);
+ finish();
+ }
+
+ public void go_back(View view) {
+ // The user cancelled the activity
+ Intent resultIntent = new Intent();
+ setResult(Activity.RESULT_CANCELED, resultIntent);
+ finish();
+ }
+
+ // TODO: ADD SEARCH
+
+ // The UserAdapter used for the UsersRecyclerView
+ public static class UserAdapter extends RecyclerView.Adapter {
+ private static final String TAG = "UserAdapter";
+
+ private ArrayList datas = new ArrayList<>();
+
+ // ArrayList of Pair of Name and UID
+ public ArrayList picked_users = new ArrayList<>();
+
+ WeakReference activity;
+
+ public UserAdapter(Activity activity) {
+ this.activity = new WeakReference<>(activity);
+ }
+
+ public UserAdapter(ArrayList datas, Activity activity) {
+ this.datas = datas;
+ this.activity = new WeakReference<>(activity);
+ }
+
+ public void updateView(ArrayList datas) {
+ this.datas = datas;
+ notifyDataSetChanged();
+ }
+
+ @NonNull
+ @Override
+ public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ return new ViewHolder(
+ LayoutInflater
+ .from(parent.getContext())
+ .inflate(R.layout.rv_user_pick_item, parent, false)
+ );
+ }
+
+ private boolean userdataExists(Userdata ud) {
+ for (Userdata picked_user : picked_users) {
+ if (picked_user.equals(ud)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @SuppressLint("SetTextI18n")
+ @Override
+ public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {
+ Log.d(TAG, "onBindViewHolder: called.");
+ DocumentSnapshot item = datas.get(position);
+
+ String username = item.getString("name");
+ String uid = item.getId();
+
+ Userdata userdata = new Userdata(username, uid);
+
+ Log.d(TAG, "onBindViewHolder: Userdata: " + userdata);
+
+ if (userdataExists(userdata)) {
+ // This item is already selected
+ holder.check.setVisibility(View.VISIBLE);
+ } else {
+ // Unselected item
+ holder.check.setVisibility(View.GONE);
+ }
+
+ holder.username.setText(item.getString("name"));
+
+ holder.body.setOnClickListener(v -> {
+ if (userdataExists(userdata)) {
+ picked_users.remove(userdata);
+ holder.check.setVisibility(View.GONE);
+
+ Log.d(TAG, "onBindViewHolder: Remove " + username);
+ } else {
+ picked_users.add(userdata);
+ holder.check.setVisibility(View.VISIBLE);
+
+ Log.d(TAG, "onBindViewHolder: Add " + username);
+ }
+ });
+ }
+
+ @Override
+ public int getItemCount() {
+ return datas.size();
+ }
+
+ public static class ViewHolder extends RecyclerView.ViewHolder {
+
+ TextView username;
+
+ View check;
+ View body;
+
+ public ViewHolder(@NonNull View itemView) {
+ super(itemView);
+ username = itemView.findViewById(R.id.user_pick_item_username);
+ check = itemView.findViewById(R.id.user_pick_item_check);
+ body = itemView.findViewById(R.id.user_pick_item_body);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_back.xml b/app/src/main/res/drawable/ic_back.xml
new file mode 100644
index 0000000..fa122e1
--- /dev/null
+++ b/app/src/main/res/drawable/ic_back.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_help.xml b/app/src/main/res/drawable/ic_help.xml
new file mode 100644
index 0000000..3d4adce
--- /dev/null
+++ b/app/src/main/res/drawable/ic_help.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_history.xml b/app/src/main/res/drawable/ic_history.xml
new file mode 100644
index 0000000..98a8216
--- /dev/null
+++ b/app/src/main/res/drawable/ic_history.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_browse_code.xml b/app/src/main/res/layout/activity_browse_code.xml
index b1b8b8a..7430617 100644
--- a/app/src/main/res/layout/activity_browse_code.xml
+++ b/app/src/main/res/layout/activity_browse_code.xml
@@ -4,6 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:animateLayoutChanges="true"
tools:context=".online.BrowseCodeActivity"
android:background="@color/colorBackground">
@@ -12,6 +13,7 @@
android:id="@+id/constraintLayout8"
android:layout_width="0dp"
android:layout_height="wrap_content"
+ android:animateLayoutChanges="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
@@ -23,7 +25,7 @@
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
- app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintBottom_toTopOf="@+id/commit_id_browse_code"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_code_braces" />
@@ -43,15 +45,46 @@
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@+id/members_list"
+ app:layout_constraintVertical_bias="0.0">
@@ -106,4 +106,41 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/constraintLayout7" />
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 0873fb4..e441c54 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -5,6 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorBackground"
+ android:animateLayoutChanges="true"
tools:context=".MainActivity">
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_upload.xml b/app/src/main/res/layout/activity_upload.xml
index fd39ef1..ed3fb5a 100644
--- a/app/src/main/res/layout/activity_upload.xml
+++ b/app/src/main/res/layout/activity_upload.xml
@@ -32,9 +32,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
- android:fontFamily="@font/sourcecodepro_regular"
+ android:fontFamily="@font/sourcecodepro_semibold"
android:text="Upload Project"
android:textColor="#FFFFFF"
+ android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="@+id/imageView6"
app:layout_constraintStart_toEndOf="@+id/imageView6"
app:layout_constraintTop_toTopOf="@+id/imageView6" />
@@ -43,8 +44,7 @@
@@ -66,11 +66,12 @@
android:ems="10"
android:foregroundTint="@color/colorPrimary"
android:gravity="start|top"
+ android:hint="My Awesome Project Name"
android:inputType="text"
- android:text="hmm"
+ android:maxLength="50"
android:textColor="#FFFFFF"
+ android:textColorHint="#545454"
android:textSize="14sp"
- android:maxLength="50"
app:layout_constraintEnd_toEndOf="@+id/project_name_upload"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/project_name_upload"
@@ -95,9 +96,10 @@
android:ems="10"
android:foregroundTint="@color/colorPrimary"
android:gravity="start|top"
+ android:hint="My Awesome Description"
android:inputType="textMultiLine"
- android:text="hmm"
android:textColor="#FFFFFF"
+ android:textColorHint="#545454"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="@+id/project_name_upload"
app:layout_constraintStart_toStartOf="@+id/textView11"
@@ -122,61 +124,93 @@
android:layout_marginTop="16dp"
android:layout_marginEnd="32dp"
android:fontFamily="@font/roboto_medium"
- android:text="Project Name"
+ android:text="Upload Project Name"
android:textColor="#FFFFFF"
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@+id/members_upload" />
+
+
+
+
+
+
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_user_picker.xml b/app/src/main/res/layout/activity_user_picker.xml
new file mode 100644
index 0000000..6b442f0
--- /dev/null
+++ b/app/src/main/res/layout/activity_user_picker.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/bottomsheet_commit.xml b/app/src/main/res/layout/bottomsheet_commit.xml
new file mode 100644
index 0000000..2b5d9b0
--- /dev/null
+++ b/app/src/main/res/layout/bottomsheet_commit.xml
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/content_scrolling.xml b/app/src/main/res/layout/content_scrolling.xml
index 897de38..e1d91a1 100644
--- a/app/src/main/res/layout/content_scrolling.xml
+++ b/app/src/main/res/layout/content_scrolling.xml
@@ -268,23 +268,22 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
- android:layout_marginTop="24dp"
+ android:layout_marginTop="16dp"
android:text="Description"
- android:textSize="16sp"
- android:fontFamily="@font/sourcecodepro_regular"
android:textColor="#FFFFFF"
+ android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/divider6" />
+ app:layout_constraintTop_toBottomOf="@+id/members_list" />
@@ -300,5 +299,29 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/inc_search_main_content.xml b/app/src/main/res/layout/inc_search_main_content.xml
new file mode 100644
index 0000000..d63929d
--- /dev/null
+++ b/app/src/main/res/layout/inc_search_main_content.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/rv_search_item.xml b/app/src/main/res/layout/rv_search_item.xml
new file mode 100644
index 0000000..844fa38
--- /dev/null
+++ b/app/src/main/res/layout/rv_search_item.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/rv_user_pick_item.xml b/app/src/main/res/layout/rv_user_pick_item.xml
new file mode 100644
index 0000000..b6febfb
--- /dev/null
+++ b/app/src/main/res/layout/rv_user_pick_item.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index b086c20..8a061cf 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,7 +5,7 @@ buildscript {
jcenter()
}
dependencies {
- classpath 'com.google.gms:google-services:4.3.4'
+ classpath 'com.google.gms:google-services:4.3.5'
classpath 'com.android.tools.build:gradle:4.0.2'
// NOTE: Do not place your application dependencies here; they belong