1/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License. You may obtain a copy of
6 * the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations under
14 * the License.
15 */
16package com.android.launcher3.testcomponent;
17
18import android.annotation.TargetApi;
19import android.app.PendingIntent;
20import android.appwidget.AppWidgetManager;
21import android.content.ComponentName;
22import android.content.IntentSender;
23import android.content.pm.ShortcutInfo;
24import android.content.pm.ShortcutManager;
25import android.graphics.Bitmap;
26import android.graphics.Canvas;
27import android.graphics.Color;
28import android.graphics.Paint;
29import android.graphics.drawable.Icon;
30import android.os.Bundle;
31import android.widget.RemoteViews;
32
33/**
34 * Sample activity to request pinning an item.
35 */
36@TargetApi(26)
37public class RequestPinItemActivity extends BaseTestingActivity {
38
39    private PendingIntent mCallback = null;
40    private String mShortcutId = "test-id";
41    private int mRemoteViewColor = Color.TRANSPARENT;
42
43    @Override
44    protected void onCreate(Bundle savedInstanceState) {
45        super.onCreate(savedInstanceState);
46
47        addButton("Pin Shortcut", "pinShortcut");
48        addButton("Pin Widget without config ", "pinWidgetNoConfig");
49        addButton("Pin Widget with config", "pinWidgetWithConfig");
50    }
51
52    public void setCallback(PendingIntent callback) {
53        mCallback = callback;
54    }
55
56    public void setRemoteViewColor(int color) {
57        mRemoteViewColor = color;
58    }
59
60    public void setShortcutId(String id) {
61        mShortcutId = id;
62    }
63
64    public void pinShortcut() {
65        ShortcutManager sm = getSystemService(ShortcutManager.class);
66
67        // Generate icon
68        int r = sm.getIconMaxWidth() / 2;
69        Bitmap icon = Bitmap.createBitmap(r * 2, r * 2, Bitmap.Config.ARGB_8888);
70        Paint p = new Paint();
71        p.setColor(Color.RED);
72        new Canvas(icon).drawCircle(r, r, r, p);
73
74        ShortcutInfo info = new ShortcutInfo.Builder(this, mShortcutId)
75                .setIntent(getPackageManager().getLaunchIntentForPackage(getPackageName()))
76                .setIcon(Icon.createWithBitmap(icon))
77                .setShortLabel("Test shortcut")
78                .build();
79
80        IntentSender callback = mCallback == null ? null : mCallback.getIntentSender();
81        sm.requestPinShortcut(info, callback);
82    }
83
84    public void pinWidgetNoConfig() {
85        requestWidget(new ComponentName(this, AppWidgetNoConfig.class));
86    }
87
88    public void pinWidgetWithConfig() {
89        requestWidget(new ComponentName(this, AppWidgetWithConfig.class));
90    }
91
92    private void requestWidget(ComponentName cn) {
93        Bundle extras = null;
94        if (mRemoteViewColor != Color.TRANSPARENT) {
95            int layoutId = getResources().getIdentifier(
96                    "test_layout_appwidget_view", "layout", getPackageName());
97            RemoteViews views = new RemoteViews(getPackageName(), layoutId);
98            views.setInt(android.R.id.icon, "setBackgroundColor", mRemoteViewColor);
99            extras = new Bundle();
100            extras.putParcelable(AppWidgetManager.EXTRA_APPWIDGET_PREVIEW, views);
101        }
102
103        AppWidgetManager.getInstance(this).requestPinAppWidget(cn, extras, mCallback);
104    }
105}
106