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

Commit 96d17e40 authored by Yorke Lee's avatar Yorke Lee
Browse files

Improve setting of contact photos in InCallUI

Add drawable caching in CallCardFragment so that we don't set
the same drawable multiple times.

Save and reuse the default contact photo and default conference
photo to avoid possibly decoding them multiple times.

Bug: 18373617
Change-Id: I54b925e6fc6f136f3d3ef27609fcdaf4c39a73dd
parent 3e8ec5a8
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>

<!--
  ~ Copyright (C) 2014 The Android Open Source Project
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License
  -->

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/img_conference"
    android:autoMirrored="true" />
 No newline at end of file
+13 −4
Original line number Diff line number Diff line
@@ -78,6 +78,7 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
    private View mCallNumberAndLabel;
    private ImageView mPhoto;
    private TextView mElapsedTime;
    private Drawable mPrimaryPhotoDrawable;

    // Container view that houses the entire primary call card, including the call buttons
    private View mPrimaryCallCardContainer;
@@ -111,6 +112,8 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr

    private int mVideoAnimationDuration;

    private Drawable mDefaultContactPhoto;

    private MaterialPalette mCurrentThemeColors;

    @Override
@@ -599,9 +602,14 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr

    private void setDrawableToImageView(ImageView view, Drawable photo) {
        if (photo == null) {
            photo = view.getResources().getDrawable(R.drawable.img_no_image);
            photo.setAutoMirrored(true);
            photo = ContactInfoCache.getInstance(
                    view.getContext()).getDefaultContactPhotoDrawable();
        }

        if (mPrimaryPhotoDrawable == photo) {
            return;
        }
        mPrimaryPhotoDrawable = photo;

        final Drawable current = view.getDrawable();
        if (current == null) {
@@ -622,8 +630,9 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr

    private Drawable getConferencePhoto(boolean canManageConference) {
        Log.v(this, "canManageConferencePhoto: " + canManageConference);
        final int resId = canManageConference ? R.drawable.img_conference : R.drawable.img_phone;
        return getView().getResources().getDrawable(resId);
        final ContactInfoCache cache = ContactInfoCache.getInstance(getView().getContext());
        return canManageConference ? cache.getConferenceDrawable()
                : cache.getDefaultContactPhotoDrawable();
    }

    /**
+21 −4
Original line number Diff line number Diff line
@@ -57,6 +57,9 @@ public class ContactInfoCache implements ContactsAsyncHelper.OnImageLoadComplete

    private static ContactInfoCache sCache = null;

    private Drawable mDefaultContactPhotoDrawable;
    private Drawable mConferencePhotoDrawable;

    public static synchronized ContactInfoCache getInstance(Context mContext) {
        if (sCache == null) {
            sCache = new ContactInfoCache(mContext.getApplicationContext());
@@ -316,12 +319,10 @@ public class ContactInfoCache implements ContactsAsyncHelper.OnImageLoadComplete
            if (info.cachedPhoto != null) {
                photo = info.cachedPhoto;
            } else {
                photo = context.getResources().getDrawable(R.drawable.img_no_image);
                photo.setAutoMirrored(true);
                photo = getDefaultContactPhotoDrawable();
            }
        } else if (info.contactDisplayPhotoUri == null) {
            photo = context.getResources().getDrawable(R.drawable.img_no_image);
            photo.setAutoMirrored(true);
            photo = getDefaultContactPhotoDrawable();
        } else {
            cce.displayPhotoUri = info.contactDisplayPhotoUri;
        }
@@ -491,6 +492,22 @@ public class ContactInfoCache implements ContactsAsyncHelper.OnImageLoadComplete
        return name;
    }

    public Drawable getDefaultContactPhotoDrawable() {
        if (mDefaultContactPhotoDrawable == null) {
            mDefaultContactPhotoDrawable =
                    mContext.getResources().getDrawable(R.drawable.img_no_image_automirrored);
        }
        return mDefaultContactPhotoDrawable;
    }

    public Drawable getConferenceDrawable() {
        if (mConferencePhotoDrawable == null) {
            mConferencePhotoDrawable =
                    mContext.getResources().getDrawable(R.drawable.img_conference_automirrored);
        }
        return mConferencePhotoDrawable;
    }

    /**
     * Callback interface for the contact query.
     */