OSDN Git Service

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