diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java index 9a46153f1..01e0c1647 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java @@ -3,6 +3,7 @@ package org.briarproject.briar.android.conversation; import android.annotation.SuppressLint; import android.content.DialogInterface; import android.content.Intent; +import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Parcelable; import android.transition.Slide; @@ -105,6 +106,7 @@ import androidx.recyclerview.selection.SelectionTracker.SelectionObserver; import androidx.recyclerview.selection.StorageStrategy; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat; import de.hdodenhof.circleimageview.CircleImageView; import uk.co.samuelwall.materialtaptargetprompt.MaterialTapTargetPrompt; @@ -479,12 +481,10 @@ public class ConversationActivity extends BriarActivity @UiThread private void displayContactOnlineStatus() { if (connectionRegistry.isConnected(contactId)) { - toolbarStatus.setImageDrawable(ContextCompat.getDrawable( - ConversationActivity.this, R.drawable.contact_online)); + toolbarStatus.setImageResource(R.drawable.contact_online); toolbarStatus.setContentDescription(getString(R.string.online)); } else { - toolbarStatus.setImageDrawable(ContextCompat.getDrawable( - ConversationActivity.this, R.drawable.contact_offline)); + toolbarStatus.setImageResource(R.drawable.contact_offline); toolbarStatus.setContentDescription(getString(R.string.offline)); } } @@ -935,13 +935,16 @@ public class ConversationActivity extends BriarActivity return; } + int color = + ContextCompat.getColor(this, R.color.briar_primary); + Drawable drawable = VectorDrawableCompat + .create(getResources(), R.drawable.ic_more_vert_accent, null); new MaterialTapTargetPrompt.Builder(ConversationActivity.this, R.style.OnboardingDialogTheme).setTarget(target) .setPrimaryText(R.string.introduction_onboarding_title) .setSecondaryText(R.string.introduction_onboarding_text) - .setIcon(R.drawable.ic_more_vert_accent) - .setBackgroundColour( - ContextCompat.getColor(this, R.color.briar_primary)) + .setIconDrawable(drawable) + .setBackgroundColour(color) .show(); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/LoginUtils.java b/briar-android/src/main/java/org/briarproject/briar/android/login/LoginUtils.java index 39dedadaf..eb0869d91 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/login/LoginUtils.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/login/LoginUtils.java @@ -1,17 +1,13 @@ package org.briarproject.briar.android.login; import android.content.Context; -import android.graphics.drawable.Drawable; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.R; import androidx.appcompat.app.AlertDialog; -import static androidx.core.content.ContextCompat.getColor; -import static androidx.core.content.ContextCompat.getDrawable; -import static androidx.core.graphics.drawable.DrawableCompat.setTint; -import static java.util.Objects.requireNonNull; +import static org.briarproject.briar.android.util.UiUtils.getDialogIcon; @NotNullByDefault class LoginUtils { @@ -19,9 +15,7 @@ class LoginUtils { static AlertDialog createKeyStrengthenerErrorDialog(Context ctx) { AlertDialog.Builder builder = new AlertDialog.Builder(ctx, R.style.BriarDialogTheme); - Drawable icon = getDrawable(ctx, R.drawable.alerts_and_states_error); - setTint(requireNonNull(icon), getColor(ctx, R.color.color_primary)); - builder.setIcon(icon); + builder.setIcon(getDialogIcon(ctx, R.drawable.alerts_and_states_error)); builder.setTitle(R.string.dialog_title_cannot_check_password); builder.setMessage(R.string.dialog_message_cannot_check_password); builder.setPositiveButton(R.string.ok, null); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java index 4b0f456fe..f301f854b 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java @@ -2,6 +2,7 @@ package org.briarproject.briar.android.navdrawer; import android.content.Intent; import android.content.res.Configuration; +import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.view.LayoutInflater; @@ -59,6 +60,7 @@ import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProviders; +import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat; import uk.co.samuelwall.materialtaptargetprompt.MaterialTapTargetPrompt; import static android.view.View.GONE; @@ -433,8 +435,7 @@ public class NavDrawerActivity extends BriarActivity implements Transport t = getItem(position); ImageView icon = view.findViewById(R.id.imageView); - icon.setImageDrawable(ContextCompat.getDrawable( - NavDrawerActivity.this, t.iconDrawable)); + icon.setImageResource(t.iconDrawable); icon.setColorFilter(ContextCompat.getColor( NavDrawerActivity.this, t.iconColor)); @@ -476,11 +477,13 @@ public class NavDrawerActivity extends BriarActivity implements private void showTransportsOnboarding(boolean show, ImageView imageView) { if (show) { int color = resolveColorAttribute(this, R.attr.colorControlNormal); + Drawable drawable = VectorDrawableCompat + .create(getResources(), R.drawable.transport_tor, null); new MaterialTapTargetPrompt.Builder(NavDrawerActivity.this, R.style.OnboardingDialogTheme).setTarget(imageView) .setPrimaryText(R.string.network_settings_title) .setSecondaryText(R.string.transports_onboarding_text) - .setIcon(R.drawable.transport_tor) + .setIconDrawable(drawable) .setIconDrawableColourFilter(color) .setBackgroundColour( ContextCompat.getColor(this, R.color.briar_primary)) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/TransportsActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/TransportsActivity.java index 688700cb9..d86c9fea5 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/TransportsActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/TransportsActivity.java @@ -141,8 +141,7 @@ public class TransportsActivity extends BriarActivity { Transport t = getItem(position); ImageView icon = view.findViewById(R.id.icon); - icon.setImageDrawable(ContextCompat.getDrawable( - TransportsActivity.this, t.iconDrawable)); + icon.setImageResource(t.iconDrawable); icon.setColorFilter(ContextCompat.getColor( TransportsActivity.this, t.iconColor)); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java index 404b7e621..0039dbd28 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java @@ -54,6 +54,7 @@ import androidx.fragment.app.FragmentManager; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.lifecycle.Observer; +import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat; import static android.content.Context.KEYGUARD_SERVICE; import static android.content.Context.POWER_SERVICE; @@ -88,7 +89,6 @@ import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_NO; import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES; import static androidx.appcompat.app.AppCompatDelegate.setDefaultNightMode; import static androidx.core.content.ContextCompat.getColor; -import static androidx.core.content.ContextCompat.getDrawable; import static androidx.core.content.ContextCompat.getSystemService; import static androidx.core.graphics.drawable.DrawableCompat.setTint; import static androidx.core.view.ViewCompat.LAYOUT_DIRECTION_RTL; @@ -436,7 +436,8 @@ public class UiUtils { } public static Drawable getDialogIcon(Context ctx, @DrawableRes int resId) { - Drawable icon = getDrawable(ctx, resId); + Drawable icon = + VectorDrawableCompat.create(ctx.getResources(), resId, null); setTint(requireNonNull(icon), getColor(ctx, R.color.color_primary)); return icon; } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/BriarRecyclerView.java b/briar-android/src/main/java/org/briarproject/briar/android/view/BriarRecyclerView.java index 4dc6c6b3a..c54b3ea17 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/view/BriarRecyclerView.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/view/BriarRecyclerView.java @@ -2,7 +2,6 @@ package org.briarproject.briar.android.view; import android.content.Context; import android.content.res.TypedArray; -import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Looper; import android.util.AttributeSet; @@ -53,9 +52,8 @@ public class BriarRecyclerView extends FrameLayout { R.styleable.BriarRecyclerView); isScrollingToEnd = attributes .getBoolean(R.styleable.BriarRecyclerView_scrollToEnd, true); - Drawable drawable = attributes - .getDrawable(R.styleable.BriarRecyclerView_emptyImage); - if (drawable != null) setEmptyImage(drawable); + int drawableRes = attributes.getResourceId(R.styleable.BriarRecyclerView_emptyImage, -1); + if (drawableRes != -1) setEmptyImage(drawableRes); String emtpyText = attributes.getString(R.styleable.BriarRecyclerView_emptyText); if (emtpyText != null) setEmptyText(emtpyText); @@ -139,11 +137,6 @@ public class BriarRecyclerView extends FrameLayout { } } - public void setEmptyImage(Drawable drawable) { - if (recyclerView == null) initViews(); - emptyImage.setImageDrawable(drawable); - } - public void setEmptyImage(@DrawableRes int res) { if (recyclerView == null) initViews(); emptyImage.setImageResource(res); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/TextAttachmentController.java b/briar-android/src/main/java/org/briarproject/briar/android/view/TextAttachmentController.java index 07d7f08a6..a048d43e2 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/view/TextAttachmentController.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/view/TextAttachmentController.java @@ -4,6 +4,7 @@ import android.app.Activity; import android.content.ClipData; import android.content.Context; import android.content.Intent; +import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; @@ -28,6 +29,7 @@ import androidx.customview.view.AbsSavedState; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.lifecycle.Observer; +import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat; import uk.co.samuelwall.materialtaptargetprompt.MaterialTapTargetPrompt; import static android.os.Build.VERSION.SDK_INT; @@ -253,12 +255,14 @@ public class TextAttachmentController extends TextSendController public void showImageOnboarding(Activity activity) { int color = resolveColorAttribute(activity, R.attr.colorControlNormal); + Drawable drawable = VectorDrawableCompat + .create(activity.getResources(), R.drawable.ic_image, null); new MaterialTapTargetPrompt.Builder(activity, R.style.OnboardingDialogTheme).setTarget(sendButton) .setPrimaryText(R.string.dialog_title_image_support) .setSecondaryText(R.string.dialog_message_image_support) .setBackgroundColour(getColor(activity, R.color.briar_primary)) - .setIcon(R.drawable.ic_image) + .setIconDrawable(drawable) .setIconDrawableColourFilter(color) .show(); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/TrustIndicatorView.java b/briar-android/src/main/java/org/briarproject/briar/android/view/TrustIndicatorView.java index ec1fc98ac..464fd0aa7 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/view/TrustIndicatorView.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/view/TrustIndicatorView.java @@ -8,7 +8,6 @@ import org.briarproject.briar.R; import androidx.annotation.UiThread; import androidx.appcompat.widget.AppCompatImageView; -import androidx.core.content.ContextCompat; @UiThread public class TrustIndicatorView extends AppCompatImageView { @@ -44,7 +43,7 @@ public class TrustIndicatorView extends AppCompatImageView { default: res = R.drawable.trust_indicator_unknown; } - setImageDrawable(ContextCompat.getDrawable(getContext(), res)); + setImageResource(res); setVisibility(VISIBLE); invalidate(); diff --git a/briar-android/src/main/res/layout/fragment_link_exchange.xml b/briar-android/src/main/res/layout/fragment_link_exchange.xml index 05df19b47..9f6a71394 100644 --- a/briar-android/src/main/res/layout/fragment_link_exchange.xml +++ b/briar-android/src/main/res/layout/fragment_link_exchange.xml @@ -123,11 +123,11 @@ style="@style/BriarButtonFlat.Positive.Tiny" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:drawableStart="@drawable/ic_content_copy" - android:drawableLeft="@drawable/ic_content_copy" android:drawablePadding="8dp" android:enabled="false" android:text="@string/copy_button" + app:drawableLeftCompat="@drawable/ic_content_copy" + app:drawableStartCompat="@drawable/ic_content_copy" app:layout_constraintEnd_toStartOf="@id/shareButton" app:layout_constraintHorizontal_bias="1.0" app:layout_constraintHorizontal_chainStyle="packed" @@ -139,11 +139,11 @@ style="@style/BriarButtonFlat.Positive.Tiny" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:drawableStart="@drawable/social_share_blue" - android:drawableLeft="@drawable/social_share_blue" android:drawablePadding="8dp" android:enabled="false" android:text="@string/share_button" + app:drawableLeftCompat="@drawable/social_share_blue" + app:drawableStartCompat="@drawable/social_share_blue" app:layout_constraintBottom_toBottomOf="@id/copyButton" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="1.0" @@ -202,10 +202,10 @@ style="@style/BriarButtonFlat.Positive.Tiny" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:drawableStart="@drawable/ic_content_paste" - android:drawableLeft="@drawable/ic_content_paste" android:drawablePadding="8dp" android:text="@string/paste_button" + app:drawableLeftCompat="@drawable/ic_content_paste" + app:drawableStartCompat="@drawable/ic_content_paste" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="1.0" app:layout_constraintStart_toStartOf="parent"