Skip to content

Commit 53f558c

Browse files
Add profile picture support
2 parents 7310437 + ad61858 commit 53f558c

File tree

8 files changed

+142
-57
lines changed

8 files changed

+142
-57
lines changed

News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
import de.luhmer.owncloudnewsreader.helper.DatabaseUtils;
7777
import de.luhmer.owncloudnewsreader.helper.PostDelayHandler;
7878
import de.luhmer.owncloudnewsreader.helper.ThemeChooser;
79+
import de.luhmer.owncloudnewsreader.reader.IReader;
7980
import de.luhmer.owncloudnewsreader.reader.OnAsyncTaskCompletedListener;
8081
import de.luhmer.owncloudnewsreader.reader.owncloud.API;
8182
import de.luhmer.owncloudnewsreader.reader.owncloud.OwnCloud_Reader;
@@ -214,6 +215,8 @@ public void onDrawerOpened(View drawerView) {
214215
//AppRater.rateNow(this);
215216

216217
UpdateButtonLayout();
218+
219+
bindUserInfoToUI();
217220
}
218221

219222

@@ -903,4 +906,126 @@ public void onClick(ViewHolder vh, int position) {
903906
startActivityForResult(intentNewsDetailAct, Activity.RESULT_CANCELED);
904907
}
905908
}
909+
910+
private class AsyncTaskGetUserInfo extends AsyncTask<Void, Void, UserInfo> {
911+
@Override
912+
protected UserInfo doInBackground(Void... voids) {
913+
API api = API.GetRightApiForVersion("6.0.4", NewsReaderListActivity.this);
914+
915+
try {
916+
UserInfo ui = new UserInfo();
917+
InputStream inputStream = HttpJsonRequest.PerformJsonRequest(api.getUserUrl() , null, api.getUsername(), api.getPassword(), NewsReaderListActivity.this);
918+
919+
JsonReader reader = new JsonReader(new InputStreamReader(inputStream, "UTF-8"));
920+
reader.beginObject();
921+
922+
String currentName;
923+
while(reader.hasNext() && (currentName = reader.nextName()) != null) {
924+
switch(currentName) {
925+
case "userId":
926+
ui.mUserId = reader.nextString();
927+
break;
928+
case "displayName":
929+
ui.mDisplayName = reader.nextString();
930+
break;
931+
case "avatar":
932+
com.google.gson.stream.JsonToken jt = reader.peek();
933+
if(jt == com.google.gson.stream.JsonToken.NULL) {
934+
Log.v(TAG, "No image available");
935+
reader.skipValue();
936+
//No image available
937+
} else {
938+
reader.beginObject();
939+
while (reader.hasNext()) {
940+
currentName = reader.nextName();
941+
if (currentName.equals("data")) {
942+
String encodedImage = reader.nextString();
943+
byte[] decodedString = Base64.decode(encodedImage, Base64.DEFAULT);
944+
ui.mAvatar = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
945+
Log.v(TAG, encodedImage);
946+
} else {
947+
reader.skipValue();
948+
}
949+
}
950+
}
951+
break;
952+
default:
953+
Log.v(TAG, "Skipping value for: " + currentName);
954+
reader.skipValue();
955+
break;
956+
}
957+
}
958+
reader.close();
959+
960+
return ui;
961+
} catch (Exception e) {
962+
e.printStackTrace();
963+
}
964+
return null;
965+
}
966+
967+
@Override
968+
protected void onPostExecute(UserInfo userInfo) {
969+
if(userInfo != null) {
970+
try {
971+
SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(NewsReaderListActivity.this);
972+
mPrefs.edit().putString("USER_INFO", NewsReaderListActivity.toString(userInfo)).commit();
973+
974+
bindUserInfoToUI();
975+
} catch(Exception ex) {
976+
ex.printStackTrace();
977+
}
978+
}
979+
super.onPostExecute(userInfo);
980+
}
981+
}
982+
983+
private void bindUserInfoToUI() {
984+
SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(NewsReaderListActivity.this);
985+
String uInfo = mPrefs.getString("USER_INFO", null);
986+
if(uInfo == null)
987+
return;
988+
989+
try {
990+
UserInfo userInfo = (UserInfo) fromString(uInfo);
991+
if (userInfo.mDisplayName != null)
992+
getSlidingListFragment().userTextView.setText(userInfo.mDisplayName);
993+
994+
if (userInfo.mAvatar != null) {
995+
Resources r = getResources();
996+
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 3, r.getDisplayMetrics());
997+
RoundedBitmapDisplayer.RoundedDrawable roundedAvatar =
998+
new RoundedBitmapDisplayer.RoundedDrawable(userInfo.mAvatar, (int) px, 0);
999+
getSlidingListFragment().headerLogo.setImageDrawable(roundedAvatar);
1000+
}
1001+
} catch (Exception ex) {
1002+
ex.printStackTrace();
1003+
}
1004+
}
1005+
1006+
private class UserInfo implements Serializable {
1007+
private String mUserId;
1008+
private String mDisplayName;
1009+
private Bitmap mAvatar;
1010+
}
1011+
1012+
/** Read the object from Base64 string. */
1013+
private static Object fromString( String s ) throws IOException ,
1014+
ClassNotFoundException {
1015+
byte [] data = Base64.decode(s, Base64.DEFAULT);
1016+
ObjectInputStream ois = new ObjectInputStream(
1017+
new ByteArrayInputStream( data ) );
1018+
Object o = ois.readObject();
1019+
ois.close();
1020+
return o;
1021+
}
1022+
1023+
/** Write the object to a Base64 string. */
1024+
private static String toString( Serializable o ) throws IOException {
1025+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
1026+
ObjectOutputStream oos = new ObjectOutputStream( baos );
1027+
oos.writeObject(o);
1028+
oos.close();
1029+
return Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT);
1030+
}
9061031
}

