Unbundle car-setup-wizard-lib

- Add gradle.build
- Update value/attr to avoid conflict
- Make a local copy instead of using hidden API XmlUtils
- Change android annotation to androidx annotation
- Use public Handle.hasCallbacks(callback) instead of the hidden
Handler.hasMessagesOrCallbacks()

Bug: 187445956
Test: built with Soong successfully, CarSetupWizardLibRoboTests passed. Built with Gradle successfully, tests passed with Gradle.
Change-Id: I5e76e66f005d55128dbb6122f7eae3c307c77feb
Merged-in: I5e76e66f005d55128dbb6122f7eae3c307c77feb
diff --git a/library/main/Android.bp b/library/main/Android.bp
index 5333edc..f99ecdd 100644
--- a/library/main/Android.bp
+++ b/library/main/Android.bp
@@ -26,5 +26,5 @@
     optimize: {
         enabled: false,
     },
-    min_sdk_version: "26",
+    min_sdk_version: "28",
 }
diff --git a/library/main/AndroidManifest-gradle.xml b/library/main/AndroidManifest-gradle.xml
new file mode 100644
index 0000000..cc9c1ab
--- /dev/null
+++ b/library/main/AndroidManifest-gradle.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2021 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.android.car.setupwizardlib">
+</manifest>
diff --git a/library/main/build.gradle b/library/main/build.gradle
new file mode 100644
index 0000000..412e3b0
--- /dev/null
+++ b/library/main/build.gradle
@@ -0,0 +1,85 @@
+// Copyright (C) 2021 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.
+//
+
+// Library-level build file
+
+apply plugin: 'com.android.library'
+
+buildscript {
+    repositories {
+        mavenCentral()
+    }
+}
+
+android {
+    compileSdkVersion 30
+
+    defaultConfig {
+        minSdkVersion 28
+        targetSdkVersion 30
+        versionCode 1
+        versionName "1.0"
+        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+    }
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+
+    sourceSets {
+        main {
+            manifest.srcFile 'AndroidManifest-gradle.xml'
+            res.srcDirs = ['res']
+            java.srcDirs = ['src']
+        }
+
+        test {
+            manifest.srcFile 'tests/robotests/AndroidManifest.xml'
+            res.srcDirs += ['tests/robotests/res','tests/robotests/config']
+            java.srcDirs = ['tests/robotests/src']
+        }
+    }
+
+    android {
+        lintOptions {
+            abortOnError false
+        }
+    }
+
+    testOptions {
+        unitTests {
+            includeAndroidResources = true
+        }
+    }
+}
+
+dependencies {
+    implementation files('../../../../../../prebuilts/sdk/30/system/android.car-system-stubs.jar')
+
+    implementation 'androidx.car:car:1.0.0-alpha7'
+    implementation 'androidx.appcompat:appcompat:1.2.0'
+    implementation 'androidx.cardview:cardview:1.0.0'
+    implementation 'androidx.recyclerview:recyclerview:1.2.0'
+    implementation 'androidx.gridlayout:gridlayout:1.0.0'
+    implementation 'androidx.preference:preference:1.1.1'
+    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
+    implementation 'androidx.core:core:1.3.2'
+    implementation 'androidx.annotation:annotation:1.2.0'
+
+    testImplementation 'com.google.truth:truth:0.41'
+    testImplementation 'org.mockito:mockito-core:3.6.0'
+    testImplementation 'org.robolectric:robolectric:4.5.1'
+}
diff --git a/library/main/res/values/attrs.xml b/library/main/res/values/attrs.xml
index 667a98f..31d2f5b 100644
--- a/library/main/res/values/attrs.xml
+++ b/library/main/res/values/attrs.xml
@@ -15,58 +15,81 @@
     limitations under the License.
 -->
 <resources>
