diff --git a/res/drawable-hdpi/ic_badge_24dp.png b/res/drawable-hdpi/ic_badge_24dp.png
deleted file mode 100644
index aaf4fba850..0000000000
Binary files a/res/drawable-hdpi/ic_badge_24dp.png and /dev/null differ
diff --git a/res/drawable-mdpi/ic_badge_24dp.png b/res/drawable-mdpi/ic_badge_24dp.png
deleted file mode 100644
index 49b7c74eaf..0000000000
Binary files a/res/drawable-mdpi/ic_badge_24dp.png and /dev/null differ
diff --git a/res/drawable-xhdpi/ic_badge_24dp.png b/res/drawable-xhdpi/ic_badge_24dp.png
deleted file mode 100644
index 15fde7bffd..0000000000
Binary files a/res/drawable-xhdpi/ic_badge_24dp.png and /dev/null differ
diff --git a/res/drawable-xxhdpi/ic_badge_24dp.png b/res/drawable-xxhdpi/ic_badge_24dp.png
deleted file mode 100644
index e64872158a..0000000000
Binary files a/res/drawable-xxhdpi/ic_badge_24dp.png and /dev/null differ
diff --git a/res/drawable-xxxhdpi/ic_badge_24dp.png b/res/drawable-xxxhdpi/ic_badge_24dp.png
deleted file mode 100644
index 549a87dc66..0000000000
Binary files a/res/drawable-xxxhdpi/ic_badge_24dp.png and /dev/null differ
diff --git a/res/drawable/badge_drawable.xml b/res/drawable/badge_drawable.xml
deleted file mode 100644
index 5a87e3c781..0000000000
--- a/res/drawable/badge_drawable.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
diff --git a/res/layout/contact_selection_list_item.xml b/res/layout/contact_selection_list_item.xml
index ab4ab40aaa..4f9d121420 100644
--- a/res/layout/contact_selection_list_item.xml
+++ b/res/layout/contact_selection_list_item.xml
@@ -18,7 +18,6 @@
android:layout_height="40dp"
android:foreground="@drawable/contact_photo_background"
android:cropToPadding="true"
- app:showBadge="true"
tools:src="@color/md_material_blue_600"
android:layout_marginRight="10dp"
android:contentDescription="@string/SingleContactSelectionActivity_contact_photo" />
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 433040b358..afd2e9a504 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -132,7 +132,6 @@
-
diff --git a/src/org/thoughtcrime/securesms/components/AvatarImageView.java b/src/org/thoughtcrime/securesms/components/AvatarImageView.java
index 6f7f462141..6fc4ea17ee 100644
--- a/src/org/thoughtcrime/securesms/components/AvatarImageView.java
+++ b/src/org/thoughtcrime/securesms/components/AvatarImageView.java
@@ -3,13 +3,8 @@ package org.thoughtcrime.securesms.components;
import android.content.Context;
import android.content.Intent;
import android.content.res.TypedArray;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.LayerDrawable;
-import android.os.AsyncTask;
import android.provider.ContactsContract;
import android.support.annotation.Nullable;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.util.Pair;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
@@ -21,13 +16,10 @@ import org.thoughtcrime.securesms.contacts.avatars.ContactPhotoFactory;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientFactory;
import org.thoughtcrime.securesms.recipients.Recipients;
-import org.thoughtcrime.securesms.util.DirectoryHelper;
-import org.thoughtcrime.securesms.util.DirectoryHelper.UserCapabilities.Capability;
public class AvatarImageView extends ImageView {
private boolean inverted;
- private boolean showBadge;
public AvatarImageView(Context context) {
super(context);
@@ -41,7 +33,6 @@ public class AvatarImageView extends ImageView {
if (attrs != null) {
TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.AvatarImageView, 0, 0);
inverted = typedArray.getBoolean(0, false);
- showBadge = typedArray.getBoolean(1, false);
typedArray.recycle();
}
}
@@ -51,12 +42,9 @@ public class AvatarImageView extends ImageView {
MaterialColor backgroundColor = recipients.getColor();
setImageDrawable(recipients.getContactPhoto().asDrawable(getContext(), backgroundColor.toConversationColor(getContext()), inverted));
setAvatarClickHandler(recipients, quickContactEnabled);
- setTag(recipients);
- if (showBadge) new BadgeResolutionTask(getContext()).execute(recipients);
} else {
setImageDrawable(ContactPhotoFactory.getDefaultContactPhoto(null).asDrawable(getContext(), ContactColors.UNKNOWN_COLOR.toConversationColor(getContext()), inverted));
setOnClickListener(null);
- setTag(null);
}
}
@@ -85,30 +73,4 @@ public class AvatarImageView extends ImageView {
setOnClickListener(null);
}
}
-
- private class BadgeResolutionTask extends AsyncTask> {
- private final Context context;
-
- public BadgeResolutionTask(Context context) {
- this.context = context;
- }
-
- @Override
- protected Pair doInBackground(Recipients... recipients) {
- Capability textCapability = DirectoryHelper.getUserCapabilities(context, recipients[0]).getTextCapability();
- return new Pair<>(recipients[0], textCapability == Capability.SUPPORTED);
- }
-
- @Override
- protected void onPostExecute(Pair result) {
- if (getTag() == result.first && result.second) {
- final Drawable badged = new LayerDrawable(new Drawable[] {
- getDrawable(),
- ContextCompat.getDrawable(context, R.drawable.badge_drawable)
- });
-
- setImageDrawable(badged);
- }
- }
- }
}
diff --git a/src/org/thoughtcrime/securesms/components/RecyclerViewFastScroller.java b/src/org/thoughtcrime/securesms/components/RecyclerViewFastScroller.java
index 70c7336223..3eed8e0ab7 100644
--- a/src/org/thoughtcrime/securesms/components/RecyclerViewFastScroller.java
+++ b/src/org/thoughtcrime/securesms/components/RecyclerViewFastScroller.java
@@ -25,7 +25,6 @@ import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build.VERSION;
import android.support.annotation.NonNull;
-import android.support.v4.view.ViewCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
@@ -57,8 +56,8 @@ public class RecyclerViewFastScroller extends LinearLayout {
return;
final int verticalScrollOffset = recyclerView.computeVerticalScrollOffset();
final int verticalScrollRange = recyclerView.computeVerticalScrollRange();
- float proportion = (float)verticalScrollOffset / ((float)verticalScrollRange - height);
- setBubbleAndHandlePosition(height * proportion);
+ final float proportion = (float)verticalScrollOffset / verticalScrollRange;
+ setBubbleAndHandlePosition(proportion);
}
};
@@ -106,7 +105,7 @@ public class RecyclerViewFastScroller extends LinearLayout {
handle.setSelected(true);
case MotionEvent.ACTION_MOVE:
final float y = event.getY();
- setBubbleAndHandlePosition(y);
+ setBubbleAndHandlePosition(y / height);
setRecyclerViewPosition(y);
return true;
case MotionEvent.ACTION_UP:
@@ -147,12 +146,14 @@ public class RecyclerViewFastScroller extends LinearLayout {
if (recyclerView != null) {
final int itemCount = recyclerView.getAdapter().getItemCount();
float proportion;
- if (ViewUtil.getY(handle) == 0)
+ if (ViewUtil.getY(handle) == 0) {
proportion = 0f;
- else if (ViewUtil.getY(handle) + handle.getHeight() >= height - TRACK_SNAP_RANGE)
+ } else if (ViewUtil.getY(handle) + handle.getHeight() >= height - TRACK_SNAP_RANGE) {
proportion = 1f;
- else
- proportion = y / (float) height;
+ } else {
+ proportion = y / (float)height;
+ }
+
final int targetPos = Util.clamp((int)(proportion * (float)itemCount), 0, itemCount - 1);
((LinearLayoutManager) recyclerView.getLayoutManager()).scrollToPositionWithOffset(targetPos, 0);
final CharSequence bubbleText = ((FastScrollAdapter) recyclerView.getAdapter()).getBubbleText(targetPos);
@@ -164,8 +165,11 @@ public class RecyclerViewFastScroller extends LinearLayout {
private void setBubbleAndHandlePosition(float y) {
final int handleHeight = handle.getHeight();
final int bubbleHeight = bubble.getHeight();
- ViewUtil.setY(handle, Util.clamp((int)(y - handleHeight / 2), 0, height - handleHeight));
- ViewUtil.setY(bubble, Util.clamp((int)(y - bubbleHeight), 0, height - bubbleHeight - handleHeight / 2));
+ final int handleY = Util.clamp((int)((height - handleHeight) * y), 0, height - handleHeight);
+ ViewUtil.setY(handle, handleY);
+ ViewUtil.setY(bubble, Util.clamp(handleY - bubbleHeight - bubble.getPaddingBottom() + handleHeight,
+ 0,
+ height - bubbleHeight));
}
@TargetApi(11)
diff --git a/src/org/thoughtcrime/securesms/contacts/ContactSelectionListAdapter.java b/src/org/thoughtcrime/securesms/contacts/ContactSelectionListAdapter.java
index 6405827c94..11149397c7 100644
--- a/src/org/thoughtcrime/securesms/contacts/ContactSelectionListAdapter.java
+++ b/src/org/thoughtcrime/securesms/contacts/ContactSelectionListAdapter.java
@@ -20,14 +20,13 @@ import android.content.Context;
import android.content.res.TypedArray;
import android.database.Cursor;
import android.provider.ContactsContract;
-import android.support.annotation.DrawableRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextUtils;
-import android.text.style.ImageSpan;
+import android.text.style.ForegroundColorSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@@ -40,6 +39,7 @@ import org.thoughtcrime.securesms.ContactSelectionListFragment.StickyHeaderAdapt
import org.thoughtcrime.securesms.contacts.ContactSelectionListAdapter.HeaderViewHolder;
import org.thoughtcrime.securesms.contacts.ContactSelectionListAdapter.ViewHolder;
import org.thoughtcrime.securesms.database.CursorRecyclerViewAdapter;
+import org.thoughtcrime.securesms.util.Util;
import java.util.HashMap;
import java.util.Map;
@@ -103,7 +103,7 @@ public class ContactSelectionListAdapter extends CursorRecyclerViewAdapter getSelectedContacts() {
return selectedContacts;
}
- private CharSequence getSpannedHeaderString(int position, @DrawableRes int drawable) {
- Cursor cursor = getCursorAtPositionOrThrow(position);
-
- if (cursor.getInt(cursor.getColumnIndexOrThrow(ContactsDatabase.CONTACT_TYPE_COLUMN)) == ContactsDatabase.PUSH_TYPE) {
- SpannableString spannable = new SpannableString(" ");
- spannable.setSpan(new ImageSpan(getContext(), drawable, ImageSpan.ALIGN_BOTTOM), 0, spannable.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ private CharSequence getSpannedHeaderString(int position) {
+ final String headerString = getHeaderString(position);
+ if (isPush(position)) {
+ SpannableString spannable = new SpannableString(headerString);
+ spannable.setSpan(new ForegroundColorSpan(getContext().getResources().getColor(R.color.signal_primary)), 0, headerString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
return spannable;
} else {
- return getHeaderString(position);
+ return headerString;
}
}
private @NonNull String getHeaderString(int position) {
Cursor cursor = getCursorAtPositionOrThrow(position);
String letter = cursor.getString(cursor.getColumnIndexOrThrow(ContactsDatabase.NAME_COLUMN));
- if (cursor.getInt(cursor.getColumnIndexOrThrow(ContactsDatabase.CONTACT_TYPE_COLUMN)) == ContactsDatabase.PUSH_TYPE) {
- return getContext().getString(R.string.app_name);
- } else if (!TextUtils.isEmpty(letter)) {
+ if (!TextUtils.isEmpty(letter)) {
String firstChar = letter.trim().substring(0, 1).toUpperCase();
if (Character.isLetterOrDigit(firstChar.codePointAt(0))) {
return firstChar;
@@ -176,12 +173,19 @@ public class ContactSelectionListAdapter extends CursorRecyclerViewAdapter