NotificationMenuRowPlugin.java revision 9d03a5254f5c7ac00071d56b91ddc15a3d761ed6
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 use this file
5 * except in compliance with the License. You may obtain a copy of the License at
6 *
7 *      http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the
10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11 * KIND, either express or implied. See the License for the specific language governing
12 * permissions and limitations under the License.
13 */
14
15package com.android.systemui.plugins.statusbar;
16
17import android.content.Context;
18import android.view.MotionEvent;
19import android.view.View;
20import android.view.ViewGroup;
21
22import java.util.ArrayList;
23
24import com.android.systemui.plugins.Plugin;
25import com.android.systemui.plugins.annotations.DependsOn;
26import com.android.systemui.plugins.annotations.ProvidesInterface;
27import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin.OnMenuEventListener;
28import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper.SnoozeOption;
29import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin.MenuItem;
30
31@ProvidesInterface(action = NotificationMenuRowPlugin.ACTION,
32        version = NotificationMenuRowPlugin.VERSION)
33@DependsOn(target = OnMenuEventListener.class)
34@DependsOn(target = MenuItem.class)
35@DependsOn(target = NotificationSwipeActionHelper.class)
36@DependsOn(target = SnoozeOption.class)
37public interface NotificationMenuRowPlugin extends Plugin {
38
39    public static final String ACTION = "com.android.systemui.action.PLUGIN_NOTIFICATION_MENU_ROW";
40    public static final int VERSION = 2;
41
42    @ProvidesInterface(version = OnMenuEventListener.VERSION)
43    public interface OnMenuEventListener {
44        public static final int VERSION = 1;
45        public void onMenuClicked(View row, int x, int y, MenuItem menu);
46
47        public void onMenuReset(View row);
48
49        public void onMenuShown(View row);
50    }
51
52    @ProvidesInterface(version = MenuItem.VERSION)
53    public interface MenuItem {
54        public static final int VERSION = 1;
55        public View getMenuView();
56
57        public View getGutsView();
58
59        public String getContentDescription();
60    }
61
62    /**
63     * @return a list of items to populate the menu 'behind' a notification.
64     */
65    public ArrayList<MenuItem> getMenuItems(Context context);
66
67    /**
68     * @return the {@link MenuItem} to display when a notification is long pressed.
69     */
70    public MenuItem getLongpressMenuItem(Context context);
71
72    public void setMenuItems(ArrayList<MenuItem> items);
73
74    public void setMenuClickListener(OnMenuEventListener listener);
75
76    public void setSwipeActionHelper(NotificationSwipeActionHelper listener);
77
78    public void setAppName(String appName);
79
80    public void createMenu(ViewGroup parent);
81
82    public View getMenuView();
83
84    public boolean isMenuVisible();
85
86    public void resetMenu();
87
88    public void onTranslationUpdate(float translation);
89
90    public void onHeightUpdate();
91
92    public void onNotificationUpdated();
93
94    public boolean onTouchEvent(View view, MotionEvent ev, float velocity);
95
96    public default boolean useDefaultMenuItems() {
97        return false;
98    }
99
100    public default void onConfigurationChanged() {
101    }
102}
103