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