Fix issue #21 - Prompt instances for avoiding default down ones

This commit is contained in:
Thomas 2022-05-30 11:06:24 +02:00
parent 5696809c1d
commit fda17ee8fe
8 changed files with 133 additions and 94 deletions

View File

@ -0,0 +1 @@
{"1":"Music","2":"Films","3":"Vehicles","4":"Art","5":"Sports","6":"Travels","7":"Gaming","8":"People","9":"Comedy","10":"Entertainment","11":"News & Politics","12":"How To","13":"Education","14":"Activism","15":"Science & Technology","16":"Animals","17":"Kids","18":"Food"}

View File

@ -0,0 +1 @@
{"aa":"Afar","ab":"Abkhazian","af":"Afrikaans","ak":"Akan","am":"Amharic","ar":"Arabic","an":"Aragonese","ase":"American Sign Language","as":"Assamese","av":"Avaric","avk":"Kotava","ay":"Aymara","az":"Azerbaijani","ba":"Bashkir","bm":"Bambara","be":"Belarusian","bn":"Bengali","bfi":"British Sign Language","bi":"Bislama","bo":"Tibetan","bs":"Bosnian","br":"Breton","bg":"Bulgarian","bzs":"Brazilian Sign Language","ca":"Catalan","cs":"Czech","ch":"Chamorro","ce":"Chechen","cv":"Chuvash","kw":"Cornish","co":"Corsican","cr":"Cree","cse":"Czech Sign Language","csl":"Chinese Sign Language","cy":"Welsh","da":"Danish","de":"German","dv":"Dhivehi","dsl":"Danish Sign Language","dz":"Dzongkha","el":"Greek","en":"English","eo":"Esperanto","et":"Estonian","eu":"Basque","ee":"Ewe","fo":"Faroese","fa":"Persian","fj":"Fijian","fi":"Finnish","fr":"French","fy":"Western Frisian","fsl":"French Sign Language","ff":"Fulah","gd":"Scottish Gaelic","ga":"Irish","gl":"Galician","gv":"Manx","gn":"Guarani","gsg":"German Sign Language","gu":"Gujarati","ht":"Haitian","ha":"Hausa","sh":"Serbo-Croatian","he":"Hebrew","hz":"Herero","hi":"Hindi","ho":"Hiri Motu","hr":"Croatian","hu":"Hungarian","hy":"Armenian","ig":"Igbo","ii":"Sichuan Yi","iu":"Inuktitut","id":"Indonesian","ik":"Inupiaq","is":"Icelandic","it":"Italian","jv":"Javanese","jbo":"Lojban","ja":"Japanese","jsl":"Japanese Sign Language","kab":"Kabyle","kl":"Kalaallisut","kn":"Kannada","ks":"Kashmiri","ka":"Georgian","kr":"Kanuri","kk":"Kazakh","km":"Khmer","ki":"Kikuyu","rw":"Kinyarwanda","ky":"Kirghiz","kv":"Komi","kg":"Kongo","ko":"Korean","kj":"Kuanyama","ku":"Kurdish","lo":"Lao","la":"Latin","lv":"Latvian","li":"Limburgan","ln":"Lingala","lt":"Lithuanian","lb":"Luxembourgish","lu":"Luba-Katanga","lg":"Ganda","mh":"Marshallese","ml":"Malayalam","mr":"Marathi","mk":"Macedonian","mg":"Malagasy","mt":"Maltese","mn":"Mongolian","mi":"Maori","ms":"Malay (macrolanguage)","my":"Burmese","na":"Nauru","nv":"Navajo","nr":"South Ndebele","nd":"North Ndebele","ng":"Ndonga","ne":"Nepali (macrolanguage)","nl":"Dutch","nn":"Norwegian Nynorsk","nb":"Norwegian Bokmål","no":"Norwegian","ny":"Nyanja","oc":"Occitan","oj":"Ojibwa","or":"Oriya (macrolanguage)","om":"Oromo","os":"Ossetian","pa":"Panjabi","pks":"Pakistan Sign Language","pl":"Polish","pt":"Portuguese","ps":"Pushto","qu":"Quechua","rm":"Romansh","ro":"Romanian","rsl":"Russian Sign Language","rn":"Rundi","ru":"Russian","sg":"Sango","sdl":"Saudi Arabian Sign Language","sfs":"South African Sign Language","si":"Sinhala","sk":"Slovak","sl":"Slovenian","se":"Northern Sami","sm":"Samoan","sn":"Shona","sd":"Sindhi","so":"Somali","st":"Southern Sotho","es":"Spanish","sq":"Albanian","sc":"Sardinian","sr":"Serbian","ss":"Swati","su":"Sundanese","sw":"Swahili (macrolanguage)","sv":"Swedish","swl":"Swedish Sign Language","ty":"Tahitian","ta":"Tamil","tt":"Tatar","te":"Telugu","tg":"Tajik","tl":"Tagalog","th":"Thai","ti":"Tigrinya","tlh":"Klingon","to":"Tonga (Tonga Islands)","tn":"Tswana","ts":"Tsonga","tk":"Turkmen","tr":"Turkish","tw":"Twi","ug":"Uighur","uk":"Ukrainian","ur":"Urdu","uz":"Uzbek","ve":"Venda","vi":"Vietnamese","wa":"Walloon","wo":"Wolof","xh":"Xhosa","yi":"Yiddish","yo":"Yoruba","za":"Zhuang","zh":"Chinese","zu":"Zulu","zxx":"No linguistic content","zh-Hans":"Simplified Chinese","zh-Hant":"Traditional Chinese"}

