Skip to content

Commit

Permalink
Merge pull request #2573 from nextcloud/fileDetails
Browse files Browse the repository at this point in the history
Iteration 2 for file detail & new sharing
  • Loading branch information
AndyScherzinger authored May 29, 2018
2 parents 59dca8f + ba0aff4 commit 36584a1
Show file tree
Hide file tree
Showing 51 changed files with 2,316 additions and 852 deletions.
1 change: 1 addition & 0 deletions drawable_resources/alert-octagon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion scripts/lint/lint-results.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
DO NOT TOUCH; GENERATED BY DRONE
<span class="mdl-layout-title">Lint Report: 104 warnings</span>
<span class="mdl-layout-title">Lint Report: 103 warnings</span>
6 changes: 6 additions & 0 deletions src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@
tools:ignore="UnusedAttribute">
<activity
android:name=".ui.activity.FileDisplayActivity"
android:launchMode="singleTop"
android:label="@string/app_name"
android:configChanges="orientation|screenSize"
android:theme="@style/Theme.ownCloud.Launcher">
Expand All @@ -88,6 +89,11 @@

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/users_and_groups_searchable"/>
</activity>
<activity android:name=".ui.activity.ManageAccountsActivity" />
<activity android:name=".ui.activity.UserInfoActivity" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
package com.owncloud.android.datamodel;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
Expand Down Expand Up @@ -773,12 +772,14 @@ public static class AvatarGenerationTask extends AsyncTask<String, Void, Drawabl
private final Resources mResources;
private final float mAvatarRadius;
private Account mAccount;
private String mUsername;
private String mUserId;
private String mServerName;
private Context mContext;


