RecentsImplProxy.java revision cdb06caebb5f6f554b2ed8c76963970d8cc0ab54
1/* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of 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, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License 15 */ 16 17package com.android.systemui.recents; 18 19import android.graphics.Rect; 20import android.os.Handler; 21import android.os.Message; 22import android.os.RemoteException; 23 24import com.android.internal.os.SomeArgs; 25 26/** 27 * A proxy class which directs all methods from {@link IRecentsNonSystemUserCallbacks} to 28 * {@link RecentsImpl} and makes sure they are called from the main thread. 29 */ 30public class RecentsImplProxy extends IRecentsNonSystemUserCallbacks.Stub { 31 32 private static final int MSG_PRELOAD_RECENTS = 1; 33 private static final int MSG_CANCEL_PRELOADING_RECENTS = 2; 34 private static final int MSG_SHOW_RECENTS = 3; 35 private static final int MSG_HIDE_RECENTS = 4; 36 private static final int MSG_TOGGLE_RECENTS = 5; 37 private static final int MSG_ON_CONFIGURATION_CHANGED = 6; 38 private static final int MSG_DOCK_TOP_TASK = 7; 39 private static final int MSG_ON_DRAGGING_IN_RECENTS = 8; 40 private static final int MSG_ON_DRAGGING_IN_RECENTS_ENDED = 9; 41 42 private RecentsImpl mImpl; 43 44 public RecentsImplProxy(RecentsImpl recentsImpl) { 45 mImpl = recentsImpl; 46 } 47 48 @Override 49 public void preloadRecents() throws RemoteException { 50 mHandler.sendEmptyMessage(MSG_PRELOAD_RECENTS); 51 } 52 53 @Override 54 public void cancelPreloadingRecents() throws RemoteException { 55 mHandler.sendEmptyMessage(MSG_CANCEL_PRELOADING_RECENTS); 56 } 57 58 @Override 59 public void showRecents(boolean triggeredFromAltTab, boolean draggingInRecents, boolean animate, 60 boolean reloadTasks) throws RemoteException { 61 SomeArgs args = SomeArgs.obtain(); 62 args.argi1 = triggeredFromAltTab ? 1 : 0; 63 args.argi2 = draggingInRecents ? 1 : 0; 64 args.argi3 = animate ? 1 : 0; 65 args.argi4 = reloadTasks ? 1 : 0; 66 mHandler.sendMessage(mHandler.obtainMessage(MSG_SHOW_RECENTS, args)); 67 } 68 69 @Override 70 public void hideRecents(boolean triggeredFromAltTab, boolean triggeredFromHomeKey) 71 throws RemoteException { 72 mHandler.sendMessage(mHandler.obtainMessage(MSG_HIDE_RECENTS, triggeredFromAltTab ? 1 :0, 73 triggeredFromHomeKey ? 1 : 0)); 74 } 75 76 @Override 77 public void toggleRecents() throws RemoteException { 78 mHandler.sendEmptyMessage(MSG_TOGGLE_RECENTS); 79 } 80 81 @Override 82 public void onConfigurationChanged() throws RemoteException { 83 mHandler.sendEmptyMessage(MSG_ON_CONFIGURATION_CHANGED); 84 } 85 86 @Override 87 public void dockTopTask(int topTaskId, int dragMode, int stackCreateMode, 88 Rect initialBounds) throws RemoteException { 89 SomeArgs args = SomeArgs.obtain(); 90 args.argi1 = topTaskId; 91 args.argi2 = dragMode; 92 args.argi3 = stackCreateMode; 93 args.arg1 = initialBounds; 94 mHandler.sendMessage(mHandler.obtainMessage(MSG_DOCK_TOP_TASK, args)); 95 } 96 97 @Override 98 public void onDraggingInRecents(float distanceFromTop) throws RemoteException { 99 mHandler.sendMessage(mHandler.obtainMessage(MSG_ON_DRAGGING_IN_RECENTS, distanceFromTop)); 100 } 101 102 @Override 103 public void onDraggingInRecentsEnded(float velocity) throws RemoteException { 104 mHandler.sendMessage(mHandler.obtainMessage(MSG_ON_DRAGGING_IN_RECENTS_ENDED, velocity)); 105 } 106 107 private final Handler mHandler = new Handler() { 108 109 @Override 110 public void handleMessage(Message msg) { 111 switch (msg.what) { 112 case MSG_PRELOAD_RECENTS: 113 mImpl.preloadRecents(); 114 break; 115 case MSG_CANCEL_PRELOADING_RECENTS: 116 mImpl.cancelPreloadingRecents(); 117 break; 118 case MSG_SHOW_RECENTS: 119 SomeArgs args = (SomeArgs) msg.obj; 120 mImpl.showRecents(args.argi1 != 0, args.argi2 != 0, args.argi3 != 0, 121 args.argi4 != 0); 122 break; 123 case MSG_HIDE_RECENTS: 124 mImpl.hideRecents(msg.arg1 != 0, msg.arg2 != 0); 125 break; 126 case MSG_TOGGLE_RECENTS: 127 mImpl.toggleRecents(); 128 break; 129 case MSG_ON_CONFIGURATION_CHANGED: 130 mImpl.onConfigurationChanged(); 131 break; 132 case MSG_DOCK_TOP_TASK: 133 args = (SomeArgs) msg.obj; 134 mImpl.dockTopTask(args.argi1, args.argi2, args.argi3 = 0, 135 (Rect) args.arg1); 136 break; 137 case MSG_ON_DRAGGING_IN_RECENTS: 138 mImpl.onDraggingInRecents((Float) msg.obj); 139 break; 140 case MSG_ON_DRAGGING_IN_RECENTS_ENDED: 141 mImpl.onDraggingInRecentsEnded((Float) msg.obj); 142 break; 143 default: 144 super.handleMessage(msg); 145 } 146 super.handleMessage(msg); 147 } 148 }; 149} 150