mirror of
https://framagit.org/tom79/nitterizeme
synced 2025-02-07 15:28:42 +01:00
Add instance with information about latency
This commit is contained in:
parent
f9b8799461
commit
31db8c2a31
@ -426,7 +426,7 @@
|
||||
<activity
|
||||
android:name="app.fedilab.nitterizeme.InstanceActivity"
|
||||
android:excludeFromRecents="true"
|
||||
android:theme="@style/Base.V7.Theme.AppCompat.Dialog" />
|
||||
android:theme="@style/AppThemeDilaog" />
|
||||
<activity
|
||||
android:name=".AboutActivity"
|
||||
android:configChanges="orientation|screenSize"
|
||||
|
@ -13,7 +13,7 @@ package app.fedilab.nitterizeme;
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with NitterizeMe; if not,
|
||||
* see <http://www.gnu.org/licenses>. */
|
||||
public class Instance {
|
||||
class Instance {
|
||||
|
||||
enum instanceType{
|
||||
INVIDIOUS,
|
||||
@ -22,38 +22,38 @@ public class Instance {
|
||||
}
|
||||
private String domain;
|
||||
private long latency = -1;
|
||||
private boolean checked;
|
||||
private boolean checked = false;
|
||||
private instanceType type;
|
||||
|
||||
public String getDomain() {
|
||||
String getDomain() {
|
||||
return domain;
|
||||
}
|
||||
|
||||
public void setDomain(String domain) {
|
||||
void setDomain(String domain) {
|
||||
this.domain = domain;
|
||||
}
|
||||
|
||||
public long getLatency() {
|
||||
long getLatency() {
|
||||
return latency;
|
||||
}
|
||||
|
||||
public void setLatency(long latency) {
|
||||
void setLatency(long latency) {
|
||||
this.latency = latency;
|
||||
}
|
||||
|
||||
public boolean isChecked() {
|
||||
boolean isChecked() {
|
||||
return checked;
|
||||
}
|
||||
|
||||
public void setChecked(boolean checked) {
|
||||
void setChecked(boolean checked) {
|
||||
this.checked = checked;
|
||||
}
|
||||
|
||||
public instanceType getType() {
|
||||
instanceType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(instanceType type) {
|
||||
void setType(instanceType type) {
|
||||
this.type = type;
|
||||
}
|
||||
}
|
||||
|
@ -15,6 +15,8 @@ package app.fedilab.nitterizeme;
|
||||
* see <http://www.gnu.org/licenses>. */
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
@ -39,6 +41,14 @@ import java.util.List;
|
||||
|
||||
import javax.net.ssl.HttpsURLConnection;
|
||||
|
||||
import static app.fedilab.nitterizeme.MainActivity.APP_PREFS;
|
||||
import static app.fedilab.nitterizeme.MainActivity.DEFAULT_BIBLIOGRAM_HOST;
|
||||
import static app.fedilab.nitterizeme.MainActivity.DEFAULT_INVIDIOUS_HOST;
|
||||
import static app.fedilab.nitterizeme.MainActivity.DEFAULT_NITTER_HOST;
|
||||
import static app.fedilab.nitterizeme.MainActivity.SET_BIBLIOGRAM_HOST;
|
||||
import static app.fedilab.nitterizeme.MainActivity.SET_INVIDIOUS_HOST;
|
||||
import static app.fedilab.nitterizeme.MainActivity.SET_NITTER_HOST;
|
||||
|
||||
|
||||
public class InstanceActivity extends AppCompatActivity {
|
||||
|
||||
@ -101,24 +111,38 @@ public class InstanceActivity extends AppCompatActivity {
|
||||
JSONArray jsonArrayNitter = jsonObject.getJSONArray("nitter");
|
||||
JSONArray jsonArrayBibliogram = jsonObject.getJSONArray("bibliogram");
|
||||
|
||||
SharedPreferences sharedpreferences = activity.getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE);
|
||||
String defaultInvidious = sharedpreferences.getString(SET_INVIDIOUS_HOST, DEFAULT_INVIDIOUS_HOST);
|
||||
String defaultNitter = sharedpreferences.getString(SET_NITTER_HOST, DEFAULT_NITTER_HOST);
|
||||
String defaultBibliogram = sharedpreferences.getString(SET_BIBLIOGRAM_HOST, DEFAULT_BIBLIOGRAM_HOST);
|
||||
|
||||
List<Instance> invidiousInstances = new ArrayList<>();
|
||||
for(int i = 0; i < jsonArrayInvidious.length(); i++){
|
||||
Instance instance = new Instance();
|
||||
instance.setDomain(jsonArrayInvidious.getString(i));
|
||||
if( instance.getDomain().compareTo(defaultInvidious) == 0 ){
|
||||
instance.setChecked(true);
|
||||
}
|
||||
instance.setType(Instance.instanceType.INVIDIOUS);
|
||||
invidiousInstances.add(instance);
|
||||
}
|
||||
List<Instance> nitterInstances = new ArrayList<>();
|
||||
for(int i = 0; i < jsonArrayNitter.length(); i++){
|
||||
Instance instance = new Instance();
|
||||
instance.setDomain(jsonArrayInvidious.getString(i));
|
||||
instance.setDomain(jsonArrayNitter.getString(i));
|
||||
if( instance.getDomain().compareTo(defaultNitter) == 0 ){
|
||||
instance.setChecked(true);
|
||||
}
|
||||
instance.setType(Instance.instanceType.NITTER);
|
||||
nitterInstances.add(instance);
|
||||
}
|
||||
List<Instance> bibliogramInstances = new ArrayList<>();
|
||||
for(int i = 0; i < jsonArrayBibliogram.length(); i++){
|
||||
Instance instance = new Instance();
|
||||
instance.setDomain(jsonArrayInvidious.getString(i));
|
||||
instance.setDomain(jsonArrayBibliogram.getString(i));
|
||||
if( instance.getDomain().compareTo(defaultBibliogram) == 0 ){
|
||||
instance.setChecked(true);
|
||||
}
|
||||
instance.setType(Instance.instanceType.BIBLIOGRAM);
|
||||
bibliogramInstances.add(instance);
|
||||
}
|
||||
@ -138,7 +162,13 @@ public class InstanceActivity extends AppCompatActivity {
|
||||
bibliogram_instances.setAdapter(bibliogramAdapter);
|
||||
bibliogram_instances.setLayoutManager(bLayoutManager);
|
||||
|
||||
latency_test.setOnClickListener(v-> invidiousAdapter.evalLatency());
|
||||
latency_test.setOnClickListener(
|
||||
v-> {
|
||||
invidiousAdapter.evalLatency();
|
||||
nitterAdapter.evalLatency();
|
||||
bibliogramAdapter.evalLatency();
|
||||
}
|
||||
);
|
||||
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
|
@ -23,19 +23,15 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import static app.fedilab.nitterizeme.MainActivity.APP_PREFS;
|
||||
import static app.fedilab.nitterizeme.MainActivity.DEFAULT_BIBLIOGRAM_HOST;
|
||||
import static app.fedilab.nitterizeme.MainActivity.DEFAULT_INVIDIOUS_HOST;
|
||||
import static app.fedilab.nitterizeme.MainActivity.DEFAULT_NITTER_HOST;
|
||||
import static app.fedilab.nitterizeme.MainActivity.SET_BIBLIOGRAM_HOST;
|
||||
import static app.fedilab.nitterizeme.MainActivity.SET_INVIDIOUS_HOST;
|
||||
import static app.fedilab.nitterizeme.MainActivity.SET_NITTER_HOST;
|
||||
@ -43,12 +39,20 @@ import static app.fedilab.nitterizeme.MainActivity.SET_NITTER_HOST;
|
||||
public class InstanceAdapter extends RecyclerView.Adapter {
|
||||
|
||||
private List<Instance> instances;
|
||||
private InstanceAdapter instanceAdapter;
|
||||
|
||||
InstanceAdapter(List<Instance> instances) {
|
||||
this.instances = instances;
|
||||
this.instanceAdapter = this;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
|
||||
super.onAttachedToRecyclerView(recyclerView);
|
||||
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int position) {
|
||||
@ -66,46 +70,34 @@ public class InstanceAdapter extends RecyclerView.Adapter {
|
||||
SharedPreferences sharedpreferences = context.getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE);
|
||||
//Reset checked instances by type when tipping
|
||||
|
||||
String defaultInvidious = sharedpreferences.getString(SET_INVIDIOUS_HOST, DEFAULT_INVIDIOUS_HOST);
|
||||
String defaultNitter = sharedpreferences.getString(SET_NITTER_HOST, DEFAULT_NITTER_HOST);
|
||||
String defaultBibliogram = sharedpreferences.getString(SET_BIBLIOGRAM_HOST, DEFAULT_BIBLIOGRAM_HOST);
|
||||
|
||||
|
||||
holder.checkbox_instance.setText(instance.getDomain());
|
||||
if (instance.getLatency() == -1){
|
||||
holder.latency.setVisibility(View.GONE);
|
||||
holder.progress.setVisibility(View.GONE);
|
||||
}else if(instance.getLatency() == 0 ){
|
||||
holder.latency.setVisibility(View.GONE);
|
||||
holder.progress.setVisibility(View.VISIBLE);
|
||||
}else if(instance.getLatency() == -2 ){
|
||||
holder.latency.setText(R.string.error);
|
||||
holder.latency.setVisibility(View.GONE);
|
||||
holder.progress.setVisibility(View.VISIBLE);
|
||||
}else{
|
||||
holder.latency.setText(String.format(Locale.getDefault(),"%d ms", instance.getLatency()));
|
||||
holder.latency.setVisibility(View.VISIBLE);
|
||||
holder.progress.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
switch (instance.getType()){
|
||||
case INVIDIOUS:
|
||||
if( instance.getDomain().compareTo(defaultInvidious) == 0 ){
|
||||
holder.checkbox_instance.setChecked(true);
|
||||
}
|
||||
break;
|
||||
case NITTER:
|
||||
if( instance.getDomain().compareTo(defaultNitter) == 0 ){
|
||||
holder.checkbox_instance.setChecked(true);
|
||||
}
|
||||
break;
|
||||
case BIBLIOGRAM:
|
||||
if( instance.getDomain().compareTo(defaultBibliogram) == 0 ){
|
||||
holder.checkbox_instance.setChecked(true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
holder.checkbox_instance.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
||||
holder.checkbox_instance.setChecked(instance.isChecked());
|
||||
|
||||
holder.checkbox_instance.setOnClickListener(v->{
|
||||
|
||||
boolean isChecked = !instance.isChecked();
|
||||
for(Instance _ins: instances){
|
||||
if(instance.getType() == _ins.getType() && instance.getDomain().compareTo(_ins.getDomain()) != 0 ){
|
||||
_ins.setChecked(false);
|
||||
}
|
||||
_ins.setChecked(false);
|
||||
}
|
||||
instance.setChecked(true);
|
||||
SharedPreferences.Editor editor = sharedpreferences.edit();
|
||||
switch (instance.getType()){
|
||||
case INVIDIOUS:
|
||||
@ -133,8 +125,10 @@ public class InstanceAdapter extends RecyclerView.Adapter {
|
||||
editor.apply();
|
||||
break;
|
||||
}
|
||||
instanceAdapter.notifyItemRangeChanged(0, instances.size());
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
void evalLatency(){
|
||||
@ -146,11 +140,7 @@ public class InstanceAdapter extends RecyclerView.Adapter {
|
||||
long ping = Utils.ping(instance.getDomain());
|
||||
Handler mainHandler = new Handler(Looper.getMainLooper());
|
||||
Runnable myRunnable = () -> {
|
||||
if( ping > 0 ) {
|
||||
instance.setLatency(ping);
|
||||
}else{
|
||||
instance.setLatency(R.string.error);
|
||||
}
|
||||
instance.setLatency(ping);
|
||||
notifyDataSetChanged();
|
||||
};
|
||||
mainHandler.post(myRunnable);
|
||||
|
@ -334,5 +334,22 @@ public class MainActivity extends AppCompatActivity {
|
||||
appInfoAdapter = new AppInfoAdapter(appInfos);
|
||||
list_apps.setAdapter(appInfoAdapter);
|
||||
}
|
||||
TextInputEditText nitter_instance = findViewById(R.id.nitter_instance);
|
||||
TextInputEditText invidious_instance = findViewById(R.id.invidious_instance);
|
||||
TextInputEditText bibliogram_instance = findViewById(R.id.bibliogram_instance);
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE);
|
||||
String nitterHost = sharedpreferences.getString(SET_NITTER_HOST, null);
|
||||
String invidiousHost = sharedpreferences.getString(SET_INVIDIOUS_HOST, null);
|
||||
String bibliogramHost = sharedpreferences.getString(SET_BIBLIOGRAM_HOST, null);
|
||||
if (nitterHost != null) {
|
||||
nitter_instance.setText(nitterHost);
|
||||
}
|
||||
if (invidiousHost != null) {
|
||||
invidious_instance.setText(invidiousHost);
|
||||
}
|
||||
if (bibliogramHost != null) {
|
||||
bibliogram_instance.setText(bibliogramHost);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -88,7 +88,7 @@ class Utils {
|
||||
* @param domain String domain name
|
||||
* @return long delay
|
||||
*/
|
||||
public static long ping(String domain){
|
||||
static long ping(String domain){
|
||||
long timeDifference = -2;
|
||||
try {
|
||||
long beforeTime = System.currentTimeMillis();
|
||||
|
@ -3,19 +3,18 @@
|
||||
android:id="@+id/main_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/fab_margin"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_marginEnd="@dimen/fab_margin"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkbox_instance"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:singleLine="true"
|
||||
android:layout_weight="1"/>
|
||||
<TextView
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/latency"
|
||||
android:gravity="end"/>
|
||||
<ProgressBar
|
||||
|
@ -8,6 +8,14 @@
|
||||
<item name="colorAccent">@color/colorAccent</item>
|
||||
</style>
|
||||
|
||||
<!-- Base application theme. -->
|
||||
<style name="AppThemeDilaog" parent="Theme.AppCompat.Dialog">
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="colorPrimary">@color/colorPrimary</item>
|
||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||
<item name="colorAccent">@color/colorAccent</item>
|
||||
</style>
|
||||
|
||||
<style name="AppTheme.NoActionBar">
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="windowNoTitle">true</item>
|
||||
|
Loading…
x
Reference in New Issue
Block a user