public AvatarGenerationTask(AvatarGenerationListener avatarGenerationListener, Object callContext,
FileDataStorageManager storageManager, Account account, Resources resources,
float avatarRadius) {
float avatarRadius, String userId, String serverName, Context context) {
mAvatarGenerationListener = new WeakReference<>(avatarGenerationListener);
mCallContext = callContext;
if (storageManager == null) {
Expand All @@ -787,6 +788,9 @@ public AvatarGenerationTask(AvatarGenerationListener avatarGenerationListener, O
mAccount = account;
mResources = resources;
mAvatarRadius = avatarRadius;
mUserId = userId;
mServerName = serverName;
mContext = context;
}

@SuppressFBWarnings("Dm")
Expand All @@ -796,20 +800,17 @@ protected Drawable doInBackground(String... params) {

try {
if (mAccount != null) {
OwnCloudAccount ocAccount = new OwnCloudAccount(mAccount,
MainApp.getAppContext());
mClient = OwnCloudClientManagerFactory.getDefaultSingleton().
getClientFor(ocAccount, MainApp.getAppContext());
OwnCloudAccount ocAccount = new OwnCloudAccount(mAccount, mContext);
mClient = OwnCloudClientManagerFactory.getDefaultSingleton().getClientFor(ocAccount, mContext);
}

mUsername = params[0];
thumbnail = doAvatarInBackground();

} catch(OutOfMemoryError oome) {
Log_OC.e(TAG, "Out of memory");
} catch(Throwable t){
// the app should never break due to a problem with avatars
Log_OC.e(TAG, "Generation of avatar for " + mUsername + " failed", t);
Log_OC.e(TAG, "Generation of avatar for " + mUserId + " failed", t);
}

return thumbnail;
Expand All @@ -820,7 +821,7 @@ protected void onPostExecute(Drawable drawable) {
AvatarGenerationListener listener = mAvatarGenerationListener.get();
AvatarGenerationTask avatarWorkerTask = getAvatarWorkerTask(mCallContext);

if (this == avatarWorkerTask && listener.shouldCallGeneratedCallback(mUsername, mCallContext)) {
if (this == avatarWorkerTask && listener.shouldCallGeneratedCallback(mUserId, mCallContext)) {
listener.avatarGenerated(drawable, mCallContext);
}
}
Expand All @@ -830,7 +831,7 @@ protected void onPostExecute(Drawable drawable) {
* Converts size of file icon from dp to pixel
* @return int
*/
private int getAvatarDimension(){
private int getAvatarDimension() {
// Converts dp to pixel
Resources r = MainApp.getAppContext().getResources();
return Math.round(r.getDimension(R.dimen.file_avatar_size));
Expand All @@ -839,13 +840,14 @@ private int getAvatarDimension(){
private @Nullable
Drawable doAvatarInBackground() {
Bitmap avatar = null;
String username = mUsername;

ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(
MainApp.getAppContext().getContentResolver());
String accountName = mUserId + "@" + mServerName;

ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(mContext.getContentResolver());

String eTag = arbitraryDataProvider.getValue(accountName, ThumbnailsCacheManager.AVATAR);
String avatarKey = "a_" + mUserId + "_" + mServerName + "_" + eTag;

String eTag = arbitraryDataProvider.getValue(mAccount, AVATAR);
final String imageKey = "a_" + username + "_" + eTag;
int px = getAvatarDimension();

// Download avatar from server
Expand All @@ -854,18 +856,13 @@ Drawable doAvatarInBackground() {
if (serverOCVersion.supportsRemoteThumbnails()) {
GetMethod get = null;
try {
String userId = AccountManager.get(MainApp.getAppContext()).getUserData(mAccount,
com.owncloud.android.lib.common.accounts.AccountUtils.Constants.KEY_USER_ID);

if (TextUtils.isEmpty(userId)) {
userId = AccountUtils.getAccountUsername(username);
}

String uri = mClient.getBaseUri() + "/index.php/avatar/" + Uri.encode(userId) + "/" + px;
String uri = mClient.getBaseUri() + "/index.php/avatar/" + Uri.encode(mUserId) + "/" + px;
Log_OC.d("Avatar", "URI: " + uri);
get = new GetMethod(uri);

if (!eTag.isEmpty()) {
// only use eTag if available and corresponding avatar is still there
// (might be deleted from cache)
if (!eTag.isEmpty() && getBitmapFromDiskCache(avatarKey) != null) {
get.setRequestHeader("If-None-Match", eTag);
}

Expand All @@ -877,18 +874,19 @@ Drawable doAvatarInBackground() {
// new avatar
InputStream inputStream = get.getResponseBodyAsStream();

String newETag = null;
if (get.getResponseHeader(ETAG) != null) {
eTag = get.getResponseHeader(ETAG).getValue().replace("\"", "");
arbitraryDataProvider.storeOrUpdateKeyValue(mAccount.name, AVATAR, eTag);
newETag = get.getResponseHeader(ETAG).getValue().replace("\"", "");
arbitraryDataProvider.storeOrUpdateKeyValue(accountName, AVATAR, newETag);
}

Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
avatar = ThumbnailUtils.extractThumbnail(bitmap, px, px);

// Add avatar to cache
if (avatar != null) {
if (avatar != null && !TextUtils.isEmpty(newETag)) {
avatar = handlePNG(avatar, px, px);
String newImageKey = "a_" + username + "_" + eTag;
String newImageKey = "a_" + mUserId + "_" + mServerName + "_" + newETag;
addBitmapToCache(newImageKey, avatar);
} else {
return TextDrawable.createAvatar(mAccount.name, mAvatarRadius);
Expand All @@ -897,7 +895,7 @@ Drawable doAvatarInBackground() {

case HttpStatus.SC_NOT_MODIFIED:
// old avatar
avatar = getBitmapFromDiskCache(imageKey);
avatar = getBitmapFromDiskCache(avatarKey);
mClient.exhaustResponse(get.getResponseBodyAsStream());
break;

Expand Down Expand Up @@ -965,7 +963,7 @@ public static boolean cancelPotentialAvatarWork(Object file, ImageView imageView
final AvatarGenerationTask avatarWorkerTask = getAvatarWorkerTask(imageView);

if (avatarWorkerTask != null) {
final Object usernameData = avatarWorkerTask.mUsername;
final Object usernameData = avatarWorkerTask.mUserId;
// If usernameData is not yet set or it differs from the new data
if (usernameData == null || !usernameData.equals(file)) {
// Cancel previous task
Expand All @@ -984,7 +982,7 @@ public static boolean cancelPotentialAvatarWork(Object file, MenuItem menuItem)
final AvatarGenerationTask avatarWorkerTask = getAvatarWorkerTask(menuItem);

if (avatarWorkerTask != null) {
final Object usernameData = avatarWorkerTask.mUsername;
final Object usernameData = avatarWorkerTask.mUserId;
// If usernameData is not yet set or it differs from the new data
if (usernameData == null || !usernameData.equals(file)) {
// Cancel previous task
Expand Down
Loading

0 comments on commit 36584a1

Please sign in to comment.