From 3a49a838961913bba9ab06415b5fc110aaed116c Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Sun, 5 Jun 2016 17:25:11 +0200 Subject: [PATCH 1/2] Extract and show aspects --- .../com/github/dfa/diaspora_android/App.java | 7 ++ .../activity/MainActivity.java | 9 +- .../activity/ShareActivity.java | 2 +- .../diaspora_android/data/AppSettings.java | 44 +++++++--- .../dfa/diaspora_android/data/PodAspect.java | 83 +++++++++++++++++++ .../diaspora_android/data/PodUserProfile.java | 42 +++++++++- .../dfa/diaspora_android/util/Helpers.java | 28 ++++++- 7 files changed, 194 insertions(+), 21 deletions(-) create mode 100644 app/src/main/java/com/github/dfa/diaspora_android/data/PodAspect.java diff --git a/app/src/main/java/com/github/dfa/diaspora_android/App.java b/app/src/main/java/com/github/dfa/diaspora_android/App.java index 20b6dce0..0cd31a39 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/App.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/App.java @@ -10,6 +10,7 @@ import android.webkit.WebSettings; import android.webkit.WebView; import com.github.dfa.diaspora_android.data.AppSettings; +import com.github.dfa.diaspora_android.data.PodUserProfile; import com.github.dfa.diaspora_android.ui.CustomWebViewClient; import com.github.dfa.diaspora_android.util.AvatarImageLoader; @@ -22,6 +23,7 @@ public class App extends Application { private AppSettings appSettings; private AvatarImageLoader avatarImageLoader; private CookieManager cookieManager; + private PodUserProfile podUserProfile; @Override public void onCreate() { @@ -29,6 +31,7 @@ public class App extends Application { final Context c = getApplicationContext(); appSettings = new AppSettings(c); avatarImageLoader = new AvatarImageLoader(c); + podUserProfile = new PodUserProfile(this); // Get cookie manager @@ -61,6 +64,10 @@ public class App extends Application { } } + public PodUserProfile getPodUserProfile(){ + return podUserProfile; + } + public AppSettings getSettings() { return appSettings; } diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java index 4183f68e..95eea1d8 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java @@ -172,7 +172,9 @@ public class MainActivity extends AppCompatActivity app = (App) getApplication(); appSettings = app.getSettings(); - podUserProfile = new PodUserProfile(app, uiHandler, this); + podUserProfile = app.getPodUserProfile(); + podUserProfile.setCallbackHandler(uiHandler); + podUserProfile.setListener(this); this.registerForContextMenu(webView); webView.setParentActivity(this); @@ -245,7 +247,7 @@ public class MainActivity extends AppCompatActivity } if (progress > 60) { - Helpers.hideTopBar(wv); + Helpers.applyDiasporaMobileSiteChanges(wv); } if (progress == 100) { @@ -872,7 +874,8 @@ public class MainActivity extends AppCompatActivity case R.id.nav_aspects: { if (Helpers.isOnline(MainActivity.this)) { - webView.loadUrl("https://" + podDomain + "/aspects"); + // webView.loadUrl("https://" + podDomain + "/aspects"); + Helpers.showAspectList(webView, app); } else { Snackbar.make(swipeRefreshLayout, R.string.no_internet, Snackbar.LENGTH_LONG).show(); } diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/ShareActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/ShareActivity.java index 8fcafdee..2398454e 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/ShareActivity.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/ShareActivity.java @@ -132,7 +132,7 @@ public class ShareActivity extends MainActivity { } if (progress > 60) { - Helpers.hideTopBar(wv); + Helpers.applyDiasporaMobileSiteChanges(wv); } if (progress == 100) { diff --git a/app/src/main/java/com/github/dfa/diaspora_android/data/AppSettings.java b/app/src/main/java/com/github/dfa/diaspora_android/data/AppSettings.java index 12b0dd57..5b11799f 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/data/AppSettings.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/data/AppSettings.java @@ -1,8 +1,12 @@ package com.github.dfa.diaspora_android.data; +import android.animation.ObjectAnimator; import android.content.Context; import android.content.SharedPreferences; +import org.json.JSONArray; +import org.json.JSONException; + /** * Created by gsantner on 20.03.16. Part of Diaspora for Android. */ @@ -17,6 +21,10 @@ public class AppSettings { prefPod = this.context.getSharedPreferences("pod0", Context.MODE_PRIVATE); } + public Context getApplicationContext() { + return context; + } + public void clearPodSettings() { prefPod.edit().clear().apply(); } @@ -37,18 +45,18 @@ public class AppSettings { pref.edit().putBoolean(key, value).apply(); } - private void setStringArray(SharedPreferences pref, String key, String[] values){ + private void setStringArray(SharedPreferences pref, String key, Object[] values) { StringBuffer sb = new StringBuffer(); - for(String value : values){ + for (Object value : values) { sb.append("%%%"); - sb.append(value); + sb.append(value.toString()); } - setString(pref,key,sb.toString().replaceFirst("%%%","")); + setString(pref, key, sb.toString().replaceFirst("%%%", "")); } - private String[] getStringArray(SharedPreferences pref, String key){ - String value = pref.getString(key,"%%%"); - if (value.equals("%%%")){ + private String[] getStringArray(SharedPreferences pref, String key) { + String value = pref.getString(key, "%%%"); + if (value.equals("%%%")) { return new String[0]; } return value.split("%%%"); @@ -65,6 +73,7 @@ public class AppSettings { private static final String PODUSERPROFILE_NAME = "podUserProfile_name"; private static final String PODUSERPROFILE_ID = "podUserProfile_guid"; private static final String PODDOMAIN = "podDomain"; + private static final String PODUSERPROFILE_ASPECTS = "podUserProfile_aspects"; } @@ -76,7 +85,7 @@ public class AppSettings { } public void setProfileId(String profileId) { - setString(prefPod, PREF.PODUSERPROFILE_ID,profileId); + setString(prefPod, PREF.PODUSERPROFILE_ID, profileId); } @@ -121,15 +130,28 @@ public class AppSettings { setString(prefPod, PREF.PODDOMAIN, podDomain); } - public boolean hasPodDomain(){ + public boolean hasPodDomain() { return !prefPod.getString(PREF.PODDOMAIN, "").equals(""); } - public String[] getPreviousPodlist(){ + public String[] getPreviousPodlist() { return getStringArray(prefApp, PREF.PREVIOUS_PODLIST); } - public void setPreviousPodlist(String[] pods){ + public void setPreviousPodlist(String[] pods) { setStringArray(prefApp, PREF.PREVIOUS_PODLIST, pods); } + + public void setPodAspects(PodAspect[] aspects) { + setStringArray(prefPod, PREF.PODUSERPROFILE_ASPECTS, aspects); + } + + public PodAspect[] getPodAspects() { + String[] s= getStringArray(prefPod, PREF.PODUSERPROFILE_ASPECTS); + PodAspect[] aspects = new PodAspect[s.length]; + for(int i=0; i < aspects.length; i++){ + aspects[i] = new PodAspect(s[i]); + } + return aspects; + } } diff --git a/app/src/main/java/com/github/dfa/diaspora_android/data/PodAspect.java b/app/src/main/java/com/github/dfa/diaspora_android/data/PodAspect.java new file mode 100644 index 00000000..e9bfc4b5 --- /dev/null +++ b/app/src/main/java/com/github/dfa/diaspora_android/data/PodAspect.java @@ -0,0 +1,83 @@ +package com.github.dfa.diaspora_android.data; + +import android.support.v4.content.ContextCompat; + +import com.github.dfa.diaspora_android.App; +import com.github.dfa.diaspora_android.R; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Locale; + +/** + * Created by gregor on 05.06.16. + */ +public class PodAspect { + public long id; + public String name; + public boolean selected; + + public PodAspect(long id, String name, boolean selected) { + this.id = id; + this.name = name; + this.selected = selected; + } + + + public PodAspect(String shareabletext) { + // fromShareAbleText + String[] str = shareabletext.split("%"); + selected = Integer.parseInt(str[0]) == 1; + id = Long.parseLong(str[1]); + name = shareabletext.substring(shareabletext.indexOf(str[1]) + str[1].length() + 1); + } + + public PodAspect(JSONObject json) throws JSONException { + if (json.has("id")) { + id = json.getLong("id"); + } + if (json.has("name")) { + name = json.getString("name"); + } + if (json.has("selected")) { + selected = json.getBoolean("selected"); + } + } + + public String toJsonString() { + JSONObject j = new JSONObject(); + try { + j.put("id", id); + j.put("name", name); + j.put("selected", selected); + } catch (JSONException e) { + } + return j.toString(); + } + + public String toHtmlLink(final App app) { + final AppSettings appSettings = app.getSettings(); + return String.format(Locale.getDefault(), + "%s", + appSettings.getPodDomain(), id, name); + } + + @Override + public String toString() { + return toShareAbleText(); + } + + @Override + public boolean equals(Object o) { + if (o instanceof PodAspect) { + return ((PodAspect) o).id == id; + } + return false; + } + + public String toShareAbleText() { + return String.format(Locale.getDefault(), "%d%%%d%%%s", selected ? 1 : 0, id, name); + } +} diff --git a/app/src/main/java/com/github/dfa/diaspora_android/data/PodUserProfile.java b/app/src/main/java/com/github/dfa/diaspora_android/data/PodUserProfile.java index 68c5362d..fa95a7b4 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/data/PodUserProfile.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/data/PodUserProfile.java @@ -6,6 +6,7 @@ import android.util.Log; import com.github.dfa.diaspora_android.App; import com.github.dfa.diaspora_android.listener.WebUserProfileChangedListener; +import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -26,6 +27,7 @@ public class PodUserProfile { private String avatarUrl; private String guid; private String name; + private PodAspect[] podAspects; private int notificationCount; private int unreadMessagesCount; @@ -37,6 +39,7 @@ public class PodUserProfile { avatarUrl = appSettings.getAvatarUrl(); guid = appSettings.getProfileId(); name = appSettings.getName(); + podAspects = appSettings.getPodAspects(); } public PodUserProfile(App app, Handler callbackHandler, WebUserProfileChangedListener listener) { @@ -83,7 +86,14 @@ public class PodUserProfile { // Unread message count if (json.has("unread_messages_count") && loadUnreadMessagesCount(json.getInt("unread_messages_count"))) { + appSettings.setPodAspects(podAspects); } + + // Aspect + if (json.has("aspects") && loadAspects(json.getJSONArray("aspects"))) { + appSettings.setPodAspects(podAspects); + } + isWebUserProfileLoaded = true; } catch (JSONException e) { Log.d(App.TAG, e.getMessage()); @@ -117,6 +127,10 @@ public class PodUserProfile { return unreadMessagesCount; } + public PodAspect[] getAspects() { + return podAspects; + } + /* * Private property setters */ @@ -173,6 +187,14 @@ public class PodUserProfile { return false; } + private boolean loadAspects(final JSONArray jsonAspects) throws JSONException { + podAspects = new PodAspect[jsonAspects.length()]; + for (int i = 0; i < jsonAspects.length(); i++) { + podAspects[i] = new PodAspect(jsonAspects.getJSONObject(i)); + } + return true; + } + private boolean loadUnreadMessagesCount(final int unreadMessagesCount) { if (this.unreadMessagesCount != unreadMessagesCount) { this.unreadMessagesCount = unreadMessagesCount; @@ -188,6 +210,22 @@ public class PodUserProfile { return false; } + public Handler getCallbackHandler() { + return callbackHandler; + } + + public void setCallbackHandler(Handler callbackHandler) { + this.callbackHandler = callbackHandler; + } + + public WebUserProfileChangedListener getListener() { + return listener; + } + + public void setListener(WebUserProfileChangedListener listener) { + this.listener = listener; + } + /* * Not implemented / not needed yet: * string "diasporaAddress" @@ -195,10 +233,6 @@ public class PodUserProfile { * boolean "admin" * int "following_count" * boolean "moderator" - * array "aspects" - * int "id" - * string "name" - * boolean "selected" * * array "services" * ? ? diff --git a/app/src/main/java/com/github/dfa/diaspora_android/util/Helpers.java b/app/src/main/java/com/github/dfa/diaspora_android/util/Helpers.java index d71adccf..6bd3ea51 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/util/Helpers.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/util/Helpers.java @@ -28,8 +28,10 @@ import android.net.NetworkInfo; import android.support.v4.content.ContextCompat; import android.webkit.WebView; +import com.github.dfa.diaspora_android.App; import com.github.dfa.diaspora_android.R; -import com.github.dfa.diaspora_android.activity.MainActivity; +import com.github.dfa.diaspora_android.data.PodAspect; +import com.github.dfa.diaspora_android.data.PodUserProfile; public class Helpers { @@ -49,7 +51,7 @@ public class Helpers { } } - public static void hideTopBar(final WebView wv) { + public static void applyDiasporaMobileSiteChanges(final WebView wv) { wv.loadUrl("javascript: ( function() {" + " document.documentElement.style.paddingBottom = '260px';" + " document.getElementById('main').style.paddingTop = '5px';" + @@ -81,6 +83,7 @@ public class Helpers { } public static void getUserProfile(final WebView wv) { + // aspects":[{"id":124934,"name":"Friends","selected":true},{"id":124937,"name":"Liked me","selected":false},{"id":124938,"name":"Follow","selected":false},{"id":128327,"name":"Nur ich","selected":false}] wv.loadUrl("javascript: ( function() {" + " if (typeof gon !== 'undefined' && typeof gon.user !== 'undefined') {" + " var userProfile = JSON.stringify(gon.user);" + @@ -88,4 +91,25 @@ public class Helpers { " } " + "})();"); } + + public static void showAspectList(final WebView wv, final App app) { + wv.stopLoading(); + PodUserProfile profile = app.getPodUserProfile(); + StringBuffer sb = new StringBuffer(); + int intColor = ContextCompat.getColor(app, R.color.colorAccent); + String strColor = String.format("#%06X", (0xFFFFFF & intColor)); + + sb.append("
"); + sb.append(String.format("

%s

", strColor, app.getString(R.string.jb_aspects))); + sb.append("
"); + // Content + for (PodAspect aspect : profile.getAspects()) { + sb.append("»  "); + sb.append(aspect.toHtmlLink(app)); + sb.append("

"); + } + // End + sb.append(""); + wv.loadData(sb.toString(), "text/html", "UTF-16"); + } } From f36502ecc566b164310062b62e492430abe916c2 Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Sun, 5 Jun 2016 18:03:20 +0200 Subject: [PATCH 2/2] v0.1.2 --- CHANGELOG.md | 13 +++++++++++++ SCREENSHOTS.md | 19 ++++++++++++++----- app/build.gradle | 4 ++-- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12502a85..08b0d3f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +# v0.1.2 (2016-06-05) +- Extract and show aspects (by @gsantner) +- Cache last podlist +- Better sharing from app +- Collapsing top menu +- ProgressBar material, Improve search dialog +- fix keyboard. #4 +- Reworked sharing from activity #12 +- toolbar/actions/menu changes, replaced fab +- Refactor layout & menu files, dialogs +- Lots of refactoring; Reworked Splash,PodSelectionActivity; Switch Pod; Clear settings; +- Activity transitions, usability MainActivity, green accent color + # v0.1.1 - Sharing updated (by @scoute-dich) - Screenshotting updated diff --git a/SCREENSHOTS.md b/SCREENSHOTS.md index 7814c912..735829f2 100644 --- a/SCREENSHOTS.md +++ b/SCREENSHOTS.md @@ -1,5 +1,14 @@ -![1](https://raw.githubusercontent.com/Diaspora-for-Android/diaspora-android/v0.1.1/Screenshots/Screenshot_20160303-194540.png) -![2](https://raw.githubusercontent.com/Diaspora-for-Android/diaspora-android/v0.1.1/Screenshots/Screenshot_20160303-194559.png) -![3](https://raw.githubusercontent.com/Diaspora-for-Android/diaspora-android/v0.1.1/Screenshots/Screenshot_20160303-194608.png) -![4](https://raw.githubusercontent.com/Diaspora-for-Android/diaspora-android/v0.1.1/Screenshots/Screenshot_20160303-194621.png) -![5](https://raw.githubusercontent.com/Diaspora-for-Android/diaspora-android/v0.1.1/Screenshots/Screenshot_20160303-194752.png) \ No newline at end of file + + + + + + + + + + + + + +
diff --git a/app/build.gradle b/app/build.gradle index 3072760b..a2e167e4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "com.github.dfa.diaspora_android" minSdkVersion 15 targetSdkVersion 23 - versionCode 2 - versionName "0.1.1" + versionCode 3 + versionName "0.1.2" } buildTypes { release {