View Javadoc

1   /***
2    *     Ambient - A music player for the Android platform
3    Copyright (C) 2007 Martin Vysny
4    
5    This program is free software: you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation, either version 3 of the License, or
8    (at your option) any later version.
9    
10   This program is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   GNU General Public License for more details.
14  
15   You should have received a copy of the GNU General Public License
16   along with this program.  If not, see <http://www.gnu.org/licenses/>.
17   */
18  package sk.baka.ambient.activity.main;
19  
20  import java.util.Arrays;
21  import java.util.Collections;
22  import java.util.List;
23  
24  import sk.baka.ambient.ActionsEnum;
25  import sk.baka.ambient.IBackgroundTask;
26  import sk.baka.ambient.R;
27  import sk.baka.ambient.commons.Interval;
28  import sk.baka.ambient.views.ButtonBar;
29  import sk.baka.ambient.views.TextProgressBar;
30  import android.view.View;
31  import android.view.View.OnClickListener;
32  import android.widget.ImageButton;
33  
34  /***
35   * Controls trackbar and background tasks display window.
36   * 
37   * @author Martin Vysny
38   */
39  public class TaskSwitcherController extends AbstractController implements
40  		IBackgroundTask {
41  
42  	/***
43  	 * Creates the controller
44  	 * 
45  	 * @param mainActivity
46  	 *            the activity
47  	 */
48  	public TaskSwitcherController(MainActivity mainActivity) {
49  		super(R.id.taskSwitcherButtonBar, mainActivity);
50  		initButtonBar(R.id.taskSwitcherButtonBar, actions);
51  		final ImageButton cancelTasks = (ImageButton) mainActivity
52  				.findViewById(R.id.backgroundTasksCancelAll);
53  		cancelTasks.setBackgroundDrawable(null);
54  		cancelTasks.setOnClickListener(new OnClickListener() {
55  			public void onClick(View v) {
56  				app.getBackgroundTasks().stopAllTasks();
57  			}
58  		});
59  	}
60  
61  	/***
62  	 * The actions to display on the Task switcher.
63  	 */
64  	public static final List<ActionsEnum> actions = Collections
65  			.unmodifiableList(Arrays.asList(ActionsEnum.ShowPlayer,
66  					ActionsEnum.PlaylistManagement, ActionsEnum.ShowCollection,
67  					ActionsEnum.ShowFileBrowser, ActionsEnum.ShowContext,
68  					ActionsEnum.ShowMagnatune, ActionsEnum.ShowShoutcast,
69  					ActionsEnum.ShowAmpache, ActionsEnum.Configure));
70  
71  	/***
72  	 * Highlights given action.
73  	 * 
74  	 * @param action
75  	 *            the action to highlight, may be <code>null</code> - in such
76  	 *            case all actions will be de-highlighted.
77  	 */
78  	public void highlightAction(final ActionsEnum action) {
79  		highlightAction(action, (ButtonBar) mainView);
80  	}
81  
82  	/***
83  	 * Highlights given action on the button bar. The button bar must display
84  	 * {@link #actions} in order for this method to work correctly.
85  	 * 
86  	 * @param action
87  	 *            the action to highlight, may be <code>null</code> - in such
88  	 *            case all actions will be de-highlighted.
89  	 * @param bar
90  	 *            the button bar.
91  	 */
92  	public static void highlightAction(final ActionsEnum action,
93  			final ButtonBar bar) {
94  		final int index = actions.indexOf(action);
95  		final Interval highlight = index < 0 ? Interval.EMPTY : Interval
96  				.fromItem(index);
97  		bar.highlight(highlight);
98  	}
99  
100 	public void backgroundTask(int taskCount, String arbitraryTaskName,
101 			final int progress, final int maxProgress) {
102 		final View tasks = mainActivity.findViewById(R.id.backgroundTasks);
103 		if (taskCount == 0) {
104 			tasks.setVisibility(View.GONE);
105 			return;
106 		}
107 		tasks.setVisibility(View.VISIBLE);
108 		final TextProgressBar tasksCaption = (TextProgressBar) tasks
109 				.findViewById(R.id.backgroundTasksCaption);
110 		if ((taskCount > 1) || (arbitraryTaskName == null)) {
111 			tasksCaption.setText(R.string.backgroundTasksRunning);
112 		} else {
113 			tasksCaption.setText(arbitraryTaskName);
114 		}
115 		tasksCaption.setMax(maxProgress);
116 		tasksCaption.setProgress(progress);
117 	}
118 
119 	@Override
120 	protected void performZoom(boolean zoom) {
121 		initButtonBar(R.id.taskSwitcherButtonBar, actions);
122 	}
123 }