From 5bdaf80a24d4400009afa5c6f9a33b911dd1abad Mon Sep 17 00:00:00 2001 From: tom79 Date: Wed, 14 Aug 2019 17:29:21 +0200 Subject: [PATCH] Display social network on profile + creation date --- .../activities/ShowAccountActivity.java | 30 ++++++++ .../java/app/fedilab/android/client/API.java | 70 +++++++++++++++++++ .../layout-sw600dp/activity_show_account.xml | 33 +++++++++ .../main/res/layout/activity_show_account.xml | 34 +++++++++ 4 files changed, 167 insertions(+) diff --git a/app/src/main/java/app/fedilab/android/activities/ShowAccountActivity.java b/app/src/main/java/app/fedilab/android/activities/ShowAccountActivity.java index 78ea69ff6..bccf30510 100644 --- a/app/src/main/java/app/fedilab/android/activities/ShowAccountActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/ShowAccountActivity.java @@ -64,6 +64,8 @@ import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.target.SimpleTarget; import com.bumptech.glide.request.transition.Transition; +import org.w3c.dom.Text; + import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -79,6 +81,7 @@ import app.fedilab.android.client.APIResponse; import app.fedilab.android.client.Entities.Account; import app.fedilab.android.client.Entities.Attachment; import app.fedilab.android.client.Entities.Error; +import app.fedilab.android.client.Entities.InstanceNodeInfo; import app.fedilab.android.client.Entities.Relationship; import app.fedilab.android.client.Entities.RemoteInstance; import app.fedilab.android.client.Entities.Status; @@ -112,6 +115,7 @@ import static app.fedilab.android.helper.Helper.THEME_BLACK; import static app.fedilab.android.helper.Helper.THEME_DARK; import static app.fedilab.android.helper.Helper.THEME_LIGHT; import static app.fedilab.android.helper.Helper.changeDrawableColor; +import static app.fedilab.android.helper.Helper.getLiveInstance; /** @@ -781,6 +785,32 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt return false; } }); + TextView account_date = findViewById(R.id.account_date); + account_date.setText(Helper.shortDateToString(account.getCreated_at())); + new Thread(new Runnable(){ + @Override + public void run() { + + String instance = getLiveInstance(getApplicationContext()); + if( account.getAcct().split("@").length > 1 ){ + instance = account.getAcct().split("@")[1]; + } + InstanceNodeInfo instanceNodeInfo = new API(ShowAccountActivity.this).displayNodeInfo(instance); + + runOnUiThread(new Runnable() { + public void run() { + if(instanceNodeInfo != null && instanceNodeInfo.getName() != null){ + TextView instance_info = findViewById(R.id.instance_info); + instance_info.setText(instanceNodeInfo.getName()); + instance_info.setVisibility(View.VISIBLE); + TextView seperator = findViewById(R.id.seperator); + seperator.setVisibility(View.VISIBLE); + } + }}); + + + } + }).start(); } diff --git a/app/src/main/java/app/fedilab/android/client/API.java b/app/src/main/java/app/fedilab/android/client/API.java index 1c504e582..ee4314e3c 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -692,6 +692,76 @@ public class API { } + + public InstanceNodeInfo displayNodeInfo(String domain){ + + String response; + InstanceNodeInfo instanceNodeInfo = new InstanceNodeInfo(); + try { + response = new HttpsConnection(context, domain).get("https://" + domain + "/.well-known/nodeinfo", 30, null, null); + JSONArray jsonArray = new JSONObject(response).getJSONArray("links"); + ArrayList nodeInfos = new ArrayList<>(); + try { + int i = 0; + while (i < jsonArray.length() ){ + + JSONObject resobj = jsonArray.getJSONObject(i); + NodeInfo nodeInfo = new NodeInfo(); + nodeInfo.setHref(resobj.getString("href")); + nodeInfo.setRel(resobj.getString("rel")); + i++; + nodeInfos.add(nodeInfo); + } + if( nodeInfos.size() > 0){ + NodeInfo nodeInfo = nodeInfos.get(nodeInfos.size()-1); + response = new HttpsConnection(context, this.instance).get(nodeInfo.getHref(), 30, null, null); + JSONObject resobj = new JSONObject(response); + JSONObject jsonObject = resobj.getJSONObject("software"); + String name= null; + name = jsonObject.getString("name").toUpperCase(); + instanceNodeInfo.setName(name); + instanceNodeInfo.setVersion(jsonObject.getString("version")); + instanceNodeInfo.setOpenRegistrations(resobj.getBoolean("openRegistrations")); + } + } catch (JSONException e) { + setDefaultError(e); + } + } catch (IOException e) { + e.printStackTrace(); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (KeyManagementException e) { + e.printStackTrace(); + } catch (HttpsConnection.HttpsConnectionException e) { + e.printStackTrace(); + try { + response = new HttpsConnection(context, this.instance).get("https://" + domain + "/api/v1/instance", 30, null, null); + JSONObject jsonObject = new JSONObject(response); + instanceNodeInfo.setName("MASTODON"); + instanceNodeInfo.setVersion(jsonObject.getString("version")); + instanceNodeInfo.setOpenRegistrations(true); + } catch (IOException e1) { + instanceNodeInfo.setConnectionError(true); + e1.printStackTrace(); + } catch (NoSuchAlgorithmException e1) { + e1.printStackTrace(); + } catch (KeyManagementException e1) { + e1.printStackTrace(); + } catch (HttpsConnection.HttpsConnectionException e1) { + instanceNodeInfo.setName("GNU"); + instanceNodeInfo.setVersion("unknown"); + instanceNodeInfo.setOpenRegistrations(true); + e1.printStackTrace(); + } catch (JSONException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } catch (JSONException e) { + e.printStackTrace(); + } + return instanceNodeInfo; + } + public API(Context context, String instance, String token) { this.context = context; if( context == null) { diff --git a/app/src/main/res/layout-sw600dp/activity_show_account.xml b/app/src/main/res/layout-sw600dp/activity_show_account.xml index 3763bfe49..f6595c0ce 100644 --- a/app/src/main/res/layout-sw600dp/activity_show_account.xml +++ b/app/src/main/res/layout-sw600dp/activity_show_account.xml @@ -246,6 +246,39 @@ android:layout_width="match_parent" android:layout_height="wrap_content" /> + + + + + + @@ -249,6 +250,39 @@ android:layout_width="match_parent" android:layout_height="wrap_content" /> + + + + +