internal change

Bug: 68825005
Test: Added unit tests on CallFeedbackListenerImpl, CallFeedbackNotificationManager and DialerCall. Also manually verified the change.
PiperOrigin-RevId: 184211115
Change-Id: I50927036c3cd5d47862704376e2eef108c473fbf
diff --git a/java/com/android/incallui/CallCardPresenter.java b/java/com/android/incallui/CallCardPresenter.java
index bdbbe8f..da5d1a8 100644
--- a/java/com/android/incallui/CallCardPresenter.java
+++ b/java/com/android/incallui/CallCardPresenter.java
@@ -48,7 +48,6 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.compat.ActivityCompat;
 import com.android.dialer.configprovider.ConfigProviderBindings;
-import com.android.dialer.feedback.FeedbackComponent;
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.Logger;
 import com.android.dialer.multimedia.MultimediaData;
@@ -154,11 +153,6 @@
     return !TextUtils.isEmpty(call.getCallSubject());
   }
 
-  private void addCallFeedbackListener(Context context) {
-    LogUtil.d("CallCardPresenter.addCallFeedbackListener", "Adding call feedback listener");
-    CallList.getInstance().addListener(FeedbackComponent.get(context).getCallFeedbackListener());
-  }
-
   @Override
   public void onInCallScreenDelegateInit(InCallScreen inCallScreen) {
     Assert.isNotNull(inCallScreen);
@@ -173,7 +167,6 @@
         this.inCallScreen.showNoteSentToast();
       }
       call.addListener(this);
-      addCallFeedbackListener(context);
       // start processing lookups right away.
       if (!call.isConferenceCall()) {
         startContactInfoSearch(call, true, call.getState() == DialerCall.State.INCOMING);
diff --git a/java/com/android/incallui/InCallServiceImpl.java b/java/com/android/incallui/InCallServiceImpl.java
index 539dba8..1cb6c47 100644
--- a/java/com/android/incallui/InCallServiceImpl.java
+++ b/java/com/android/incallui/InCallServiceImpl.java
@@ -24,6 +24,7 @@
 import android.telecom.CallAudioState;
 import android.telecom.InCallService;
 import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
+import com.android.dialer.feedback.FeedbackComponent;
 import com.android.incallui.audiomode.AudioModeProvider;
 import com.android.incallui.call.CallList;
 import com.android.incallui.call.ExternalCallList;
@@ -39,6 +40,7 @@
 
   private ReturnToCallController returnToCallController;
   private NewReturnToCallController newReturnToCallController;
+  private CallList.Listener feedbackListener;
 
   @Override
   public void onCallAudioStateChanged(CallAudioState audioState) {
@@ -102,6 +104,8 @@
       newReturnToCallController =
           new NewReturnToCallController(this, ContactInfoCache.getInstance(context));
     }
+    feedbackListener = FeedbackComponent.get(context).getCallFeedbackListener();
+    CallList.getInstance().addListener(feedbackListener);
 
     IBinder iBinder = super.onBind(intent);
     Trace.endSection();
@@ -134,6 +138,10 @@
       newReturnToCallController.tearDown();
       newReturnToCallController = null;
     }
+    if (feedbackListener != null) {
+      CallList.getInstance().removeListener(feedbackListener);
+      feedbackListener = null;
+    }
     Trace.endSection();
   }
 }
diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java
index e581ba3..1785ece 100644
--- a/java/com/android/incallui/call/DialerCall.java
+++ b/java/com/android/incallui/call/DialerCall.java
@@ -173,6 +173,8 @@
   private List<PhoneAccountHandle> callCapableAccounts;
   private String countryIso;
 
+  private volatile boolean feedbackRequested = false;
+
   public static String getNumberFromHandle(Uri handle) {
     return handle == null ? "" : handle.getSchemeSpecificPart();
   }
@@ -438,7 +440,7 @@
   /* package-private */ Call getTelecomCall() {
     return telecomCall;
   }
-
+  
   public StatusHints getStatusHints() {
     return telecomCall.getDetails().getStatusHints();
   }
@@ -1450,6 +1452,14 @@
     return selectedAvailableVideoTechType;
   }
 
+  public void markFeedbackRequested() {
+    feedbackRequested = true;
+  }
+
+  public boolean isFeedbackRequested() {
+    return feedbackRequested;
+  }
+
   /**
    * Specifies whether a number is in the call history or not. {@link #CALL_HISTORY_STATUS_UNKNOWN}
    * means there is no result.
diff --git a/packages.mk b/packages.mk
index 40e4d02..7070722 100644
--- a/packages.mk
+++ b/packages.mk
@@ -32,6 +32,7 @@
 	com.android.dialer.databasepopulator \
 	com.android.dialer.dialpadview \
 	com.android.dialer.enrichedcall.simulator \
+	com.android.dialer.feedback \
 	com.android.dialer.interactions \
 	com.android.dialer.lettertile \
 	com.android.dialer.location \