From 3936e9f3d62ab743336ec12ba1341ae1b540597e Mon Sep 17 00:00:00 2001 From: Raff Tsai Date: Fri, 28 Sep 2018 17:42:43 +0800 Subject: [PATCH] Add SettingsContextualCardProvider - provide contextual cards for SettingsIntelligence - add contextualcards libs Fixes: 116837093 Test: make RunSettingsRoboTests ROBOTEST_FILTER="com.android.settings.homepage.contextualcards" Change-Id: I873e77fa43e9a8f6056be1f583b1910002efbd2e --- Android.mk | 10 ++- AndroidManifest.xml | 9 +++ libs/contextualcards.aar | Bin 0 -> 5277 bytes .../SettingsContextualCardProvider.java | 56 +++++++++++++++ .../SettingsContextualCardProviderTest.java | 64 ++++++++++++++++++ 5 files changed, 138 insertions(+), 1 deletion(-) create mode 100755 libs/contextualcards.aar create mode 100644 src/com/android/settings/homepage/contextualcards/SettingsContextualCardProvider.java create mode 100644 tests/robotests/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProviderTest.java diff --git a/Android.mk b/Android.mk index 6b0d077a214..f10b3ec2d08 100644 --- a/Android.mk +++ b/Android.mk @@ -41,6 +41,7 @@ LOCAL_STATIC_JAVA_LIBRARIES := \ androidx.lifecycle_lifecycle-extensions \ guava \ jsr305 \ + contextualcards \ settings-logtags \ LOCAL_PROGUARD_FLAG_FILES := proguard.flags @@ -57,7 +58,14 @@ include frameworks/base/packages/SettingsLib/search/common.mk include $(BUILD_PACKAGE) +# ==== prebuilt library ======================== +include $(CLEAR_VARS) + +LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \ + contextualcards:libs/contextualcards.aar +include $(BUILD_MULTI_PREBUILT) + # Use the following include to make our test apk. ifeq (,$(ONE_SHOT_MAKEFILE)) include $(call all-makefiles-under,$(LOCAL_PATH)) -endif +endif \ No newline at end of file diff --git a/AndroidManifest.xml b/AndroidManifest.xml index aa53bdbdab0..94be61c9312 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -3192,6 +3192,15 @@ android:exported="true" android:permission="android.permission.WRITE_SETTINGS_HOMEPAGE_DATA" /> + + + + + diff --git a/libs/contextualcards.aar b/libs/contextualcards.aar new file mode 100755 index 0000000000000000000000000000000000000000..a44a26c38b1f958295cb640c37dfefe21189f583 GIT binary patch literal 5277 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 getContextualCards() { + final List cards = new ArrayList<>(); + final ContextualCard wifiCard = + new ContextualCard.Builder() + .setSliceUri(WifiSlice.WIFI_URI.toString()) + .setName(KEY_WIFI) + .build(); + final ContextualCard dataUsageCard = + new ContextualCard.Builder() + .setSliceUri(DataUsageSlice.DATA_USAGE_CARD_URI.toString()) + .setName(DataUsageSlice.PATH_DATA_USAGE_CARD) + .build(); + + cards.add(wifiCard); + cards.add(dataUsageCard); + return cards; + } +} diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProviderTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProviderTest.java new file mode 100644 index 00000000000..80d94977607 --- /dev/null +++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProviderTest.java @@ -0,0 +1,64 @@ +/* + * 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.settings.homepage.contextualcards; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.ContentResolver; +import android.content.Context; +import android.net.Uri; +import android.os.Bundle; + +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import com.google.android.settings.intelligence.libs.contextualcards.ContextualCard; +import com.google.android.settings.intelligence.libs.contextualcards.ContextualCardProvider; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RuntimeEnvironment; + +import java.util.ArrayList; + +@RunWith(SettingsRobolectricTestRunner.class) +public class SettingsContextualCardProviderTest { + + private Context mContext; + private ContentResolver mResolver; + private Uri mUri; + + @Before + public void setUp() { + mContext = RuntimeEnvironment.application; + mResolver = mContext.getContentResolver(); + mUri = new Uri.Builder() + .scheme(ContentResolver.SCHEME_CONTENT) + .authority(SettingsContextualCardProvider.CARD_AUTHORITY) + .build(); + } + + @Test + public void contentProviderCall_returnCorrectSize() { + final Bundle returnValue = + mResolver.call(mUri, ContextualCardProvider.METHOD_GET_CARD_LIST, "", null); + final ArrayList cards = + returnValue.getParcelableArrayList(ContextualCardProvider.BUNDLE_CARD_LIST); + assertThat(cards.size()).isEqualTo(2); + } +} \ No newline at end of file