@Override public void onCreate(Bundle icicle) { super.onCreate(icicle); getExpandableListView().setFastScrollEnabled(true); LibraryActivity parentActivity = (LibraryActivity) getParent(); int serverId = parentActivity.getIntent().getExtras().getInt(LibraryActivity.SERVER_ID); TuneStreamerApp app = (TuneStreamerApp) getApplication(); mLibrary = app.getServer(serverId).getMainLibrary(); setListAdapter(new ArtistListAdapter(this, mLibrary)); }
@Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; View targetView = info.targetView; Intent intent = info.id == -1 ? createHeaderIntent(targetView) : mCurrentAdapter.createData(targetView); mActivity.onCreateContextMenu(menu, intent); }
@Override public void setPrimaryItem(ViewGroup container, int position, Object object) { int type = mTabOrder[position]; LibraryAdapter adapter = mAdapters[type]; if (position != mCurrentPage || adapter != mCurrentAdapter) { requeryIfNeeded(type); mCurrentAdapter = adapter; mCurrentPage = position; mActivity.onPageChanged(position, adapter); } }
/** * Create the LibraryPager. * * @param activity The LibraryActivity that will own this adapter. The activity will receive * callbacks from the ListViews. * @param workerLooper A Looper running on a worker thread. */ public LibraryPagerAdapter(LibraryActivity activity, Looper workerLooper) { if (sLruAdapterPos == null) sLruAdapterPos = new AdaperPositionLruCache(32); mActivity = activity; mUiHandler = new Handler(this); mWorkerHandler = new Handler(workerLooper, this); mCurrentPage = -1; activity .getContentResolver() .registerContentObserver( MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, true, mPlaylistObserver); }
/** * Opens an intent in an external application * * @param activity The library activity to use * @param intent The intent to examine and launch * @return bool true if the intent was dispatched */ public static boolean dispatchIntent(LibraryActivity activity, Intent intent) { boolean handled = true; String path = intent.getStringExtra(LibraryAdapter.DATA_FILE); String mimeGuess = URLConnection.guessContentTypeFromName(path); File file = new File(path); Uri uri = Uri.fromFile(file); Intent extView = new Intent(Intent.ACTION_VIEW); extView.setDataAndType(uri, mimeGuess); try { activity.startActivity(extView); } catch (Exception ActivityNotFoundException) { handled = false; } return handled; }
@Override public void onClick(View view) { view = (View) view.getParent(); // get view of linear layout, not the click consumer Intent intent = createHeaderIntent(view); mActivity.onItemClicked(intent); }
@Override public CharSequence getPageTitle(int position) { return mActivity.getResources().getText(TITLES[mTabOrder[position]]); }
@Override public Object instantiateItem(ViewGroup container, int position) { int type = mTabOrder[position]; ListView view = mLists[type]; if (view == null) { LibraryActivity activity = mActivity; LayoutInflater inflater = activity.getLayoutInflater(); LibraryAdapter adapter; LinearLayout header = null; Looper looper = mWorkerHandler.getLooper(); switch (type) { case MediaUtils.TYPE_ARTIST: adapter = mArtistAdapter = new MediaAdapter(activity, MediaUtils.TYPE_ARTIST, null, activity, looper); mArtistAdapter.setExpandable(mSongsPosition != -1 || mAlbumsPosition != -1); mArtistHeader = header = (LinearLayout) inflater.inflate(R.layout.library_row_expandable, null); break; case MediaUtils.TYPE_ALBUM: adapter = mAlbumAdapter = new MediaAdapter( activity, MediaUtils.TYPE_ALBUM, mPendingAlbumLimiter, activity, looper); mAlbumAdapter.setExpandable(mSongsPosition != -1); mPendingAlbumLimiter = null; mAlbumHeader = header = (LinearLayout) inflater.inflate(R.layout.library_row_expandable, null); break; case MediaUtils.TYPE_SONG: adapter = mSongAdapter = new MediaAdapter( activity, MediaUtils.TYPE_SONG, mPendingSongLimiter, activity, looper); mPendingSongLimiter = null; mSongHeader = header = (LinearLayout) inflater.inflate(R.layout.library_row_expandable, null); break; case MediaUtils.TYPE_PLAYLIST: adapter = mPlaylistAdapter = new MediaAdapter(activity, MediaUtils.TYPE_PLAYLIST, null, activity, looper); break; case MediaUtils.TYPE_GENRE: adapter = mGenreAdapter = new MediaAdapter(activity, MediaUtils.TYPE_GENRE, null, activity, looper); mGenreAdapter.setExpandable(mSongsPosition != -1); break; case MediaUtils.TYPE_FILE: adapter = mFilesAdapter = new FileSystemAdapter(activity, mPendingFileLimiter); mPendingFileLimiter = null; break; default: throw new IllegalArgumentException("Invalid media type: " + type); } view = (ListView) inflater.inflate(R.layout.listview, null); view.setOnCreateContextMenuListener(this); view.setTag(type); if (header != null) { TextView headerText = (TextView) header.findViewById(R.id.text); headerText.setText(mHeaderText); headerText.setOnClickListener(this); header.setTag(new ViewHolder()); // behave like a normal library row view.addHeaderView(header); } view.setAdapter(adapter); if (type != MediaUtils.TYPE_FILE) loadSortOrder((MediaAdapter) adapter); view.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY); adapter.setFilter(mFilter); mAdapters[type] = adapter; mLists[type] = view; mRequeryNeeded[type] = true; } requeryIfNeeded(type); container.addView(view); return view; }