SupportActionModeWrapper.java revision 4c2a95906254748cb9a843b061288265d6e185a9
1/* 2 * Copyright (C) 2013 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 android.support.v7.internal.view; 18 19import android.annotation.TargetApi; 20import android.content.Context; 21import android.os.Build; 22import android.support.v7.internal.view.menu.MenuWrapperFactory; 23import android.view.ActionMode; 24import android.view.Menu; 25import android.view.MenuInflater; 26import android.view.View; 27 28/** 29 * Wraps a support {@link android.support.v7.view.ActionMode} as a framework 30 * {@link android.view.ActionMode}. 31 * 32 * @hide 33 */ 34@TargetApi(Build.VERSION_CODES.HONEYCOMB) 35public class SupportActionModeWrapper extends ActionMode { 36 37 final MenuInflater mInflater; 38 final android.support.v7.view.ActionMode mWrappedObject; 39 40 public SupportActionModeWrapper(Context context, android.support.v7.view.ActionMode supportActionMode) { 41 mWrappedObject = supportActionMode; 42 mInflater = new SupportMenuInflater(context); 43 } 44 45 @Override 46 public Object getTag() { 47 return mWrappedObject.getTag(); 48 } 49 50 @Override 51 public void setTag(Object tag) { 52 mWrappedObject.setTag(tag); 53 } 54 55 @Override 56 public void setTitle(CharSequence title) { 57 mWrappedObject.setTitle(title); 58 } 59 60 @Override 61 public void setSubtitle(CharSequence subtitle) { 62 mWrappedObject.setSubtitle(subtitle); 63 } 64 65 @Override 66 public void invalidate() { 67 mWrappedObject.invalidate(); 68 } 69 70 @Override 71 public void finish() { 72 mWrappedObject.finish(); 73 } 74 75 @Override 76 public Menu getMenu() { 77 return MenuWrapperFactory.createMenuWrapper(mWrappedObject.getMenu()); 78 } 79 80 @Override 81 public CharSequence getTitle() { 82 return mWrappedObject.getTitle(); 83 } 84 85 @Override 86 public void setTitle(int resId) { 87 mWrappedObject.setTitle(resId); 88 } 89 90 @Override 91 public CharSequence getSubtitle() { 92 return mWrappedObject.getSubtitle(); 93 } 94 95 @Override 96 public void setSubtitle(int resId) { 97 mWrappedObject.setSubtitle(resId); 98 } 99 100 @Override 101 public View getCustomView() { 102 return mWrappedObject.getCustomView(); 103 } 104 105 @Override 106 public void setCustomView(View view) { 107 mWrappedObject.setCustomView(view); 108 } 109 110 @Override 111 public MenuInflater getMenuInflater() { 112 return mInflater; 113 } 114 115 @Override 116 public boolean getTitleOptionalHint() { 117 return mWrappedObject.getTitleOptionalHint(); 118 } 119 120 @Override 121 public void setTitleOptionalHint(boolean titleOptional) { 122 mWrappedObject.setTitleOptionalHint(titleOptional); 123 } 124 125 @Override 126 public boolean isTitleOptional() { 127 return mWrappedObject.isTitleOptional(); 128 } 129 130 /** 131 * @hide 132 */ 133 public static class CallbackWrapper implements android.support.v7.view.ActionMode.Callback { 134 final Callback mWrappedCallback; 135 final Context mContext; 136 137 private SupportActionModeWrapper mLastStartedActionMode; 138 139 public CallbackWrapper(Context context, Callback supportCallback) { 140 mContext = context; 141 mWrappedCallback = supportCallback; 142 } 143 144 @Override 145 public boolean onCreateActionMode(android.support.v7.view.ActionMode mode, Menu menu) { 146 return mWrappedCallback.onCreateActionMode(getActionModeWrapper(mode), 147 MenuWrapperFactory.createMenuWrapper(menu)); 148 } 149 150 @Override 151 public boolean onPrepareActionMode(android.support.v7.view.ActionMode mode, Menu menu) { 152 return mWrappedCallback.onPrepareActionMode(getActionModeWrapper(mode), 153 MenuWrapperFactory.createMenuWrapper(menu)); 154 } 155 156 @Override 157 public boolean onActionItemClicked(android.support.v7.view.ActionMode mode, 158 android.view.MenuItem item) { 159 return mWrappedCallback.onActionItemClicked(getActionModeWrapper(mode), 160 MenuWrapperFactory.createMenuItemWrapper(item)); 161 } 162 163 @Override 164 public void onDestroyActionMode(android.support.v7.view.ActionMode mode) { 165 mWrappedCallback.onDestroyActionMode(getActionModeWrapper(mode)); 166 } 167 168 public void setLastStartedActionMode(SupportActionModeWrapper modeWrapper) { 169 mLastStartedActionMode = modeWrapper; 170 } 171 172 private ActionMode getActionModeWrapper(android.support.v7.view.ActionMode mode) { 173 if (mLastStartedActionMode != null && mLastStartedActionMode.mWrappedObject == mode) { 174 // If the given mode equals our wrapped mode, just return it 175 return mLastStartedActionMode; 176 } else { 177 return createActionModeWrapper(mContext, mode); 178 } 179 } 180 181 protected SupportActionModeWrapper createActionModeWrapper(Context context, 182 android.support.v7.view.ActionMode mode) { 183 return new SupportActionModeWrapper(context, mode); 184 } 185 } 186} 187