Adding call feedback mechanism

Test: No impact on existing functionalities
PiperOrigin-RevId: 176562444
Change-Id: I209379dde3e920a27d6e735c8494647154e40e5a
diff --git a/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java b/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java
index a0fb604..2bba432 100644
--- a/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java
+++ b/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java
@@ -22,6 +22,7 @@
 import com.android.dialer.configprovider.SharedPrefConfigProviderModule;
 import com.android.dialer.duo.stub.StubDuoModule;
 import com.android.dialer.enrichedcall.stub.StubEnrichedCallModule;
+import com.android.dialer.feedback.stub.StubFeedbackModule;
 import com.android.dialer.inject.ContextModule;
 import com.android.dialer.phonelookup.PhoneLookupModule;
 import com.android.dialer.phonenumbergeoutil.impl.PhoneNumberGeoUtilModule;
@@ -55,7 +56,8 @@
     StubEnrichedCallModule.class,
     StubMapsModule.class,
     VoicemailModule.class,
-    StubSimSuggestionModule.class
+    StubSimSuggestionModule.class,
+    StubFeedbackModule.class,
   }
 )
 public interface AospDialerRootComponent extends BaseDialerRootComponent {}
diff --git a/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java b/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java
index d5c91c9..2e13cfb 100644
--- a/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java
+++ b/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java
@@ -22,6 +22,7 @@
 import com.android.dialer.configprovider.ConfigProviderComponent;
 import com.android.dialer.duo.DuoComponent;
 import com.android.dialer.enrichedcall.EnrichedCallComponent;
+import com.android.dialer.feedback.FeedbackComponent;
 import com.android.dialer.main.MainComponent;
 import com.android.dialer.phonelookup.PhoneLookupComponent;
 import com.android.dialer.phonenumbergeoutil.PhoneNumberGeoUtilComponent;
@@ -46,6 +47,7 @@
         DialerExecutorComponent.HasComponent,
         DuoComponent.HasComponent,
         EnrichedCallComponent.HasComponent,
+        FeedbackComponent.HasComponent,
         MainComponent.HasComponent,
         MapsComponent.HasComponent,
         PhoneLookupComponent.HasComponent,
diff --git a/java/com/android/dialer/binary/google/GoogleStubDialerRootComponent.java b/java/com/android/dialer/binary/google/GoogleStubDialerRootComponent.java
index 1ae80f4..2801bde 100644
--- a/java/com/android/dialer/binary/google/GoogleStubDialerRootComponent.java
+++ b/java/com/android/dialer/binary/google/GoogleStubDialerRootComponent.java
@@ -22,6 +22,7 @@
 import com.android.dialer.configprovider.SharedPrefConfigProviderModule;
 import com.android.dialer.duo.stub.StubDuoModule;
 import com.android.dialer.enrichedcall.stub.StubEnrichedCallModule;
+import com.android.dialer.feedback.stub.StubFeedbackModule;
 import com.android.dialer.inject.ContextModule;
 import com.android.dialer.phonelookup.PhoneLookupModule;
 import com.android.dialer.phonenumbergeoutil.impl.PhoneNumberGeoUtilModule;
@@ -58,7 +59,8 @@
     StubEnrichedCallModule.class,
     MapsModule.class,
     VoicemailModule.class,
-    StubDuoModule.class
+    StubDuoModule.class,
+    StubFeedbackModule.class,
   }
 )
 public interface GoogleStubDialerRootComponent extends BaseDialerRootComponent {}
