11f2339bb845c3d94f94ba958024d718848271025Andrew Wilson/*
21f2339bb845c3d94f94ba958024d718848271025Andrew Wilson * Copyright (C) 2014 The Android Open Source Project
31f2339bb845c3d94f94ba958024d718848271025Andrew Wilson *
41f2339bb845c3d94f94ba958024d718848271025Andrew Wilson * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
51f2339bb845c3d94f94ba958024d718848271025Andrew Wilson * in compliance with the License. You may obtain a copy of the License at
61f2339bb845c3d94f94ba958024d718848271025Andrew Wilson *
71f2339bb845c3d94f94ba958024d718848271025Andrew Wilson * http://www.apache.org/licenses/LICENSE-2.0
81f2339bb845c3d94f94ba958024d718848271025Andrew Wilson *
91f2339bb845c3d94f94ba958024d718848271025Andrew Wilson * Unless required by applicable law or agreed to in writing, software distributed under the License
101f2339bb845c3d94f94ba958024d718848271025Andrew Wilson * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
111f2339bb845c3d94f94ba958024d718848271025Andrew Wilson * or implied. See the License for the specific language governing permissions and limitations under
121f2339bb845c3d94f94ba958024d718848271025Andrew Wilson * the License.
131f2339bb845c3d94f94ba958024d718848271025Andrew Wilson */
1430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonpackage com.android.tv.quicksettings;
1530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
1630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.app.Activity;
1730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.app.AlertDialog;
1830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.content.DialogInterface;
1930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.content.Intent;
2030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.os.Bundle;
2130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.os.Parcelable;
2230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.support.v17.leanback.widget.OnChildSelectedListener;
2330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.support.v17.leanback.widget.VerticalGridView;
2430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.support.v7.widget.RecyclerView;
2530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.util.Log;
2630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.animation.AlphaAnimation;
2730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.animation.Animation;
2830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.animation.AnimationSet;
2930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.animation.ScaleAnimation;
3030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.Gravity;
3130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.KeyEvent;
3230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.LayoutInflater;
3330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.View;
3430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.ViewGroup;
3530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.WindowManager;
3630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.widget.SeekBar;
3730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.widget.TextView;
3830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
3930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport java.util.ArrayList;
4030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport java.util.Arrays;
4130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport java.util.List;
4230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
4330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonpublic class SettingsDialog extends Activity {
4430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
4530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private static final String TAG = "SettingsDialog";
4630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private static final boolean DEBUG = true;
4730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
4830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    static final String EXTRA_START_POS = "com.android.tv.quicksettings.START_POS";
4930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    static final String EXTRA_SETTINGS = "com.android.tv.quicksettings.SETTINGS";
5030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    static final String
5130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            RESULT_EXTRA_NEW_SETTINGS_VALUES = "com.android.tv.quicksettings.NEW_SETTINGS_VALUES";
5230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private static final int SETTING_INT_VALUE_MIN = 0;
5330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private static final int SETTING_INT_VALUE_STEP = 10;
5430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
5530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private VerticalGridView mPanelList;
5630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private SeekBar mSeekBar;
5730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private TextView mSettingValue;
5830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private DialogAdapter mAdapter;
5930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private SettingSelectedListener mSettingSelectedListener = new SettingSelectedListener();
6030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private Setting mFocusedSetting;
6130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private ArrayList<Setting> mSettings;
6230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
6330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    @Override
6430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    public void onCreate(Bundle savedInstanceState) {
6530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        super.onCreate(savedInstanceState);
6630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
6730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        WindowManager.LayoutParams lp = getWindow().getAttributes();
6830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        lp.height = WindowManager.LayoutParams.MATCH_PARENT;
6930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        lp.gravity = Gravity.BOTTOM | Gravity.CENTER;
7030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        lp.y = getResources().getDimensionPixelSize(R.dimen.panel_y_offset);
7130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        getWindow().setAttributes(lp);
7230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
7330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        setContentView(R.layout.main_quicksettings);
7430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
7530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        Intent intent = getIntent();
7630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        int startPos = intent.getIntExtra(EXTRA_START_POS, -1);
7730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        if (DEBUG)
7830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            Log.d(TAG, "startPos=" + startPos);
7930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
8030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mPanelList = (VerticalGridView) findViewById(R.id.main_panel_list);
8130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mPanelList.setWindowAlignment(VerticalGridView.WINDOW_ALIGN_NO_EDGE);
8230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mPanelList.setOnChildSelectedListener(mSettingSelectedListener);
8330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
8430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mSettings = getIntent().getParcelableArrayListExtra(EXTRA_SETTINGS);
8530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        int pivotX = getResources().getDimensionPixelSize(
8630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                R.dimen.main_panel_text_width_minus_padding);
8730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        int pivotY = getResources().getDimensionPixelSize(R.dimen.main_panel_text_height_half);
8830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
8930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mAdapter = new DialogAdapter(mSettings, pivotX, pivotY, new SettingClickedListener() {
9030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            @Override
9130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            public void onSettingClicked(Setting s) {
9230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                if (s.getType() != Setting.TYPE_UNKNOWN) {
9330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    setResult(RESULT_OK, new Intent().putExtra(RESULT_EXTRA_NEW_SETTINGS_VALUES,
9430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                            mSettings));
9530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    finish();
9630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                } else {
9730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    new AlertDialog.Builder(SettingsDialog.this).setPositiveButton(
9830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                            android.R.string.ok, new DialogInterface.OnClickListener() {
9930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                @Override
10030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                public void onClick(DialogInterface dialog, int id) {
10130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                    // User clicked OK button
10230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                    String[] presetSettingChoices = getResources().getStringArray(
10330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                            R.array.setting_preset_choices);
10430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                    mSettings.get(QuickSettings.PRESET_SETTING_INDEX).setValue(
10530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                            presetSettingChoices[getResources().getInteger(
10630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                                    R.integer.standard_setting_index)]);
10730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                    int[] newSettingValues = getResources().getIntArray(
10830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                            R.array.standard_setting_values);
10930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                    for (int i = 0; i < newSettingValues.length; i++) {
11030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                        mSettings.get(i + QuickSettings.INTEGER_SETTING_START_INDEX)
11130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                                .setValue(
11230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                                        newSettingValues[i]);
11330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                    }
11430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                }
11530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                            }).setNegativeButton(android.R.string.cancel,
11630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                            new DialogInterface.OnClickListener() {
11730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                @Override
11830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                public void onClick(DialogInterface dialog, int id) {
11930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                    // User cancelled the dialog - do nothing
12030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                }
12130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                            }).setTitle(R.string.reset_dialog_message).create().show();
12230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                }
12330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            }
12430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        });
12530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
12630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mPanelList.setAdapter(mAdapter);
12730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mPanelList.setSelectedPosition(startPos);
12830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mPanelList.requestFocus();
12930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
13030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mSeekBar = (SeekBar) findViewById(R.id.main_slider);
13130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
13230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mSettingValue = (TextView) findViewById(R.id.setting_value);
13330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    }
13430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
13530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private class SettingSelectedListener implements OnChildSelectedListener {
13630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        private static final float ALPHA_UNSELECTED = 0.3f;
13730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        private static final float ALPHA_SELECTED = 1.0f;
13830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        private static final float SCALE_UNSELECTED = 1.0f;
13930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        private static final float SCALE_SELECTED = 1.3f;
14030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
14130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        @Override
14230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        public void onChildSelected(ViewGroup parent, View view, int position, long id) {
14330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            mFocusedSetting = mSettings.get(position);
14430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            switch (mFocusedSetting.getType()) {
14530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                case Setting.TYPE_STRING:
14630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSettingValue.setVisibility(View.VISIBLE);
14730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSettingValue.setText(mFocusedSetting.getStringValue());
14830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSeekBar.setVisibility(View.GONE);
14930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    break;
15030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                case Setting.TYPE_INT:
15130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSettingValue.setVisibility(View.VISIBLE);
15230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSettingValue.setText(Integer.toString(mFocusedSetting.getIntValue()));
15330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSeekBar.setMax(mFocusedSetting.getMaxValue());
15430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSeekBar.setProgress(mFocusedSetting.getIntValue());
15530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSeekBar.setVisibility(View.VISIBLE);
15630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    break;
15730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                default:
15830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSettingValue.setVisibility(View.GONE);
15930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSeekBar.setVisibility(View.GONE);
16030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    break;
16130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            }
16230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        }
16330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    }
16430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
16530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    @Override
16630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    public boolean onKeyUp(int keyCode, KeyEvent event) {
16730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        if (mFocusedSetting == null) {
16830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            return super.onKeyUp(keyCode, event);
16930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        }
17030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        switch (mFocusedSetting.getType()) {
17130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            case Setting.TYPE_INT:
17230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                return integerSettingHandleKeyCode(keyCode, event);
17330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            case Setting.TYPE_STRING:
17430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                return stringSettingHandleKeyCode(keyCode, event);
17530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            default:
17630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                return super.onKeyUp(keyCode, event);
17730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        }
17830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    }
17930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
18030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private boolean integerSettingHandleKeyCode(int keyCode, KeyEvent event) {
18130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        switch (keyCode) {
18230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            case KeyEvent.KEYCODE_DPAD_RIGHT:
18330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                setFocusedSettingToValue(Math.min(
18430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                        mFocusedSetting.getIntValue() + SETTING_INT_VALUE_STEP,
18530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                        mFocusedSetting.getMaxValue()));
18630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                return true;
18730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            case KeyEvent.KEYCODE_DPAD_LEFT:
18830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                setFocusedSettingToValue(Math.max(
18930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                        mFocusedSetting.getIntValue() - SETTING_INT_VALUE_STEP,
19030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                        SETTING_INT_VALUE_MIN));
19130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                return true;
19230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            default:
19330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                return super.onKeyUp(keyCode, event);
19430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        }
19530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    }
19630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
19730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private void setFocusedSettingToValue(int value) {
19830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mFocusedSetting.setValue(value);
19930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mSeekBar.setProgress(mFocusedSetting.getIntValue());
20030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mSettingValue.setText(Integer.toString(mFocusedSetting.getIntValue()));
20130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        String[] presetSettingChoices = getResources().getStringArray(
20230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                R.array.setting_preset_choices);
20330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mSettings.get(QuickSettings.PRESET_SETTING_INDEX).setValue(
20430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                presetSettingChoices[getResources().getInteger(R.integer.custom_setting_index)]);
20530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    }
20630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
20730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private boolean stringSettingHandleKeyCode(int keyCode, KeyEvent event) {
20830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        if (!mFocusedSetting.getTitle().equals(getString(R.string.setting_preset_name))) {
20930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            return super.onKeyUp(keyCode, event);
21030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        }
21130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
21230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        String[] presetSettingChoices = getResources().getStringArray(
21330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                R.array.setting_preset_choices);
21430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
21530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        int currentIndex = Arrays.asList(presetSettingChoices).indexOf(
21630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                mFocusedSetting.getStringValue());
21730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        switch (keyCode) {
21830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            case KeyEvent.KEYCODE_DPAD_RIGHT:
21930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                currentIndex++;
22030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                break;
22130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            case KeyEvent.KEYCODE_DPAD_LEFT:
22230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                currentIndex--;
22330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                break;
22430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            default:
22530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                return super.onKeyUp(keyCode, event);
22630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        }
22730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        int newIndex = (currentIndex + presetSettingChoices.length) % presetSettingChoices.length;
22830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mFocusedSetting.setValue(presetSettingChoices[newIndex]);
22930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mSettingValue.setText(mFocusedSetting.getStringValue());
23030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        int[] newSettingValues = null;
23130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        if (newIndex == getResources().getInteger(R.integer.standard_setting_index)) {
23230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            newSettingValues = getResources().getIntArray(R.array.standard_setting_values);
23330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        } else if (newIndex == getResources().getInteger(R.integer.cinema_setting_index)) {
23430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            newSettingValues = getResources().getIntArray(R.array.cinema_setting_values);
23530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        } else if (newIndex == getResources().getInteger(R.integer.vivid_setting_index)) {
23630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            newSettingValues = getResources().getIntArray(R.array.vivid_setting_values);
23730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        } else if (newIndex == getResources().getInteger(R.integer.game_setting_index)) {
23830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            newSettingValues = getResources().getIntArray(R.array.game_setting_values);
23930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        }
24030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        if (newSettingValues != null) {
24130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            for (int i = 0; i < newSettingValues.length; i++) {
24230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                mSettings.get(i + QuickSettings.INTEGER_SETTING_START_INDEX).setValue(
24330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                        newSettingValues[i]);
24430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            }
24530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        }
24630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        return true;
24730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    }
24830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson}
249