OSDN Git Service

c8f3b18a5236be03bcb98e1f9a04a72ca9cb06db
[android-x86/packages-apps-Eleven.git] / src / org / lineageos / eleven / ui / HeaderBar.java
1 /*
2 * Copyright (C) 2014 The CyanogenMod 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 package org.lineageos.eleven.ui;
17
18 import android.content.Context;
19 import android.support.v4.app.Fragment;
20 import android.util.AttributeSet;
21 import android.view.Menu;
22 import android.view.MenuInflater;
23 import android.view.MenuItem;
24 import android.view.View;
25 import android.widget.ImageView;
26 import android.widget.LinearLayout;
27 import android.widget.PopupMenu;
28 import android.widget.TextView;
29
30 import org.lineageos.eleven.R;
31 import org.lineageos.eleven.loaders.NowPlayingCursor;
32 import org.lineageos.eleven.loaders.QueueLoader;
33 import org.lineageos.eleven.menu.CreateNewPlaylist;
34 import org.lineageos.eleven.utils.MusicUtils;
35 import org.lineageos.eleven.utils.NavUtils;
36
37 /**
38  * Simple Header bar wrapper class that also has its own menu bar button.
39  * It can collect a list of popup menu creators and create a pop up menu
40  * from the list
41  */
42 public class HeaderBar extends LinearLayout {
43
44     private ImageView mMenuButton;
45     private ImageView mSearchButton;
46     private ImageView mBackButton;
47     private TextView mTitleText;
48     private PopupMenu mPopupMenu;
49     private Fragment mFragment;
50
51     public HeaderBar(Context context, AttributeSet attrs) {
52         super(context, attrs);
53     }
54
55     public void setFragment(Fragment activity) {
56         mFragment = activity;
57     }
58
59     @Override
60     protected void onFinishInflate() {
61         super.onFinishInflate();
62
63         mMenuButton = (ImageView)findViewById(R.id.header_bar_menu_button);
64         mMenuButton.setOnClickListener(new View.OnClickListener() {
65             @Override
66             public void onClick(View v) {
67                 showPopupMenu();
68             }
69         });
70
71         mSearchButton = (ImageView)findViewById(R.id.header_bar_search_button);
72         mSearchButton.setOnClickListener(new View.OnClickListener() {
73         @Override
74             public void onClick(View v) {
75                 NavUtils.openSearch(mFragment.getActivity(), "");
76             }
77         });
78
79
80         mBackButton = (ImageView)findViewById(R.id.header_bar_up);
81
82         mTitleText = (TextView)findViewById(R.id.header_bar_title);
83     }
84
85     /**
86      * @param resId set the title text
87      */
88     public void setTitleText(int resId) {
89         mTitleText.setText(resId);
90     }
91
92     /**
93      * @param text set the title text
94      */
95     public void setTitleText(String text) {
96         mTitleText.setText(text);
97     }
98
99     /**
100      * Sets the back button listener
101      * @param listener listener
102      */
103     public void setBackListener(final OnClickListener listener) {
104         mBackButton.setOnClickListener(listener);
105         setOnClickListener(listener);
106     }
107
108     /**
109      * Sets the header bar listener
110      * @param listener listener
111      */
112     public void setHeaderClickListener(final OnClickListener listener) {
113         setOnClickListener(listener);
114     }
115
116     public void showPopupMenu() {
117         // create the popup menu
118         if (mPopupMenu == null) {
119             mPopupMenu = new PopupMenu(mFragment.getActivity(), mMenuButton);
120             mPopupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
121                 @Override
122                 public boolean onMenuItemClick(MenuItem item) {
123                     return onPopupMenuItemClick(item);
124                 }
125             });
126         }
127
128         final Menu menu = mPopupMenu.getMenu();
129         final MenuInflater inflater = mPopupMenu.getMenuInflater();
130
131         menu.clear();
132
133         // Shuffle all
134         inflater.inflate(R.menu.shuffle_all, menu);
135         if (MusicUtils.getQueueSize() > 0) {
136             // save queue/clear queue
137             inflater.inflate(R.menu.queue, menu);
138         }
139         // Settings
140         inflater.inflate(R.menu.activity_base, menu);
141
142         // show the popup
143         mPopupMenu.show();
144     }
145
146     public boolean onPopupMenuItemClick(final MenuItem item) {
147         switch (item.getItemId()) {
148             case R.id.menu_shuffle_all:
149                 // Shuffle all the songs
150                 MusicUtils.shuffleAll(mFragment.getActivity());
151                 return true;
152             case R.id.menu_settings:
153                 // Settings
154                 NavUtils.openSettings(mFragment.getActivity());
155                 return true;
156             case R.id.menu_save_queue:
157                 NowPlayingCursor queue = (NowPlayingCursor) QueueLoader
158                         .makeQueueCursor(mFragment.getActivity());
159                 CreateNewPlaylist.getInstance(MusicUtils.getSongListForCursor(queue)).show(
160                         mFragment.getFragmentManager(), "CreatePlaylist");
161                 queue.close();
162                 return true;
163             case R.id.menu_clear_queue:
164                 MusicUtils.clearQueue();
165                 return true;
166             default:
167                 break;
168         }
169
170         return false;
171     }
172 }