RepoDetails: convert mirror lists to have on/off switches

This commit is contained in:
Hans-Christoph Steiner 2019-02-13 20:16:46 +01:00
parent 2b1f851617
commit a81a61be61
2 changed files with 76 additions and 28 deletions

View File

@ -13,17 +13,23 @@ import android.nfc.NfcAdapter;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Parcelable; import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.support.v4.app.NavUtils; import android.support.v4.app.NavUtils;
import android.support.v4.content.LocalBroadcastManager; import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.text.TextUtils; import android.text.TextUtils;
import android.text.format.DateUtils; import android.text.format.DateUtils;
import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup;
import android.widget.Button; import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText; import android.widget.EditText;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
@ -115,6 +121,14 @@ public class RepoDetailsActivity extends AppCompatActivity {
TextView inputUrl = findViewById(R.id.input_repo_url); TextView inputUrl = findViewById(R.id.input_repo_url);
inputUrl.setText(repo.address); inputUrl.setText(repo.address);
RecyclerView officialMirrorListView = findViewById(R.id.official_mirror_list);
officialMirrorListView.setLayoutManager(new LinearLayoutManager(this));
officialMirrorListView.setAdapter(new MirrorAdapter(repo.mirrors));
RecyclerView userMirrorListView = findViewById(R.id.user_mirror_list);
userMirrorListView.setLayoutManager(new LinearLayoutManager(this));
userMirrorListView.setAdapter(new MirrorAdapter(repo.userMirrors));
if (repo.address.startsWith("content://")) { if (repo.address.startsWith("content://")) {
// no need to show a QR Code, it is not shareable // no need to show a QR Code, it is not shareable
return; return;
@ -347,30 +361,14 @@ public class RepoDetailsActivity extends AppCompatActivity {
if (repo.mirrors != null) { if (repo.mirrors != null) {
TextView officialMirrorsLabel = repoView.findViewById(R.id.label_official_mirrors); TextView officialMirrorsLabel = repoView.findViewById(R.id.label_official_mirrors);
officialMirrorsLabel.setVisibility(View.VISIBLE); officialMirrorsLabel.setVisibility(View.VISIBLE);
TextView officialMirrorsText = repoView.findViewById(R.id.text_official_mirrors); RecyclerView officialMirrorList = repoView.findViewById(R.id.official_mirror_list);
officialMirrorsText.setVisibility(View.VISIBLE); officialMirrorList.setVisibility(View.VISIBLE);
StringBuilder builder = new StringBuilder();
for (String url : repo.mirrors) {
builder.append("");
builder.append(url);
builder.append('\n');
}
builder.setLength(Math.max(builder.length() - 1, 0));
officialMirrorsText.setText(builder.toString());
} }
if (repo.userMirrors != null) { if (repo.userMirrors != null) {
TextView userMirrorsLabel = repoView.findViewById(R.id.label_user_mirrors); TextView userMirrorsLabel = repoView.findViewById(R.id.label_user_mirrors);
userMirrorsLabel.setVisibility(View.VISIBLE); userMirrorsLabel.setVisibility(View.VISIBLE);
TextView userMirrorsText = repoView.findViewById(R.id.text_user_mirrors); RecyclerView userMirrorList = repoView.findViewById(R.id.user_mirror_list);
userMirrorsText.setVisibility(View.VISIBLE); userMirrorList.setVisibility(View.VISIBLE);
StringBuilder builder = new StringBuilder();
for (String url : repo.userMirrors) {
builder.append("");
builder.append(url);
builder.append('\n');
}
builder.setLength(Math.max(builder.length() - 1, 0));
userMirrorsText.setText(builder.toString());
} }
name.setText(repo.name); name.setText(repo.name);
@ -464,4 +462,51 @@ public class RepoDetailsActivity extends AppCompatActivity {
credentialsDialog.show(); credentialsDialog.show();
} }
private class MirrorAdapter extends RecyclerView.Adapter<MirrorAdapter.MirrorViewHolder> {
private String[] mirrors;
class MirrorViewHolder extends RecyclerView.ViewHolder {
View view;
MirrorViewHolder(View view) {
super(view);
this.view = view;
}
}
MirrorAdapter(String[] mirrors) {
this.mirrors = mirrors;
}
@NonNull
@Override
public MirrorAdapter.MirrorViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.repo_item, parent, false);
return new MirrorViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull MirrorViewHolder holder, int position) {
TextView repoNameTextView = holder.view.findViewById(R.id.repo_name);
repoNameTextView.setText(mirrors[position]);
CompoundButton switchView = holder.view.findViewById(R.id.repo_switch);
switchView.setChecked(true);
View repoUnverified = holder.view.findViewById(R.id.repo_unverified);
repoUnverified.setVisibility(View.GONE);
View repoUnsigned = holder.view.findViewById(R.id.repo_unsigned);
repoUnsigned.setVisibility(View.GONE);
}
@Override
public int getItemCount() {
if (mirrors == null) {
return 0;
}
return mirrors.length;
}
}
} }

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
@ -83,10 +84,11 @@
android:text="@string/repo_official_mirrors" android:text="@string/repo_official_mirrors"
android:visibility="gone" /> android:visibility="gone" />
<TextView <android.support.v7.widget.RecyclerView
android:id="@+id/text_official_mirrors" android:id="@+id/official_mirror_list"
style="@style/BodyText" android:layout_width="match_parent"
android:visibility="gone" /> android:layout_height="wrap_content"
tools:listitem="@layout/repo_item" />
<!-- mirrors added by the user --> <!-- mirrors added by the user -->
<TextView <TextView
@ -95,10 +97,11 @@
android:text="@string/repo_user_mirrors" android:text="@string/repo_user_mirrors"
android:visibility="gone" /> android:visibility="gone" />
<TextView <android.support.v7.widget.RecyclerView
android:id="@+id/text_user_mirrors" android:id="@+id/user_mirror_list"
style="@style/BodyText" android:layout_width="match_parent"
android:visibility="gone" /> android:layout_height="wrap_content"
tools:listitem="@layout/repo_item" />
<!-- The credentials used to access this repo (optional) --> <!-- The credentials used to access this repo (optional) -->
<TextView <TextView