blob: fe9aeb7a8c2c62fa14bcf2886e04b7e8962d20b5 [file] [log] [blame]
Amith Yamasani0e2ab4f2010-01-14 16:12:21 -08001/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.settings;
18
19import android.app.AlertDialog;
20import android.app.Dialog;
21import android.content.BroadcastReceiver;
22import android.content.ContentResolver;
23import android.content.Context;
24import android.content.Intent;
25import android.content.IntentFilter;
26import android.os.Bundle;
27import android.preference.Preference;
28import android.preference.PreferenceActivity;
29import android.preference.PreferenceScreen;
30
31import com.android.settings.bluetooth.DockEventReceiver;
32
33public class DockSettings extends PreferenceActivity {
34
35 private static final int DIALOG_NOT_DOCKED = 1;
36 private static final String KEY_AUDIO_SETTINGS = "dock_audio";
37 private Preference mAudioSettings;
38 private Intent mDockIntent;
39
40 private BroadcastReceiver mReceiver = new BroadcastReceiver() {
41 @Override
42 public void onReceive(Context context, Intent intent) {
43 if (intent.getAction().equals(Intent.ACTION_DOCK_EVENT)) {
44 handleDockChange(intent);
45 }
46 }
47 };
48
49 @Override
50 protected void onCreate(Bundle savedInstanceState) {
51 super.onCreate(savedInstanceState);
52 ContentResolver resolver = getContentResolver();
53 addPreferencesFromResource(R.xml.dock_settings);
54
55 initDockSettings();
56 }
57
58 @Override
59 protected void onResume() {
60 super.onResume();
61
62 IntentFilter filter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
63 registerReceiver(mReceiver, filter);
64 }
65
66 @Override
67 protected void onPause() {
68 super.onPause();
69
70 unregisterReceiver(mReceiver);
71 }
72
73 private void initDockSettings() {
74 mAudioSettings = findPreference(KEY_AUDIO_SETTINGS);
Amith Yamasani6ff80dc2010-01-15 19:10:55 -080075 if (mAudioSettings != null) {
76 mAudioSettings.setSummary(R.string.dock_audio_summary_none);
77 }
Amith Yamasani0e2ab4f2010-01-14 16:12:21 -080078 }
79
80 private void handleDockChange(Intent intent) {
81 if (mAudioSettings != null) {
82 int dockState = intent.getIntExtra(Intent.EXTRA_DOCK_STATE, 0);
83 mDockIntent = intent;
84 int resId = R.string.dock_audio_summary_unknown;
85 switch (dockState) {
86 case Intent.EXTRA_DOCK_STATE_CAR:
87 resId = R.string.dock_audio_summary_car;
88 break;
89 case Intent.EXTRA_DOCK_STATE_DESK:
90 resId = R.string.dock_audio_summary_desk;
91 break;
92 case Intent.EXTRA_DOCK_STATE_UNDOCKED:
93 resId = R.string.dock_audio_summary_none;
94 }
95 mAudioSettings.setSummary(resId);
96 if (dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED) {
97 // remove undocked dialog if currently showing.
98 try {
99 dismissDialog(DIALOG_NOT_DOCKED);
100 } catch (IllegalArgumentException iae) {
101 // Maybe it was already dismissed
102 }
103 }
104 }
105 }
106
107 @Override
108 public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
109 if (preference == mAudioSettings) {
Amith Yamasani6ff80dc2010-01-15 19:10:55 -0800110 int dockState = mDockIntent != null
111 ? mDockIntent.getIntExtra(Intent.EXTRA_DOCK_STATE, 0)
112 : Intent.EXTRA_DOCK_STATE_UNDOCKED;
Amith Yamasani0e2ab4f2010-01-14 16:12:21 -0800113 if (dockState == Intent.EXTRA_DOCK_STATE_UNDOCKED) {
114 showDialog(DIALOG_NOT_DOCKED);
115 } else {
116 Intent i = new Intent(mDockIntent);
117 i.setAction(DockEventReceiver.ACTION_DOCK_SHOW_UI);
118 i.setClass(this, DockEventReceiver.class);
119 sendBroadcast(i);
120 }
121 }
122
123 return true;
124 }
125
126 @Override
127 public Dialog onCreateDialog(int id) {
128 if (id == DIALOG_NOT_DOCKED) {
129 return createUndockedMessage();
130 }
131 return null;
132 }
133
134 private Dialog createUndockedMessage() {
135 final AlertDialog.Builder ab = new AlertDialog.Builder(this);
136 ab.setTitle(R.string.dock_not_found_title);
137 ab.setMessage(R.string.dock_not_found_text);
138 ab.setPositiveButton(android.R.string.ok, null);
139 return ab.create();
140 }
141}