OSDN Git Service

3704d6c32f01b9fdd5a30ea3a2ac36fbc05feb47
[android-x86/packages-apps-Eleven.git] / src / com / andrew / apollo / preferences / SettingsHolder.java
1 /**\r
2  * \r
3  */\r
4 \r
5 package com.andrew.apollo.preferences;\r
6 \r
7 import java.util.List;\r
8 \r
9 import android.content.BroadcastReceiver;\r
10 import android.content.ComponentName;\r
11 import android.content.Context;\r
12 import android.content.Intent;\r
13 import android.content.IntentFilter;\r
14 import android.content.ServiceConnection;\r
15 import android.content.SharedPreferences;\r
16 import android.content.pm.PackageManager;\r
17 import android.content.pm.ResolveInfo;\r
18 import android.net.Uri;\r
19 import android.os.Bundle;\r
20 import android.os.IBinder;\r
21 import android.preference.ListPreference;\r
22 import android.preference.Preference;\r
23 import android.preference.Preference.OnPreferenceChangeListener;\r
24 import android.preference.PreferenceActivity;\r
25 import android.view.MenuItem;\r
26 import android.view.View;\r
27 import android.view.View.OnClickListener;\r
28 import android.widget.ImageView;\r
29 import android.widget.TextView;\r
30 \r
31 import com.andrew.apollo.IApolloService;\r
32 import com.andrew.apollo.R;\r
33 import com.andrew.apollo.activities.AudioPlayerHolder;\r
34 import com.andrew.apollo.activities.MusicLibrary;\r
35 import com.andrew.apollo.service.ApolloService;\r
36 import com.andrew.apollo.service.ServiceToken;\r
37 import com.andrew.apollo.utils.ApolloUtils;\r
38 import com.andrew.apollo.utils.MusicUtils;\r
39 import com.andrew.apollo.utils.ThemeUtils;\r
40 import com.androidquery.AQuery;\r
41 \r
42 import static com.andrew.apollo.Constants.ALBUM_IMAGE;\r
43 import static com.andrew.apollo.Constants.APOLLO;\r
44 import static com.andrew.apollo.Constants.THEME_PACKAGE_NAME;\r
45 import static com.andrew.apollo.Constants.THEME_PREVIEW;\r
46 /**\r
47  * @author Andrew Neal FIXME - Work on the IllegalStateException thrown when\r
48  *         using PreferenceFragment and theme chooser\r
49  */\r
50 @SuppressWarnings("deprecation")\r
51 public class SettingsHolder extends PreferenceActivity implements ServiceConnection {\r
52 \r
53     // Service\r
54     private ServiceToken mToken;\r
55 \r
56     @Override\r
57     protected void onCreate(Bundle savedInstanceState) {\r
58         // This should be called first thing\r
59         super.onCreate(savedInstanceState);\r
60 \r
61         // Load settings XML\r
62         int preferencesResId = R.xml.settings;\r
63         addPreferencesFromResource(preferencesResId);\r
64 \r
65         // Load the theme chooser\r
66         initThemeChooser();\r
67 \r
68         // ActionBar\r
69         initActionBar();\r
70     }\r
71 \r
72     @Override\r
73     public boolean onOptionsItemSelected(MenuItem item) {\r
74         switch (item.getItemId()) {\r
75             case android.R.id.home:\r
76                 finish();\r
77                 return true;\r
78         }\r
79         return super.onOptionsItemSelected(item);\r
80     }\r
81 \r
82     @Override\r
83     public void onServiceConnected(ComponentName name, IBinder obj) {\r
84         MusicUtils.mService = IApolloService.Stub.asInterface(obj);\r
85     }\r
86 \r
87     @Override\r
88     public void onServiceDisconnected(ComponentName name) {\r
89         MusicUtils.mService = null;\r
90     }\r
91 \r
92     /**\r
93      * Update the ActionBar as needed\r
94      */\r
95     private final BroadcastReceiver mMediaStatusReceiver = new BroadcastReceiver() {\r
96 \r
97         @Override\r
98         public void onReceive(Context context, Intent intent) {\r
99             // Update the ActionBar\r
100             initActionBar();\r
101         }\r
102 \r
103     };\r
104 \r
105     @Override\r
106     protected void onStart() {\r
107         // Bind to Service\r
108         mToken = MusicUtils.bindToService(this, this);\r
109 \r
110         IntentFilter filter = new IntentFilter();\r
111         filter.addAction(ApolloService.META_CHANGED);\r
112         filter.addAction(ApolloService.QUEUE_CHANGED);\r
113         filter.addAction(ApolloService.PLAYSTATE_CHANGED);\r
114 \r
115         registerReceiver(mMediaStatusReceiver, filter);\r
116         super.onStart();\r
117     }\r
118 \r
119     @Override\r
120     protected void onStop() {\r
121         // Unbind\r
122         if (MusicUtils.mService != null)\r
123             MusicUtils.unbindFromService(mToken);\r
124 \r
125         unregisterReceiver(mMediaStatusReceiver);\r
126         super.onStop();\r
127     }\r
128 \r
129     /**\r
130      * Update the ActionBar\r
131      */\r
132     public void initActionBar() {\r
133         // Custom ActionBar layout\r
134         View view = getLayoutInflater().inflate(R.layout.custom_action_bar, null);\r
135         // Show the ActionBar\r
136         getActionBar().setCustomView(view);\r
137         getActionBar().setTitle(R.string.settings);\r
138         getActionBar().setDisplayHomeAsUpEnabled(true);\r
139         getActionBar().setDisplayShowHomeEnabled(true);\r
140         getActionBar().setDisplayShowCustomEnabled(true);\r
141 \r
142         ImageView mAlbumArt = (ImageView)view.findViewById(R.id.action_bar_album_art);\r
143         TextView mTrackName = (TextView)view.findViewById(R.id.action_bar_track_name);\r
144         TextView mAlbumName = (TextView)view.findViewById(R.id.action_bar_album_name);\r
145 \r
146         String url = ApolloUtils.getImageURL(MusicUtils.getAlbumName(), ALBUM_IMAGE, this);\r
147         AQuery aq = new AQuery(this);\r
148         mAlbumArt.setImageBitmap(aq.getCachedImage(url));\r
149 \r
150         mTrackName.setText(MusicUtils.getTrackName());\r
151         mAlbumName.setText(MusicUtils.getAlbumName());\r
152 \r
153         view.setOnClickListener(new OnClickListener() {\r
154             @Override\r
155             public void onClick(View v) {\r
156                 Context context = v.getContext();\r
157                 context.startActivity(new Intent(context, AudioPlayerHolder.class));\r
158                 finish();\r
159             }\r
160         });\r
161     }\r
162 \r
163     /**\r
164      * @param v\r
165      */\r
166     public void applyTheme(View v) {\r
167         ThemePreview themePreview = (ThemePreview)findPreference(THEME_PREVIEW);\r
168         String packageName = themePreview.getValue().toString();\r
169         ThemeUtils.setThemePackageName(this, packageName);\r
170         Intent intent = new Intent();\r
171         intent.setClass(this, MusicLibrary.class);\r
172         intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);\r
173         startActivity(intent);\r
174         finish();\r
175     }\r
176 \r
177     /**\r
178      * @param v\r
179      */\r
180     public void getThemes(View v) {\r
181         Uri marketUri = Uri\r
182                 .parse("https://market.android.com/search?q=ApolloThemes&c=apps&featured=APP_STORE_SEARCH");\r
183         Intent marketIntent = new Intent(Intent.ACTION_VIEW).setData(marketUri);\r
184         startActivity(marketIntent);\r
185         finish();\r
186     }\r
187 \r
188     /**\r
189      * Set up the theme chooser\r
190      */\r
191     public void initThemeChooser() {\r
192         SharedPreferences sp = getPreferenceManager().getSharedPreferences();\r
193         String themePackage = sp.getString(THEME_PACKAGE_NAME, APOLLO);\r
194         ListPreference themeLp = (ListPreference)findPreference(THEME_PACKAGE_NAME);\r
195         themeLp.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {\r
196             @Override\r
197             public boolean onPreferenceChange(Preference preference, Object newValue) {\r
198                 ThemePreview themePreview = (ThemePreview)findPreference(THEME_PREVIEW);\r
199                 themePreview.setTheme(newValue.toString());\r
200                 return false;\r
201             }\r
202         });\r
203 \r
204         Intent intent = new Intent("com.andrew.apollo.THEMES");\r
205         intent.addCategory("android.intent.category.DEFAULT");\r
206         PackageManager pm = getPackageManager();\r
207         List<ResolveInfo> themes = pm.queryIntentActivities(intent, 0);\r
208         String[] entries = new String[themes.size() + 1];\r
209         String[] values = new String[themes.size() + 1];\r
210         entries[0] = APOLLO;\r
211         values[0] = APOLLO;\r
212         for (int i = 0; i < themes.size(); i++) {\r
213             String appPackageName = (themes.get(i)).activityInfo.packageName.toString();\r
214             String themeName = (themes.get(i)).loadLabel(pm).toString();\r
215             entries[i + 1] = themeName;\r
216             values[i + 1] = appPackageName;\r
217         }\r
218         themeLp.setEntries(entries);\r
219         themeLp.setEntryValues(values);\r
220         ThemePreview themePreview = (ThemePreview)findPreference(THEME_PREVIEW);\r
221         themePreview.setTheme(themePackage);\r
222     }\r
223 }\r