From 915fc49e91ea183777a29d0adc043fc8c58867ba Mon Sep 17 00:00:00 2001 From: Konrad Pozniak Date: Sat, 2 Dec 2017 12:22:52 +0100 Subject: [PATCH] fix crash on Android 4 --- app/build.gradle | 5 ++--- .../com/keylesspalace/tusky/TuskyApplication.java | 12 +++++------- .../tusky/adapter/NotificationsAdapter.java | 10 ++++------ .../tusky/adapter/StatusViewHolder.java | 13 +++++++------ app/src/main/res/layout/item_follow.xml | 2 -- app/src/main/res/layout/item_status.xml | 2 -- 6 files changed, 18 insertions(+), 26 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c58d0e49..c4fae380 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -66,10 +66,9 @@ dependencies { compile 'com.evernote:android-job:1.2.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' //room - implementation "android.arch.persistence.room:runtime:1.0.0" + implementation 'android.arch.persistence.room:runtime:1.0.0' kapt 'android.arch.persistence.room:compiler:1.0.0' - - testCompile "junit:junit:4.12" + testCompile 'junit:junit:4.12' androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) diff --git a/app/src/main/java/com/keylesspalace/tusky/TuskyApplication.java b/app/src/main/java/com/keylesspalace/tusky/TuskyApplication.java index efe92c88..fee6dc8b 100644 --- a/app/src/main/java/com/keylesspalace/tusky/TuskyApplication.java +++ b/app/src/main/java/com/keylesspalace/tusky/TuskyApplication.java @@ -17,7 +17,7 @@ package com.keylesspalace.tusky; import android.app.Application; import android.arch.persistence.room.Room; -import android.net.Uri; +import android.support.v7.app.AppCompatDelegate; import com.evernote.android.job.JobManager; import com.jakewharton.picasso.OkHttp3Downloader; @@ -39,12 +39,7 @@ public class TuskyApplication extends Application { Picasso.Builder builder = new Picasso.Builder(this); builder.downloader(new OkHttp3Downloader(OkHttpUtils.getCompatibleClient())); if (BuildConfig.DEBUG) { - builder.listener(new Picasso.Listener() { - @Override - public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) { - exception.printStackTrace(); - } - }); + builder.listener((picasso, uri, exception) -> exception.printStackTrace()); } try { @@ -60,5 +55,8 @@ public class TuskyApplication extends Application { .build(); JobManager.create(this).addJobCreator(new NotificationPullJobCreator(this)); + + //necessary for Android < APi 21 + AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); } } \ No newline at end of file diff --git a/app/src/main/java/com/keylesspalace/tusky/adapter/NotificationsAdapter.java b/app/src/main/java/com/keylesspalace/tusky/adapter/NotificationsAdapter.java index 9638c380..8eb36187 100644 --- a/app/src/main/java/com/keylesspalace/tusky/adapter/NotificationsAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/adapter/NotificationsAdapter.java @@ -246,6 +246,9 @@ public class NotificationsAdapter extends RecyclerView.Adapter { usernameView = itemView.findViewById(R.id.notification_username); displayNameView = itemView.findViewById(R.id.notification_display_name); avatar = itemView.findViewById(R.id.notification_avatar); + //workaround because Android < API 21 does not support setting drawableLeft from xml when it is a vector image + Drawable followIcon = ContextCompat.getDrawable(message.getContext(), R.drawable.ic_person_add_24dp); + message.setCompoundDrawablesWithIntrinsicBounds(followIcon, null, null, null); } void setMessage(String displayName, String username, String avatarUrl) { @@ -270,12 +273,7 @@ public class NotificationsAdapter extends RecyclerView.Adapter { } void setupButtons(final NotificationActionListener listener, final String accountId) { - avatar.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - listener.onViewAccount(accountId); - } - }); + avatar.setOnClickListener(v -> listener.onViewAccount(accountId)); } } diff --git a/app/src/main/java/com/keylesspalace/tusky/adapter/StatusViewHolder.java b/app/src/main/java/com/keylesspalace/tusky/adapter/StatusViewHolder.java index 3e45e001..4696e3ab 100644 --- a/app/src/main/java/com/keylesspalace/tusky/adapter/StatusViewHolder.java +++ b/app/src/main/java/com/keylesspalace/tusky/adapter/StatusViewHolder.java @@ -16,6 +16,7 @@ package com.keylesspalace.tusky.adapter; import android.content.Context; +import android.graphics.drawable.Drawable; import android.os.Build; import android.support.annotation.Nullable; import android.view.View; @@ -24,6 +25,7 @@ import android.widget.TextView; import com.keylesspalace.tusky.R; import com.keylesspalace.tusky.interfaces.StatusActionListener; +import com.keylesspalace.tusky.util.ThemeUtils; import com.keylesspalace.tusky.view.RoundedTransformation; import com.keylesspalace.tusky.viewdata.StatusViewData; import com.squareup.picasso.Picasso; @@ -37,6 +39,10 @@ public class StatusViewHolder extends StatusBaseViewHolder { super(itemView); avatarReblog = itemView.findViewById(R.id.status_avatar_reblog); rebloggedBar = itemView.findViewById(R.id.status_reblogged); + //workaround because Android < API 21 does not support setting drawableLeft from xml when it is a vector image + Drawable rebloggedIcon = ThemeUtils.getDrawable(rebloggedBar.getContext(), + R.attr.status_reblog_small_drawable, R.drawable.ic_reblog_dark_18dp); + rebloggedBar.setCompoundDrawablesWithIntrinsicBounds(rebloggedIcon, null, null, null); } @Override @@ -84,12 +90,7 @@ public class StatusViewHolder extends StatusBaseViewHolder { // I think it's not efficient to create new object every time we bind a holder. // More efficient approach would be creating View.OnClickListener during holder creation // and storing StatusActionListener in a variable after binding. - rebloggedBar.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - listener.onOpenReblog(getAdapterPosition()); - } - }); + rebloggedBar.setOnClickListener(v -> listener.onOpenReblog(getAdapterPosition())); } private void setRebloggedByDisplayName(String name) { diff --git a/app/src/main/res/layout/item_follow.xml b/app/src/main/res/layout/item_follow.xml index cb9faab9..1f7707cf 100644 --- a/app/src/main/res/layout/item_follow.xml +++ b/app/src/main/res/layout/item_follow.xml @@ -17,9 +17,7 @@ android:layout_height="wrap_content" android:layout_marginBottom="4dp" android:layout_marginTop="8dp" - android:drawableLeft="@drawable/ic_person_add_24dp" android:drawablePadding="10dp" - android:drawableStart="@drawable/ic_person_add_24dp" android:ellipsize="end" android:gravity="center_vertical" android:maxLines="1" diff --git a/app/src/main/res/layout/item_status.xml b/app/src/main/res/layout/item_status.xml index 01013c94..bc89e222 100644 --- a/app/src/main/res/layout/item_status.xml +++ b/app/src/main/res/layout/item_status.xml @@ -13,9 +13,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/status_reblogged_bar_top_padding" - android:drawableLeft="?attr/status_reblog_small_drawable" android:drawablePadding="6dp" - android:drawableStart="?attr/status_reblog_small_drawable" android:gravity="center_vertical" android:paddingLeft="38dp" android:paddingStart="38dp"