adds health checker

This commit is contained in:
stom79 2017-11-25 11:01:34 +01:00
parent 8f31196425
commit 8ed008221c
24 changed files with 174 additions and 128 deletions

View File

@ -173,7 +173,7 @@
android:label="@string/app_name"
/>
<activity android:name=".activities.InstanceHealthActivity"
android:theme="@style/Base.AlertDialog.AppCompat"
android:theme="@style/Base.V7.Theme.AppCompat.Dialog"
android:excludeFromRecents="true"/>
</application>
</manifest>

View File

@ -749,8 +749,14 @@ public abstract class BaseMainActivity extends AppCompatActivity
popup.show();
}
});
final ImageView optionInfo = headerLayout.findViewById(R.id.header_option_info);
optionInfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(), InstanceHealthActivity.class);
startActivity(intent);
}
});
updateHeaderAccountInfo(BaseMainActivity.this, account, headerLayout, imageLoader, options);
//Locked account can see follow request
if (account.isLocked()) {

View File

@ -103,7 +103,6 @@ public class InstanceActivity extends AppCompatActivity implements OnRetrieveIns
TextView instance_version = findViewById(R.id.instance_version);
TextView instance_uri = findViewById(R.id.instance_uri);
FloatingActionButton instance_contact = findViewById(R.id.instance_contact);
FloatingActionButton instance_health = findViewById(R.id.instance_health);
instance_title.setText(instance.getTitle());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
@ -127,12 +126,5 @@ public class InstanceActivity extends AppCompatActivity implements OnRetrieveIns
startActivity(Intent.createChooser(emailIntent, getString(R.string.send_email)));
}
});
instance_health.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), InstanceHealthActivity.class);
startActivity(intent);
}
});
}
}

View File

