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
1620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantlerimport android.content.SharedPreferences;
1720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantlerimport android.preference.PreferenceManager;
1882d45e2e4b9bc2836136d2049d6c158efcb6d557Tony Mantlerimport android.support.annotation.NonNull;
1930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.app.Activity;
2030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.app.AlertDialog;
2130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.content.DialogInterface;
2230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.content.Intent;
2330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.os.Bundle;
2430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.support.v17.leanback.widget.OnChildSelectedListener;
2530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.support.v17.leanback.widget.VerticalGridView;
2630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.util.Log;
2730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.Gravity;
2830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.KeyEvent;
2930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.View;
3030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.ViewGroup;
3130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.WindowManager;
3230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.widget.SeekBar;
3330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.widget.TextView;
3430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
3530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport java.util.ArrayList;
3630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport java.util.Arrays;
3730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
3830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonpublic class SettingsDialog extends Activity {
3930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
4014c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler    private static final int PRESET_SETTING_INDEX = 0;
4114c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler    private static final int INTEGER_SETTING_START_INDEX = 1;
4214c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler
4330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private static final String TAG = "SettingsDialog";
4430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private static final boolean DEBUG = true;
4530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
4630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    static final String EXTRA_START_POS = "com.android.tv.quicksettings.START_POS";
4730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private static final int SETTING_INT_VALUE_MIN = 0;
4830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private static final int SETTING_INT_VALUE_STEP = 10;
4930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
5030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private VerticalGridView mPanelList;
5130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private SeekBar mSeekBar;
5230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private TextView mSettingValue;
5330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private DialogAdapter mAdapter;
5482d45e2e4b9bc2836136d2049d6c158efcb6d557Tony Mantler    private final SettingSelectedListener mSettingSelectedListener = new SettingSelectedListener();
5530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private Setting mFocusedSetting;
5630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private ArrayList<Setting> mSettings;
5720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    private SharedPreferences mSharedPreferences;
5820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
5920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    private PresetSettingsListener mPresetSettingsListener;
6030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
6130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    @Override
6230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    public void onCreate(Bundle savedInstanceState) {
6330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        super.onCreate(savedInstanceState);
6430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
6520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
6620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mPresetSettingsListener = new PresetSettingsListener(this);
6720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
6830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        WindowManager.LayoutParams lp = getWindow().getAttributes();
6930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        lp.height = WindowManager.LayoutParams.MATCH_PARENT;
7030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        lp.gravity = Gravity.BOTTOM | Gravity.CENTER;
7130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        lp.y = getResources().getDimensionPixelSize(R.dimen.panel_y_offset);
7230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        getWindow().setAttributes(lp);
7330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
7430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        setContentView(R.layout.main_quicksettings);
7530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
7630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        Intent intent = getIntent();
7730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        int startPos = intent.getIntExtra(EXTRA_START_POS, -1);
7830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        if (DEBUG)
7930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            Log.d(TAG, "startPos=" + startPos);
8030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
8130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mPanelList = (VerticalGridView) findViewById(R.id.main_panel_list);
8230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mPanelList.setWindowAlignment(VerticalGridView.WINDOW_ALIGN_NO_EDGE);
8330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mPanelList.setOnChildSelectedListener(mSettingSelectedListener);
8430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
8520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mSettings = getSettings();
8620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
8725d13aa7ec5002f8e0755892483f84c355f12069Tony Mantler        final int pivotX;
8825d13aa7ec5002f8e0755892483f84c355f12069Tony Mantler        if (getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
8925d13aa7ec5002f8e0755892483f84c355f12069Tony Mantler            pivotX = getResources().getDimensionPixelSize(R.dimen.slider_horizontal_padding);
9025d13aa7ec5002f8e0755892483f84c355f12069Tony Mantler        } else {
9125d13aa7ec5002f8e0755892483f84c355f12069Tony Mantler            pivotX = getResources().getDimensionPixelSize(
9225d13aa7ec5002f8e0755892483f84c355f12069Tony Mantler                    R.dimen.main_panel_text_width_minus_padding);
9325d13aa7ec5002f8e0755892483f84c355f12069Tony Mantler        }
9425d13aa7ec5002f8e0755892483f84c355f12069Tony Mantler        final int pivotY = getResources().getDimensionPixelSize(R.dimen.main_panel_text_height_half);
9530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
9630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mAdapter = new DialogAdapter(mSettings, pivotX, pivotY, new SettingClickedListener() {
9730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            @Override
9830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            public void onSettingClicked(Setting s) {
9930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                if (s.getType() != Setting.TYPE_UNKNOWN) {
10030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    finish();
10130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                } else {
10230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    new AlertDialog.Builder(SettingsDialog.this).setPositiveButton(
10330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                            android.R.string.ok, new DialogInterface.OnClickListener() {
10430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                @Override
10530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                public void onClick(DialogInterface dialog, int id) {
10630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                    // User clicked OK button
10714c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler                                    String[] presetSettingValues = getResources().getStringArray(
10814c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler                                            R.array.setting_preset_values);
10914c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler                                    mSettings.get(PRESET_SETTING_INDEX).setValue(
11014c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler                                            presetSettingValues[getResources().getInteger(
11130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                                    R.integer.standard_setting_index)]);
11230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                }
11330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                            }).setNegativeButton(android.R.string.cancel,
11430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                            new DialogInterface.OnClickListener() {
11530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                @Override
11630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                public void onClick(DialogInterface dialog, int id) {
11730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                    // User cancelled the dialog - do nothing
11830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                                }
11930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                            }).setTitle(R.string.reset_dialog_message).create().show();
12030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                }
12130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            }
12230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        });
12330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
12430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mPanelList.setAdapter(mAdapter);
12520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mPanelList.setSelectedPosition(startPos + 1);
12630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mPanelList.requestFocus();
12730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
12830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mSeekBar = (SeekBar) findViewById(R.id.main_slider);
12930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
13030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mSettingValue = (TextView) findViewById(R.id.setting_value);
13130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    }
13230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
13320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    @Override
13420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    protected void onResume() {
13520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        super.onResume();
13620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
13720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mSharedPreferences.registerOnSharedPreferenceChangeListener(mPresetSettingsListener);
13820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    }
13920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
14020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    @Override
14120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    protected void onPause() {
14220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        super.onPause();
14330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
14420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        mSharedPreferences.unregisterOnSharedPreferenceChangeListener(mPresetSettingsListener);
14520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    }
14620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
14720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    private ArrayList<Setting> getSettings() {
14820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        ArrayList<Setting> settings = new ArrayList<>();
14920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
15020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        settings.add(new Setting(mSharedPreferences, "preset",
15120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                getString(R.string.setting_preset_name)));
15220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
15320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        String[] settingNames = getResources().getStringArray(R.array.setting_names);
15420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        String[] settingKeys = getResources().getStringArray(R.array.setting_keys);
15520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        int[] maxSettingValues = getResources().getIntArray(R.array.setting_max_values);
15620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        for (int i = 0; i < settingNames.length; i++) {
15720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler            settings.add(
15820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                    new Setting(mSharedPreferences, settingKeys[i], settingNames[i],
15920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler                            maxSettingValues[i]));
16020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        }
16120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        settings.add(new Setting(getString(R.string.setting_reset_defaults_name)));
16220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
16320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler        return settings;
16420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    }
16520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler
16620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler    private class SettingSelectedListener implements OnChildSelectedListener {
16730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        @Override
16830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        public void onChildSelected(ViewGroup parent, View view, int position, long id) {
16930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            mFocusedSetting = mSettings.get(position);
17030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            switch (mFocusedSetting.getType()) {
17130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                case Setting.TYPE_STRING:
17230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSettingValue.setVisibility(View.VISIBLE);
17330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSettingValue.setText(mFocusedSetting.getStringValue());
17430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSeekBar.setVisibility(View.GONE);
17530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    break;
17630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                case Setting.TYPE_INT:
17730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSettingValue.setVisibility(View.VISIBLE);
17830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSettingValue.setText(Integer.toString(mFocusedSetting.getIntValue()));
17930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSeekBar.setMax(mFocusedSetting.getMaxValue());
18030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSeekBar.setProgress(mFocusedSetting.getIntValue());
18130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSeekBar.setVisibility(View.VISIBLE);
18230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    break;
18330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                default:
18430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSettingValue.setVisibility(View.GONE);
18530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    mSeekBar.setVisibility(View.GONE);
18630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                    break;
18730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            }
18830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        }
18930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    }
19030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
19130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    @Override
19282d45e2e4b9bc2836136d2049d6c158efcb6d557Tony Mantler    public boolean onKeyUp(int keyCode, @NonNull KeyEvent event) {
19330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        if (mFocusedSetting == null) {
19430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            return super.onKeyUp(keyCode, event);
19530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        }
19630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        switch (mFocusedSetting.getType()) {
19730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            case Setting.TYPE_INT:
19830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                return integerSettingHandleKeyCode(keyCode, event);
19930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            case Setting.TYPE_STRING:
20030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                return stringSettingHandleKeyCode(keyCode, event);
20130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            default:
20230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                return super.onKeyUp(keyCode, event);
20330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        }
20430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    }
20530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
20630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private boolean integerSettingHandleKeyCode(int keyCode, KeyEvent event) {
20730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        switch (keyCode) {
20830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            case KeyEvent.KEYCODE_DPAD_RIGHT:
20930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                setFocusedSettingToValue(Math.min(
21030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                        mFocusedSetting.getIntValue() + SETTING_INT_VALUE_STEP,
21130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                        mFocusedSetting.getMaxValue()));
21230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                return true;
21330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            case KeyEvent.KEYCODE_DPAD_LEFT:
21430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                setFocusedSettingToValue(Math.max(
21530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                        mFocusedSetting.getIntValue() - SETTING_INT_VALUE_STEP,
21630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                        SETTING_INT_VALUE_MIN));
21730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                return true;
21830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            default:
21930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                return super.onKeyUp(keyCode, event);
22030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        }
22130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    }
22230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
22330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private void setFocusedSettingToValue(int value) {
22430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mFocusedSetting.setValue(value);
22530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mSeekBar.setProgress(mFocusedSetting.getIntValue());
22630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        mSettingValue.setText(Integer.toString(mFocusedSetting.getIntValue()));
22730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        String[] presetSettingChoices = getResources().getStringArray(
22814c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler                R.array.setting_preset_values);
22914c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler        mSettings.get(PRESET_SETTING_INDEX).setValue(
23030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                presetSettingChoices[getResources().getInteger(R.integer.custom_setting_index)]);
23130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    }
23230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
23330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    private boolean stringSettingHandleKeyCode(int keyCode, KeyEvent event) {
23430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        if (!mFocusedSetting.getTitle().equals(getString(R.string.setting_preset_name))) {
23530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            return super.onKeyUp(keyCode, event);
23630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        }
23730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
23830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        String[] presetSettingChoices = getResources().getStringArray(
23930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                R.array.setting_preset_choices);
24014c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler        String[] presetSettingValues = getResources().getStringArray(R.array.setting_preset_values);
24130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson
24214c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler        int currentIndex = Arrays.asList(presetSettingValues).indexOf(
24330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                mFocusedSetting.getStringValue());
24430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        switch (keyCode) {
24530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            case KeyEvent.KEYCODE_DPAD_RIGHT:
24630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                currentIndex++;
24730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                break;
24830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            case KeyEvent.KEYCODE_DPAD_LEFT:
24930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                currentIndex--;
25030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                break;
25130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            default:
25230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                return super.onKeyUp(keyCode, event);
25330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        }
25414c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler        int newIndex = (currentIndex + presetSettingValues.length) % presetSettingValues.length;
25514c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler        mFocusedSetting.setValue(presetSettingValues[newIndex]);
25614c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler        mSettingValue.setText(presetSettingChoices[newIndex]);
25730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        int[] newSettingValues = null;
25830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        if (newIndex == getResources().getInteger(R.integer.standard_setting_index)) {
25930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            newSettingValues = getResources().getIntArray(R.array.standard_setting_values);
26030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        } else if (newIndex == getResources().getInteger(R.integer.cinema_setting_index)) {
26130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            newSettingValues = getResources().getIntArray(R.array.cinema_setting_values);
26230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        } else if (newIndex == getResources().getInteger(R.integer.vivid_setting_index)) {
26330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            newSettingValues = getResources().getIntArray(R.array.vivid_setting_values);
26430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        } else if (newIndex == getResources().getInteger(R.integer.game_setting_index)) {
26530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            newSettingValues = getResources().getIntArray(R.array.game_setting_values);
26630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        }
26730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        if (newSettingValues != null) {
26830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            for (int i = 0; i < newSettingValues.length; i++) {
26914c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler                mSettings.get(i + INTEGER_SETTING_START_INDEX).setValue(
27030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson                        newSettingValues[i]);
27130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson            }
27230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        }
27330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson        return true;
27430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson    }
27530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson}
276