mirror of
https://github.com/gitnex-org/gitnex.git
synced 2026-03-22 13:05:25 -05:00
Merge branch 'main' of codeberg.org:gitnex/GitNex
# Conflicts: # app/src/main/res/drawable/ic_directory.xml
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
13
app/src/main/res/drawable/ic_directory_2.xml
Normal file
13
app/src/main/res/drawable/ic_directory_2.xml
Normal 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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user