Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9daebe07 authored by Anna Zappone's avatar Anna Zappone
Browse files

Add birthdays to People Space tiles

Birthdays only appear if no notification content is currently present.
They are removed as a status once no longer returned from the Contacts
DB, meaning if removed from the Contacts DB or if queried the day after
the birthday.

Test: in-progress
Change-Id: I35a6a5e5644de281220b7af7c2779e06f0233c47
parent c103f31e
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.app.people;

import android.annotation.NonNull;
import android.app.Person;
import android.content.Intent;
import android.content.pm.LauncherApps;
import android.content.pm.ShortcutInfo;
@@ -44,6 +45,7 @@ public class PeopleSpaceTile implements Parcelable {
    private int mUid;
    private Uri mContactUri;
    private String mPackageName;
    private String mStatusText;
    private long mLastInteractionTimestamp;
    private boolean mIsImportantConversation;
    private boolean mIsHiddenConversation;
@@ -61,6 +63,7 @@ public class PeopleSpaceTile implements Parcelable {
        mContactUri = b.mContactUri;
        mUid = b.mUid;
        mPackageName = b.mPackageName;
        mStatusText = b.mStatusText;
        mLastInteractionTimestamp = b.mLastInteractionTimestamp;
        mIsImportantConversation = b.mIsImportantConversation;
        mIsHiddenConversation = b.mIsHiddenConversation;
@@ -95,6 +98,10 @@ public class PeopleSpaceTile implements Parcelable {
        return mPackageName;
    }

    public String getStatusText() {
        return mStatusText;
    }

    /** Returns the timestamp of the last interaction. */
    public long getLastInteractionTimestamp() {
        return mLastInteractionTimestamp;
@@ -148,6 +155,7 @@ public class PeopleSpaceTile implements Parcelable {
        builder.setContactUri(mContactUri);
        builder.setUid(mUid);
        builder.setPackageName(mPackageName);
        builder.setStatusText(mStatusText);
        builder.setLastInteractionTimestamp(mLastInteractionTimestamp);
        builder.setIsImportantConversation(mIsImportantConversation);
        builder.setIsHiddenConversation(mIsHiddenConversation);
@@ -165,6 +173,7 @@ public class PeopleSpaceTile implements Parcelable {
        private Uri mContactUri;
        private int mUid;
        private String mPackageName;
        private String mStatusText;
        private long mLastInteractionTimestamp;
        private boolean mIsImportantConversation;
        private boolean mIsHiddenConversation;
@@ -188,6 +197,16 @@ public class PeopleSpaceTile implements Parcelable {
            mUserIcon = convertDrawableToIcon(launcherApps.getShortcutIconDrawable(info, 0));
            mUid = info.getUserId();
            mPackageName = info.getPackage();
            mContactUri = getContactUri(info);
        }

        private Uri getContactUri(ShortcutInfo info) {
            if (info.getPersons() == null || info.getPersons().length != 1) {
                return null;
            }
            // TODO(b/175584929): Update to use the Uri from PeopleService directly
            Person person = info.getPersons()[0];
            return person.getUri() == null ? null : Uri.parse(person.getUri());
        }

        /** Sets the ID for the tile. */
@@ -226,6 +245,12 @@ public class PeopleSpaceTile implements Parcelable {
            return this;
        }

        /** Sets the status text. */
        public Builder setStatusText(String statusText) {
            mStatusText = statusText;
            return this;
        }

        /** Sets the last interaction timestamp. */
        public Builder setLastInteractionTimestamp(long lastInteractionTimestamp) {
            mLastInteractionTimestamp = lastInteractionTimestamp;
@@ -279,8 +304,10 @@ public class PeopleSpaceTile implements Parcelable {
        mId = in.readString();
        mUserName = in.readCharSequence();
        mUserIcon = in.readParcelable(Icon.class.getClassLoader());
        mContactUri = in.readParcelable(Uri.class.getClassLoader());
        mUid = in.readInt();
        mPackageName = in.readString();
        mStatusText = in.readString();
        mLastInteractionTimestamp = in.readLong();
        mIsImportantConversation = in.readBoolean();
        mIsHiddenConversation = in.readBoolean();
@@ -300,8 +327,10 @@ public class PeopleSpaceTile implements Parcelable {
        dest.writeString(mId);
        dest.writeCharSequence(mUserName);
        dest.writeParcelable(mUserIcon, flags);
        dest.writeParcelable(mContactUri, flags);
        dest.writeInt(mUid);
        dest.writeString(mPackageName);
        dest.writeString(mStatusText);
        dest.writeLong(mLastInteractionTimestamp);
        dest.writeBoolean(mIsImportantConversation);
        dest.writeBoolean(mIsHiddenConversation);
+3 −1
Original line number Diff line number Diff line
@@ -169,14 +169,16 @@
            </LinearLayout>
            <LinearLayout
                android:background="@drawable/people_space_content_background"
                android:layout_gravity="center"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
                <TextView
                    android:id="@+id/content"
                    android:paddingVertical="3dp"
                    android:paddingHorizontal="12dp"
                    android:gravity="center"
                    android:textAppearance="@*android:style/TextAppearance.DeviceDefault.ListItem"
                    android:textSize="14sp"
                    android:textSize="16sp"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:maxLines="2"
+8 −0
Original line number Diff line number Diff line
@@ -2773,6 +2773,14 @@
    <string name="basic_status" translatable="false">Open conversation</string>
    <!-- Status for conversation without interaction data [CHAR LIMIT=120] -->
    <string name="select_conversation_text" translatable="false">Select one conversation to show in your widget:</string>
    <!-- Timestamp for notification with exact time [CHAR LIMIT=120] -->
    <string name="timestamp" translatable="false"><xliff:g id="duration" example="5 hours">%1$s</xliff:g> ago</string>
    <!-- Timestamp for notification when less than a certain time window [CHAR LIMIT=120] -->
    <string name="less_than_timestamp" translatable="false">Less than <xliff:g id="duration" example="5 hours">%1$s</xliff:g> ago</string>
    <!-- Timestamp for notification when over a certain time window [CHAR LIMIT=120] -->
    <string name="over_timestamp" translatable="false">Over <xliff:g id="duration" example="1 week">%1$s</xliff:g> ago</string>
    <!-- Status text for a birthday today [CHAR LIMIT=120] -->
    <string name="birthday_status" translatable="false">Today is their birthday!</string>

    <!-- Title to display in a notification when ACTION_BATTERY_CHANGED.EXTRA_PRESENT field is false
    [CHAR LIMIT=NONE] -->
+6 −8
Original line number Diff line number Diff line
@@ -44,7 +44,6 @@ import com.android.systemui.R;
import com.android.systemui.people.widget.PeopleSpaceWidgetProvider;

import java.util.List;
import java.util.Map;

/**
 * Shows the user their tiles for their priority People (go/live-status).
@@ -96,13 +95,12 @@ public class PeopleSpaceActivity extends Activity {
     */
    private void setTileViewsWithPriorityConversations() {
        try {
            List<Map.Entry<Long, PeopleSpaceTile>> tiles = PeopleSpaceUtils.getTiles(
            List<PeopleSpaceTile> tiles = PeopleSpaceUtils.getTiles(
                    mContext, mNotificationManager, mPeopleManager, mLauncherApps);
            for (Map.Entry<Long, PeopleSpaceTile> entry : tiles) {
                PeopleSpaceTile tile = entry.getValue();
            for (PeopleSpaceTile tile : tiles) {
                PeopleSpaceTileView tileView = new PeopleSpaceTileView(mContext, mPeopleSpaceLayout,
                        tile.getId());
                setTileView(tileView, tile, entry.getKey());
                setTileView(tileView, tile);
            }
        } catch (Exception e) {
            Log.e(TAG, "Couldn't retrieve conversations", e);
@@ -110,12 +108,12 @@ public class PeopleSpaceActivity extends Activity {
    }

    /** Sets {@code tileView} with the data in {@code conversation}. */
    private void setTileView(PeopleSpaceTileView tileView, PeopleSpaceTile tile,
            long lastInteraction) {
    private void setTileView(PeopleSpaceTileView tileView, PeopleSpaceTile tile) {
        try {
            String pkg = tile.getPackageName();
            String status =
                    PeopleSpaceUtils.getLastInteractionString(mContext, lastInteraction);
                    PeopleSpaceUtils.getLastInteractionString(mContext,
                            tile.getLastInteractionTimestamp(), true);
            tileView.setStatus(status);

            tileView.setName(tile.getUserName().toString());
+276 −90

File changed.

Preview size limit exceeded, changes collapsed.

Loading