Refactor colorization to support dark theme.

// FREEBIE
This commit is contained in:
Moxie Marlinspike
2015-06-30 09:16:05 -07:00
parent eacfca37f2
commit ce2f66ad17
32 changed files with 840 additions and 235 deletions

View File

@@ -21,6 +21,7 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;
import org.thoughtcrime.securesms.color.MaterialColor;
import org.thoughtcrime.securesms.contacts.avatars.ContactColors;
import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto;
import org.thoughtcrime.securesms.contacts.avatars.ContactPhotoFactory;
@@ -28,7 +29,6 @@ import org.thoughtcrime.securesms.recipients.RecipientProvider.RecipientDetails;
import org.thoughtcrime.securesms.util.FutureTaskListener;
import org.thoughtcrime.securesms.util.GroupUtil;
import org.thoughtcrime.securesms.util.ListenableFutureTask;
import org.whispersystems.libaxolotl.util.guava.Optional;
import java.util.Collections;
import java.util.HashSet;
@@ -46,16 +46,17 @@ public class Recipient {
private String number;
private String name;
private ContactPhoto contactPhoto;
private Uri contactUri;
private Optional<Integer> color;
private ContactPhoto contactPhoto;
private Uri contactUri;
@Nullable private MaterialColor color;
Recipient(long recipientId, String number, ListenableFutureTask<RecipientDetails> future)
{
this.recipientId = recipientId;
this.number = number;
this.contactPhoto = ContactPhotoFactory.getLoadingPhoto();
this.color = Optional.absent();
this.color = null;
future.addListener(new FutureTaskListener<RecipientDetails>() {
@Override
@@ -97,13 +98,13 @@ public class Recipient {
return this.name;
}
public synchronized @NonNull Optional<Integer> getColor() {
if (color.isPresent()) return color;
else if (name != null) return Optional.of(ContactColors.generateFor(name));
else return Optional.of(ContactColors.UNKNOWN_COLOR);
public synchronized @NonNull MaterialColor getColor() {
if (color != null) return color;
else if (name != null) return ContactColors.generateFor(name);
else return ContactColors.UNKNOWN_COLOR;
}
public void setColor(Optional<Integer> color) {
public void setColor(@NonNull MaterialColor color) {
synchronized (this) {
this.color = color;
}
@@ -141,8 +142,7 @@ public class Recipient {
public static Recipient getUnknownRecipient() {
return new Recipient(-1, new RecipientDetails("Unknown", "Unknown", null,
ContactPhotoFactory.getDefaultContactPhoto("Unknown"),
Optional.<Integer>absent()));
ContactPhotoFactory.getDefaultContactPhoto("Unknown"), null));
}
@Override

View File

@@ -25,6 +25,7 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;
import org.thoughtcrime.securesms.color.MaterialColor;
import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto;
import org.thoughtcrime.securesms.contacts.avatars.ContactPhotoFactory;
import org.thoughtcrime.securesms.database.CanonicalAddressDatabase;
@@ -122,7 +123,7 @@ public class RecipientProvider {
private @NonNull RecipientDetails getIndividualRecipientDetails(Context context, long recipientId, String number) {
Optional<RecipientsPreferences> preferences = DatabaseFactory.getRecipientPreferenceDatabase(context).getRecipientsPreferences(new long[]{recipientId});
Optional<Integer> color = preferences.isPresent() ? preferences.get().getColor() : Optional.<Integer>absent();
MaterialColor color = preferences.isPresent() ? preferences.get().getColor() : null;
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
Cursor cursor = context.getContentResolver().query(uri, CALLER_ID_PROJECTION,
null, null, null);
@@ -152,13 +153,13 @@ public class RecipientProvider {
if (record != null) {
ContactPhoto contactPhoto = ContactPhotoFactory.getGroupContactPhoto(record.getAvatar());
return new RecipientDetails(record.getTitle(), groupId, null, contactPhoto, Optional.<Integer>absent());
return new RecipientDetails(record.getTitle(), groupId, null, contactPhoto, null);
}
return new RecipientDetails(null, groupId, null, ContactPhotoFactory.getDefaultGroupPhoto(), Optional.<Integer>absent());
return new RecipientDetails(null, groupId, null, ContactPhotoFactory.getDefaultGroupPhoto(), null);
} catch (IOException e) {
Log.w("RecipientProvider", e);
return new RecipientDetails(null, groupId, null, ContactPhotoFactory.getDefaultGroupPhoto(), Optional.<Integer>absent());
return new RecipientDetails(null, groupId, null, ContactPhotoFactory.getDefaultGroupPhoto(), null);
}
}
@@ -182,21 +183,21 @@ public class RecipientProvider {
}
public static class RecipientDetails {
@Nullable public final String name;
@NonNull public final String number;
@NonNull public final ContactPhoto avatar;
@Nullable public final Uri contactUri;
@NonNull public final Optional<Integer> color;
@Nullable public final String name;
@NonNull public final String number;
@NonNull public final ContactPhoto avatar;
@Nullable public final Uri contactUri;
@Nullable public final MaterialColor color;
public RecipientDetails(@Nullable String name, @NonNull String number,
@Nullable Uri contactUri, @NonNull ContactPhoto avatar,
@NonNull Optional<Integer> color)
@Nullable MaterialColor color)
{
this.name = name;
this.number = number;
this.avatar = avatar;
this.contactUri = contactUri;
this.color = color;
this.name = name;
this.number = number;
this.avatar = avatar;
this.contactUri = contactUri;
this.color = color;
}
}

View File

@@ -16,12 +16,15 @@
*/
package org.thoughtcrime.securesms.recipients;
import android.content.Context;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;
import android.util.Patterns;
import org.thoughtcrime.securesms.color.MaterialColor;
import org.thoughtcrime.securesms.contacts.avatars.ContactColors;
import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto;
import org.thoughtcrime.securesms.contacts.avatars.ContactPhotoFactory;
import org.thoughtcrime.securesms.database.RecipientPreferenceDatabase.RecipientsPreferences;
@@ -32,7 +35,6 @@ import org.thoughtcrime.securesms.util.GroupUtil;
import org.thoughtcrime.securesms.util.ListenableFutureTask;
import org.thoughtcrime.securesms.util.NumberUtil;
import org.thoughtcrime.securesms.util.Util;
import org.whispersystems.libaxolotl.util.guava.Optional;
import java.util.Arrays;
import java.util.Collections;
@@ -155,13 +157,13 @@ public class Recipients implements Iterable<Recipient>, RecipientModifiedListene
else return ContactPhotoFactory.getDefaultGroupPhoto();
}
public synchronized @NonNull Optional<Integer> getColor() {
if (!isSingleRecipient() || isGroupRecipient()) return Optional.absent();
else if (isEmpty()) return Optional.absent();
public synchronized @NonNull MaterialColor getColor(Context context) {
if (!isSingleRecipient() || isGroupRecipient()) return ContactColors.getGroupColor(context);
else if (isEmpty()) return ContactColors.UNKNOWN_COLOR;
else return recipients.get(0).getColor();
}
public synchronized void setColor(Optional<Integer> color) {
public synchronized void setColor(@NonNull MaterialColor color) {
if (!isSingleRecipient() || isGroupRecipient()) throw new AssertionError("Groups don't have colors!");
else if (!isEmpty()) recipients.get(0).setColor(color);
}