Merge branch 'main' of codeberg.org:gitnex/GitNex

# Conflicts:
#	app/src/main/res/drawable/ic_directory.xml
This commit is contained in:
M M Arif
2025-11-10 20:34:14 +05:00
8 changed files with 436 additions and 17 deletions

View File

@@ -2,6 +2,7 @@ package org.mian.gitnex.api.clients;
import java.util.List;
import org.mian.gitnex.api.models.contents.RepoGetContentsList;
import org.mian.gitnex.api.models.settings.RepositoryGlobal;
import org.mian.gitnex.api.models.topics.Topics;
import retrofit2.Call;
import retrofit2.http.DELETE;
@@ -40,4 +41,7 @@ public interface ApiInterface {
@DELETE("repos/{owner}/{repo}/topics/{topic}") // delete a repo topic
Call<Void> deleteRepoTopic(
@Path("owner") String owner, @Path("repo") String repo, @Path("topic") String topic);
@GET("settings/repository") // get repository global settings
Call<RepositoryGlobal> getRepositoryGlobalSettings();
}

View File

@@ -0,0 +1,58 @@
package org.mian.gitnex.api.models.settings;
import com.google.gson.annotations.SerializedName;
/**
* @author mmarif
*/
public class RepositoryGlobal {
@SerializedName("forks_disabled")
private boolean forksDisabled;
@SerializedName("migrations_disabled")
private boolean migrationsDisabled;
@SerializedName("http_git_disabled")
private boolean httpGitDisabled;
@SerializedName("lfs_disabled")
private boolean lfsDisabled;
@SerializedName("mirrors_disabled")
private boolean mirrorsDisabled;
@SerializedName("time_tracking_disabled")
private boolean timeTrackingDisabled;
@SerializedName("stars_disabled")
private boolean starsDisabled;
public boolean isForksDisabled() {
return forksDisabled;
}
public boolean isMigrationsDisabled() {
return migrationsDisabled;
}
public boolean isHttpGitDisabled() {
return httpGitDisabled;
}
public boolean isLfsDisabled() {
return lfsDisabled;
}
public boolean isMirrorsDisabled() {
return mirrorsDisabled;
}
public boolean isTimeTrackingDisabled() {
return timeTrackingDisabled;
}
public boolean isStarsDisabled() {
return starsDisabled;
}
}

View File