+    <!-- Attributes related to the visibility of the back button -->
+    <attr name="showBackButton" format="boolean"/>
+
+    <!-- Attributes related to the visibility and text of the toolbar title -->
+    <attr name="showToolbarTitle" format="boolean"/>
+    <attr name="toolbarTitleText" format="string"/>
+
+    <!--  Attributes related to the visibility and text of primary continue button -->
+    <attr name="showPrimaryToolbarButton" format="boolean"/>
+    <attr name="primaryToolbarButtonText" format="string"/>
+    <attr name="primaryToolbarButtonEnabled" format="boolean"/>
+    <attr name="primaryToolbarButtonFlat" format="boolean"/>
+
+    <!--  Attributes related to the visibility and text of secondary continue button -->
+    <attr name="showSecondaryToolbarButton" format="boolean"/>
+    <attr name="secondaryToolbarButtonText" format="string"/>
+    <attr name="secondaryToolbarButtonEnabled" format="boolean"/>
+
+    <!--  Attributes related to the visibility and indeterminate/determinate state
+              of the progress bar -->
+    <attr name="showProgressBar"/>
+    <attr name="indeterminateProgressBar"/>
+
     <!-- Custom attribute definitions for the CarSetupWizardLayout -->
     <declare-styleable name="CarSetupWizardLayout">
         <!-- Attributes related to the visibility of the back button -->
-        <attr name="showBackButton" format="boolean"/>
+        <attr name="showBackButton"/>
 
         <!-- Attributes related to the visibility and text of the toolbar title -->
-        <attr name="showToolbarTitle" format="boolean"/>
-        <attr name="toolbarTitleText" format="string"/>
+        <attr name="showToolbarTitle"/>
+        <attr name="toolbarTitleText"/>
 
         <!--  Attributes related to the visibility and text of primary continue button -->
-        <attr name="showPrimaryToolbarButton" format="boolean"/>
-        <attr name="primaryToolbarButtonText" format="string"/>
-        <attr name="primaryToolbarButtonEnabled" format="boolean"/>
-        <attr name="primaryToolbarButtonFlat" format="boolean"/>
+        <attr name="showPrimaryToolbarButton"/>
+        <attr name="primaryToolbarButtonText"/>
+        <attr name="primaryToolbarButtonEnabled"/>
+        <attr name="primaryToolbarButtonFlat"/>
 
         <!--  Attributes related to the visibility and text of secondary continue button -->
-        <attr name="showSecondaryToolbarButton" format="boolean"/>
-        <attr name="secondaryToolbarButtonText" format="string"/>
-        <attr name="secondaryToolbarButtonEnabled" format="boolean"/>
+        <attr name="showSecondaryToolbarButton"/>
+        <attr name="secondaryToolbarButtonText"/>
+        <attr name="secondaryToolbarButtonEnabled"/>
 
         <!--  Attributes related to the visibility and indeterminate/determinate state
               of the progress bar -->
-        <attr name="showProgressBar" format="boolean"/>
-        <attr name="indeterminateProgressBar" format="boolean"/>
+        <attr name="showProgressBar"/>
+        <attr name="indeterminateProgressBar" />
     </declare-styleable>
 
     <!-- Custom attribute definitions for the CarSetupWizardBaseLayout -->
     <declare-styleable name="CarSetupWizardBaseLayout">
         <!-- Attributes related to the visibility of the back button -->
-        <attr name="showBackButton" format="boolean"/>
+        <attr name="showBackButton"/>
         <!-- Attributes related to the visibility of the close button -->
         <attr name="showCloseButton" format="boolean"/>
 
         <!-- Attributes related to the visibility and text of the toolbar title -->
-        <attr name="showToolbarTitle" format="boolean"/>
-        <attr name="toolbarTitleText" format="string"/>
+        <attr name="showToolbarTitle"/>
+        <attr name="toolbarTitleText"/>
 
         <!--  Attributes related to the visibility and text of primary continue button -->
-        <attr name="showPrimaryToolbarButton" format="boolean"/>
-        <attr name="primaryToolbarButtonText" format="string"/>
-        <attr name="primaryToolbarButtonEnabled" format="boolean"/>
-        <attr name="primaryToolbarButtonFlat" format="boolean"/>
+        <attr name="showPrimaryToolbarButton"/>
+        <attr name="primaryToolbarButtonText"/>
+        <attr name="primaryToolbarButtonEnabled"/>
+        <attr name="primaryToolbarButtonFlat"/>
 
         <!--  Attributes related to the visibility and text of secondary continue button -->
