blob: 8c4ae197d3b7e0621d70241e6e9c404b0705897d [file] [log] [blame]
/*
* Copyright (C) 2011 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 com.android.systemui.statusbar.tablet;
import android.app.ActivityManager;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.RemoteException;
import android.util.AttributeSet;
import android.util.Slog;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import com.android.systemui.R;
public class CompatModePanel extends FrameLayout implements StatusBarPanel,
View.OnClickListener {
private static final boolean DEBUG = TabletStatusBar.DEBUG;
private static final String TAG = "CompatModePanel";
private ActivityManager mAM;
private boolean mAttached = false;
private Context mContext;
private RadioButton mOnButton, mOffButton;
private View mTrigger;
// private InputMethodButton mInputMethodSwitchButton;
public CompatModePanel(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
mAM = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
}
@Override
public void onFinishInflate() {
mOnButton = (RadioButton) findViewById(R.id.compat_mode_on_radio);
mOffButton = (RadioButton) findViewById(R.id.compat_mode_off_radio);
mOnButton.setOnClickListener(this);
mOffButton.setOnClickListener(this);
refresh();
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
if (mAttached) {
mAttached = false;
}
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
if (!mAttached) {
mAttached = true;
}
}
@Override
public void onClick(View v) {
if (v == mOnButton) {
mAM.setFrontActivityScreenCompatMode(ActivityManager.COMPAT_MODE_ENABLED);
} else if (v == mOffButton) {
mAM.setFrontActivityScreenCompatMode(ActivityManager.COMPAT_MODE_DISABLED);
}
}
@Override
public boolean isInContentArea(int x, int y) {
return false;
}
@Override
public boolean dispatchHoverEvent(MotionEvent event) {
// Ignore hover events outside of this panel bounds since such events
// generate spurious accessibility events with the panel content when
// tapping outside of it, thus confusing the user.
final int x = (int) event.getX();
final int y = (int) event.getY();
if (x >= 0 && x < getWidth() && y >= 0 && y < getHeight()) {
return super.dispatchHoverEvent(event);
}
return true;
}
public void setTrigger(View v) {
mTrigger = v;
}
public void openPanel() {
setVisibility(View.VISIBLE);
if (mTrigger != null) mTrigger.setSelected(true);
refresh();
}
public void closePanel() {
setVisibility(View.GONE);
if (mTrigger != null) mTrigger.setSelected(false);
}
private void refresh() {
int mode = mAM.getFrontActivityScreenCompatMode();
if (mode == ActivityManager.COMPAT_MODE_ALWAYS
|| mode == ActivityManager.COMPAT_MODE_NEVER) {
// No longer have something to switch.
closePanel();
return;
}
final boolean on = (mode == ActivityManager.COMPAT_MODE_ENABLED);
mOnButton.setChecked(on);
mOffButton.setChecked(!on);
}
}