diff options
5 files changed, 123 insertions, 117 deletions
diff --git a/src/com/android/car/messenger/CompositeKey.java b/src/com/android/car/messenger/CompositeKey.java new file mode 100644 index 0000000..97fb029 --- /dev/null +++ b/src/com/android/car/messenger/CompositeKey.java @@ -0,0 +1,64 @@ +package com.android.car.messenger; + +import java.util.Map; +import java.util.Objects; + +/** + * A composite key used for {@link Map} lookups, using two strings for + * checking equality and hashing. + */ +public abstract class CompositeKey { + private final String mDeviceAddress; + private final String mSubKey; + + protected CompositeKey(String deviceAddress, String subKey) { + mDeviceAddress = deviceAddress; + mSubKey = subKey; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + + if (!(o instanceof CompositeKey)) { + return false; + } + + CompositeKey that = (CompositeKey) o; + return Objects.equals(mDeviceAddress, that.mDeviceAddress) + && Objects.equals(mSubKey, that.mSubKey); + } + + /** + * Returns true if the device address of this composite key equals {@code deviceAddress}. + * + * @param deviceAddress the device address which is compared to this key's device address + * @return true if the device addresses match + */ + public boolean matches(String deviceAddress) { + return mDeviceAddress.equals(deviceAddress); + } + + @Override + public int hashCode() { + return Objects.hash(mDeviceAddress, mSubKey); + } + + @Override + public String toString() { + return String.format("%s, deviceAddress: %s, subKey: %s", + getClass().getSimpleName(), mDeviceAddress, mSubKey); + } + + /** Returns this composite key's device address. */ + public String getDeviceAddress() { + return mDeviceAddress; + } + + /** Returns this composite key's sub key. */ + public String getSubKey() { + return mSubKey; + } +} diff --git a/src/com/android/car/messenger/MessengerDelegate.java b/src/com/android/car/messenger/MessengerDelegate.java index 28eeeee..ad2ee6a 100644 --- a/src/com/android/car/messenger/MessengerDelegate.java +++ b/src/com/android/car/messenger/MessengerDelegate.java @@ -17,8 +17,6 @@ import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.net.Uri; -import android.os.Parcel; -import android.os.Parcelable; import android.provider.ContactsContract; import android.text.TextUtils; import android.widget.Toast; @@ -47,7 +45,6 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.function.Predicate; /** Delegate class responsible for handling messaging service actions */ @@ -477,117 +474,6 @@ public class MessengerDelegate implements BluetoothMonitor.OnBluetoothEventListe } /** - * A composite key used for {@link Map} lookups, using two strings for - * checking equality and hashing. - */ - public abstract static class CompositeKey { - private final String mDeviceAddress; - private final String mSubKey; - - CompositeKey(String deviceAddress, String subKey) { - mDeviceAddress = deviceAddress; - mSubKey = subKey; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - if (!(o instanceof CompositeKey)) { - return false; - } - - CompositeKey that = (CompositeKey) o; - return Objects.equals(mDeviceAddress, that.mDeviceAddress) - && Objects.equals(mSubKey, that.mSubKey); - } - - /** - * Returns true if the device address of this composite key equals {@code deviceAddress}. - * - * @param deviceAddress the device address which is compared to this key's device address - * @return true if the device addresses match - */ - public boolean matches(String deviceAddress) { - return mDeviceAddress.equals(deviceAddress); - } - - @Override - public int hashCode() { - return Objects.hash(mDeviceAddress, mSubKey); - } - - @Override - public String toString() { - return String.format("%s, deviceAddress: %s, subKey: %s", - getClass().getSimpleName(), mDeviceAddress, mSubKey); - } - - /** Returns this composite key's device address. */ - public String getDeviceAddress() { - return mDeviceAddress; - } - - /** Returns this composite key's sub key. */ - public String getSubKey() { - return mSubKey; - } - } - - /** - * {@link CompositeKey} subclass used to identify Notification info for a sender; - * it uses a combination of senderContactUri and senderContactName as the secondary key. - */ - public static class SenderKey extends CompositeKey implements Parcelable { - - private SenderKey(String deviceAddress, String key) { - super(deviceAddress, key); - } - - SenderKey(MapMessage message) { - // Use a combination of senderName and senderContactUri for key. Ideally we would use - // only senderContactUri (which is encoded phone no.). However since some phones don't - // provide these, we fall back to senderName. Since senderName may not be unique, we - // include senderContactUri also to provide uniqueness in cases it is available. - this(message.getDeviceAddress(), - message.getSenderName() + "/" + message.getSenderContactUri()); - } - - @Override - public String toString() { - return String.format("SenderKey: %s -- %s", getDeviceAddress(), getSubKey()); - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeString(getDeviceAddress()); - dest.writeString(getSubKey()); - } - - /** Creates {@link SenderKey} instances from {@link Parcel} sources. */ - public static final Parcelable.Creator<SenderKey> CREATOR = - new Parcelable.Creator<SenderKey>() { - @Override - public SenderKey createFromParcel(Parcel source) { - return new SenderKey(source.readString(), source.readString()); - } - - @Override - public SenderKey[] newArray(int size) { - return new SenderKey[size]; - } - }; - - } - - /** * {@link CompositeKey} subclass used to identify specific messages; it uses message-handle as * the secondary key. */ diff --git a/src/com/android/car/messenger/MessengerService.java b/src/com/android/car/messenger/MessengerService.java index 11fdd13..3ea681f 100644 --- a/src/com/android/car/messenger/MessengerService.java +++ b/src/com/android/car/messenger/MessengerService.java @@ -18,7 +18,6 @@ import android.text.TextUtils; import androidx.core.app.NotificationCompat; import androidx.core.app.RemoteInput; -import com.android.car.messenger.MessengerDelegate.SenderKey; import com.android.car.messenger.bluetooth.BluetoothMonitor; import com.android.car.messenger.log.L; diff --git a/src/com/android/car/messenger/SenderKey.java b/src/com/android/car/messenger/SenderKey.java new file mode 100644 index 0000000..d1225c0 --- /dev/null +++ b/src/com/android/car/messenger/SenderKey.java @@ -0,0 +1,57 @@ +package com.android.car.messenger; + + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * {@link CompositeKey} subclass used to identify Notification info for a sender; + * it uses a combination of senderContactUri and senderContactName as the secondary key. + */ +public class SenderKey extends CompositeKey implements Parcelable { + + private SenderKey(String deviceAddress, String key) { + super(deviceAddress, key); + } + + SenderKey(MapMessage message) { + // Use a combination of senderName and senderContactUri for key. Ideally we would use + // only senderContactUri (which is encoded phone no.). However since some phones don't + // provide these, we fall back to senderName. Since senderName may not be unique, we + // include senderContactUri also to provide uniqueness in cases it is available. + this(message.getDeviceAddress(), + message.getSenderName() + "/" + message.getSenderContactUri()); + } + + @Override + public String toString() { + return String.format("SenderKey: %s -- %s", getDeviceAddress(), getSubKey()); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(getDeviceAddress()); + dest.writeString(getSubKey()); + } + + /** Creates {@link SenderKey} instances from {@link Parcel} sources. */ + public static final Parcelable.Creator<SenderKey> CREATOR = + new Parcelable.Creator<SenderKey>() { + @Override + public SenderKey createFromParcel(Parcel source) { + return new SenderKey(source.readString(), source.readString()); + } + + @Override + public SenderKey[] newArray(int size) { + return new SenderKey[size]; + } + }; + +} + diff --git a/tests/robotests/src/com/android/car/messenger/MessengerDelegateTest.java b/tests/robotests/src/com/android/car/messenger/MessengerDelegateTest.java index cf04da3..b160736 100644 --- a/tests/robotests/src/com/android/car/messenger/MessengerDelegateTest.java +++ b/tests/robotests/src/com/android/car/messenger/MessengerDelegateTest.java @@ -50,7 +50,7 @@ public class MessengerDelegateTest { private Intent mMessageOneIntent; private MapMessage mMessageOne; private MessengerDelegate.MessageKey mMessageOneKey; - private MessengerDelegate.SenderKey mSenderKey; + private SenderKey mSenderKey; @Before public void setUp() { @@ -261,6 +261,6 @@ public class MessengerDelegateTest { "Hello", /* timestamp= */ null, /* isReadOnPhone */ false); mMessageOne = MapMessage.parseFrom(mMessageOneIntent); mMessageOneKey = new MessengerDelegate.MessageKey(mMessageOne); - mSenderKey = new MessengerDelegate.SenderKey(mMessageOne); + mSenderKey = new SenderKey(mMessageOne); } } |