-        <attr name="showSecondaryToolbarButton" format="boolean"/>
-        <attr name="secondaryToolbarButtonText" format="string"/>
-        <attr name="secondaryToolbarButtonEnabled" format="boolean"/>
+        <attr name="showSecondaryToolbarButton"/>
+        <attr name="secondaryToolbarButtonText" />
+        <attr name="secondaryToolbarButtonEnabled"/>
 
         <!--  Attributes related to the visibility and indeterminate/determinate state
               of the progress bar -->
-        <attr name="showProgressBar" format="boolean"/>
-        <attr name="indeterminateProgressBar" format="boolean"/>
+        <attr name="showProgressBar"/>
+        <attr name="indeterminateProgressBar"/>
     </declare-styleable>
 
-</resources>
\ No newline at end of file
+</resources>
diff --git a/library/main/src/com/android/car/setupwizardlib/BaseActivity.java b/library/main/src/com/android/car/setupwizardlib/BaseActivity.java
index 4fe59e7..edd2b73 100644
--- a/library/main/src/com/android/car/setupwizardlib/BaseActivity.java
+++ b/library/main/src/com/android/car/setupwizardlib/BaseActivity.java
@@ -16,12 +16,12 @@
 
 package com.android.car.setupwizardlib;
 
-import android.annotation.CallSuper;
 import android.content.Intent;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 
+import androidx.annotation.CallSuper;
 import androidx.annotation.LayoutRes;
 import androidx.annotation.StyleRes;
 import androidx.annotation.VisibleForTesting;
diff --git a/library/main/src/com/android/car/setupwizardlib/BaseSetupWizardActivity.java b/library/main/src/com/android/car/setupwizardlib/BaseSetupWizardActivity.java
index 255f228..36caae0 100644
--- a/library/main/src/com/android/car/setupwizardlib/BaseSetupWizardActivity.java
+++ b/library/main/src/com/android/car/setupwizardlib/BaseSetupWizardActivity.java
@@ -16,12 +16,12 @@
 
 package com.android.car.setupwizardlib;
 
-import android.annotation.CallSuper;
 import android.content.Intent;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 
+import androidx.annotation.CallSuper;
 import androidx.annotation.LayoutRes;
 import androidx.annotation.StyleRes;
 import androidx.annotation.VisibleForTesting;
diff --git a/library/main/src/com/android/car/setupwizardlib/CarSetupWizardBaseLayout.java b/library/main/src/com/android/car/setupwizardlib/CarSetupWizardBaseLayout.java
index febb712..715315a 100644
--- a/library/main/src/com/android/car/setupwizardlib/CarSetupWizardBaseLayout.java
+++ b/library/main/src/com/android/car/setupwizardlib/CarSetupWizardBaseLayout.java
@@ -16,7 +16,6 @@
 
 package com.android.car.setupwizardlib;
 
-import android.annotation.Nullable;
 import android.content.Context;
 import android.content.res.ColorStateList;
 import android.content.res.TypedArray;
@@ -41,6 +40,7 @@
 import android.widget.ProgressBar;
 import android.widget.TextView;
 
+import androidx.annotation.Nullable;
 import androidx.annotation.StyleRes;
 import androidx.annotation.VisibleForTesting;
 
diff --git a/library/main/src/com/android/car/setupwizardlib/CarSetupWizardCompatLayout.java b/library/main/src/com/android/car/setupwizardlib/CarSetupWizardCompatLayout.java
index 2d74aa9..f5191cc 100644
--- a/library/main/src/com/android/car/setupwizardlib/CarSetupWizardCompatLayout.java
+++ b/library/main/src/com/android/car/setupwizardlib/CarSetupWizardCompatLayout.java
@@ -16,10 +16,11 @@
 
 package com.android.car.setupwizardlib;
 
-import android.annotation.Nullable;
 import android.content.Context;
 import android.util.AttributeSet;
 
