mirror of
https://framagit.org/tom79/fedilab-tube
synced 2025-02-16 12:00:42 +01:00
add checkbox for selecting categories
This commit is contained in:
parent
33c7f12180
commit
7f4c6faa1d
@ -227,4 +227,5 @@
|
|||||||
<string name="sensitive_content">Sensitive content: %1$s</string>
|
<string name="sensitive_content">Sensitive content: %1$s</string>
|
||||||
<string name="followers_instance">%1$s followers instances</string>
|
<string name="followers_instance">%1$s followers instances</string>
|
||||||
<string name="help">Help</string>
|
<string name="help">Help</string>
|
||||||
|
<string name="sensitive_video"> Sensitive videos</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -241,6 +241,7 @@
|
|||||||
<string name="action_instance_empty_content">No instances match these criteria</string>
|
<string name="action_instance_empty_content">No instances match these criteria</string>
|
||||||
<string name="instances_picker">Instances picker</string>
|
<string name="instances_picker">Instances picker</string>
|
||||||
<string name="pickup_instance">Pickup this instance</string>
|
<string name="pickup_instance">Pickup this instance</string>
|
||||||
|
<string name="sensitive_video"> Sensitive videos</string>
|
||||||
<string name="sensitive_content">Sensitive content: %1$s</string>
|
<string name="sensitive_content">Sensitive content: %1$s</string>
|
||||||
<string name="followers_instance">%1$s followers instances</string>
|
<string name="followers_instance">%1$s followers instances</string>
|
||||||
<string name="help">Help</string>
|
<string name="help">Help</string>
|
||||||
|
@ -17,6 +17,7 @@ package app.fedilab.fedilabtube;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.widget.CheckBox;
|
||||||
import android.widget.RelativeLayout;
|
import android.widget.RelativeLayout;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
@ -26,7 +27,10 @@ import androidx.recyclerview.widget.LinearLayoutManager;
|
|||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import app.fedilab.fedilabtube.client.APIResponse;
|
import app.fedilab.fedilabtube.client.APIResponse;
|
||||||
import app.fedilab.fedilabtube.client.entities.Instance;
|
import app.fedilab.fedilabtube.client.entities.Instance;
|
||||||
@ -35,6 +39,8 @@ import app.fedilab.fedilabtube.drawer.InstanceAdapter;
|
|||||||
import app.fedilab.fedilabtube.viewmodel.InstancesVM;
|
import app.fedilab.fedilabtube.viewmodel.InstancesVM;
|
||||||
import es.dmoral.toasty.Toasty;
|
import es.dmoral.toasty.Toasty;
|
||||||
|
|
||||||
|
import static app.fedilab.fedilabtube.MainActivity.peertubeInformation;
|
||||||
|
|
||||||
|
|
||||||
public class InstancePickerActivity extends AppCompatActivity {
|
public class InstancePickerActivity extends AppCompatActivity {
|
||||||
|
|
||||||
@ -60,6 +66,18 @@ public class InstancePickerActivity extends AppCompatActivity {
|
|||||||
textviewNoAction = findViewById(R.id.no_action);
|
textviewNoAction = findViewById(R.id.no_action);
|
||||||
mainLoader.setVisibility(View.VISIBLE);
|
mainLoader.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
|
RelativeLayout checkbox_container = findViewById(R.id.checkbox_container);
|
||||||
|
LinkedHashMap<Integer, String> categories = peertubeInformation.getCategories();
|
||||||
|
if (categories != null && categories.size() > 0) {
|
||||||
|
Iterator<Map.Entry<Integer, String>> it = categories.entrySet().iterator();
|
||||||
|
while (it.hasNext()) {
|
||||||
|
Map.Entry<Integer, String> pair = it.next();
|
||||||
|
CheckBox cb = new CheckBox(InstancePickerActivity.this);
|
||||||
|
cb.setText(pair.getValue());
|
||||||
|
checkbox_container.addView(cb);
|
||||||
|
it.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mainLoader.setVisibility(View.VISIBLE);
|
mainLoader.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ import android.database.sqlite.SQLiteDatabase;
|
|||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
import android.text.SpannableString;
|
import android.text.SpannableString;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
@ -617,8 +618,9 @@ public class PeertubeAPI {
|
|||||||
params.put("languagesOr[]", strParam);
|
params.put("languagesOr[]", strParam);
|
||||||
}
|
}
|
||||||
params.put("minUserQuota", instanceParams.getMinUserQuota());
|
params.put("minUserQuota", instanceParams.getMinUserQuota());
|
||||||
params.put("nsfwPolicy", instanceParams.getNsfwPolicy());
|
params.put("nsfwPolicy[]", instanceParams.getNsfwPolicy());
|
||||||
}
|
}
|
||||||
|
Log.v(Helper.TAG, "params: " + params);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String response = new HttpsConnection(context).get("https://instances.joinpeertube.org/api/v1/instances", 30, params, null);
|
String response = new HttpsConnection(context).get("https://instances.joinpeertube.org/api/v1/instances", 30, params, null);
|
||||||
@ -2109,7 +2111,11 @@ public class PeertubeAPI {
|
|||||||
instance.setName(resobj.getString("name"));
|
instance.setName(resobj.getString("name"));
|
||||||
instance.setVersion(resobj.getString("version"));
|
instance.setVersion(resobj.getString("version"));
|
||||||
instance.setShortDescription(resobj.getString("shortDescription"));
|
instance.setShortDescription(resobj.getString("shortDescription"));
|
||||||
instance.setNSFW(resobj.getBoolean("isNSFW"));
|
if (resobj.has("isNSFW")) {
|
||||||
|
instance.setNSFW(resobj.getBoolean("isNSFW"));
|
||||||
|
} else {
|
||||||
|
instance.setNSFW(false);
|
||||||
|
}
|
||||||
instance.setSignupAllowed(resobj.getBoolean("signupAllowed"));
|
instance.setSignupAllowed(resobj.getBoolean("signupAllowed"));
|
||||||
instance.setSupportsIPv6(resobj.getBoolean("supportsIPv6"));
|
instance.setSupportsIPv6(resobj.getBoolean("supportsIPv6"));
|
||||||
instance.setTotalInstanceFollowers(resobj.getInt("totalInstanceFollowers"));
|
instance.setTotalInstanceFollowers(resobj.getInt("totalInstanceFollowers"));
|
||||||
|
@ -16,6 +16,8 @@ package app.fedilab.fedilabtube.drawer;
|
|||||||
|
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.text.SpannableStringBuilder;
|
||||||
|
import android.text.Spanned;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
@ -32,6 +34,7 @@ import java.util.Map;
|
|||||||
|
|
||||||
import app.fedilab.fedilabtube.R;
|
import app.fedilab.fedilabtube.R;
|
||||||
import app.fedilab.fedilabtube.client.entities.Instance;
|
import app.fedilab.fedilabtube.client.entities.Instance;
|
||||||
|
import app.fedilab.fedilabtube.helper.RoundedBackgroundSpan;
|
||||||
|
|
||||||
import static app.fedilab.fedilabtube.MainActivity.peertubeInformation;
|
import static app.fedilab.fedilabtube.MainActivity.peertubeInformation;
|
||||||
|
|
||||||
@ -52,7 +55,7 @@ public class InstanceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
|
|||||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
context = parent.getContext();
|
context = parent.getContext();
|
||||||
LayoutInflater layoutInflater = LayoutInflater.from(context);
|
LayoutInflater layoutInflater = LayoutInflater.from(context);
|
||||||
return new PeertubeAdapter.ViewHolder(layoutInflater.inflate(R.layout.drawer_instance, parent, false));
|
return new ViewHolder(layoutInflater.inflate(R.layout.drawer_instance, parent, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -60,33 +63,61 @@ public class InstanceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
|
|||||||
final Instance instance = instances.get(position);
|
final Instance instance = instances.get(position);
|
||||||
final ViewHolder holder = (ViewHolder) viewHolder;
|
final ViewHolder holder = (ViewHolder) viewHolder;
|
||||||
|
|
||||||
holder.description.setText(instance.getShortDescription());
|
if (instance.getShortDescription() != null && instance.getShortDescription().trim().length() > 0) {
|
||||||
|
holder.description.setText(instance.getShortDescription());
|
||||||
|
holder.description.setVisibility(View.VISIBLE);
|
||||||
|
} else {
|
||||||
|
holder.description.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
holder.name.setText(instance.getName());
|
holder.name.setText(instance.getName());
|
||||||
holder.host.setText(instance.getHost());
|
holder.host.setText(instance.getHost());
|
||||||
|
|
||||||
StringBuilder categories = new StringBuilder();
|
|
||||||
|
SpannableStringBuilder stringBuilder = new SpannableStringBuilder();
|
||||||
|
String between = "";
|
||||||
if (instance.getCategories() != null && instance.getCategories().size() > 0) {
|
if (instance.getCategories() != null && instance.getCategories().size() > 0) {
|
||||||
Iterator<Map.Entry<Integer, Integer>> it = instance.getCategories().entrySet().iterator();
|
Iterator<Map.Entry<Integer, Integer>> it = instance.getCategories().entrySet().iterator();
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
Map.Entry<Integer, Integer> pair = it.next();
|
Map.Entry<Integer, Integer> pair = it.next();
|
||||||
LinkedHashMap<Integer, String> info_cat = peertubeInformation.getCategories();
|
LinkedHashMap<Integer, String> info_cat = peertubeInformation.getCategories();
|
||||||
categories.append(info_cat.get(pair.getKey())).append(" ");
|
String cat = info_cat.get(pair.getKey());
|
||||||
|
stringBuilder.append(between);
|
||||||
|
if (cat != null && cat.trim().toLowerCase().compareTo("null") != 0) {
|
||||||
|
if (between.length() == 0) between = " ";
|
||||||
|
String tag = " " + cat + " ";
|
||||||
|
stringBuilder.append(tag);
|
||||||
|
stringBuilder.setSpan(new RoundedBackgroundSpan(context), stringBuilder.length() - tag.length(), stringBuilder.length() - tag.length() + tag.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||||
|
}
|
||||||
it.remove();
|
it.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
holder.tags.setText(categories);
|
holder.tags.setText(stringBuilder);
|
||||||
|
|
||||||
StringBuilder languages = new StringBuilder();
|
StringBuilder languages = new StringBuilder();
|
||||||
if (instance.getLanguages() != null && instance.getLanguages().size() > 0) {
|
if (instance.getLanguages() != null && instance.getLanguages().size() > 0) {
|
||||||
Iterator<Map.Entry<Integer, String>> it = instance.getLanguages().entrySet().iterator();
|
Iterator<Map.Entry<Integer, String>> it = instance.getLanguages().entrySet().iterator();
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
Map.Entry<Integer, String> pair = it.next();
|
Map.Entry<Integer, String> pair = it.next();
|
||||||
languages.append(pair.getKey()).append(" ");
|
LinkedHashMap<String, String> info_lang = peertubeInformation.getLanguages();
|
||||||
|
languages.append(info_lang.get(pair.getValue())).append(" ");
|
||||||
it.remove();
|
it.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
holder.languages.setText(languages);
|
|
||||||
holder.sensitive_content.setText(context.getString(R.string.sensitive_content, instance.getDefaultNSFWPolicy()));
|
if (languages.toString().trim().length() == 0) {
|
||||||
|
holder.languages.setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
|
holder.languages.setText(languages);
|
||||||
|
holder.languages.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (instance.getDefaultNSFWPolicy().compareTo("do_not_list") != 0) {
|
||||||
|
holder.sensitive_content.setText(context.getString(R.string.sensitive_content, instance.getDefaultNSFWPolicy()));
|
||||||
|
holder.sensitive_content.setVisibility(View.VISIBLE);
|
||||||
|
} else {
|
||||||
|
holder.sensitive_content.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
holder.followers_instance.setText(context.getString(R.string.followers_instance, String.valueOf(instance.getTotalInstanceFollowers())));
|
holder.followers_instance.setText(context.getString(R.string.followers_instance, String.valueOf(instance.getTotalInstanceFollowers())));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,6 +144,7 @@ public class InstanceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
|
|||||||
name = itemView.findViewById(R.id.name);
|
name = itemView.findViewById(R.id.name);
|
||||||
host = itemView.findViewById(R.id.host);
|
host = itemView.findViewById(R.id.host);
|
||||||
description = itemView.findViewById(R.id.description);
|
description = itemView.findViewById(R.id.description);
|
||||||
|
followers_instance = itemView.findViewById(R.id.followers_instance);
|
||||||
tags = itemView.findViewById(R.id.tags);
|
tags = itemView.findViewById(R.id.tags);
|
||||||
languages = itemView.findViewById(R.id.languages);
|
languages = itemView.findViewById(R.id.languages);
|
||||||
sensitive_content = itemView.findViewById(R.id.sensitive_content);
|
sensitive_content = itemView.findViewById(R.id.sensitive_content);
|
||||||
|
@ -0,0 +1,42 @@
|
|||||||
|
package app.fedilab.fedilabtube.helper;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.Canvas;
|
||||||
|
import android.graphics.Paint;
|
||||||
|
import android.graphics.RectF;
|
||||||
|
import android.text.style.ReplacementSpan;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import app.fedilab.fedilabtube.R;
|
||||||
|
|
||||||
|
public class RoundedBackgroundSpan extends ReplacementSpan {
|
||||||
|
|
||||||
|
private int backgroundColor;
|
||||||
|
private int textColor;
|
||||||
|
|
||||||
|
public RoundedBackgroundSpan(Context context) {
|
||||||
|
super();
|
||||||
|
backgroundColor = context.getResources().getColor(R.color.colorAccent_full);
|
||||||
|
textColor = context.getResources().getColor(R.color.browser_actions_bg_grey);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, @NotNull Paint paint) {
|
||||||
|
RectF rect = new RectF(x, top, x + measureText(paint, text, start, end), bottom);
|
||||||
|
paint.setColor(backgroundColor);
|
||||||
|
int CORNER_RADIUS = 8;
|
||||||
|
canvas.drawRoundRect(rect, CORNER_RADIUS, CORNER_RADIUS, paint);
|
||||||
|
paint.setColor(textColor);
|
||||||
|
canvas.drawText(text, start, end, x, y, paint);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
|
||||||
|
return Math.round(paint.measureText(text, start, end));
|
||||||
|
}
|
||||||
|
|
||||||
|
private float measureText(Paint paint, CharSequence text, int start, int end) {
|
||||||
|
return paint.measureText(text, start, end);
|
||||||
|
}
|
||||||
|
}
|
@ -25,6 +25,35 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context=".InstancePickerActivity">
|
tools:context=".InstancePickerActivity">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/checkbox_container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/sensitive_video" />
|
||||||
|
|
||||||
|
<Spinner
|
||||||
|
android:id="@+id/sensitive"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="10dp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -42,7 +42,8 @@
|
|||||||
android:id="@+id/host"
|
android:id="@+id/host"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:layout_constraintStart_toStartOf="@+id/name"
|
android:layout_marginStart="10dp"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/name"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
Loading…
x
Reference in New Issue
Block a user