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 a7f02870..f8aee685 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 {
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 350e1b46..d8efacbd 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
@@ -174,7 +174,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);
//Orbot integration
OrbotHelper.requestStartTor(this.getApplicationContext());
@@ -256,7 +258,7 @@ public class MainActivity extends AppCompatActivity
}
if (progress > 60) {
- Helpers.hideTopBar(wv);
+ Helpers.applyDiasporaMobileSiteChanges(wv);
}
if (progress == 100) {
@@ -887,7 +889,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 8c439e18..d10ea43f 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";
private static final String IS_PROXY_ORBOT = "proxyViaOrbot";
}
@@ -77,7 +86,7 @@ public class AppSettings {
}
public void setProfileId(String profileId) {
- setString(prefPod, PREF.PODUSERPROFILE_ID,profileId);
+ setString(prefPod, PREF.PODUSERPROFILE_ID, profileId);
}
@@ -122,15 +131,15 @@ 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);
}
@@ -141,4 +150,16 @@ public class AppSettings {
public void setProxyOrbot(boolean active) {
prefApp.edit().putBoolean(PREF.IS_PROXY_ORBOT, active).commit();
}
+ 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");
+ }
}