More refactoring

Test: unit
PiperOrigin-RevId: 195188099
Change-Id: Ie2273229c257a9a767715831c15d90a6985fdda8
diff --git a/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java b/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java
index e3e9e7a..f90effc 100644
--- a/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java
+++ b/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java
@@ -20,9 +20,9 @@
 import android.content.res.ColorStateList;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
-import android.support.design.widget.BottomSheetBehavior;
-import android.support.design.widget.BottomSheetBehavior.BottomSheetCallback;
-import android.support.design.widget.BottomSheetDialog;
+import android.support.design.bottomsheet.BottomSheetBehavior;
+import android.support.design.bottomsheet.BottomSheetBehavior.BottomSheetCallback;
+import android.support.design.bottomsheet.BottomSheetDialog;
 import android.support.v4.content.ContextCompat;
 import android.text.TextUtils;
 import android.view.LayoutInflater;
diff --git a/java/com/android/incallui/InCallActivity.java b/java/com/android/incallui/InCallActivity.java
index 5ac6b50..98f0019 100644
--- a/java/com/android/incallui/InCallActivity.java
+++ b/java/com/android/incallui/InCallActivity.java
@@ -1504,7 +1504,8 @@
             call.getVideoTech().isSelfManagedCamera(),
             shouldAllowAnswerAndRelease(call),
             CallList.getInstance().getBackgroundCall() != null,
-            call.isSpeakEasyEligible());
+            getSpeakEasyCallManager().isAvailable(getApplicationContext())
+                && call.isSpeakEasyEligible());
     transaction.add(R.id.main, answerScreen.getAnswerScreenFragment(), Tags.ANSWER_SCREEN);
 
     Logger.get(this).logScreenView(ScreenEvent.Type.INCOMING_CALL, this);
diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java
index 1a0de19..70678db 100644
--- a/java/com/android/incallui/call/DialerCall.java
+++ b/java/com/android/incallui/call/DialerCall.java
@@ -86,7 +86,6 @@
 import com.android.incallui.call.state.DialerCallState;
 import com.android.incallui.latencyreport.LatencyReport;
 import com.android.incallui.rtt.protocol.RttChatMessage;
-import com.android.incallui.speakeasy.runtime.Constraints;
 import com.android.incallui.videotech.VideoTech;
 import com.android.incallui.videotech.VideoTech.VideoTechListener;
 import com.android.incallui.videotech.duo.DuoVideoTech;
@@ -1697,10 +1696,6 @@
 
   /** Indicates the call is eligible for SpeakEasy */
   public boolean isSpeakEasyEligible() {
-    if (!Constraints.isAvailable(context)) {
-      return false;
-    }
-
     return !isPotentialEmergencyCallback()
         && !isEmergencyCall()
         && !isActiveRttCall()
diff --git a/java/com/android/incallui/speakeasy/SpeakEasyCallManager.java b/java/com/android/incallui/speakeasy/SpeakEasyCallManager.java
index f2721da..8a815d3 100644
--- a/java/com/android/incallui/speakeasy/SpeakEasyCallManager.java
+++ b/java/com/android/incallui/speakeasy/SpeakEasyCallManager.java
@@ -16,6 +16,7 @@
 
 package com.android.incallui.speakeasy;
 
+import android.content.Context;
 import android.support.annotation.NonNull;
 import android.support.v4.app.Fragment;
 import com.android.incallui.call.DialerCall;
@@ -37,4 +38,15 @@
    * @param call The call which has been removed.
    */
   void onCallRemoved(@NonNull DialerCall call);
+
+  /**
+   * Indicates the feature is available.
+   *
+   * @param context The application context.
+   */
+  boolean isAvailable(@NonNull Context context);
+
+  /** Returns the config provider flag associated with the feature. */
+  @NonNull
+  String getConfigProviderFlag();
 }
diff --git a/java/com/android/incallui/speakeasy/SpeakEasyCallManagerStub.java b/java/com/android/incallui/speakeasy/SpeakEasyCallManagerStub.java
index 9e58ce1..a040973 100644
--- a/java/com/android/incallui/speakeasy/SpeakEasyCallManagerStub.java
+++ b/java/com/android/incallui/speakeasy/SpeakEasyCallManagerStub.java
@@ -16,6 +16,8 @@
 
 package com.android.incallui.speakeasy;
 
+import android.content.Context;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
 import com.android.incallui.call.DialerCall;
@@ -38,4 +40,17 @@
   /** Always inert in the stub. */
   @Override
   public void onCallRemoved(DialerCall call) {}
+
+  /** Always returns false. */
+  @Override
+  public boolean isAvailable(@NonNull Context unused) {
+    return false;
+  }
+
+  /** Always returns a stub string. */
+  @NonNull
+  @Override
+  public String getConfigProviderFlag() {
+    return "not_yet_implmented";
+  }
 }
diff --git a/java/com/android/incallui/speakeasy/runtime/Constraints.java b/java/com/android/incallui/speakeasy/runtime/Constraints.java
deleted file mode 100644
index 1206d59..0000000
--- a/java/com/android/incallui/speakeasy/runtime/Constraints.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2018 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.incallui.speakeasy.runtime;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.os.Build.VERSION_CODES;
-import android.support.annotation.NonNull;
-import android.support.annotation.VisibleForTesting;
-import android.support.v4.os.BuildCompat;
-import android.support.v4.os.UserManagerCompat;
-import com.android.dialer.common.Assert;
-import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
-import com.android.dialer.util.PermissionsUtil;
-
-/** Preconditions for the use of SpeakEasyModule */
-public final class Constraints {
-
-  @VisibleForTesting public static final String SPEAK_EASY_ENABLED = "speak_easy_enabled";
-  private static final String[] REQUIRED_PERMISSIONS = {
-
-  };
-
-  // Non-instantiatable.
-  private Constraints() {}
-
-  public static boolean isAvailable(@NonNull Context context) {
-    Assert.isNotNull(context);
-
-    return isServerConfigEnabled(context)
-        && isUserUnlocked(context)
-        && meetsPlatformSdkFloor()
-        && hasNecessaryPermissions(context);
-  }
-
-  private static boolean isServerConfigEnabled(@NonNull Context context) {
-    return ConfigProviderBindings.get(context).getBoolean(SPEAK_EASY_ENABLED, false);
-  }
-
-  private static boolean isUserUnlocked(@NonNull Context context) {
-    return UserManagerCompat.isUserUnlocked(context);
-  }
-
-  private static boolean meetsPlatformSdkFloor() {
-    return BuildCompat.isAtLeastP();
-  }
-
-  @SuppressWarnings("AndroidApiChecker") // Use of Java 8 APIs.
-  @TargetApi(VERSION_CODES.N)
-  private static boolean hasNecessaryPermissions(@NonNull Context context) {
-    for (String permission : REQUIRED_PERMISSIONS) {
-      if (!PermissionsUtil.hasPermission(context, permission)) {
-        LogUtil.i("Constraints.hasNecessaryPermissions", "missing permission: %s ", permission);
-        return false;
-      }
-    }
-    return true;
-  }
-}