diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/utils/AppStyles.java b/app/src/main/java/org/nuclearfog/twidda/backend/utils/AppStyles.java index 6b9efb97..2dee0517 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/utils/AppStyles.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/utils/AppStyles.java @@ -1,6 +1,5 @@ package org.nuclearfog.twidda.backend.utils; -import android.app.Activity; import android.content.Context; import android.content.res.ColorStateList; import android.content.res.Configuration; @@ -248,11 +247,10 @@ public class AppStyles { /** * setup a transparent blurry toolbar * - * @param activity activity reference to get the measures * @param background background overlapped by the toolbar at the top * @param toolbarBackground background image of the toolbar */ - public static void setToolbarBackground(Activity activity, ImageView background, ImageView toolbarBackground) { + public static void setToolbarBackground(ImageView background, ImageView toolbarBackground) { Drawable backgroundDrawable = background.getDrawable(); if (backgroundDrawable instanceof BitmapDrawable) { try { @@ -278,9 +276,9 @@ public class AppStyles { } int widthPixels = Resources.getSystem().getDisplayMetrics().widthPixels; int blurRadius = Math.max(Math.round((image.getWidth() * 20.0f) / widthPixels), 10); - float toolbarRatio = activity.getResources().getDimension(R.dimen.profile_toolbar_height) / widthPixels; + float toolbarRatio = background.getResources().getDimension(R.dimen.profile_toolbar_height) / widthPixels; // do final transformations (crop first image to toolbar background size, then blur) - BlurTransformation blur = new BlurTransformation(activity.getApplicationContext(), blurRadius); + BlurTransformation blur = new BlurTransformation(background.getContext(), blurRadius); CropTransformation crop = new CropTransformation(image.getWidth(), (int) (image.getWidth() * toolbarRatio), GravityHorizontal.CENTER, GravityVertical.TOP); image = blur.transform(crop.transform(image)); toolbarBackground.setImageBitmap(image); diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/utils/ToolbarUpdater.java b/app/src/main/java/org/nuclearfog/twidda/backend/utils/ToolbarUpdater.java new file mode 100644 index 00000000..6ad25658 --- /dev/null +++ b/app/src/main/java/org/nuclearfog/twidda/backend/utils/ToolbarUpdater.java @@ -0,0 +1,34 @@ +package org.nuclearfog.twidda.backend.utils; + +import android.widget.ImageView; + +import java.lang.ref.WeakReference; + +/** + * Runnable class used to update blur background of a toolbar + * + * @author nuclearfog + */ +public class ToolbarUpdater implements Runnable { + + private WeakReference bannerRef, toolbarRef; + + /** + * @param profile_banner profile banner view + * @param toolbar_background toolbar background view + */ + public ToolbarUpdater(ImageView profile_banner, ImageView toolbar_background) { + bannerRef = new WeakReference<>(profile_banner); + toolbarRef = new WeakReference<>(toolbar_background); + } + + + @Override + public void run() { + ImageView profile_banner = bannerRef.get(); + ImageView toolbar_background = toolbarRef.get(); + if (profile_banner != null && toolbar_background != null) { + AppStyles.setToolbarBackground(profile_banner, toolbar_background); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/org/nuclearfog/twidda/ui/activities/ProfileActivity.java b/app/src/main/java/org/nuclearfog/twidda/ui/activities/ProfileActivity.java index c63c8d06..654847e4 100644 --- a/app/src/main/java/org/nuclearfog/twidda/ui/activities/ProfileActivity.java +++ b/app/src/main/java/org/nuclearfog/twidda/ui/activities/ProfileActivity.java @@ -55,6 +55,7 @@ import org.nuclearfog.twidda.backend.utils.EmojiUtils; import org.nuclearfog.twidda.backend.utils.ErrorUtils; import org.nuclearfog.twidda.backend.utils.LinkUtils; import org.nuclearfog.twidda.backend.utils.StringUtils; +import org.nuclearfog.twidda.backend.utils.ToolbarUpdater; import org.nuclearfog.twidda.config.GlobalSettings; import org.nuclearfog.twidda.model.Relation; import org.nuclearfog.twidda.model.User; @@ -539,13 +540,7 @@ public class ProfileActivity extends AppCompatActivity implements OnClickListene public void onSuccess() { // setup toolbar background if (settings.toolbarOverlapEnabled()) { - // fixme may cause memory leak - bannerImage.post(new Runnable() { - @Override - public void run() { - AppStyles.setToolbarBackground(ProfileActivity.this, bannerImage, toolbarBackground); - } - }); + bannerImage.post(new ToolbarUpdater(bannerImage, toolbarBackground)); } } diff --git a/app/src/main/java/org/nuclearfog/twidda/ui/activities/ProfileEditor.java b/app/src/main/java/org/nuclearfog/twidda/ui/activities/ProfileEditor.java index a8aa1edb..5c288fed 100644 --- a/app/src/main/java/org/nuclearfog/twidda/ui/activities/ProfileEditor.java +++ b/app/src/main/java/org/nuclearfog/twidda/ui/activities/ProfileEditor.java @@ -35,6 +35,7 @@ import org.nuclearfog.twidda.backend.helper.update.UserUpdate; import org.nuclearfog.twidda.backend.image.PicassoBuilder; import org.nuclearfog.twidda.backend.utils.AppStyles; import org.nuclearfog.twidda.backend.utils.ErrorUtils; +import org.nuclearfog.twidda.backend.utils.ToolbarUpdater; import org.nuclearfog.twidda.config.Configuration; import org.nuclearfog.twidda.config.GlobalSettings; import org.nuclearfog.twidda.model.User; @@ -260,13 +261,7 @@ public class ProfileEditor extends MediaActivity implements OnClickListener, Asy public void onSuccess() { // set toolbar background if (settings.toolbarOverlapEnabled()) { - // fixme may cause memory leak - profile_banner.post(new Runnable() { - @Override - public void run() { - AppStyles.setToolbarBackground(ProfileEditor.this, profile_banner, toolbar_background); - } - }); + profile_banner.post(new ToolbarUpdater(profile_banner, toolbar_background)); } } diff --git a/app/src/main/java/org/nuclearfog/twidda/ui/views/LockableConstraintLayout.java b/app/src/main/java/org/nuclearfog/twidda/ui/views/LockableConstraintLayout.java index fce506c5..9dfec704 100644 --- a/app/src/main/java/org/nuclearfog/twidda/ui/views/LockableConstraintLayout.java +++ b/app/src/main/java/org/nuclearfog/twidda/ui/views/LockableConstraintLayout.java @@ -14,14 +14,10 @@ import androidx.constraintlayout.widget.ConstraintLayout; */ public class LockableConstraintLayout extends ConstraintLayout { - private static final float LOCK_RATIO = 1.1f; - @Nullable private LockCallback callback; - private boolean xLock = false; private boolean yLock = false; private float yPos = 0.0f; - private float xPos = 0.0f; /** * @inheritDoc @@ -42,27 +38,20 @@ public class LockableConstraintLayout extends ConstraintLayout { public boolean onInterceptTouchEvent(MotionEvent ev) { switch (ev.getActionMasked()) { case MotionEvent.ACTION_MOVE: - float deltaX = ev.getX() - xPos; - float deltaY = ev.getY() - yPos; - // lock x-axis when swiping up/down - if (!xLock && Math.abs(deltaY) > Math.abs(deltaX) * LOCK_RATIO) { - xLock = true; - } + float deltaY = ev.getAxisValue(MotionEvent.AXIS_Y) - yPos; // detect scroll down, then aquire scroll lock - if (xLock && deltaY < 0.0f && callback != null) { + if (!yLock && deltaY < 0.0f && callback != null) { yLock = callback.aquireVerticalScrollLock(); } // fall through case MotionEvent.ACTION_DOWN: // note the current coordinates touch event - xPos = ev.getX(); - yPos = ev.getY(); + yPos = ev.getAxisValue(MotionEvent.AXIS_Y); break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: - xLock = false; yLock = false; break; } diff --git a/app/src/main/res/layout/item_account.xml b/app/src/main/res/layout/item_account.xml index b75ecceb..d9ba8f08 100644 --- a/app/src/main/res/layout/item_account.xml +++ b/app/src/main/res/layout/item_account.xml @@ -9,25 +9,17 @@ android:id="@+id/item_account_container" android:layout_width="match_parent" android:layout_height="wrap_content" - android:padding="@dimen/login_layout_padding"> + android:padding="@dimen/login_card_padding"> - - + app:layout_constraintBottom_toBottomOf="parent" /> + app:layout_constraintEnd_toStartOf="@id/item_account_remove" /> + app:layout_constraintEnd_toStartOf="@id/item_account_remove" /> - - + app:layout_constraintEnd_toStartOf="@id/item_account_remove" /> diff --git a/app/src/main/res/layout/item_user.xml b/app/src/main/res/layout/item_user.xml index 52c2127c..2e0adfd2 100644 --- a/app/src/main/res/layout/item_user.xml +++ b/app/src/main/res/layout/item_user.xml @@ -168,8 +168,7 @@ android:contentDescription="@string/descr_remove_user" android:scaleType="fitCenter" android:src="@drawable/cross" - app:layout_constraintTop_toTopOf="@id/item_user_profile" - app:layout_constraintBottom_toBottomOf="@id/item_user_profile" + app:layout_constraintTop_toTopOf="parent" app:layout_constraintEnd_toEndOf="parent" style="@style/RoundButton" /> diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index b95ac900..b454f967 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -105,10 +105,10 @@ 5dp 5dp 5dp - 36dp + 20sp 20sp 1dp - 7dp + 1dp 12sp 14sp 8dp @@ -131,9 +131,10 @@ 14sp 12sp 11sp - 8dp - 36dp - 7dp + 8dp + 8dp + 20sp + 1dp 64dp