From e2be2ec018ef3fceaf9b7e94020006b48617d3e5 Mon Sep 17 00:00:00 2001 From: M M Arif Date: Sun, 12 Mar 2023 15:38:14 +0500 Subject: [PATCH] Use FAB buttons for org repo, label, team creation --- .../gitnex/activities/CreateRepoActivity.java | 1 + .../OrganizationDetailActivity.java | 28 +---- .../BottomSheetOrganizationFragment.java | 39 ------ .../fragments/OrganizationLabelsFragment.java | 31 ++++- .../OrganizationRepositoriesFragment.java | 42 +++++-- .../fragments/OrganizationTeamsFragment.java | 13 ++ .../fragments/RepositoriesFragment.java | 3 - .../res/layout/bottom_sheet_organization.xml | 116 +++--------------- app/src/main/res/layout/bottom_sheet_repo.xml | 96 +++++++-------- app/src/main/res/layout/fragment_labels.xml | 30 +++-- .../layout/fragment_organization_teams.xml | 30 +++-- .../main/res/layout/fragment_repositories.xml | 16 +-- app/src/main/res/values/dimens.xml | 1 + 13 files changed, 198 insertions(+), 248 deletions(-) diff --git a/app/src/main/java/org/mian/gitnex/activities/CreateRepoActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreateRepoActivity.java index 67f266ea..cf9988a1 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateRepoActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateRepoActivity.java @@ -174,6 +174,7 @@ public class CreateRepoActivity extends BaseActivity { if (response.code() == 201) { MainActivity.reloadRepos = true; + OrganizationDetailActivity.updateOrgFABActions = true; Toasty.success(ctx, getString(R.string.repoCreated)); enableProcessButton(); finish(); diff --git a/app/src/main/java/org/mian/gitnex/activities/OrganizationDetailActivity.java b/app/src/main/java/org/mian/gitnex/activities/OrganizationDetailActivity.java index 54f58507..1f7492f6 100644 --- a/app/src/main/java/org/mian/gitnex/activities/OrganizationDetailActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/OrganizationDetailActivity.java @@ -1,6 +1,5 @@ package org.mian.gitnex.activities; -import android.content.Intent; import android.graphics.Typeface; import android.os.Bundle; import android.view.Menu; @@ -38,6 +37,7 @@ import retrofit2.Response; */ public class OrganizationDetailActivity extends BaseActivity implements BottomSheetListener { + public static boolean updateOrgFABActions = false; public OrganizationPermissions permissions; private String orgName; private boolean isMember = false; @@ -175,8 +175,7 @@ public class OrganizationDetailActivity extends BaseActivity implements BottomSh return true; } else if (id == R.id.repoMenu) { - BottomSheetOrganizationFragment bottomSheet = - new BottomSheetOrganizationFragment(permissions); + BottomSheetOrganizationFragment bottomSheet = new BottomSheetOrganizationFragment(); bottomSheet.show(getSupportFragmentManager(), "orgBottomSheet"); return true; } else { @@ -195,25 +194,6 @@ public class OrganizationDetailActivity extends BaseActivity implements BottomSh url = url + getIntent().getStringExtra("orgName"); switch (text) { - case "repository": - Intent intentRepo = new Intent(this, CreateRepoActivity.class); - intentRepo.putExtra("organizationAction", true); - intentRepo.putExtra("orgName", getIntent().getStringExtra("orgName")); - intentRepo.putExtras(getIntent().getExtras()); - startActivity(intentRepo); - break; - case "label": - Intent intent = new Intent(ctx, CreateLabelActivity.class); - intent.putExtra("orgName", getIntent().getStringExtra("orgName")); - intent.putExtra("type", "org"); - ctx.startActivity(intent); - break; - case "team": - Intent intentTeam = - new Intent(OrganizationDetailActivity.this, CreateTeamByOrgActivity.class); - intentTeam.putExtras(getIntent().getExtras()); - startActivity(intentTeam); - break; case "copyOrgUrl": AppUtil.copyToClipboard(this, url, ctx.getString(R.string.copyIssueUrlToastMsg)); break; @@ -242,9 +222,9 @@ public class OrganizationDetailActivity extends BaseActivity implements BottomSh case 0: // info return OrganizationInfoFragment.newInstance(orgName); case 1: // repos - return OrganizationRepositoriesFragment.newInstance(orgName); + return OrganizationRepositoriesFragment.newInstance(orgName, permissions); case 2: // labels - return OrganizationLabelsFragment.newInstance(orgName); + return OrganizationLabelsFragment.newInstance(orgName, permissions); case 3: // teams / members if (isMember) { return OrganizationTeamsFragment.newInstance(orgName, permissions); diff --git a/app/src/main/java/org/mian/gitnex/fragments/BottomSheetOrganizationFragment.java b/app/src/main/java/org/mian/gitnex/fragments/BottomSheetOrganizationFragment.java index a34b16f8..e78dcdc7 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/BottomSheetOrganizationFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/BottomSheetOrganizationFragment.java @@ -8,7 +8,6 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.google.android.material.bottomsheet.BottomSheetDialogFragment; -import org.gitnex.tea4j.v2.models.OrganizationPermissions; import org.mian.gitnex.databinding.BottomSheetOrganizationBinding; import org.mian.gitnex.structs.BottomSheetListener; @@ -17,13 +16,8 @@ import org.mian.gitnex.structs.BottomSheetListener; */ public class BottomSheetOrganizationFragment extends BottomSheetDialogFragment { - private final OrganizationPermissions permissions; private BottomSheetListener bmListener; - public BottomSheetOrganizationFragment(OrganizationPermissions org) { - permissions = org; - } - @Nullable @Override public View onCreateView( @NonNull LayoutInflater inflater, @@ -33,39 +27,6 @@ public class BottomSheetOrganizationFragment extends BottomSheetDialogFragment { BottomSheetOrganizationBinding bottomSheetOrganizationBinding = BottomSheetOrganizationBinding.inflate(inflater, container, false); - if (permissions != null) { - if (!permissions.isCanCreateRepository()) { - bottomSheetOrganizationBinding.createRepository.setVisibility(View.GONE); - } - if (!permissions.isIsOwner()) { - bottomSheetOrganizationBinding.createLabel.setVisibility(View.GONE); - bottomSheetOrganizationBinding.createTeam.setVisibility(View.GONE); - } - if (!permissions.isCanCreateRepository() || !permissions.isIsOwner()) { - bottomSheetOrganizationBinding.organizationHeadFrame.setVisibility(View.GONE); - bottomSheetOrganizationBinding.orgCreateSection.setVisibility(View.GONE); - bottomSheetOrganizationBinding.orgDivider.setVisibility(View.GONE); - } - } - - bottomSheetOrganizationBinding.createTeam.setOnClickListener( - v1 -> { - bmListener.onButtonClicked("team"); - dismiss(); - }); - - bottomSheetOrganizationBinding.createLabel.setOnClickListener( - v1 -> { - bmListener.onButtonClicked("label"); - dismiss(); - }); - - bottomSheetOrganizationBinding.createRepository.setOnClickListener( - v12 -> { - bmListener.onButtonClicked("repository"); - dismiss(); - }); - bottomSheetOrganizationBinding.copyOrgUrl.setOnClickListener( v1 -> { bmListener.onButtonClicked("copyOrgUrl"); diff --git a/app/src/main/java/org/mian/gitnex/fragments/OrganizationLabelsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/OrganizationLabelsFragment.java index dff1b91b..84670f1b 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/OrganizationLabelsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/OrganizationLabelsFragment.java @@ -1,5 +1,6 @@ package org.mian.gitnex.fragments; +import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -14,6 +15,7 @@ import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import org.gitnex.tea4j.v2.models.OrganizationPermissions; import org.mian.gitnex.activities.CreateLabelActivity; import org.mian.gitnex.adapters.LabelsAdapter; import org.mian.gitnex.databinding.FragmentLabelsBinding; @@ -24,21 +26,26 @@ import org.mian.gitnex.viewmodels.OrganizationLabelsViewModel; */ public class OrganizationLabelsFragment extends Fragment { + private final OrganizationPermissions permissions; private OrganizationLabelsViewModel organizationLabelsViewModel; private ProgressBar mProgressBar; private RecyclerView mRecyclerView; private LabelsAdapter adapter; private TextView noData; - private static final String repoOwnerF = "param1"; + private static final String getOrgName = null; + private String repoOwner; private final String type = "org"; - private String repoOwner; + public OrganizationLabelsFragment(OrganizationPermissions permissions) { + this.permissions = permissions; + } - public static OrganizationLabelsFragment newInstance(String param1) { + public static OrganizationLabelsFragment newInstance( + String repoOwner, OrganizationPermissions permissions) { - OrganizationLabelsFragment fragment = new OrganizationLabelsFragment(); + OrganizationLabelsFragment fragment = new OrganizationLabelsFragment(permissions); Bundle args = new Bundle(); - args.putString(repoOwnerF, param1); + args.putString(getOrgName, repoOwner); fragment.setArguments(args); return fragment; } @@ -50,7 +57,7 @@ public class OrganizationLabelsFragment extends Fragment { if (getArguments() != null) { - repoOwner = getArguments().getString(repoOwnerF); + repoOwner = getArguments().getString(getOrgName); } } @@ -86,6 +93,18 @@ public class OrganizationLabelsFragment extends Fragment { fetchDataAsync(repoOwner); + if (!permissions.isIsOwner()) { + fragmentLabelsBinding.createLabel.setVisibility(View.GONE); + } + + fragmentLabelsBinding.createLabel.setOnClickListener( + v1 -> { + Intent intent = new Intent(getContext(), CreateLabelActivity.class); + intent.putExtra("orgName", repoOwner); + intent.putExtra("type", "org"); + startActivity(intent); + }); + return fragmentLabelsBinding.getRoot(); } diff --git a/app/src/main/java/org/mian/gitnex/fragments/OrganizationRepositoriesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/OrganizationRepositoriesFragment.java index 70a60833..846a4b11 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/OrganizationRepositoriesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/OrganizationRepositoriesFragment.java @@ -1,5 +1,6 @@ package org.mian.gitnex.fragments; +import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -14,8 +15,10 @@ import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; +import org.gitnex.tea4j.v2.models.OrganizationPermissions; import org.mian.gitnex.R; -import org.mian.gitnex.activities.MainActivity; +import org.mian.gitnex.activities.CreateRepoActivity; +import org.mian.gitnex.activities.OrganizationDetailActivity; import org.mian.gitnex.adapters.ReposListAdapter; import org.mian.gitnex.databinding.FragmentRepositoriesBinding; import org.mian.gitnex.helpers.Constants; @@ -26,6 +29,7 @@ import org.mian.gitnex.viewmodels.RepositoriesViewModel; */ public class OrganizationRepositoriesFragment extends Fragment { + private final OrganizationPermissions permissions; private RepositoriesViewModel repositoriesViewModel; private FragmentRepositoriesBinding fragmentRepositoriesBinding; private ReposListAdapter adapter; @@ -34,10 +38,14 @@ public class OrganizationRepositoriesFragment extends Fragment { private static final String getOrgName = null; private String orgName; - public OrganizationRepositoriesFragment() {} + public OrganizationRepositoriesFragment(OrganizationPermissions permissions) { + this.permissions = permissions; + } - public static OrganizationRepositoriesFragment newInstance(String orgName) { - OrganizationRepositoriesFragment fragment = new OrganizationRepositoriesFragment(); + public static OrganizationRepositoriesFragment newInstance( + String orgName, OrganizationPermissions permissions) { + OrganizationRepositoriesFragment fragment = + new OrganizationRepositoriesFragment(permissions); Bundle args = new Bundle(); args.putString(getOrgName, orgName); fragment.setArguments(args); @@ -63,8 +71,6 @@ public class OrganizationRepositoriesFragment extends Fragment { resultLimit = Constants.getCurrentResultLimit(getContext()); - fragmentRepositoriesBinding.addNewRepo.setVisibility(View.GONE); - fragmentRepositoriesBinding.recyclerView.setHasFixedSize(true); fragmentRepositoriesBinding.recyclerView.setLayoutManager( new LinearLayoutManager(getContext())); @@ -86,9 +92,23 @@ public class OrganizationRepositoriesFragment extends Fragment { page = 1; fetchDataAsync(); + if (permissions != null) { + if (!permissions.isCanCreateRepository()) { + fragmentRepositoriesBinding.addNewRepo.setVisibility(View.GONE); + } + } + + fragmentRepositoriesBinding.addNewRepo.setOnClickListener( + v12 -> { + Intent intentRepo = new Intent(getContext(), CreateRepoActivity.class); + intentRepo.putExtra("organizationAction", true); + intentRepo.putExtra("orgName", orgName); + intentRepo.putExtras(requireActivity().getIntent().getExtras()); + startActivity(intentRepo); + }); + return fragmentRepositoriesBinding.getRoot(); } - ; private void fetchDataAsync() { @@ -144,10 +164,10 @@ public class OrganizationRepositoriesFragment extends Fragment { super.onResume(); - if (MainActivity.reloadRepos) { - repositoriesViewModel.loadReposList( - page, resultLimit, null, "org", orgName, getContext()); - MainActivity.reloadRepos = false; + if (OrganizationDetailActivity.updateOrgFABActions) { + page = 1; + fetchDataAsync(); + OrganizationDetailActivity.updateOrgFABActions = false; } } diff --git a/app/src/main/java/org/mian/gitnex/fragments/OrganizationTeamsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/OrganizationTeamsFragment.java index 7ff60ea6..bcd313e4 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/OrganizationTeamsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/OrganizationTeamsFragment.java @@ -1,5 +1,6 @@ package org.mian.gitnex.fragments; +import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -20,6 +21,7 @@ import androidx.recyclerview.widget.RecyclerView; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import org.gitnex.tea4j.v2.models.OrganizationPermissions; import org.mian.gitnex.R; +import org.mian.gitnex.activities.CreateTeamByOrgActivity; import org.mian.gitnex.adapters.OrganizationTeamsAdapter; import org.mian.gitnex.databinding.FragmentOrganizationTeamsBinding; import org.mian.gitnex.viewmodels.TeamsByOrgViewModel; @@ -96,6 +98,17 @@ public class OrganizationTeamsFragment extends Fragment { fetchDataAsync(orgName); + if (!permissions.isIsOwner()) { + fragmentTeamsByOrgBinding.createTeam.setVisibility(View.GONE); + } + + fragmentTeamsByOrgBinding.createTeam.setOnClickListener( + v1 -> { + Intent intentTeam = new Intent(getContext(), CreateTeamByOrgActivity.class); + intentTeam.putExtras(requireActivity().getIntent().getExtras()); + startActivity(intentTeam); + }); + return fragmentTeamsByOrgBinding.getRoot(); } diff --git a/app/src/main/java/org/mian/gitnex/fragments/RepositoriesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/RepositoriesFragment.java index 02bc985b..725e4d78 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/RepositoriesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/RepositoriesFragment.java @@ -57,9 +57,6 @@ public class RepositoriesFragment extends Fragment { fragmentRepositoriesBinding.recyclerView.setLayoutManager( new LinearLayoutManager(getContext())); - fragmentRepositoriesBinding.recyclerView.setPadding(0, 0, 0, 220); - fragmentRepositoriesBinding.recyclerView.setClipToPadding(false); - fragmentRepositoriesBinding.pullToRefresh.setOnRefreshListener( () -> new Handler(Looper.getMainLooper()) diff --git a/app/src/main/res/layout/bottom_sheet_organization.xml b/app/src/main/res/layout/bottom_sheet_organization.xml index 4627f382..05e88c0d 100644 --- a/app/src/main/res/layout/bottom_sheet_organization.xml +++ b/app/src/main/res/layout/bottom_sheet_organization.xml @@ -6,8 +6,8 @@ android:layout_height="wrap_content" android:background="?attr/primaryBackgroundColor" android:orientation="vertical" - android:paddingTop="6dp" - android:paddingBottom="12dp"> + android:paddingTop="@dimen/dimen6dp" + android:paddingBottom="@dimen/dimen12dp"> - - - - - - - - - - - - - - - - - - + android:padding="@dimen/dimen8dp"> + android:textSize="@dimen/dimen18sp" /> + app:layout_alignSelf="flex_start" /> + app:layout_alignSelf="flex_start" /> + app:layout_alignSelf="flex_start" /> diff --git a/app/src/main/res/layout/bottom_sheet_repo.xml b/app/src/main/res/layout/bottom_sheet_repo.xml index f2eba77e..43776d77 100644 --- a/app/src/main/res/layout/bottom_sheet_repo.xml +++ b/app/src/main/res/layout/bottom_sheet_repo.xml @@ -6,8 +6,8 @@ android:layout_height="wrap_content" android:background="?attr/primaryBackgroundColor" android:orientation="vertical" - android:paddingTop="6dp" - android:paddingBottom="12dp"> + android:paddingTop="@dimen/dimen6dp" + android:paddingBottom="@dimen/dimen12dp"> + android:layout_height="@dimen/dimen4dp" + android:layout_marginBottom="@dimen/dimen16dp" + android:background="?attr/dividerColor" /> + android:padding="@dimen/dimen8dp"> + android:textSize="@dimen/dimen18sp" /> @@ -181,7 +181,7 @@ android:id="@+id/repoOthersSection" android:layout_width="match_parent" android:layout_height="match_parent" - android:padding="4dp" + android:padding="@dimen/dimen4dp" app:alignContent="center" app:alignItems="flex_start" app:flexWrap="wrap" @@ -189,107 +189,107 @@ + app:layout_alignSelf="flex_start" /> + app:layout_alignSelf="flex_start" /> + app:layout_alignSelf="flex_start" /> + app:layout_alignSelf="flex_start" /> + app:layout_alignSelf="flex_start" /> + app:layout_alignSelf="flex_start" /> + app:layout_alignSelf="flex_start" /> + app:layout_alignSelf="flex_start" /> diff --git a/app/src/main/res/layout/fragment_labels.xml b/app/src/main/res/layout/fragment_labels.xml index eda8d014..bc6054fc 100644 --- a/app/src/main/res/layout/fragment_labels.xml +++ b/app/src/main/res/layout/fragment_labels.xml @@ -1,5 +1,6 @@ - + android:layout_height="match_parent" + android:clipToPadding="false" + android:paddingBottom="@dimen/dimen72dp" /> @@ -32,17 +35,30 @@ android:layout_height="wrap_content" android:indeterminate="true" style="@style/Widget.MaterialComponents.LinearProgressIndicator" - app:indicatorColor="?attr/progressIndicatorColor"/> + app:indicatorColor="?attr/progressIndicatorColor" /> + android:textSize="@dimen/dimen18sp" + android:visibility="gone" /> - + + + diff --git a/app/src/main/res/layout/fragment_organization_teams.xml b/app/src/main/res/layout/fragment_organization_teams.xml index b3313019..52b802b3 100644 --- a/app/src/main/res/layout/fragment_organization_teams.xml +++ b/app/src/main/res/layout/fragment_organization_teams.xml @@ -1,5 +1,6 @@ - + android:layout_height="match_parent" + android:clipToPadding="false" + android:paddingBottom="@dimen/dimen72dp" /> @@ -32,17 +35,30 @@ android:layout_height="wrap_content" android:indeterminate="true" style="@style/Widget.MaterialComponents.LinearProgressIndicator" - app:indicatorColor="?attr/progressIndicatorColor"/> + app:indicatorColor="?attr/progressIndicatorColor" /> + android:textSize="@dimen/dimen18sp" + android:visibility="gone" /> - + + + diff --git a/app/src/main/res/layout/fragment_repositories.xml b/app/src/main/res/layout/fragment_repositories.xml index 61679b2d..0a0692b9 100644 --- a/app/src/main/res/layout/fragment_repositories.xml +++ b/app/src/main/res/layout/fragment_repositories.xml @@ -21,7 +21,9 @@ + android:layout_height="match_parent" + android:clipToPadding="false" + android:paddingBottom="@dimen/dimen72dp" /> @@ -33,30 +35,30 @@ android:layout_height="wrap_content" android:indeterminate="true" style="@style/Widget.Material3.LinearProgressIndicator" - app:indicatorColor="?attr/progressIndicatorColor"/> + app:indicatorColor="?attr/progressIndicatorColor" /> + android:textSize="@dimen/dimen18sp" + android:visibility="gone" /> + app:icon="@drawable/ic_add" /> diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 2b445836..21eb933d 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -31,6 +31,7 @@ 100dp 104dp 120dp + 132dp 140dp 150dp 180dp