| /* |
| * 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 android.appwidget.cts; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assume.assumeTrue; |
| |
| import android.app.Instrumentation; |
| import android.appwidget.AppWidgetProviderInfo; |
| import android.appwidget.cts.provider.FirstAppWidgetProvider; |
| import android.appwidget.cts.provider.SecondAppWidgetProvider; |
| import android.content.ComponentName; |
| import android.content.pm.PackageManager; |
| import android.os.ParcelFileDescriptor; |
| import android.support.test.InstrumentationRegistry; |
| import android.support.test.runner.AndroidJUnit4; |
| |
| import org.junit.Before; |
| import org.junit.runner.RunWith; |
| |
| import java.io.BufferedReader; |
| import java.io.InputStreamReader; |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| @RunWith(AndroidJUnit4.class) |
| public abstract class AppWidgetTestCase { |
| private static final String TAG = "AppWidgetTest"; |
| private static final String FIRST_APP_WIDGET_CONFIGURE_ACTIVITY = |
| "android.appwidget.cts.provider.FirstAppWidgetConfigureActivity"; |
| |
| private static final String SECOND_APP_WIDGET_CONFIGURE_ACTIVITY = |
| "android.appwidget.cts.provider.SecondAppWidgetConfigureActivity"; |
| |
| @Before |
| public void assumeHasWidgets() { |
| assumeTrue(hasAppWidgets()); |
| } |
| |
| public boolean hasAppWidgets() { |
| return getInstrumentation().getTargetContext().getPackageManager() |
| .hasSystemFeature(PackageManager.FEATURE_APP_WIDGETS); |
| } |
| |
| protected Instrumentation getInstrumentation() { |
| return InstrumentationRegistry.getInstrumentation(); |
| } |
| |
| public boolean[] verifyInstalledProviders(List<AppWidgetProviderInfo> providers) { |
| boolean firstProviderVerified = false; |
| boolean secondProviderVerified = false; |
| |
| ComponentName firstComponentName = getFirstWidgetComponent(); |
| ComponentName secondComponentName = getSecondWidgetComponent(); |
| |
| final int providerCount = providers.size(); |
| for (int i = 0; i < providerCount; i++) { |
| AppWidgetProviderInfo provider = providers.get(i); |
| |
| if (firstComponentName.equals(provider.provider) |
| && android.os.Process.myUserHandle().equals(provider.getProfile())) { |
| assertEquals(getNormalizedDimensionResource(android.appwidget.cts.R.dimen.first_min_appwidget_size), |
| provider.minWidth); |
| assertEquals(getNormalizedDimensionResource(android.appwidget.cts.R.dimen.first_min_appwidget_size), |
| provider.minHeight); |
| assertEquals(getNormalizedDimensionResource( |
| android.appwidget.cts.R.dimen.first_min_resize_appwidget_size), provider.minResizeWidth); |
| assertEquals(getNormalizedDimensionResource( |
| android.appwidget.cts.R.dimen.first_min_resize_appwidget_size), provider.minResizeHeight); |
| assertEquals(getIntResource(android.appwidget.cts.R.integer.first_update_period_millis), |
| provider.updatePeriodMillis); |
| assertEquals(getInstrumentation().getTargetContext().getPackageName(), |
| provider.configure.getPackageName()); |
| assertEquals(FIRST_APP_WIDGET_CONFIGURE_ACTIVITY, |
| provider.configure.getClassName()); |
| assertEquals(getIntResource(android.appwidget.cts.R.integer.first_resize_mode), |
| provider.resizeMode); |
| assertEquals(getIntResource(android.appwidget.cts.R.integer.first_widget_category), |
| provider.widgetCategory); |
| assertEquals(android.appwidget.cts.R.layout.first_initial_layout, |
| provider.initialLayout); |
| assertEquals(android.appwidget.cts.R.layout.first_initial_keyguard_layout, |
| provider.initialKeyguardLayout); |
| assertEquals(android.appwidget.cts.R.drawable.first_android_icon, |
| provider.previewImage); |
| assertEquals(android.appwidget.cts.R.id.first_auto_advance_view_id, |
| provider.autoAdvanceViewId); |
| firstProviderVerified = true; |
| } else if (secondComponentName.equals(provider.provider) |
| && android.os.Process.myUserHandle().equals(provider.getProfile())) { |
| assertEquals(getNormalizedDimensionResource(android.appwidget.cts.R.dimen.second_min_appwidget_size), |
| provider.minWidth); |
| assertEquals(getNormalizedDimensionResource(android.appwidget.cts.R.dimen.second_min_appwidget_size), |
| provider.minHeight); |
| assertEquals(getNormalizedDimensionResource( |
| android.appwidget.cts.R.dimen.second_min_resize_appwidget_size), provider.minResizeWidth); |
| assertEquals(getNormalizedDimensionResource( |
| android.appwidget.cts.R.dimen.second_min_resize_appwidget_size), provider.minResizeHeight); |
| assertEquals(getIntResource(android.appwidget.cts.R.integer.second_update_period_millis), |
| provider.updatePeriodMillis); |
| assertEquals(getInstrumentation().getTargetContext().getPackageName(), |
| provider.configure.getPackageName()); |
| assertEquals(SECOND_APP_WIDGET_CONFIGURE_ACTIVITY, |
| provider.configure.getClassName()); |
| assertEquals(getIntResource(android.appwidget.cts.R.integer.second_resize_mode), |
| provider.resizeMode); |
| assertEquals(getIntResource(android.appwidget.cts.R.integer.second_widget_category), |
| provider.widgetCategory); |
| assertEquals(android.appwidget.cts.R.layout.second_initial_layout, |
| provider.initialLayout); |
| assertEquals(android.appwidget.cts.R.layout.second_initial_keyguard_layout, |
| provider.initialKeyguardLayout); |
| assertEquals(android.appwidget.cts.R.drawable.second_android_icon, |
| provider.previewImage); |
| assertEquals(android.appwidget.cts.R.id.second_auto_advance_view_id, |
| provider.autoAdvanceViewId); |
| secondProviderVerified = true; |
| } |
| } |
| |
| return new boolean[]{firstProviderVerified, secondProviderVerified}; |
| } |
| |
| private int getNormalizedDimensionResource(int resId) { |
| return getInstrumentation().getTargetContext().getResources() |
| .getDimensionPixelSize(resId); |
| } |
| |
| private int getIntResource(int resId) { |
| return getInstrumentation().getTargetContext().getResources().getInteger(resId); |
| } |
| |
| public ComponentName getFirstWidgetComponent() { |
| return new ComponentName( |
| getInstrumentation().getTargetContext().getPackageName(), |
| FirstAppWidgetProvider.class.getName()); |
| } |
| |
| public ComponentName getSecondWidgetComponent() { |
| return new ComponentName( |
| getInstrumentation().getTargetContext().getPackageName(), |
| SecondAppWidgetProvider.class.getName()); |
| } |
| |
| public ArrayList<String> runShellCommand(String command) throws Exception { |
| ParcelFileDescriptor pfd = getInstrumentation().getUiAutomation() |
| .executeShellCommand(command); |
| |
| ArrayList<String> ret = new ArrayList<>(); |
| // Read the input stream fully. |
| try (BufferedReader r = new BufferedReader( |
| new InputStreamReader(new ParcelFileDescriptor.AutoCloseInputStream(pfd)))) { |
| String line; |
| while ((line = r.readLine()) != null) { |
| ret.add(line); |
| } |
| } |
| return ret; |
| } |
| } |