diff --git a/java/com/android/dialer/feedback/FeedbackComponent.java b/java/com/android/dialer/feedback/FeedbackComponent.java
new file mode 100644
index 0000000..e3863d7
--- /dev/null
+++ b/java/com/android/dialer/feedback/FeedbackComponent.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2017 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
+ */
+
+package com.android.dialer.feedback;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import com.android.dialer.inject.HasRootComponent;
+import com.android.incallui.call.CallList;
+import dagger.Subcomponent;
+
+/** Subcomponent that can be used to access the feedback implementation. */
+@Subcomponent
+public abstract class FeedbackComponent {
+  @NonNull
+  public abstract CallList.Listener getCallFeedbackListener();
+
+  public static FeedbackComponent get(Context context) {
+    return ((HasComponent) ((HasRootComponent) context.getApplicationContext()).component())
+        .feedbackComponent();
+  }
+
+  /** Used to refer to the root application component. */
+  public interface HasComponent {
+    FeedbackComponent feedbackComponent();
+  }
+}
diff --git a/java/com/android/dialer/feedback/stub/CallFeedbackListenerStub.java b/java/com/android/dialer/feedback/stub/CallFeedbackListenerStub.java
new file mode 100644
index 0000000..3eb8590
--- /dev/null
+++ b/java/com/android/dialer/feedback/stub/CallFeedbackListenerStub.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2017 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
+ */
+
+package com.android.dialer.feedback.stub;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import com.android.dialer.common.Assert;
+import com.android.dialer.inject.ApplicationContext;
+import com.android.incallui.call.CallList;
+import com.android.incallui.call.DialerCall;
+import javax.inject.Inject;
+
+/**
+ * Stub implementation of {@link com.google.android.apps.dialer.feedback.CallFeedbackListenerImpl}
+ */
+public class CallFeedbackListenerStub implements CallList.Listener {
+
+  @NonNull private final Context context;
+
+  @Inject
+  public CallFeedbackListenerStub(@ApplicationContext @NonNull Context context) {
+    this.context = Assert.isNotNull(context);
+  }
+
+  @Override
+  public void onIncomingCall(DialerCall call) {}
+
+  @Override
+  public void onUpgradeToVideo(DialerCall call) {}
+
+  @Override
+  public void onSessionModificationStateChange(DialerCall call) {}
+
+  @Override
+  public void onCallListChange(CallList callList) {}
+
+  @Override
+  public void onDisconnect(DialerCall call) {}
+
+  @Override
+  public void onWiFiToLteHandover(DialerCall call) {}
+
+  @Override
+  public void onHandoverToWifiFailed(DialerCall call) {}
+
+  @Override
+  public void onInternationalCallOnWifi(@NonNull DialerCall call) {}
+}
diff --git a/java/com/android/dialer/feedback/stub/StubFeedbackModule.java b/java/com/android/dialer/feedback/stub/StubFeedbackModule.java
new file mode 100644
index 0000000..61ee413
--- /dev/null
+++ b/java/com/android/dialer/feedback/stub/StubFeedbackModule.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2017 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
+ */
+
+package com.android.dialer.feedback.stub;
+
+import android.content.Context;
+import com.android.dialer.common.LogUtil;
+import com.android.dialer.inject.ApplicationContext;
+import com.android.incallui.call.CallList;
+import dagger.Module;
+import dagger.Provides;
+
+/** Module which bind {@link com.android.dialer.feedback.stub.CallFeedbackListenerStub}. */
+@Module
+public class StubFeedbackModule {
+
+  @Provides
+  static CallList.Listener provideCallFeedbackListener(@ApplicationContext Context context) {
+    LogUtil.i("StubFeedbackModule.provideCallFeedbackListener", "returning stub");
+    return new CallFeedbackListenerStub(context);
+  }
+}
diff --git a/java/com/android/incallui/CallCardPresenter.java b/java/com/android/incallui/CallCardPresenter.java
index 0ef0c98..f3c2af6 100644
--- a/java/com/android/incallui/CallCardPresenter.java
+++ b/java/com/android/incallui/CallCardPresenter.java
@@ -48,6 +48,7 @@
 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;
@@ -151,6 +152,11 @@
     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);
@@ -165,7 +171,7 @@
         mInCallScreen.showNoteSentToast();
       }
       call.addListener(this);
-
+      addCallFeedbackListener(mContext);
       // start processing lookups right away.
       if (!call.isConferenceCall()) {
         startContactInfoSearch(call, true, call.getState() == DialerCall.State.INCOMING);