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

Commit 5be7a417 authored by NathanielWaggoner's avatar NathanielWaggoner
Browse files

First draft of fix for issues with note icons not showing up after

screen rotation and fast scrolling.

Change-Id: If9634fd3fbcb3e8db54e64958e32228f2b7983da
parent 50c3a511
Loading
Loading
Loading
Loading
+1 −12
Original line number Diff line number Diff line
@@ -567,16 +567,7 @@ public class CallLogAdapter extends GroupingListAdapter
            views.inCallComponentName = null;
        }
        views.callTimes = getCallTimes(c, count);
        DeepLink dl = mDeepLinkCache.getValue(number, views.callTimes);
        if (dl != null && dl != DeepLinkRequest.EMPTY) {
            views.mDeepLink = dl;
            views.phoneCallDetailsViews.noteIconView.setVisibility(View.VISIBLE);
            views.phoneCallDetailsViews.noteIconView.setImageDrawable(dl.getDrawableIcon(mContext));
        } else {
            views.mDeepLink = null;
            views.phoneCallDetailsViews.noteIconView.setVisibility(View.GONE);
        }

        views.mDeepLinkPresenter.setDeepLink(mDeepLinkCache.getValue(number, views.callTimes));
        String callMethodName = null;
        if (views.inCallComponentName != null) {
            CallMethodInfo cmi = DialerDataSubscription.get(mContext)
@@ -592,8 +583,6 @@ public class CallLogAdapter extends GroupingListAdapter
        views.numberType = label;
        details.numberLabel = label;

        views.mDeepLinkPresenter.prepareUi(number);

        // Check if the day group has changed and display a header if necessary.
        int currentGroup = getDayGroupForCall(views.rowId);
        int previousGroup = getPreviousDayGroup(c);
+5 −12
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.widget.QuickContactBadge;
import android.widget.ImageView;
import android.widget.TextView;

import com.android.dialer.deeplink.DeepLinkRequest;
import com.android.dialer.widget.DialerQuickContact;
import com.android.dialer.deeplink.DeepLinkIntegrationManager;

@@ -83,7 +84,6 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
    public final ImageView primaryActionButtonView;
    /** DialerQuickContact */
    public final DialerQuickContact dialerQuickContact;
    public DeepLink mDeepLink;

    /** The view containing call log item actions.  Null until the ViewStub is inflated. */
    public View actionsView;
@@ -398,9 +398,9 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
            callButtonView.setVisibility(View.GONE);
        }

        if (mDeepLink != null) {
        if (mDeepLinkPresenter.mDeepLink != null) {
            ImageView icon = (ImageView) viewNoteButton.findViewById(R.id.view_note_action_icon);
            icon.setImageDrawable(mDeepLink.getDrawableIcon(mContext));
            icon.setImageDrawable(mDeepLinkPresenter.mDeepLink.getDrawableIcon(mContext));
        } else {
            viewNoteButton.setVisibility(View.GONE);
        }
@@ -583,8 +583,7 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
                    accountHandle);

        } else if (view.getId() == R.id.view_note_action) {
            sendOpeningExisitingEvent();
            mContext.startActivity(mDeepLink.createViewIntent());
            mDeepLinkPresenter.viewExisting();
         } else {
            final String inCallAction = (String) view.getTag(R.id.incall_provider_action_type);
            if (inCallComponentName != null && !TextUtils.isEmpty(inCallAction)) {
@@ -653,10 +652,4 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder

        return viewHolder;
    }

    private void sendOpeningExisitingEvent() {
        DeepLinkIntegrationManager.getInstance().sendContentSentEvent(mContext, mDeepLink,
                new ComponentName(mContext, CallLogListItemViewHolder.class));
    }

}
+32 −43
Original line number Diff line number Diff line
@@ -15,10 +15,14 @@
 */
package com.android.dialer.calllog;

import android.content.ComponentName;
import android.content.Context;
import android.net.Uri;
import android.view.View;
import android.widget.ImageView;

import com.android.dialer.R;
import com.android.dialer.deeplink.DeepLinkRequest;
import com.cyanogen.ambient.common.api.ResultCallback;
import com.cyanogen.ambient.deeplink.DeepLink;
import com.cyanogen.ambient.deeplink.DeepLink.DeepLinkResultList;
@@ -32,64 +36,49 @@ import java.util.ArrayList;

public class DeepLinkPresenter {

    private CallLogListItemViewHolder mViews;
    Context mContext;
    DeepLink mDeepLink;
    private CallLogListItemViewHolder mViews;

    public DeepLinkPresenter(Context context) {
        mContext = context;
    }

    public void setCallLogViewHolder(CallLogListItemViewHolder holder) {
        mViews = holder;
    }