News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListFragment.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,12 @@ public void ReloadAdapter() {
7272

7373
public void setRefreshing(boolean isRefreshing) {
7474
if(isRefreshing) {
75-
headerLogo.setImageResource(R.drawable.ic_launcher_background);
75+
//headerLogo.setImageResource(R.drawable.ic_launcher_background);
76+
headerLogo.setVisibility(View.INVISIBLE);
7677
headerLogoProgress.setVisibility(View.VISIBLE);
7778
} else {
78-
headerLogo.setImageResource(R.drawable.ic_launcher);
79+
//headerLogo.setImageResource(R.drawable.ic_launcher);
80+
headerLogo.setVisibility(View.VISIBLE);
7981
headerLogoProgress.setVisibility(View.INVISIBLE);
8082
}
8183
}

News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/owncloud/API.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838

3939
import de.luhmer.owncloudnewsreader.SettingsActivity;
4040
import de.luhmer.owncloudnewsreader.reader.FeedItemTags;
41+
import de.luhmer.owncloudnewsreader.reader.FeedItemTags.TAGS;
4142
import de.luhmer.owncloudnewsreader.reader.owncloud.apiv1.APIv1;
4243
import de.luhmer.owncloudnewsreader.reader.owncloud.apiv2.APIv2;
4344

@@ -126,11 +127,4 @@ public int[] GetUpdatedItems(FeedItemTags tag, Context cont, long lastSync) thro
126127
}
127128

128129
public abstract boolean PerformTagExecution(List<String> itemIds, FeedItemTags tag, Context context);
129-
130-
131-
/*
132-
static final Pattern RemoveAllDoubleSlashes = Pattern.compile("(?<!:)\\/\\/");
133-
public static String validateURL(String url) {
134-
return RemoveAllDoubleSlashes.matcher(url).replaceAll("/");
135-
} */
136130
}

News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/owncloud/OwnCloudConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public class OwnCloudConstants {
2828
public static final String ROOT_PATH_APIv2 = "/index.php/apps/news/api/v1-2";
2929
public static final String FOLDER_PATH = "folders";
3030
public static final String SUBSCRIPTION_PATH = "feeds";
31+
public static final String USER_PATH = "user";
3132
public static final String FEED_PATH = "items";
3233
public static final String FEED_PATH_UPDATED_ITEMS = "items/updated";
3334
public static final String VERSION_PATH = "version";

News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/owncloud/apiv1/APIv1.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ public HttpUrl getTagBaseUrl() {
6464
return getAPIUrl(null, OwnCloudConstants.ROOT_PATH_APIv1, OwnCloudConstants.FEED_PATH);
6565
}
6666

67+
@Override
68+
public String getUserUrl() throws UnsupportedOperationException {
69+
throw new UnsupportedOperationException();
70+
}
71+
6772
@Override
6873
public boolean PerformTagExecution(List<String> itemIds, FeedItemTags tag,
6974
Context context) {

News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/owncloud/apiv2/APIv2.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,11 @@ public HttpUrl getTagBaseUrl() {
6363
return getAPIUrl(null, OwnCloudConstants.ROOT_PATH_APIv2, OwnCloudConstants.FEED_PATH);
6464
}
6565

66+
@Override
67+
public String getUserUrl() {
68+
return getOcRootPath() + OwnCloudConstants.ROOT_PATH_APIv2 + OwnCloudConstants.USER_PATH;
69+
}
70+
6671
@Override
6772
public boolean PerformTagExecution(List<String> itemIds, FeedItemTags tag,
6873
Context context) {

News-Android-App/src/main/res/layout/fragment_newsreader_list.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
tools:text='https://url_to_owncloud.oc'
3434
android:textColor="@android:color/white"
3535
android:layout_alignParentBottom="true"
36+
android:paddingBottom="5dp"
3637
android:layout_toRightOf="@+id/header_logo"
3738
android:layout_toEndOf="@+id/header_logo"
3839
android:singleLine="true"

News-Android-App/src/main/res/values-en_DE/strings.xml

Lines changed: 0 additions & 48 deletions
This file was deleted.

0 commit comments

Comments
 (0)