@ -17,8 +17,7 @@ package fr.gouv.etalab.mastodon.activities;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
@ -27,13 +26,19 @@ import android.graphics.LightingColorFilter;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.text.SpannableString;
import android.text.style.UnderlineSpan;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
@ -57,6 +62,8 @@ import fr.gouv.etalab.mastodon.client.HttpsConnection;
import fr.gouv.etalab.mastodon.client.PatchBaseImageDownloader;
import fr.gouv.etalab.mastodon.helper.Helper;
import static fr.gouv.etalab.mastodon.helper.Helper.withSuffix;
/**
* Created by Thomas on 24/11/2017.
@ -76,26 +83,44 @@ public class InstanceHealthActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
if( theme == Helper.THEME_LIGHT){
setTheme(R.style.AppTheme);
}else {
setTheme(R.style.AppThemeDark);
}
setTheme(R.style.AppThemeDark_NoActionBar);
setContentView(R.layout.activity_instance_social);
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
Bundle b = getIntent().getExtras();
if( getSupportActionBar() != null)
getSupportActionBar().hide();
instance = Helper.getLiveInstance(getApplicationContext());
if(b != null)
instance = b.getString("instance", Helper.getLiveInstance(getApplicationContext()));
Button close = findViewById(R.id.close);
name = findViewById(R.id.name);
values = findViewById(R.id.values);
checked_at = findViewById(R.id.checked_at);
up = findViewById(R.id.up);
uptime = findViewById(R.id.uptime);
container = findViewById(R.id.container);
close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
TextView ref_instance = findViewById(R.id.ref_instance);
SpannableString content = new SpannableString(ref_instance.getText().toString());
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
ref_instance.setText(content);
ref_instance.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://instances.social"));
startActivity(browserIntent);
}
});
option = new DisplayImageOptions.Builder().displayer(new SimpleBitmapDisplayer()).cacheInMemory(false)
.cacheOnDisk(true).resetViewBeforeLoading(true).build();
imageLoader = ImageLoader.getInstance();
@ -137,7 +162,7 @@ public class InstanceHealthActivity extends AppCompatActivity {
if( response != null)
instanceSocial = API.parseInstanceSocialResponse(getApplicationContext(), new JSONObject(response));
runOnUiThread(new Runnable() {
@SuppressLint("SetTextI18n")
@SuppressLint({"SetTextI18n", "DefaultLocale"})
public void run() {
if( instanceSocial.getThumbnail() != null && !instanceSocial.getThumbnail().equals("null"))
imageLoader.loadImage(instanceSocial.getThumbnail(), option, new SimpleImageLoadingListener() {
@ -161,10 +186,16 @@ public class InstanceHealthActivity extends AppCompatActivity {
}
});
name.setText(instanceSocial.getName());
up.setText(Boolean.toString(instanceSocial.isUp()));
uptime.setText(Float.toString(instanceSocial.getUptime()));
checked_at.setText(Helper.dateToString(getApplicationContext(), instanceSocial.getUpdated_at()));
values.setText(String.format("version: %s - %s users - %s statuses", instanceSocial.getVersion(), Long.toString(instanceSocial.getUsers()), Long.toString(instanceSocial.getStatuses())));
if( instanceSocial.isUp()) {
up.setText("Is up!");
up.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.green));
}else {
up.setText("Is down!");
up.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.red));
}
uptime.setText(String.format("Uptime: %.2f %%", (instanceSocial.getUptime()*100)));
checked_at.setText(String.format("Checked at: %s", Helper.dateToString(getApplicationContext(), instanceSocial.getUpdated_at())));
values.setText(String.format("version: %s \n %s users - %s statuses", instanceSocial.getVersion(), withSuffix(instanceSocial.getUsers()), withSuffix(instanceSocial.getStatuses())));
}
});

View File

@ -94,6 +94,7 @@ import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveRelationshipInterface;
import fr.gouv.etalab.mastodon.client.Entities.Relationship;
import static fr.gouv.etalab.mastodon.helper.Helper.changeDrawableColor;
import static fr.gouv.etalab.mastodon.helper.Helper.withSuffix;
/**
@ -562,11 +563,11 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi
account_note.setMovementMethod(LinkMovementMethod.getInstance());
if (tabLayout.getTabAt(0) != null && tabLayout.getTabAt(1) != null && tabLayout.getTabAt(2) != null) {
//noinspection ConstantConditions
tabLayout.getTabAt(0).setText(getString(R.string.status_cnt, account.getStatuses_count()));
tabLayout.getTabAt(0).setText(getString(R.string.status_cnt, withSuffix(account.getStatuses_count())));
//noinspection ConstantConditions
tabLayout.getTabAt(1).setText(getString(R.string.following_cnt, account.getFollowing_count()));
tabLayout.getTabAt(1).setText(getString(R.string.following_cnt, withSuffix(account.getFollowing_count())));
//noinspection ConstantConditions
tabLayout.getTabAt(2).setText(getString(R.string.followers_cnt, account.getFollowers_count()));
tabLayout.getTabAt(2).setText(getString(R.string.followers_cnt, withSuffix(account.getFollowers_count())));
//Allows to filter by long click
final LinearLayout tabStrip = (LinearLayout) tabLayout.getChildAt(0);

View File

@ -51,6 +51,8 @@ import fr.gouv.etalab.mastodon.interfaces.OnPostActionInterface;
import fr.gouv.etalab.mastodon.activities.ShowAccountActivity;
import fr.gouv.etalab.mastodon.asynctasks.PostActionAsyncTask;
import static fr.gouv.etalab.mastodon.helper.Helper.withSuffix;
/**
* Created by Thomas on 27/04/2017.
@ -160,9 +162,9 @@ public class AccountsListAdapter extends RecyclerView.Adapter implements OnPostA
//noinspection deprecation
holder.account_ds.setText(Html.fromHtml(account.getNote()));
holder.account_ds.setAutoLinkMask(Linkify.WEB_URLS);
holder.account_sc.setText(String.valueOf(account.getStatuses_count()));
holder.account_fgc.setText(String.valueOf(account.getFollowing_count()));
holder.account_frc.setText(String.valueOf(account.getFollowers_count()));
holder.account_sc.setText(withSuffix(account.getStatuses_count()));
holder.account_fgc.setText(withSuffix(account.getFollowing_count()));
holder.account_frc.setText(withSuffix(account.getFollowers_count()));
//Profile picture
imageLoader.displayImage(account.getAvatar(), holder.account_pp, options);

View File

@ -17,6 +17,7 @@
package fr.gouv.etalab.mastodon.helper;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.NotificationChannel;
import android.app.NotificationManager;
@ -1767,4 +1768,22 @@ public class Helper {
return Bitmap.createScaledBitmap(originalPicture, width, height, false);
}
@SuppressLint("DefaultLocale")
public static String withSuffix(long count) {
if (count < 1000) return "" + count;
int exp = (int) (Math.log(count) / Math.log(1000));
Locale locale = null;
try {
locale = Locale.getDefault();
}catch (Exception ignored){}
if(locale != null)
return String.format(locale, "%.1f %c",
count / Math.pow(1000, exp),
"kMGTPE".charAt(exp-1));
else
return String.format( "%.1f %c",
count / Math.pow(1000, exp),
"kMGTPE".charAt(exp-1));
}
}

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M11,17h2v-6h-2v6zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM11,9h2L13,7h-2v2z"/>
</vector>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 403 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 348 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 530 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 795 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1001 B

View File

@ -77,14 +77,6 @@
android:layout_height="wrap_content" />
</LinearLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/instance_health"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
app:srcCompat="@drawable/ic_network_check"
tools:ignore="VectorDrawableCompat" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/instance_contact"
android:layout_width="wrap_content"

View File

@ -6,94 +6,78 @@
tools:context="fr.gouv.etalab.mastodon.activities.InstanceHealthActivity"
android:layout_margin="@dimen/fab_margin"
android:id="@+id/container"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="300dp">
<TextView
android:id="@+id/name"
android:textSize="20sp"
android:textColor="@color/titleb"
android:layout_gravity="center"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/values"
android:textColor="@color/dark_text"
android:layout_marginTop="10dp"
android:layout_gravity="center"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
<TextView
android:textColor="@color/dark_text"
android:layout_marginTop="10dp"
android:id="@+id/checked_at"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:orientation="horizontal">
<TextView
android:layout_gravity="center_vertical"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:gravity="end"
android:text="Checked at"
/>
<TextView
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:id="@+id/checked_at"
android:layout_gravity="center_vertical"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="wrap_content"
/>
</LinearLayout>
<LinearLayout
android:layout_marginTop="5dp"
android:layout_width="match_parent"
/>
<TextView
android:id="@+id/up"
android:layout_marginTop="10dp"
android:textSize="16sp"
android:textStyle="bold"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="end"
android:orientation="horizontal">
<TextView
android:layout_gravity="center_vertical"
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="end"
android:layout_height="wrap_content"
android:text="Is up"
/>
<TextView
android:id="@+id/up"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_gravity="center_vertical"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="wrap_content"
/>
</LinearLayout>
/>
<LinearLayout
android:layout_marginTop="5dp"
android:layout_width="match_parent"
<TextView
android:textColor="@color/dark_text"
android:id="@+id/uptime"
android:layout_marginTop="10dp"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="end"
android:orientation="horizontal">
<TextView
android:layout_gravity="center_vertical"
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="end"
android:layout_height="wrap_content"
android:text="Uptime"
/>
<TextView
android:id="@+id/uptime"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_gravity="center_vertical"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="wrap_content"
/>
</LinearLayout>
/>
<TextView
android:layout_marginTop="10dp"
android:id="@+id/ref_instance"
android:layout_gravity="end|center_vertical"
android:text="via instances.social"
android:layout_marginRight="5dp"
android:layout_marginEnd="5dp"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
tools:ignore="HardcodedText" />
<Button
android:layout_marginTop="20dp"
android:id="@+id/close"
android:textSize="16sp"
android:layout_gravity="center"
android:textAllCaps="false"
android:text="@string/close"
android:textColor="@color/buttonb"
style="@style/Base.Widget.AppCompat.Button.Borderless.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

View File

@ -83,4 +83,11 @@
android:maxLines="1"
android:layout_height="wrap_content"
/>
<ImageView
android:layout_gravity="center_vertical|end"
android:src="@drawable/ic_info_outline"
android:id="@+id/header_option_info"
android:layout_width="20dp"
android:layout_height="20dp"
tools:ignore="ContentDescription" />
</LinearLayout>

View File

@ -207,11 +207,11 @@
<string name="no_accounts">Keinen Nutzer gefunden</string>
<string name="no_follow_request">Keine Folgen-Anfrage</string>
<string name="status_cnt">Toots \n
%d</string>
%1$s</string>
<string name="following_cnt">Following \n
%d</string>
%1$s</string>
<string name="followers_cnt">Followers \n
%d</string>
%1$s</string>
<string name="pins_cnt">Angeheftet\n
%d</string>
<string name="authorize">Authorisieren</string>

View File

@ -203,9 +203,9 @@
<!-- Accounts -->
<string name="no_accounts">Aucun compte à afficher</string>
<string name="no_follow_request">Aucune demande d\'abonnement</string>
<string name="status_cnt">Pouets \n %d</string>
<string name="following_cnt">Abonnements \n %d</string>
<string name="followers_cnt">Abonnés \n %d</string>
<string name="status_cnt">Pouets \n %1$s</string>
<string name="following_cnt">Abonnements \n %1$s</string>
<string name="followers_cnt">Abonnés \n %1$s</string>
<string name="authorize">Autoriser</string>
<string name="reject">Rejeter</string>

View File

@ -201,9 +201,9 @@
<!-- Accounts -->
<string name="no_accounts">Geen account om weer te geven</string>
<string name="no_follow_request">Geen volgverzoeken</string>
<string name="status_cnt">Toots \n %d</string>
<string name="following_cnt">Volgt \n %d</string>
<string name="followers_cnt">Volgers \n %d</string>
<string name="status_cnt">Toots \n %1$s</string>
<string name="following_cnt">Volgt \n %1$s</string>
<string name="followers_cnt">Volgers \n %1$s</string>
<string name="pins_cnt">Vastgezet \n %d</string>
<string name="authorize">Goedkeuren</string>
<string name="reject">Afkeuren</string>

View File

@ -202,9 +202,9 @@
<!-- Accounts -->
<string name="no_accounts">Sem contas para exibir</string>
<string name="no_follow_request">Sem solicitações de seguidor</string>
<string name="status_cnt">Toots \n %d</string>
<string name="following_cnt">Seguindo \n %d</string>
<string name="followers_cnt">Seguidores \n %d</string>
<string name="status_cnt">Toots \n %1$s</string>
<string name="following_cnt">Seguindo \n %1$s</string>
<string name="followers_cnt">Seguidores \n %1$s</string>
<string name="pins_cnt">Fixado \n %d</string>
<string name="authorize">Autorizar</string>
<string name="reject">Rejeitar</string>

View File

@ -29,6 +29,10 @@
<color name="background_image">#282c37</color>
<color name="green_1">#009688</color>
<color name="red_1">#F44336</color>
<color name="green">#B2DFDB</color>
<color name="red">#FFCDD2</color>
<color name="buttonb">#B3E5FC</color>
<color name="titleb">#D7CCC8</color>
<color name="black">#000</color>
<!-- Mastodon color scheme -->

View File

@ -215,9 +215,9 @@
<!-- Accounts -->
<string name="no_accounts">No account to display</string>
<string name="no_follow_request">No follow request</string>
<string name="status_cnt">Toots \n %d</string>
<string name="following_cnt">Following \n %d</string>
<string name="followers_cnt">Followers \n %d</string>
<string name="status_cnt">Toots \n %1$s</string>
<string name="following_cnt">Following \n %1$s</string>
<string name="followers_cnt">Followers \n %1$s</string>
<string name="pins_cnt">Pinned \n %d</string>
<string name="authorize">Authorize</string>
<string name="reject">Reject</string>

View File

@ -36,6 +36,7 @@
<style name="AppTheme_NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:textColor">@color/black</item>
<item name="colorPrimary">@color/mastodonC1</item>
<item name="android:scrollbarThumbVertical">@color/transparent</item>
<item name="colorPrimaryDark">@color/mastodonC2</item>
<item name="colorAccent">@color/mastodonC4</item>
<item name="android:buttonStyle">@style/ButtonColor</item>
@ -102,9 +103,6 @@
</style>
<!-- Dark theme -->
<style name="AppThemeDark" parent="Theme.AppCompat">
<item name="android:textColor">@color/dark_text</item>
@ -130,6 +128,7 @@
<style name="AppThemeDark_NoActionBar" parent="Theme.AppCompat.NoActionBar">
<item name="android:textColor">@color/dark_text</item>
<item name="android:scrollbarThumbVertical">@color/transparent</item>
<item name="colorPrimary">@color/mastodonC1</item>
<item name="colorPrimaryDark">@color/mastodonC2</item>
<item name="colorAccent">@color/mastodonC4</item>