@@ -8,40 +8,44 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import org.mian.gitnex.activities.AdminCronTasksActivity;
import org.mian.gitnex.activities.AdminGetUsersActivity;
import org.mian.gitnex.activities.AdminUnadoptedReposActivity;
import org.mian.gitnex.activities.BaseActivity;
import org.mian.gitnex.api.clients.ApiRetrofitClient;
import org.mian.gitnex.api.models.settings.RepositoryGlobal;
import org.mian.gitnex.databinding.BottomSheetGlobalRepositorySettingsBinding;
import org.mian.gitnex.databinding.FragmentAdministrationBinding;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
/**
* @author M M Arif
* @author mmarif
*/
public class AdministrationFragment extends Fragment {
private FragmentAdministrationBinding binding;
private BottomSheetDialog settingsBottomSheet;
public View onCreateView(
@NonNull LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
FragmentAdministrationBinding fragmentAdministrationBinding =
FragmentAdministrationBinding.inflate(inflater, container, false);
binding = FragmentAdministrationBinding.inflate(inflater, container, false);
fragmentAdministrationBinding.systemUsersFrame.setOnClickListener(
binding.systemUsersFrame.setOnClickListener(
v1 -> startActivity(new Intent(getContext(), AdminGetUsersActivity.class)));
// if gitea version is greater/equal(1.13.0) than user installed version
// (installed.higherOrEqual(compareVer))
if (((BaseActivity) requireActivity()).getAccount().requiresVersion("1.13.0")) {
fragmentAdministrationBinding.adminCronFrame.setVisibility(View.VISIBLE);
}
fragmentAdministrationBinding.adminCronFrame.setOnClickListener(
binding.adminCronFrame.setOnClickListener(
v1 -> startActivity(new Intent(getContext(), AdminCronTasksActivity.class)));
fragmentAdministrationBinding.unadoptedReposFrame.setOnClickListener(
binding.unadoptedReposFrame.setOnClickListener(
v1 -> startActivity(new Intent(getContext(), AdminUnadoptedReposActivity.class)));
binding.adminRepositoryFrame.setOnClickListener(v -> showRepositorySettings());
String action = requireActivity().getIntent().getStringExtra("giteaAdminAction");
if (action != null) {
if (action.equals("users")) {
@@ -51,6 +55,57 @@ public class AdministrationFragment extends Fragment {
}
}
return fragmentAdministrationBinding.getRoot();
return binding.getRoot();
}
private void showRepositorySettings() {
settingsBottomSheet = new BottomSheetDialog(requireContext());
BottomSheetGlobalRepositorySettingsBinding sheetBinding =
BottomSheetGlobalRepositorySettingsBinding.inflate(
LayoutInflater.from(requireContext()));
settingsBottomSheet.setContentView(sheetBinding.getRoot());
loadRepositorySettings(sheetBinding);
settingsBottomSheet.show();
}
private void loadRepositorySettings(BottomSheetGlobalRepositorySettingsBinding sheetBinding) {
Call<RepositoryGlobal> call =
ApiRetrofitClient.getInstance(requireContext()).getRepositoryGlobalSettings();
call.enqueue(
new Callback<>() {
@Override
public void onResponse(
@NonNull Call<RepositoryGlobal> call,
@NonNull Response<RepositoryGlobal> response) {
if (response.isSuccessful() && response.body() != null) {
RepositoryGlobal settings = response.body();
updateSettingsUI(sheetBinding, settings);
}
}
@Override
public void onFailure(
@NonNull Call<RepositoryGlobal> call, @NonNull Throwable t) {}
});
}
private void updateSettingsUI(
BottomSheetGlobalRepositorySettingsBinding sheetBinding, RepositoryGlobal settings) {
sheetBinding.forksDisabledValue.setText(
settings.isForksDisabled() ? "Disabled" : "Enabled");
sheetBinding.migrationsDisabledValue.setText(
settings.isMigrationsDisabled() ? "Disabled" : "Enabled");
sheetBinding.httpGitDisabledValue.setText(
settings.isHttpGitDisabled() ? "Disabled" : "Enabled");
sheetBinding.lfsDisabledValue.setText(settings.isLfsDisabled() ? "Disabled" : "Enabled");
sheetBinding.mirrorsDisabledValue.setText(
settings.isMirrorsDisabled() ? "Disabled" : "Enabled");
sheetBinding.timeTrackingDisabledValue.setText(
settings.isTimeTrackingDisabled() ? "Disabled" : "Enabled");
sheetBinding.starsDisabledValue.setText(
settings.isStarsDisabled() ? "Disabled" : "Enabled");
}
}

View File

@@ -1,5 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:viewportHeight="32" android:viewportWidth="32" android:width="24dp">
<path android:fillColor="#c09553" android:pathData="M27.5,5.5L18.2,5.5L16.1,9.7L4.4,9.7L4.4,26.5L29.6,26.5L29.6,5.5ZM27.5,9.7L19.3,9.7l1.1,-2.1h7.1Z"/>
<path android:fillColor="#00BCD4" android:pathData="M27.5,5.5L18.2,5.5L16.1,9.7L4.4,9.7L4.4,26.5L29.6,26.5L29.6,5.5ZM27.5,9.7L19.3,9.7l1.1,-2.1h7.1Z"/>
</vector>

View File

@@ -0,0 +1,13 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M5,4h4l3,3h7a2,2 0,0 1,2 2v8a2,2 0,0 1,-2 2h-14a2,2 0,0 1,-2 -2v-11a2,2 0,0 1,2 -2"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="?attr/iconsColor"
android:strokeLineCap="round"/>
</vector>

View File

@@ -0,0 +1,243 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/primaryBackgroundColor"
android:orientation="vertical"
android:padding="@dimen/dimen16dp">
<View
android:layout_width="@dimen/dimen32dp"
android:layout_height="@dimen/dimen6dp"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="@dimen/dimen8dp"
android:background="@drawable/bottom_sheet_handle"
android:backgroundTint="?attr/primaryTextColor" />
<LinearLayout
android:id="@+id/milestonesFilterHeadFrame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="@dimen/dimen8dp">
<TextView
android:id="@+id/bottomSheetHeader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/repoSettingsTitle"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen18sp"/>
<com.google.android.material.card.MaterialCardView
style="?attr/materialCardViewFilledStyle"
android:layout_width="@dimen/dimen28dp"
android:layout_height="@dimen/dimen4dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/dimen8dp"
android:layout_marginBottom="@dimen/dimen16dp"
app:cardCornerRadius="@dimen/dimen24dp"
app:cardElevation="@dimen/dimen0dp">
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/fabColor" />
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
<!-- Forks -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="@dimen/dimen12dp"
android:gravity="center_vertical">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/forks"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen16sp" />
<TextView
android:id="@+id/forksDisabledValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/loading"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen16sp"
android:textStyle="bold" />
</LinearLayout>
<!-- Migrations -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="@dimen/dimen12dp"
android:gravity="center_vertical">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/migrations"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen16sp" />
<TextView
android:id="@+id/migrationsDisabledValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/loading"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen16sp"
android:textStyle="bold" />
</LinearLayout>
<!-- HTTP Git -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="@dimen/dimen12dp"
android:gravity="center_vertical">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/http_git"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen16sp" />
<TextView
android:id="@+id/httpGitDisabledValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/loading"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen16sp"
android:textStyle="bold" />
</LinearLayout>
<!-- LFS -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="@dimen/dimen12dp"
android:gravity="center_vertical">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/lfs"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen16sp" />
<TextView
android:id="@+id/lfsDisabledValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/loading"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen16sp"
android:textStyle="bold" />
</LinearLayout>
<!-- Mirrors -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="@dimen/dimen12dp"
android:gravity="center_vertical">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/mirrors"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen16sp" />
<TextView
android:id="@+id/mirrorsDisabledValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/loading"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen16sp"
android:textStyle="bold" />
</LinearLayout>
<!-- Time Tracking -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="@dimen/dimen12dp"
android:gravity="center_vertical">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/time_tracking"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen16sp" />
<TextView
android:id="@+id/timeTrackingDisabledValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/loading"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen16sp"
android:textStyle="bold" />
</LinearLayout>
<!-- Stars -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="@dimen/dimen12dp"
android:gravity="center_vertical">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/stars"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen16sp" />
<TextView
android:id="@+id/starsDisabledValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/loading"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen16sp"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>

View File

@@ -116,7 +116,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/generalImgContentText"
app:srcCompat="@drawable/ic_directory" />
app:srcCompat="@drawable/ic_directory_2" />
<LinearLayout
android:layout_width="0dp"
@@ -146,6 +146,44 @@
</LinearLayout>
<LinearLayout
android:id="@+id/admin_repository_frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical"
android:orientation="horizontal"
android:layout_marginBottom="@dimen/dimen6dp"
android:padding="@dimen/dimen16dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/generalImgContentText"
app:srcCompat="@drawable/ic_repo" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dimen10dp"
android:layout_marginEnd="@dimen/dimen10dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/repository_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="@dimen/dimen12dp"
android:paddingEnd="@dimen/dimen12dp"
android:text="@string/repoSettingsTitle"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen16sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>

View File

@@ -604,6 +604,11 @@
<string name="idle">Idle</string>
<string name="value">Value</string>
<string name="optional">Optional</string>
<string name="loading">Loading…</string>
<string name="migrations">Migrations</string>
<string name="lfs">LFS</string>
<string name="mirrors">Mirrors</string>
<string name="stars">Stars</string>
<!-- generic copy -->
<string name="exploreUsers">Explore users</string>
@@ -1005,6 +1010,7 @@
<string name="search_failed">Search failed</string>
<string name="no_dependency_search_results">No matching results found</string>
<string name="time_tracking">Time Tracking</string>
<string name="tracked_time">Tracked Time</string>
<string name="no_tracked_time">No time tracked yet</string>
<string name="total_time">Total: %1$dh %2$dm %3$ds</string>
@@ -1049,4 +1055,6 @@
<string name="errorDeletingTopic">Error deleting topic</string>
<string name="errorLoadingTopics">Error loading topics</string>
<string name="invalidTopicName">Invalid topic name</string>
<string name="http_git">HTTP Git</string>
</resources>