136cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn/*
236cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn * Copyright (C) 2011 The Android Open Source Project
336cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn *
436cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License");
536cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn * you may not use this file except in compliance with the License.
636cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn * You may obtain a copy of the License at
736cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn *
836cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn *      http://www.apache.org/licenses/LICENSE-2.0
936cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn *
1036cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn * Unless required by applicable law or agreed to in writing, software
1136cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS,
1236cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1336cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn * See the License for the specific language governing permissions and
1436cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn * limitations under the License.
1536cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn */
1636cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn
1736cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackbornpackage com.android.server.am;
1836cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn
1936cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackbornimport android.app.ActivityManager;
2036cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackbornimport android.app.Dialog;
2136cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackbornimport android.content.Context;
2236cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackbornimport android.content.pm.ApplicationInfo;
2336cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackbornimport android.view.Gravity;
2436cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackbornimport android.view.View;
2536cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackbornimport android.view.Window;
2636cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackbornimport android.view.WindowManager;
2736cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackbornimport android.widget.CheckBox;
2836cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackbornimport android.widget.CompoundButton;
2936cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackbornimport android.widget.Switch;
3036cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn
31be4e6aaa0252dd7da28b7aa85beba982538efa46Dianne Hackbornpublic final class CompatModeDialog extends Dialog {
3236cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn    final ActivityManagerService mService;
3336cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn    final ApplicationInfo mAppInfo;
3436cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn
3536cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn    final Switch mCompatEnabled;
3636cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn    final CheckBox mAlwaysShow;
3736cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn    final View mHint;
3836cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn
3936cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn    public CompatModeDialog(ActivityManagerService service, Context context,
4036cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            ApplicationInfo appInfo) {
4136cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        super(context, com.android.internal.R.style.Theme_Holo_Dialog_MinWidth);
4236cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        setCancelable(true);
4336cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        setCanceledOnTouchOutside(true);
4436cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        getWindow().requestFeature(Window.FEATURE_NO_TITLE);
4536cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        getWindow().setType(WindowManager.LayoutParams.TYPE_PHONE);
4636cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        getWindow().setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL);
4736cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        mService = service;
4836cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        mAppInfo = appInfo;
4936cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn
5036cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        setContentView(com.android.internal.R.layout.am_compat_mode_dialog);
5136cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        mCompatEnabled = (Switch)findViewById(com.android.internal.R.id.compat_checkbox);
5236cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        mCompatEnabled.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
5336cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            @Override
5436cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
5536cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn                synchronized (mService) {
5636cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn                    mService.mCompatModePackages.setPackageScreenCompatModeLocked(
5736cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn                            mAppInfo.packageName,
5836cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn                            mCompatEnabled.isChecked() ? ActivityManager.COMPAT_MODE_ENABLED
5936cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn                                    : ActivityManager.COMPAT_MODE_DISABLED);
6036cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn                    updateControls();
6136cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn                }
6236cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            }
6336cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        });
6436cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        mAlwaysShow = (CheckBox)findViewById(com.android.internal.R.id.ask_checkbox);
6536cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        mAlwaysShow.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
6636cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            @Override
6736cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
6836cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn                synchronized (mService) {
6936cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn                    mService.mCompatModePackages.setPackageAskCompatModeLocked(
7036cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn                            mAppInfo.packageName, mAlwaysShow.isChecked());
7136cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn                    updateControls();
7236cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn                }
7336cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            }
7436cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        });
7536cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        mHint = findViewById(com.android.internal.R.id.reask_hint);
7636cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn
7736cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        updateControls();
7836cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn    }
7936cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn
8036cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn    void updateControls() {
8136cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        synchronized (mService) {
8236cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            int mode = mService.mCompatModePackages.computeCompatModeLocked(mAppInfo);
8336cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            mCompatEnabled.setChecked(mode == ActivityManager.COMPAT_MODE_ENABLED);
8436cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            boolean ask = mService.mCompatModePackages.getPackageAskCompatModeLocked(
8536cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn                    mAppInfo.packageName);
8636cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            mAlwaysShow.setChecked(ask);
8736cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            mHint.setVisibility(ask ? View.INVISIBLE : View.VISIBLE);
8836cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        }
8936cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn    }
9036cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn}
91