1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5 * in compliance with the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the License
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11 * or implied. See the License for the specific language governing permissions and limitations under
12 * the License.
13 */
14package com.android.tv.quicksettings;
15
16import android.app.Activity;
17import android.app.AlertDialog;
18import android.content.Context;
19import android.content.DialogInterface;
20import android.content.Intent;
21import android.os.Bundle;
22import android.support.v17.leanback.widget.VerticalGridView;
23import android.text.TextUtils;
24import android.util.Log;
25import android.view.Gravity;
26import android.view.LayoutInflater;
27import android.view.View;
28import android.view.ViewGroup;
29import android.view.WindowManager;
30import android.widget.TextView;
31
32import com.android.tv.quicksettings.SettingsDialog;
33
34import java.util.ArrayList;
35import java.util.List;
36
37public class QuickSettings extends Activity {
38
39    private static final String TAG = "QuickSettings";
40    private static final int REQUEST_CODE_SET_SETTINGS = 1;
41    static final int PRESET_SETTING_INDEX = 0;
42    static final int INTEGER_SETTING_START_INDEX = 1;
43
44    private int mSlidOutTranslationX;
45    private View mRootView;
46    private ArrayList<Setting> mSettings;
47    private PanelAdapter mAdapter;
48
49    @Override
50    protected void onCreate(Bundle savedInstanceState) {
51        super.onCreate(savedInstanceState);
52
53        WindowManager.LayoutParams lp = getWindow().getAttributes();
54        lp.gravity = Gravity.RIGHT;
55        getWindow().setAttributes(lp);
56
57        setContentView(R.layout.side_quicksettings);
58        getWindow().setLayout(WindowManager.LayoutParams.WRAP_CONTENT,
59                WindowManager.LayoutParams.MATCH_PARENT);
60
61        mSlidOutTranslationX = getResources().getDimensionPixelSize(R.dimen.panel_width);
62
63        mRootView = getWindow().getDecorView().findViewById(android.R.id.content);
64        mRootView.setTranslationX(mSlidOutTranslationX);
65
66        final VerticalGridView panelList = (VerticalGridView) findViewById(R.id.side_panel_list);
67
68        mSettings = getSettings();
69        mAdapter = new PanelAdapter(mSettings, new SettingClickedListener() {
70            @Override
71            public void onSettingClicked(Setting s) {
72                Log.d(TAG, "Clicked Setting " + s.getTitle());
73                if (s.getType() != Setting.TYPE_UNKNOWN) {
74                    Intent intent = new Intent(QuickSettings.this, SettingsDialog.class);
75                    intent.putExtra(SettingsDialog.EXTRA_START_POS,
76                            panelList.getSelectedPosition());
77                    intent.putExtra(SettingsDialog.EXTRA_SETTINGS, mSettings);
78                    startActivityForResult(intent, REQUEST_CODE_SET_SETTINGS);
79                } else {
80                    new AlertDialog.Builder(QuickSettings.this).setPositiveButton(
81                            android.R.string.ok, new DialogInterface.OnClickListener() {
82                                @Override
83                                public void onClick(DialogInterface dialog, int id) {
84                                    // User clicked OK button
85                                    String[] presetSettingChoices = getResources().getStringArray(
86                                            R.array.setting_preset_choices);
87                                    mSettings.get(PRESET_SETTING_INDEX).setValue(
88                                            presetSettingChoices[getResources().getInteger(
89                                                    R.integer.standard_setting_index)]);
90                                    int[] newSettingValues = getResources().getIntArray(
91                                            R.array.standard_setting_values);
92                                    for (int i = 0; i < newSettingValues.length; i++) {
93                                        mSettings.get(i + INTEGER_SETTING_START_INDEX).setValue(
94                                                newSettingValues[i]);
95                                    }
96                                    mAdapter.notifyDataSetChanged();
97                                }
98                            }).setNegativeButton(android.R.string.cancel,
99                            new DialogInterface.OnClickListener() {
100                                @Override
101                                public void onClick(DialogInterface dialog, int id) {
102                                    // User cancelled the dialog - do nothing
103                                }
104                            }).setTitle(R.string.reset_dialog_message).create().show();
105
106                }
107            }
108        });
109
110        panelList.setAdapter(mAdapter);
111        panelList.setSelectedPosition(0);
112        panelList.requestFocus();
113    }
114
115    @Override
116    protected void onResume() {
117        super.onResume();
118        mRootView.animate().cancel();
119        mRootView.animate().translationX(0).start();
120    }
121
122    @Override
123    protected void onPause() {
124        mRootView.animate().cancel();
125        mRootView.animate().translationX(mSlidOutTranslationX).start();
126        super.onPause();
127    }
128
129    @Override
130    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
131        if (requestCode == REQUEST_CODE_SET_SETTINGS) {
132            if (resultCode == RESULT_OK) {
133                mSettings = data.getParcelableArrayListExtra(
134                        SettingsDialog.RESULT_EXTRA_NEW_SETTINGS_VALUES);
135                mAdapter.setSettings(mSettings);
136            }
137        } else {
138            super.onActivityResult(requestCode, resultCode, data);
139        }
140    }
141
142    private ArrayList<Setting> getSettings() {
143        ArrayList<Setting> settings = new ArrayList<Setting>();
144
145        String[] presetSettingChoices = getResources().getStringArray(
146                R.array.setting_preset_choices);
147        settings.add(new Setting(getString(R.string.setting_preset_name),
148                presetSettingChoices[getResources().getInteger(R.integer.standard_setting_index)]));
149        String[] settingNames = getResources().getStringArray(R.array.setting_names);
150        int[] standardSettingValues = getResources().getIntArray(R.array.standard_setting_values);
151        int[] maxSettingValues = getResources().getIntArray(R.array.setting_max_values);
152        for (int i = 0; i < settingNames.length; i++) {
153            settings.add(
154                    new Setting(settingNames[i], standardSettingValues[i], maxSettingValues[i]));
155        }
156        settings.add(new Setting(getString(R.string.setting_reset_defaults_name)));
157
158        return settings;
159    }
160}
161