CompatModePanel.java revision ed31bbf65267c1f383dd0dff37acd034f3b9b59f
13b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler/* 23b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler * Copyright (C) 2011 The Android Open Source Project 33b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler * 43b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler * Licensed under the Apache License, Version 2.0 (the "License"); 53b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler * you may not use this file except in compliance with the License. 63b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler * You may obtain a copy of the License at 73b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler * 83b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler * http://www.apache.org/licenses/LICENSE-2.0 93b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler * 103b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler * Unless required by applicable law or agreed to in writing, software 113b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler * distributed under the License is distributed on an "AS IS" BASIS, 123b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler * See the License for the specific language governing permissions and 143b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler * limitations under the License. 153b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler */ 163b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler 173b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandlerpackage com.android.systemui.statusbar.tablet; 183b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler 193b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandlerimport android.app.ActivityManager; 203b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandlerimport android.content.Context; 213b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandlerimport android.content.res.TypedArray; 223b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandlerimport android.os.RemoteException; 233b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandlerimport android.util.AttributeSet; 243b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandlerimport android.util.Slog; 253b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandlerimport android.view.View; 263b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandlerimport android.widget.FrameLayout; 273b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandlerimport android.widget.ImageView; 283b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandlerimport android.widget.RadioButton; 293b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandlerimport android.widget.RadioGroup; 303b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler 313b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandlerimport com.android.systemui.R; 323b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler 333b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandlerpublic class CompatModePanel extends FrameLayout implements StatusBarPanel, 343b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler View.OnClickListener { 353b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler private static final boolean DEBUG = TabletStatusBar.DEBUG; 363b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler private static final String TAG = "CompatModePanel"; 373b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler 383b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler private ActivityManager mAM; 393b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler 403b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler private boolean mAttached = false; 413b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler private Context mContext; 423b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler private RadioButton mOnButton, mOffButton; 433b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler 443b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler private View mTrigger; 453b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler// private InputMethodButton mInputMethodSwitchButton; 463b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler 473b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler public CompatModePanel(Context context, AttributeSet attrs) { 483b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler super(context, attrs); 493b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler mContext = context; 503b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler mAM = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 513b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler } 523b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler 533b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler @Override 543b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler public void onFinishInflate() { 553b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler mOnButton = (RadioButton) findViewById(R.id.compat_mode_on_radio); 563b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler mOffButton = (RadioButton) findViewById(R.id.compat_mode_off_radio); 573b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler mOnButton.setOnClickListener(this); 583b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler mOffButton.setOnClickListener(this); 593b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler 603b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler refresh(); 613b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler } 623b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler 633b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler @Override 643b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler protected void onDetachedFromWindow() { 653b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler super.onDetachedFromWindow(); 663b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler if (mAttached) { 673b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler mAttached = false; 683b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler } 693b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler } 703b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler 713b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler @Override 723b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler protected void onAttachedToWindow() { 733b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler super.onAttachedToWindow(); 743b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler if (!mAttached) { 753b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler mAttached = true; 763b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler } 773b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler } 783b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler 793b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler @Override 803b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler public void onClick(View v) { 813b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler if (v == mOnButton) { 823b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler mAM.setFrontActivityScreenCompatMode(ActivityManager.COMPAT_MODE_ENABLED); 833b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler } else if (v == mOffButton) { 843b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler mAM.setFrontActivityScreenCompatMode(ActivityManager.COMPAT_MODE_DISABLED); 853b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler } 863b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler } 873b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler 883b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler @Override 893b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler public boolean isInContentArea(int x, int y) { 903b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler return false; 913b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler } 923b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler 933b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler public void setTrigger(View v) { 943b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler mTrigger = v; 953b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler } 963b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler 973b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler public void openPanel() { 983b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler setVisibility(View.VISIBLE); 993b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler if (mTrigger != null) mTrigger.setSelected(true); 1003b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler refresh(); 1013b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler } 1023b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler 1033b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler public void closePanel() { 1043b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler setVisibility(View.GONE); 1053b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler if (mTrigger != null) mTrigger.setSelected(false); 1063b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler } 1073b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler 1083b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler private void refresh() { 1093b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler int mode = mAM.getFrontActivityScreenCompatMode(); 110ed31bbf65267c1f383dd0dff37acd034f3b9b59fDianne Hackborn if (mode == ActivityManager.COMPAT_MODE_ALWAYS 111ed31bbf65267c1f383dd0dff37acd034f3b9b59fDianne Hackborn || mode == ActivityManager.COMPAT_MODE_NEVER) { 112ed31bbf65267c1f383dd0dff37acd034f3b9b59fDianne Hackborn // No longer have something to switch. 113ed31bbf65267c1f383dd0dff37acd034f3b9b59fDianne Hackborn closePanel(); 114ed31bbf65267c1f383dd0dff37acd034f3b9b59fDianne Hackborn return; 115ed31bbf65267c1f383dd0dff37acd034f3b9b59fDianne Hackborn } 1163b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler final boolean on = (mode == ActivityManager.COMPAT_MODE_ENABLED); 1173b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler mOnButton.setChecked(on); 1183b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler mOffButton.setChecked(!on); 1193b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler } 1203b0543acf11ac4638ec5452acc4c1c6716c26880Daniel Sandler} 121