    public void handleDeepLink(List<DeepLink> links) {
        if (links != null) {
            for (DeepLink link : links) {
                if (link != null && link.getApplicationType() == DeepLinkApplicationType.NOTE
                        && link.getIcon() != DeepLink.DEFAULT_ICON) {
                    mViews.mDeepLink = link;
                    updateViews();
                    break;
                }
            }
        }
    }
    private void updateViews() {
        if (mDeepLink != null && mDeepLink != DeepLinkRequest.EMPTY) {
            if (mViews.viewNoteButton != null) {
                ImageView icon = (ImageView) mViews.viewNoteButton
                        .findViewById(R.id.view_note_action_icon);
                icon.setImageDrawable(mDeepLink.getDrawableIcon(mContext));
                mViews.viewNoteButton.setVisibility(View.VISIBLE);

    public void handleReadyForRequests(String number,
            ResultCallback<DeepLinkResultList> deepLinkCallback) {
        if (mViews.mDeepLink == null) {
            List<Uri> uris = buildCallUris(number);
            DeepLinkIntegrationManager.getInstance().getPreferredLinksForList(deepLinkCallback,
                    DeepLinkContentType.CALL, uris);
        } else {
            updateViews();
            }
            mViews.phoneCallDetailsViews.noteIconView.setVisibility(View.VISIBLE);
            mViews.phoneCallDetailsViews.noteIconView
                    .setImageDrawable(mDeepLink.getDrawableIcon(mContext));
        } else {
            mDeepLink = null;
            if (mViews.viewNoteButton != null) {
                mViews.viewNoteButton.setVisibility(View.GONE);
            }

    private List<Uri> buildCallUris(String number) {
        List<Uri> uris = new ArrayList<Uri>(mViews.callTimes.length);
        for (int i = 0; i < mViews.callTimes.length; i++) {
            uris.add(DeepLinkIntegrationManager.generateCallUri(number, mViews.callTimes[i]));
            mViews.phoneCallDetailsViews.noteIconView.setVisibility(View.GONE);
        }
        return uris;
    }

    private void updateViews() {
        mViews.phoneCallDetailsViews.noteIconView.setVisibility(View.VISIBLE);
        mViews.phoneCallDetailsViews.noteIconView.setImageDrawable(
                mViews.mDeepLink.getDrawableIcon(mContext));
    public void setDeepLink(DeepLink deepLink) {
        mDeepLink = deepLink;
        updateViews();
    }

    private final ResultCallback<DeepLinkResultList> deepLinkCallback = new
            ResultCallback<DeepLinkResultList>() {
                @Override
                public void onResult(DeepLinkResultList deepLinkResult) {
                    handleDeepLink(deepLinkResult.getResults());
    public void viewExisting() {
        if (mDeepLink != null) {
            DeepLinkIntegrationManager.getInstance().sendContentSentEvent(mContext, mDeepLink,
                    new ComponentName(mContext, CallLogListItemViewHolder.class));
            mContext.startActivity(mDeepLink.createViewIntent());
        }
            };

    public void prepareUi(final String number) {
        handleReadyForRequests(number, deepLinkCallback);
    }

}
+26 −13
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.dialer.deeplink;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

import com.android.dialer.util.ExpirableCache;

@@ -126,10 +127,17 @@ public class DeepLinkCache {
                    // Process the request.
                    queryDeepLinks(req);
                } else {

                        // only update the UI when there are no more requests
                    if (needRedraw) {
                        if (needRedraw && mPendingRequests.size() <= 0) {
                            Log.e("Nate", "Executing redraw");
                            needRedraw = false;
                            mHandler.sendEmptyMessage(REDRAW);
                        } else {
                            Log.e("nate",
                                    "num requests pending: " + mPendingRequests.size() + " need: "
                                            + "" + needRedraw);
                        }
                    }
                    // Wait until another request is available, or until this
                    // thread is no longer needed (as indicated by being
@@ -141,7 +149,7 @@ public class DeepLinkCache {
                    } catch (InterruptedException ie) {
                        // Ignore, and attempt to continue processing requests.
                    }
                }

            }
        }
    }
@@ -266,17 +274,22 @@ public class DeepLinkCache {
            new ResultCallback<DeepLink.DeepLinkResultList>() {
                @Override
                public void onResult(DeepLink.DeepLinkResultList result) {
            if (result.getResults() != null) {
                handleDeepLinkResults(result.getResults());
                    List<DeepLink> results = result.getResults();
                    if (results == null || results.size() == 0) {
                        return;
                    }
                    handleDeepLinkResults(result.getResults());
                }
            };

    private void handleDeepLinkResults(List<DeepLink> results) {
        for (DeepLink link : results) {
            if (mPendingRequests.containsKey(link.getUri())) {
                mPendingRequests.remove(link.getUri());
            }
            if (shouldPlaceLinkInCache(link)) {
                mCache.put(link.getUri().toString(), link);
                if (mDeepLinkQueryThread != null && mPendingRequests.size() <= 0) {
                if (mDeepLinkQueryThread != null) {
                    mDeepLinkQueryThread.needRedraw = true;
                }
            }
+1 −1
Original line number Diff line number Diff line
@@ -81,7 +81,7 @@ public class DeepLinkIntegrationManager {
            List<Uri> uris) {
        PendingResult<DeepLink.DeepLinkResultList> result = null;
        if (hasConnectedClient()) {
            result = mApi.getPreferredLinksForList(mAmbientApiClient,
            result = mApi.getAllLinksInlist(mAmbientApiClient,
                    DeepLinkApplicationType.NOTE, category, uris);
            result.setResultCallback(callback);
        }