| /* |
| * Copyright (C) 2010 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.view; |
| |
| import com.android.ide.common.rendering.api.LayoutLog; |
| import com.android.layoutlib.bridge.Bridge; |
| import com.android.layoutlib.bridge.android.BridgeContext; |
| import com.android.tools.layoutlib.annotations.LayoutlibDelegate; |
| |
| import android.content.Context; |
| import android.graphics.Canvas; |
| import android.os.IBinder; |
| |
| /** |
| * Delegate used to provide new implementation of a select few methods of {@link View} |
| * |
| * Through the layoutlib_create tool, the original methods of View have been replaced |
| * by calls to methods of the same name in this delegate class. |
| * |
| */ |
| public class View_Delegate { |
| |
| @LayoutlibDelegate |
| /*package*/ static boolean isInEditMode(View thisView) { |
| return true; |
| } |
| |
| @LayoutlibDelegate |
| /*package*/ static IBinder getWindowToken(View thisView) { |
| Context baseContext = BridgeContext.getBaseContext(thisView.getContext()); |
| if (baseContext instanceof BridgeContext) { |
| return ((BridgeContext) baseContext).getBinder(); |
| } |
| return null; |
| } |
| |
| @LayoutlibDelegate |
| /*package*/ static void draw(View thisView, Canvas canvas) { |
| try { |
| // This code is run within a catch to prevent misbehaving components from breaking |
| // all the layout. |
| thisView.draw_Original(canvas); |
| } catch (Throwable t) { |
| Bridge.getLog().error(LayoutLog.TAG_BROKEN, "View draw failed", t, null); |
| } |
| } |
| |
| @LayoutlibDelegate |
| /*package*/ static boolean draw( |
| View thisView, Canvas canvas, ViewGroup parent, long drawingTime) { |
| try { |
| // This code is run within a catch to prevent misbehaving components from breaking |
| // all the layout. |
| return thisView.draw_Original(canvas, parent, drawingTime); |
| } catch (Throwable t) { |
| Bridge.getLog().error(LayoutLog.TAG_BROKEN, "View draw failed", t, null); |
| } |
| return false; |
| } |
| |
| @LayoutlibDelegate |
| /*package*/ static void measure(View thisView, int widthMeasureSpec, int heightMeasureSpec) { |
| try { |
| // This code is run within a catch to prevent misbehaving components from breaking |
| // all the layout. |
| thisView.measure_Original(widthMeasureSpec, heightMeasureSpec); |
| } catch (Throwable t) { |
| Bridge.getLog().error(LayoutLog.TAG_BROKEN, "View measure failed", t, null); |
| } |
| } |
| |
| @LayoutlibDelegate |
| /*package*/ static void layout(View thisView, int l, int t, int r, int b) { |
| try { |
| // This code is run within a catch to prevent misbehaving components from breaking |
| // all the layout. |
| thisView.layout_Original(l, t, r, b); |
| } catch (Throwable th) { |
| Bridge.getLog().error(LayoutLog.TAG_BROKEN, "View layout failed", th, null); |
| } |
| } |
| } |