diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2017-01-25 11:19:59 -0800 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2017-02-22 15:46:40 -0800 |
commit | d9843357d0fa8e4bbe0d42007bfdfebe37db7451 (patch) | |
tree | 51e42bda7af1c611d5fbcff242068e12493e8b68 /tests/src/com/android/launcher3/testcomponent | |
parent | 9f0fa84439bb177ed48758b6d15a8e62c80f1bf4 (diff) | |
download | android_packages_apps_Trebuchet-d9843357d0fa8e4bbe0d42007bfdfebe37db7451.tar.gz android_packages_apps_Trebuchet-d9843357d0fa8e4bbe0d42007bfdfebe37db7451.tar.bz2 android_packages_apps_Trebuchet-d9843357d0fa8e4bbe0d42007bfdfebe37db7451.zip |
Adding some tests for request pin shortcut/widget flow
Bug: 33584624
Change-Id: I49df36f60d2ae071b9d2c77c9c3300e010cd3bb9
Diffstat (limited to 'tests/src/com/android/launcher3/testcomponent')
3 files changed, 224 insertions, 29 deletions
diff --git a/tests/src/com/android/launcher3/testcomponent/BaseTestingActivity.java b/tests/src/com/android/launcher3/testcomponent/BaseTestingActivity.java new file mode 100644 index 000000000..904590cb8 --- /dev/null +++ b/tests/src/com/android/launcher3/testcomponent/BaseTestingActivity.java @@ -0,0 +1,126 @@ +/* + * 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.launcher3.testcomponent; + +import android.app.Activity; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Bundle; +import android.util.TypedValue; +import android.view.View; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.LinearLayout.LayoutParams; + +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; + +/** + * Base activity with utility methods to help automate testing. + */ +public class BaseTestingActivity extends Activity implements View.OnClickListener { + + public static final String SUFFIX_COMMAND = "-command"; + public static final String EXTRA_METHOD = "method"; + public static final String EXTRA_PARAM = "param_"; + + private static final int MARGIN_DP = 20; + + private final String mAction = this.getClass().getName(); + + private LinearLayout mView; + private int mMargin; + + private final BroadcastReceiver mCommandReceiver = new BroadcastReceiver() { + + @Override + public void onReceive(Context context, Intent intent) { + handleCommand(intent); + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mMargin = Math.round(TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_DIP, MARGIN_DP, getResources().getDisplayMetrics())); + mView = new LinearLayout(this); + mView.setPadding(mMargin, mMargin, mMargin, mMargin); + mView.setOrientation(LinearLayout.VERTICAL); + setContentView(mView); + + registerReceiver(mCommandReceiver, new IntentFilter(mAction + SUFFIX_COMMAND)); + } + + protected void addButton(String title, String method) { + Button button = new Button(this); + button.setText(title); + button.setTag(method); + button.setOnClickListener(this); + + LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); + lp.bottomMargin = mMargin; + mView.addView(button, lp); + } + + @Override + protected void onResume() { + super.onResume(); + sendBroadcast(new Intent(mAction).putExtra(Intent.EXTRA_INTENT, getIntent())); + } + + @Override + protected void onDestroy() { + unregisterReceiver(mCommandReceiver); + super.onDestroy(); + } + + @Override + public void onClick(View view) { + handleCommand(new Intent().putExtra(EXTRA_METHOD, (String) view.getTag())); + } + + private void handleCommand(Intent cmd) { + String methodName = cmd.getStringExtra(EXTRA_METHOD); + try { + Method method = null; + for (Method m : this.getClass().getDeclaredMethods()) { + if (methodName.equals(m.getName()) && + !Modifier.isStatic(m.getModifiers()) && + Modifier.isPublic(m.getModifiers())) { + method = m; + break; + } + } + Object[] args = new Object[method.getParameterTypes().length]; + Bundle extras = cmd.getExtras(); + for (int i = 0; i < args.length; i++) { + args[i] = extras.get(EXTRA_PARAM + i); + } + method.invoke(this, args); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static Intent getCommandIntent(Class<?> clazz, String method) { + return new Intent(clazz.getName() + SUFFIX_COMMAND) + .putExtra(EXTRA_METHOD, method); + } +} diff --git a/tests/src/com/android/launcher3/testcomponent/RequestPinItemActivity.java b/tests/src/com/android/launcher3/testcomponent/RequestPinItemActivity.java new file mode 100644 index 000000000..c2dd2259d --- /dev/null +++ b/tests/src/com/android/launcher3/testcomponent/RequestPinItemActivity.java @@ -0,0 +1,89 @@ +/* + * 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.launcher3.testcomponent; + +import android.annotation.TargetApi; +import android.app.PendingIntent; +import android.appwidget.AppWidgetManager; +import android.content.ComponentName; +import android.content.IntentSender; +import android.content.pm.ShortcutInfo; +import android.content.pm.ShortcutManager; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.drawable.Icon; +import android.os.Bundle; + +/** + * Sample activity to request pinning an item. + */ +@TargetApi(26) +public class RequestPinItemActivity extends BaseTestingActivity { + + private PendingIntent mCallback = null; + private String mShortcutId; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + addButton("Pin Shortcut", "pinShortcut"); + addButton("Pin Widget without config ", "pinWidgetNoConfig"); + addButton("Pin Widget with config", "pinWidgetWithConfig"); + } + + public void setCallback(PendingIntent callback) { + mCallback = callback; + } + + public void setShortcutId(String id) { + mShortcutId = id; + } + + public void pinShortcut() { + ShortcutManager sm = getSystemService(ShortcutManager.class); + + // Generate icon + int r = sm.getIconMaxWidth() / 2; + Bitmap icon = Bitmap.createBitmap(r * 2, r * 2, Bitmap.Config.ARGB_8888); + Paint p = new Paint(); + p.setColor(Color.RED); + new Canvas(icon).drawCircle(r, r, r, p); + + ShortcutInfo info = new ShortcutInfo.Builder(this, mShortcutId) + .setIntent(getPackageManager().getLaunchIntentForPackage(getPackageName())) + .setIcon(Icon.createWithBitmap(icon)) + .setShortLabel("Test shortcut") + .build(); + + IntentSender callback = mCallback == null ? null : mCallback.getIntentSender(); + sm.requestPinShortcut(info, callback); + } + + public void pinWidgetNoConfig() { + requestWidget(new ComponentName(this, AppWidgetNoConfig.class)); + } + + public void pinWidgetWithConfig() { + requestWidget(new ComponentName(this, AppWidgetWithConfig.class)); + } + + private void requestWidget(ComponentName cn) { + AppWidgetManager.getInstance(this).requestPinAppWidget(cn, mCallback); + } +} diff --git a/tests/src/com/android/launcher3/testcomponent/WidgetConfigActivity.java b/tests/src/com/android/launcher3/testcomponent/WidgetConfigActivity.java index c0509bc24..d76ad0499 100644 --- a/tests/src/com/android/launcher3/testcomponent/WidgetConfigActivity.java +++ b/tests/src/com/android/launcher3/testcomponent/WidgetConfigActivity.java @@ -15,50 +15,30 @@ */ package com.android.launcher3.testcomponent; -import android.app.Activity; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; import android.os.Bundle; /** * Simple activity for widget configuration */ -public class WidgetConfigActivity extends Activity { +public class WidgetConfigActivity extends BaseTestingActivity { public static final String SUFFIX_FINISH = "-finish"; public static final String EXTRA_CODE = "code"; - public static final String EXTRA_INTENT = "intent"; - - private final BroadcastReceiver mFinishReceiver = new BroadcastReceiver() { - - @Override - public void onReceive(Context context, Intent intent) { - WidgetConfigActivity.this.setResult( - intent.getIntExtra(EXTRA_CODE, RESULT_CANCELED), - (Intent) intent.getParcelableExtra(EXTRA_INTENT)); - WidgetConfigActivity.this.finish(); - } - }; - - private final String mAction = this.getClass().getName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - registerReceiver(mFinishReceiver, new IntentFilter(mAction + SUFFIX_FINISH)); + addButton("Cancel", "clickCancel"); + addButton("OK", "clickOK"); } - @Override - protected void onResume() { - super.onResume(); - sendBroadcast(new Intent(mAction).putExtra(Intent.EXTRA_INTENT, getIntent())); + public void clickCancel() { + setResult(RESULT_CANCELED); + finish(); } - @Override - protected void onDestroy() { - unregisterReceiver(mFinishReceiver); - super.onDestroy(); + public void clickOK() { + setResult(RESULT_OK); + finish(); } } |