From 8ed008221c5724dbf4ace94b4b0a55758cfff57d Mon Sep 17 00:00:00 2001 From: stom79 Date: Sat, 25 Nov 2017 11:01:34 +0100 Subject: [PATCH] adds health checker --- app/src/main/AndroidManifest.xml | 2 +- .../mastodon/activities/BaseMainActivity.java | 10 +- .../mastodon/activities/InstanceActivity.java | 8 -- .../activities/InstanceHealthActivity.java | 61 ++++++--- .../activities/ShowAccountActivity.java | 7 +- .../mastodon/drawers/AccountsListAdapter.java | 8 +- .../gouv/etalab/mastodon/helper/Helper.java | 19 +++ .../res/drawable-anydpi/ic_info_outline.xml | 9 ++ .../res/drawable-hdpi/ic_network_check.png | Bin 403 -> 0 bytes .../res/drawable-ldpi/ic_network_check.png | Bin 348 -> 0 bytes .../res/drawable-mdpi/ic_network_check.png | Bin 287 -> 0 bytes .../res/drawable-xhdpi/ic_network_check.png | Bin 530 -> 0 bytes .../res/drawable-xxhdpi/ic_network_check.png | Bin 795 -> 0 bytes .../res/drawable-xxxhdpi/ic_network_check.png | Bin 1001 -> 0 bytes app/src/main/res/layout/activity_instance.xml | 8 -- .../res/layout/activity_instance_social.xml | 124 ++++++++---------- app/src/main/res/layout/nav_header_main.xml | 7 + app/src/main/res/values-de/strings.xml | 6 +- app/src/main/res/values-fr/strings.xml | 6 +- app/src/main/res/values-nl/strings.xml | 6 +- app/src/main/res/values-pt/strings.xml | 6 +- app/src/main/res/values/colors.xml | 4 + app/src/main/res/values/strings.xml | 6 +- app/src/main/res/values/styles.xml | 5 +- 24 files changed, 174 insertions(+), 128 deletions(-) create mode 100644 app/src/main/res/drawable-anydpi/ic_info_outline.xml delete mode 100644 app/src/main/res/drawable-hdpi/ic_network_check.png delete mode 100644 app/src/main/res/drawable-ldpi/ic_network_check.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_network_check.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_network_check.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_network_check.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_network_check.png diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0193cb596..55b27fbb0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -173,7 +173,7 @@ android:label="@string/app_name" /> \ No newline at end of file diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java index c79078fa8..42d523a30 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java @@ -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()) { diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/InstanceActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/InstanceActivity.java index b4f0d4c25..ff783a4e1 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/InstanceActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/InstanceActivity.java @@ -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); - } - }); } } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/InstanceHealthActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/InstanceHealthActivity.java index b8c95af0f..196b75bb9 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/InstanceHealthActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/InstanceHealthActivity.java @@ -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()))); } }); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowAccountActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowAccountActivity.java index 9a958a964..392b74326 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowAccountActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowAccountActivity.java @@ -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); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountsListAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountsListAdapter.java index c90207606..c0e00aac2 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountsListAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountsListAdapter.java @@ -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); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java index f7e980f70..5dbfa4397 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java @@ -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)); + } + } diff --git a/app/src/main/res/drawable-anydpi/ic_info_outline.xml b/app/src/main/res/drawable-anydpi/ic_info_outline.xml new file mode 100644 index 000000000..9567ecd77 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_info_outline.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-hdpi/ic_network_check.png b/app/src/main/res/drawable-hdpi/ic_network_check.png deleted file mode 100644 index f31dfd32951c6cbd19acd61cb624d7b4e654cd03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 403 zcmV;E0c`$>P)SIsV7s~_!+f=)m=R$WKW7X(BsZo!D)}LD7=fpmmOKMHc8EQBb++V71&3P?IG0u#! z&Lo2m(a*G$B3dReo=rt6Oq;J=X-`(Ha+4Azq*hS>yC`;u=x?VpskC7yBi(6N+2n*4 xSJJh!3$(AagfrTNA!QhGdSQE5An+HTsxNmua2jbk7)Ag9002ovPDHLkV1g)PtxNy_ diff --git a/app/src/main/res/drawable-ldpi/ic_network_check.png b/app/src/main/res/drawable-ldpi/ic_network_check.png deleted file mode 100644 index f894f1aff2f6bf77166dab5d3487f537eca6c431..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 348 zcmV-i0i*tjP)12i-VJpI5@eww}nTN zL$3En-1T|lio^p2U->5zKGQTq5C%W7NAgl%TaG!3 zDQj6)5w76|3Xmk9p&k+6UlWNlijVLPD|o{=L!Y4xJ-Ekr{?lOFcAUfrJ~0lY8O`gu zeu6fMt7rrLfU)?c>6qjT)G?l-C5pFb1${*yoO~VH;{UxE{hSbI9Ho+KQOklc_J3^m0C;7F>xx7^nMYry<>-q*A8xwf8u7E!P0000x>3{nFN&lDsU-rN4zu13nOaVM6D`~N@wJA=j6{TBi$;s1Xd$ocbs+J8m3wyys-{)_&f3Kabhl;sBrHT-}2-vTVj z3A7~bzvTb-|5t$d=Kr7kZ-D6(0Ak+%J^w!gb)Ns92PDgZig_S12zT)VEdYTR|HJ;@ z1=3#szx}@nwg|<44ga705Bkpp#2}#g|2f1o6)NzDX17gBJf{VbMr4asv6xc*UN)EU!ng}ToXFUs%a#t%|l-ME&bQ7~o zf>s4?bWt*{)Y^zdgP;s(kKa9=xpVG#XB_A5#P=@lIp6o4hx7B^bL;9Zb-~0HV%%m( zo&h=upC8alk|loO)FwVgxKSO#&jUX54>yg|LY`Mrv&=nwl`!}DK{@>)%(T46=urK2 z;_i^EWLyD90jreo%=*pmta(Qz~QC@-|UHJWq%g+el!s^ z9YlX6H^o?WoZvHML`y#<`%$v7YP|he4=Nh5Ng2`72gzrZIi8$_>2W~z#d4$Ch?Y_` z+n-P0S*XGZZt;kaiX?6D9d5duR7KR=!lj{&_+JtE-WICFl%9n)qNU$Da;vt>ZN&y< zyxfsp#@0`J0lhas!?k1l92%f@FQ5a%m_9E{o3lZ)-hN1pyb)jTGE4CC_k8hm0#r$O Ut}KVpjsO4v07*qoM6N<$g1u(9h26z;UNq87uHkTK(@NmV3L3l@T)Wx*g4nl4nUG?8dCjaY~_`c{&PNF>rmLn6UO zR0J)8jYTa;XzHg(5RtZiquLUNe$Km|>)m(nn|W{at-Nm*bME=M-@WgibMAW?89sdY z@Zl+th54w$VO+vJyvApIqu&5t;SSnx0AogrW)imJJU+o5?c^22IqduwnoPuKCkdoN zG5PMJ{~i|Aj8zD@BN~excm^lvBJXVUlGH|0i0K|+3$mP2ZNyVJ#WwPfx#qGzr_u-q7gNyrpH_h4W$%QY*@o2pRq&? zpj=IqgOfHSgE&jem}#@X_TLL(@%hV&e>oj!mt7GNpnuww4xF`1I*CZ5@vY9gJk7ezL?x&}vZ z7hjDDDoI!QHwBb2MXa-EcI&P~zCv4oqxdL1mOf;YzKf5WZRVSWIyYT1iqrTh9e2IZ znt*B=mr|XE)9?EM%F-c4A`c@()((?qA&n2R@~?5(^9`z?(Hms6kaez6%sLVnN1E%# z=rV$CsUp<3)fhnm*;`GTZWi&5j~^lGjx4UANl&g-wx<@ClsOm}hz7Wv=gK79P= Z_yzJBGiAx(4=Vrw002ovPDHLkV1mlEg604K diff --git a/app/src/main/res/drawable-xxxhdpi/ic_network_check.png b/app/src/main/res/drawable-xxxhdpi/ic_network_check.png deleted file mode 100644 index 14e499dc1b598018f6458e11f47422d845fa0dc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1001 zcmVT0L~dV?kh)6$J(* zUFant#8S|xh?Fu+G7PdpPo|mvo1L>A_cAlP=eW8-`}e_}*_m&Cvpe&B-_8jNa^%R7 zBS(%L{TsqWBq9y_a1>{85tqr|1)N49vXP1egpL))IIKiIZlM)J5a~0*MjIs(J8%>o@V z9w2bh!B8!i@@T0{*Xlmv%;M~a$B*HE;|p;DEojCEe5JDwCN|=IZeb0zS?a@ZGx%vf4SUp2$M-E7~LF8)rb<|B#~K))k(baMnoD;>#vh| zN6QNY7Td6#zl=S?S5t)z=A0ak_Z`w8OfzJ zqeuFQgBTY;+*8DSX1;Kk@$y_OQ);AUBnA|4sueaKaoQ{;-pU9^gLF^w9|l7QVEaBivQmDnnCSPHS`I(rrw)E~D-=2)RkLU8ANpM-}%$UiVrnaQ4t_ zSfs}~hv-!@t*=w1ExSjGQ(z)HO4T_;Zww5ln_HVf6pReWB>;JW5|WTaGaRC%*R(#t zRFD`kk_YFoSk=m{Yjcg(r(2A}KpG%0Gq@Szu=44h6PDv>kY0Lsl!ju z?Q@FkMV)OQ&?Lq)st@SU*D|Denq&0_%(VMgA?bUz0X^tOE%`zT33BAfkt0Wr{&W2S X|DOZDaz}q<00000NkvXXu0mjfQyI*R diff --git a/app/src/main/res/layout/activity_instance.xml b/app/src/main/res/layout/activity_instance.xml index d16061079..d04fb5a9a 100644 --- a/app/src/main/res/layout/activity_instance.xml +++ b/app/src/main/res/layout/activity_instance.xml @@ -77,14 +77,6 @@ android:layout_height="wrap_content" /> - + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="300dp"> - - - - - + + - - - + /> - - - - + /> + + +