+import androidx.annotation.Nullable;
+
 /**
  * This layout applies light theming attributes from the partner overlay.  It's functionally
  * equivalent to CarSetupWizardBaseLayout which is package-private.  But in the future, it could be
diff --git a/library/main/src/com/android/car/setupwizardlib/CarSetupWizardDesignLayout.java b/library/main/src/com/android/car/setupwizardlib/CarSetupWizardDesignLayout.java
index 62e52d9..92269f0 100644
--- a/library/main/src/com/android/car/setupwizardlib/CarSetupWizardDesignLayout.java
+++ b/library/main/src/com/android/car/setupwizardlib/CarSetupWizardDesignLayout.java
@@ -16,10 +16,11 @@
 
 package com.android.car.setupwizardlib;
 
-import android.annotation.Nullable;
 import android.content.Context;
 import android.util.AttributeSet;
 
+import androidx.annotation.Nullable;
+
 import com.android.car.setupwizardlib.partner.PartnerConfig;
 import com.android.car.setupwizardlib.partner.PartnerConfigHelper;
 
diff --git a/library/main/src/com/android/car/setupwizardlib/CarSetupWizardLayout.java b/library/main/src/com/android/car/setupwizardlib/CarSetupWizardLayout.java
index 9d30220..19a1923 100644
--- a/library/main/src/com/android/car/setupwizardlib/CarSetupWizardLayout.java
+++ b/library/main/src/com/android/car/setupwizardlib/CarSetupWizardLayout.java
@@ -15,7 +15,6 @@
  */
 package com.android.car.setupwizardlib;
 
-import android.annotation.Nullable;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.PorterDuff;
@@ -40,6 +39,7 @@
 import android.widget.ProgressBar;
 import android.widget.TextView;
 
+import androidx.annotation.Nullable;
 import androidx.annotation.StyleRes;
 import androidx.annotation.VisibleForTesting;
 
diff --git a/library/main/src/com/android/car/setupwizardlib/summary/PartnerSummaryActionsCollector.java b/library/main/src/com/android/car/setupwizardlib/summary/PartnerSummaryActionsCollector.java
index 1291922..2dfb04b 100644
--- a/library/main/src/com/android/car/setupwizardlib/summary/PartnerSummaryActionsCollector.java
+++ b/library/main/src/com/android/car/setupwizardlib/summary/PartnerSummaryActionsCollector.java
@@ -17,7 +17,6 @@
 
 package com.android.car.setupwizardlib.summary;
 
-import android.annotation.Nullable;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
@@ -29,6 +28,8 @@
 import android.text.TextUtils;
 import android.util.Log;
 
+import androidx.annotation.Nullable;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
diff --git a/library/main/src/com/android/car/setupwizardlib/summary/SummaryAction.java b/library/main/src/com/android/car/setupwizardlib/summary/SummaryAction.java
index aac4ce7..6f9e626 100644
--- a/library/main/src/com/android/car/setupwizardlib/summary/SummaryAction.java
+++ b/library/main/src/com/android/car/setupwizardlib/summary/SummaryAction.java
@@ -16,7 +16,7 @@
 
 package com.android.car.setupwizardlib.summary;
 
