package com.teleca.jamendo.activity; import java.util.ArrayList; import org.json.JSONException; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.preference.PreferenceManager; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.Window; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.Gallery; import android.widget.ListView; import android.widget.Toast; import android.widget.ViewFlipper; import android.widget.AdapterView.OnItemClickListener; import com.lilin.util.SDCardHelp; import com.teleca.jamendo.MyApplication; import com.teleca.jamendo.R; import com.teleca.jamendo.activity.album.StarredAlbumsView; import com.teleca.jamendo.activity.download.DownloadView; import com.teleca.jamendo.activity.playlist.PlaylistView; import com.teleca.jamendo.activity.playlist.PlaylistView.Mode; import com.teleca.jamendo.activity.playview.PlayMethod; import com.teleca.jamendo.activity.playview.PlayView; import com.teleca.jamendo.activity.search.SearchView; import com.teleca.jamendo.activity.setting.SetView; import com.teleca.jamendo.adapter.ImgAdp; import com.teleca.jamendo.adapter.ItemListViewAdp; import com.teleca.jamendo.adapter.SplitListViewAdp; import com.teleca.jamendo.api.IClickAlbumListener; import com.teleca.jamendo.api.IListViewItemClickListener; import com.teleca.jamendo.api.IServerApi; import com.teleca.jamendo.api_impl.ServerApiImpl; import com.teleca.jamendo.model.Album; import com.teleca.jamendo.model.ErrorMsg; import com.teleca.jamendo.model.MainItem; import com.teleca.jamendo.ui.dialog.AboutDialog; import com.teleca.jamendo.ui.loadDialog.HotSongLoadDialog; import com.teleca.jamendo.widget.FailureBar; import com.teleca.jamendo.widget.ProgressBar; /** * 主界面 * * @author lilin * @date 2011-12-12 下午11:13:20 * @ClassName: MainView */ public class MainView extends Activity implements IClickAlbumListener {// 继承点击相册的接口 // 控制界面的轮流显示 private ViewFlipper viewFlipper; // 相册 private Gallery gallery; private ProgressBar progressBar; private FailureBar failureBar; // 主界面的ListView:分为2部分 private ListView mainListView; private ItemListViewAdp item1Adp; private ItemListViewAdp item2Adp; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.mainview); // 实例化控件 initUI(); // 初始化Gallery相册 new AsyncLoadImg().execute((Void) null); // 相册的点击事件 gallery.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { Album album = (Album) adapterView.getItemAtPosition(position); // 跳转到播放界面 PlayView.launch(MainView.this, album); } }); } private void initUI() { mainListView = (ListView) findViewById(R.id.HomeListView); gallery = (Gallery) findViewById(R.id.Gallery); progressBar = (ProgressBar) findViewById(R.id.ProgressBar); failureBar = (FailureBar) findViewById(R.id.FailureBar); viewFlipper = (ViewFlipper) findViewById(R.id.ViewFlipper); } @Override // 实现点击相册接口里的方法 public void onAlbumClicked(Album album) { PlayView.launch(this, album); } // 用可点击的项填充主界面上的ListView private void fillMainListView() { item1Adp = new ItemListViewAdp(this); item2Adp = new ItemListViewAdp(this); ArrayList<MainItem> item1List = new ArrayList<MainItem>(); ArrayList<MainItem> item2List = new ArrayList<MainItem>(); // 热门歌曲项 item1List.add(new MainItem(R.drawable.list_top, "热门歌曲", new IListViewItemClickListener() { public void itemClick() { // 异步加载热门歌曲 new HotSongLoadDialog(MainView.this, "正在努力加载热门歌曲...", "加载失败!").execute(); } })); // 歌曲列表项 item1List.add(new MainItem(R.drawable.list_playlist, "歌曲列表", new IListViewItemClickListener() { public void itemClick() { PlaylistView.launch(MainView.this, Mode.Normal); } })); // 搜索项 item2List.add(new MainItem(R.drawable.list_search, "搜索", new IListViewItemClickListener() { public void itemClick() { SearchView.launch(MainView.this); } })); // 获得配置参数:用户名 final String userName = PreferenceManager.getDefaultSharedPreferences( this).getString("user_name", null); // 如果用户名不空,添加相册项 if (userName != null && userName.length() > 0) { item2List.add(new MainItem(R.drawable.list_cd, "相册", new IListViewItemClickListener() { public void itemClick() { StarredAlbumsView.launch(MainView.this, userName); } })); } // 如果内存卡存在,添加相册项 if (SDCardHelp.hasSDcard()) { item2List.add(new MainItem(R.drawable.list_download, "下载", new IListViewItemClickListener() { public void itemClick() { DownloadView.launch(MainView.this); } })); } // 电台项 // item1List.add(new MainItemModel(R.drawable.list_radio, "电台", // new IListViewItemClickListener() { // public void itemClick() { // RadioView.launch(MainView.this); // } // })); item1Adp.setList(item1List); item2Adp.setList(item2List); // MainListView的适配器 SplitListViewAdp splitAdp = new SplitListViewAdp(this); splitAdp.addSection("我的歌曲", item1Adp); splitAdp.addSection("常用工具", item2Adp); mainListView.setAdapter(splitAdp); mainListView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> adapterView, View view, int index, long time) { IListViewItemClickListener listener = ((MainItem) adapterView .getAdapter().getItem(index)).getListener(); if (listener != null) { listener.itemClick(); } } }); } // 异步加载图片到gallery private class AsyncLoadImg extends AsyncTask<Void, ErrorMsg, Album[]> { public void onPreExecute() { viewFlipper.setDisplayedChild(0); progressBar.setText("正在努力加载..."); super.onPreExecute(); } public Album[] doInBackground(Void... params) { IServerApi server = new ServerApiImpl(); Album[] albums = null; try { albums = server.getPopularAlbumsWeek(); } catch (JSONException e) { e.printStackTrace(); } catch (ErrorMsg e) { publishProgress(e); } return albums; } public void onPostExecute(Album[] albums) { if (albums != null && albums.length > 0) { viewFlipper.setDisplayedChild(1); ImgAdp albumsAdapter = new ImgAdp(MainView.this); albumsAdapter.setList(albums); gallery.setAdapter(albumsAdapter); // animate to center gallery.setSelection(albums.length / 2, true); } else { viewFlipper.setDisplayedChild(2); failureBar.setOnRetryListener(new OnClickListener() { public void onClick(View v) { new AsyncLoadImg().execute((Void) null); } }); failureBar.setText("服务器连接失败!"); } super.onPostExecute(albums); } protected void onProgressUpdate(ErrorMsg... values) { Toast.makeText(MainView.this, values[0].getMessage(), 5000).show(); super.onProgressUpdate(values); } } // 菜单----------------------------------------------------------- public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.mainmenu, menu); return super.onCreateOptionsMenu(menu); } public boolean onPrepareOptionsMenu(Menu menu) { if (MyApplication.getInstance().getPlayerEngineInterface() == null || MyApplication.getInstance().getPlayerEngineInterface() .getPlaylist() == null) { menu.findItem(R.id.player_menu_item).setVisible(false); } else { menu.findItem(R.id.player_menu_item).setVisible(true); } return super.onPrepareOptionsMenu(menu); } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.player_menu_item: // 播放界面 { PlayView.launch(this, (PlayMethod) null); } break; case R.id.about_menu_item: // 关于 { new AboutDialog(this).show(); } break; case R.id.settings_menu_item: // 设置 { SetView.launch(this); } break; default: } return super.onOptionsItemSelected(item); } protected void onResume() { fillMainListView(); super.onResume(); } }