View File

@ -24,9 +24,6 @@ import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
@ -45,6 +42,7 @@ import app.fedilab.fedilabtube.R;
import app.fedilab.fedilabtube.client.APIResponse;
import app.fedilab.fedilabtube.client.data.InstanceData;
import app.fedilab.fedilabtube.client.entities.InstanceParams;
import app.fedilab.fedilabtube.databinding.ActivityInstancePickerBinding;
import app.fedilab.fedilabtube.drawer.InstanceAdapter;
import app.fedilab.fedilabtube.helper.HelperInstance;
import app.fedilab.fedilabtube.helper.RoundedBackgroundSpan;
@ -63,10 +61,8 @@ public class InstancePickerActivity extends BaseActivity {
String[] itemsKeyLanguage;
String[] itemsLabelLanguage;
InstanceParams instanceParams;
private RelativeLayout mainLoader, textviewNoAction;
private TextView categories_view, languages_view;
private InstancesVM viewModel;
private ActivityInstancePickerBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -75,33 +71,27 @@ public class InstancePickerActivity extends BaseActivity {
if (getSupportActionBar() != null)
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
binding = ActivityInstancePickerBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setContentView(R.layout.activity_instance_picker);
binding.loader.setVisibility(View.VISIBLE);
mainLoader = findViewById(R.id.loader);
textviewNoAction = findViewById(R.id.no_action);
mainLoader.setVisibility(View.VISIBLE);
Button pickup_categories = findViewById(R.id.pickup_categories);
Button pickup_languages = findViewById(R.id.pickup_languages);
categories_view = findViewById(R.id.categories_view);
languages_view = findViewById(R.id.languages_view);
Spinner sensitive = findViewById(R.id.sensitive);
String[] channelSensitive = new String[]{"do_not_list", "blur", "display", "no_opinion"};
String[] channelSensitivesLabel = new String[]{getString(R.string.do_not_list), getString(R.string.blur), getString(R.string.display), getString(R.string.no_opinion)};
ArrayAdapter<String> adapterChannel = new ArrayAdapter<>(InstancePickerActivity.this,
android.R.layout.simple_spinner_dropdown_item, channelSensitivesLabel);
sensitive.setAdapter(adapterChannel);
binding.sensitive.setAdapter(adapterChannel);
viewModel = new ViewModelProvider(InstancePickerActivity.this).get(InstancesVM.class);
sensitive.setSelection(1, false);
sensitive.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
binding.sensitive.setSelection(1, false);
binding.sensitive.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
instanceParams.setNsfwPolicy(channelSensitive[position]);
mainLoader.setVisibility(View.VISIBLE);
binding.loader.setVisibility(View.VISIBLE);
viewModel.getInstances(instanceParams).observe(InstancePickerActivity.this, apiResponse -> manageVIewInstance(apiResponse));
}
@ -117,7 +107,7 @@ public class InstancePickerActivity extends BaseActivity {
itemsLabelLanguage = new String[languages.size()];
itemsKeyLanguage = new String[languages.size()];
pickup_languages.setOnClickListener(v -> {
binding.pickupLanguages.setOnClickListener(v -> {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(InstancePickerActivity.this);
int i = 0;
@ -160,13 +150,13 @@ public class InstancePickerActivity extends BaseActivity {
j++;
}
instanceParams.setLanguagesOr(langs);
languages_view.setText(stringBuilder, TextView.BufferType.SPANNABLE);
if (languages_view.getText().toString().trim().length() > 0) {
languages_view.setVisibility(View.VISIBLE);
binding.languagesView.setText(stringBuilder, TextView.BufferType.SPANNABLE);
if (binding.languagesView.getText().toString().trim().length() > 0) {
binding.languagesView.setVisibility(View.VISIBLE);
} else {
languages_view.setVisibility(View.GONE);
binding.languagesView.setVisibility(View.GONE);
}
mainLoader.setVisibility(View.VISIBLE);
binding.loader.setVisibility(View.VISIBLE);
viewModel.getInstances(instanceParams).observe(InstancePickerActivity.this, this::manageVIewInstance);
});
dialogBuilder.setPositiveButton(R.string.validate, (dialog, id) -> dialog.dismiss());
@ -184,7 +174,7 @@ public class InstancePickerActivity extends BaseActivity {
itemsKeyCategory = new int[categories.size()];
pickup_categories.setOnClickListener(v -> {
binding.pickupCategories.setOnClickListener(v -> {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(InstancePickerActivity.this);
int i = 0;
if (categories.size() > 0) {
@ -225,13 +215,13 @@ public class InstancePickerActivity extends BaseActivity {
j++;
}
instanceParams.setCategoriesOr(cats);
categories_view.setText(stringBuilder, TextView.BufferType.SPANNABLE);
if (categories_view.getText().toString().trim().length() > 0) {
categories_view.setVisibility(View.VISIBLE);
binding.categoriesView.setText(stringBuilder, TextView.BufferType.SPANNABLE);
if (binding.categoriesView.getText().toString().trim().length() > 0) {
binding.categoriesView.setVisibility(View.VISIBLE);
} else {
categories_view.setVisibility(View.GONE);
binding.categoriesView.setVisibility(View.GONE);
}
mainLoader.setVisibility(View.VISIBLE);
binding.loader.setVisibility(View.VISIBLE);
viewModel.getInstances(instanceParams).observe(InstancePickerActivity.this, this::manageVIewInstance);
});
dialogBuilder.setPositiveButton(R.string.validate, (dialog, id) -> dialog.dismiss());
@ -243,7 +233,7 @@ public class InstancePickerActivity extends BaseActivity {
}
mainLoader.setVisibility(View.VISIBLE);
binding.loader.setVisibility(View.VISIBLE);
setTitle(R.string.instances_picker);
@ -264,7 +254,7 @@ public class InstancePickerActivity extends BaseActivity {
public void manageVIewInstance(APIResponse apiResponse) {
mainLoader.setVisibility(View.GONE);
binding.loader.setVisibility(View.GONE);
if (apiResponse.getError() != null) {
Toasty.error(InstancePickerActivity.this, apiResponse.getError().getError(), Toast.LENGTH_LONG).show();
return;
@ -272,10 +262,10 @@ public class InstancePickerActivity extends BaseActivity {
List<InstanceData.Instance> instances = apiResponse.getInstances();
RecyclerView lv_instances = findViewById(R.id.lv_instances);
if ((instances == null || instances.size() == 0)) {
textviewNoAction.setVisibility(View.VISIBLE);
binding.noAction.setVisibility(View.VISIBLE);
lv_instances.setVisibility(View.GONE);
} else {
textviewNoAction.setVisibility(View.GONE);
binding.noAction.setVisibility(View.GONE);
lv_instances.setVisibility(View.VISIBLE);
InstanceAdapter instanceAdapter = new InstanceAdapter(instances);
lv_instances.setAdapter(instanceAdapter);

View File

@ -346,6 +346,11 @@ public class MainActivity extends BaseMainActivity {
if (search_cast == 1) {
super.discoverCast();
}
//Instance
if(HelperInstance.getLiveInstance(MainActivity.this) == null) {
Intent intent = new Intent(MainActivity.this, InstancePickerActivity.class);
startActivityForResult(intent, PICK_INSTANCE);
}
}
public DisplayVideosFragment getSubscriptionFragment() {

View File

@ -38,6 +38,8 @@ import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
@ -843,16 +845,48 @@ public class RetrofitPeertubeAPI {
if (response.isSuccessful()) {
peertubeInformation.setCategories(response.body());
} else {
Error error = new Error();
error.setStatusCode(response.code());
if (response.errorBody() != null) {
error.setError(response.errorBody().string());
} else {
error.setError(_context.getString(R.string.toast_error));
String categoriesStr = Helper.readFileFromAssets(_context, "categories.json");
try {
JSONObject obj = new JSONObject(categoriesStr);
Iterator<String> iter = obj.keys();
LinkedHashMap<Integer, String> data = new LinkedHashMap<>();
while (iter.hasNext()) {
String key = iter.next();
try {
String value = (String) obj.get(key);
data.put(Integer.valueOf(key), value);
} catch (JSONException ignored) {}
}
peertubeInformation.setCategories(data);
} catch (JSONException e) {
e.printStackTrace();
Error error = new Error();
error.setStatusCode(response.code());
if (response.errorBody() != null) {
error.setError(response.errorBody().string());
} else {
error.setError(_context.getString(R.string.toast_error));
}
}
}
} catch (IOException e) {
e.printStackTrace();
String categoriesStr = Helper.readFileFromAssets(_context, "categories.json");
try {
JSONObject obj = new JSONObject(categoriesStr);
Iterator<String> iter = obj.keys();
LinkedHashMap<Integer, String> data = new LinkedHashMap<>();
while (iter.hasNext()) {
String key = iter.next();
try {
String value = (String) obj.get(key);
data.put(Integer.valueOf(key), value);
} catch (JSONException ignored) {}
}
peertubeInformation.setCategories(data);
} catch (JSONException e2) {
e2.printStackTrace();
}
}
Call<Map<String, String>> languages = peertubeService.getLanguages();
try {
@ -860,16 +894,46 @@ public class RetrofitPeertubeAPI {
if (response.isSuccessful()) {
peertubeInformation.setLanguages(response.body());
} else {
Error error = new Error();
error.setStatusCode(response.code());
if (response.errorBody() != null) {
error.setError(response.errorBody().string());
} else {
error.setError(_context.getString(R.string.toast_error));
String languageSrt = Helper.readFileFromAssets(_context, "languages.json");
try {
JSONObject obj = new JSONObject(languageSrt);
Iterator<String> iter = obj.keys();
LinkedHashMap<String, String> data = new LinkedHashMap<>();
while (iter.hasNext()) {
String key = iter.next();
try {
String value = (String) obj.get(key);
data.put(key, value);
} catch (JSONException ignored) {}
}
peertubeInformation.setLanguages(data);
} catch (JSONException e) {
Error error = new Error();
error.setStatusCode(response.code());
if (response.errorBody() != null) {
error.setError(response.errorBody().string());
} else {
error.setError(_context.getString(R.string.toast_error));
}
}
}
} catch (IOException e) {
e.printStackTrace();
String languageSrt = Helper.readFileFromAssets(_context, "languages.json");
try {
JSONObject obj = new JSONObject(languageSrt);
Iterator<String> iter = obj.keys();
LinkedHashMap<String, String> data = new LinkedHashMap<>();
while (iter.hasNext()) {
String key = iter.next();
try {
String value = (String) obj.get(key);
data.put(key, value);
} catch (JSONException ignored) {}
}
peertubeInformation.setLanguages(data);
} catch (JSONException e2) {
}
}
Call<Map<Integer, String>> privacies = peertubeService.getPrivacies();
try {

View File

@ -57,7 +57,12 @@ import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.nio.charset.StandardCharsets;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
@ -807,4 +812,20 @@ public class Helper {
}
public static String readFileFromAssets(Context context, String filename) {
String json;
try {
InputStream is = context.getAssets().open(filename);
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
json = new String(buffer, StandardCharsets.UTF_8);
} catch (IOException ex) {
ex.printStackTrace();
return null;
}
return json;
}
}

View File

@ -36,53 +36,10 @@ public class HelperInstance {
public static String getLiveInstance(Context context) {
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
if (BuildConfig.FLAVOR.compareTo("fdroid_full") == 0 || BuildConfig.FLAVOR.compareTo("google_full") == 0) {
return sharedpreferences.getString(Helper.PREF_INSTANCE, getDefaultInstance());
return sharedpreferences.getString(Helper.PREF_INSTANCE, null);
} else {
return sharedpreferences.getString(Helper.PREF_INSTANCE, "tube-institutionnel.apps.education.fr");
}
}
/**
* Get a default instance host name depending of the device locale
*
* @return peertube host String
*/
private static String getDefaultInstance() {
String lang = Locale.getDefault().getLanguage();
if (lang.contains("-")) {
if (!lang.split("-")[0].trim().toLowerCase().startsWith("zh")) {
lang = lang.split("-")[0];
if (lang.split("-")[1].toLowerCase().contains("be")) {
lang = "be";
} else if (lang.split("-")[1].toLowerCase().contains("gb")) {
lang = "gb";
}
} else {
lang = lang.split("-")[0] + "-" + lang.split("-")[1].toUpperCase();
}
}
switch (lang) {
case "it":
return "peertube.uno";
case "be":
return "peertube.be";
case "fr":
return "video.liberta.vip";
case "de":
return "peertube.social";
case "ru":
return "peertube.su";
case "gb":
return "peertube.co.uk";
case "da":
case "sv":
case "nb":
case "fi":
case "is":
return "peertube.dk";
default:
return "peertube.social";
}
}
}

View File

@ -127,7 +127,7 @@ public class RetrieveInfoService extends Service implements NetworkStateReceiver
@Override
public void run() {
EmojiHelper.fillMapEmoji(getApplicationContext());
if (peertubeInformation == null || peertubeInformation.getCategories().size() == 0) {
if (peertubeInformation == null || peertubeInformation.getCategories() == null || peertubeInformation.getCategories().size() == 0) {
peertubeInformation = new PeertubeInformation();
peertubeInformation.setCategories(new LinkedHashMap<>());
peertubeInformation.setLanguages(new LinkedHashMap<>());