-import android.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 /** An instance that represents a single summary action item and all of its state. */
 public class SummaryAction implements Comparable<SummaryAction> {
diff --git a/library/main/tests/robotests/AndroidManifest.xml b/library/main/tests/robotests/AndroidManifest.xml
index a0b00ba..4471c50 100644
--- a/library/main/tests/robotests/AndroidManifest.xml
+++ b/library/main/tests/robotests/AndroidManifest.xml
@@ -16,6 +16,6 @@
 -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="com.android.car.setupwizardlib.robotests">
+          package="com.android.car.setupwizardlib.test">
 
 </manifest>
diff --git a/library/main/tests/robotests/src/com/android/car/setupwizardlib/BaseCompatActivityTest.java b/library/main/tests/robotests/src/com/android/car/setupwizardlib/BaseCompatActivityTest.java
index 632ed6d..7209fc9 100644
--- a/library/main/tests/robotests/src/com/android/car/setupwizardlib/BaseCompatActivityTest.java
+++ b/library/main/tests/robotests/src/com/android/car/setupwizardlib/BaseCompatActivityTest.java
@@ -38,6 +38,7 @@
 import com.android.car.setupwizardlib.robolectric.BaseRobolectricTest;
 import com.android.car.setupwizardlib.robolectric.TestHelper;
 import com.android.car.setupwizardlib.shadows.ShadowCar;
+import com.android.car.setupwizardlib.test.R;
 
 import org.junit.Before;
 import org.junit.Test;
diff --git a/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardLayoutAlternativeActivity.java b/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardLayoutAlternativeActivity.java
index b20da7c..8fbe9e4 100644
--- a/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardLayoutAlternativeActivity.java
+++ b/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardLayoutAlternativeActivity.java
@@ -19,6 +19,8 @@
 import android.app.Activity;
 import android.os.Bundle;
 
+import com.android.car.setupwizardlib.test.R;
+
 /**
  * Activity for CarSetupWizardLayoutTest where primary button isn't shown but secondary button is.
  */
diff --git a/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardLayoutTestActivity.java b/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardLayoutTestActivity.java
index 1894933..6350c44 100644
--- a/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardLayoutTestActivity.java
+++ b/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardLayoutTestActivity.java
@@ -19,6 +19,8 @@
 import android.app.Activity;
 import android.os.Bundle;
 
+import com.android.car.setupwizardlib.test.R;
+
 /**
  * Activity for CarSetupWizardLayoutTest
  */
diff --git a/library/main/tests/robotests/src/com/android/car/setupwizardlib/util/CarDrivingStateMonitorTest.java b/library/main/tests/robotests/src/com/android/car/setupwizardlib/util/CarDrivingStateMonitorTest.java
index 4d0f860..afa28f9 100644
--- a/library/main/tests/robotests/src/com/android/car/setupwizardlib/util/CarDrivingStateMonitorTest.java
+++ b/library/main/tests/robotests/src/com/android/car/setupwizardlib/util/CarDrivingStateMonitorTest.java
@@ -151,7 +151,8 @@
         ShadowCar.setIsConnected(true);
         mCarDrivingStateMonitor.stopMonitor();
         mCarDrivingStateMonitor.startMonitor();
-        assertThat(mCarDrivingStateMonitor.mHandler.hasMessagesOrCallbacks()).isFalse();
+        assertThat(mCarDrivingStateMonitor.mHandler
+            .hasCallbacks(mCarDrivingStateMonitor.mDisconnectRunnable)).isFalse();
     }
 
     @Test
diff --git a/library/main/tests/robotests/src/com/android/car/setupwizardlib/util/CarSetupWizardUiUtilsTest.java b/library/main/tests/robotests/src/com/android/car/setupwizardlib/util/CarSetupWizardUiUtilsTest.java
index 8ba08f3..bacb77a 100644
--- a/library/main/tests/robotests/src/com/android/car/setupwizardlib/util/CarSetupWizardUiUtilsTest.java
+++ b/library/main/tests/robotests/src/com/android/car/setupwizardlib/util/CarSetupWizardUiUtilsTest.java
@@ -23,8 +23,7 @@
 import android.view.View;
 import android.view.Window;
 
-import com.android.car.setupwizardlib.robotests.R;
-import com.android.internal.util.XmlUtils;
+import com.android.car.setupwizardlib.test.R;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -57,8 +56,8 @@
 
     // Note that these colors are defined in the test theme
     private static final int TEST_THEME = R.style.NavAndStatusBarTestTheme;
-    private static final int EXPECTED_COLOR_STATUS_BAR = XmlUtils.convertValueToInt("#001", -1);
-    private static final int EXPECTED_COLOR_NAVIGATION_BAR = XmlUtils.convertValueToInt("#002", -1);
+    private static final int EXPECTED_COLOR_STATUS_BAR = Integer.decode("#001");
+    private static final int EXPECTED_COLOR_NAVIGATION_BAR = Integer.decode("#002");
 
     private Activity mActivity;
     private Window mWindow;