package com.nf2m.fragment; import android.annotation.TargetApi; import android.app.AlertDialog; import android.content.ContentValues; import android.content.DialogInterface; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.provider.BaseColumns; import android.provider.MediaStore; import android.provider.MediaStore.Audio.PlaylistsColumns; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.content.ContextCompat; import android.support.v7.graphics.Palette; import android.support.v7.widget.RecyclerView; import android.view.ActionMode; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.WindowManager; import android.widget.EditText; import android.widget.Toast; import com.nf2m.R; import com.nf2m.activity.TarMediaPlayerActivity; import com.nf2m.adapter.LibraryCursorAdapter; import com.nf2m.adapter.PlaylistsCursorAdapter; import com.nf2m.listener.ActionItemClick; import com.nf2m.listener.OnItemClickListener; import com.nf2m.model.Library; import com.nf2m.model.Playlists; public class PlaylistsFragment extends BaseFragment implements ActionItemClick, OnItemClickListener { private static final String PLAYLIST_ID = "playlist_id"; private static final String PLAYLIST_NAME = "playlist_name"; private Library playLists; private Cursor playListCursor; private LibraryCursorAdapter playListCursorAdapter; private RecyclerView lvList; private String title_selectedNumber; private String title_addNewPlaylist; private String title_save; private String title_cancel; private String title_remove_playlist; private String title_remove_playlist_message; private String title_ok; private String title_one_selected_item; private String selection; @TargetApi(Build.VERSION_CODES.KITKAT) @Override public void onViewCreated(View view, Bundle savedInstanceState) { initPlaylist(); initPlaylistCursor(); initPlaylistCursorAdapter(); initListView(); initMessages(); setAdapter(); setListener(); setLayoutManager(); if (playListCursor.getCount() < 15) { fastScroller.setVisibility(View.GONE); } if (playListCursor.getCount() == 0) { // RelativeLayout noSongs = (RelativeLayout) view.findViewById(R.id.noSongs); // noSongs.setVisibility(View.VISIBLE); // TODO: 21/07/16 Hiç şarkı yoksa } super.onViewCreated(view, savedInstanceState); setSearchSelection(MediaStore.Audio.Playlists.NAME); ((TarMediaPlayerActivity) getActivity()).setActionBarTitle(getString(R.string.title_playlists)); } private void setListener() { playListCursorAdapter.setOnItemClickListener(this); playListCursorAdapter.setOnLongItemClickListener(this); } private void initMessages() { title_selectedNumber = getResources().getString(R.string.title_selectedNumber); title_cancel = getResources().getString(R.string.title_cancel); title_save = getResources().getString(R.string.title_save); title_addNewPlaylist = getResources().getString(R.string.title_addNewPlaylist); title_ok = getResources().getString(R.string.title_ok); title_remove_playlist = getString(R.string.title_remove_playlist); title_remove_playlist_message = getString(R.string.title_remove_playlist_message); title_one_selected_item = getString(R.string.title_one_selected_item); } @Nullable @Override public Cursor initSelectedItemCursor() { return null; } private void setAdapter() { lvList.setAdapter(playListCursorAdapter); setLvLibraryList(lvList); } private void initListView() { lvList = (RecyclerView) view.findViewById(R.id.lvList); } private void initPlaylistCursorAdapter() { playListCursorAdapter = new PlaylistsCursorAdapter(getActivity(), playListCursor); setLibraryAdapter(playListCursorAdapter); } private void initPlaylistCursor() { playListCursor = playLists.getCursor(); setLibraryCursor(playListCursor); } private void initPlaylist() { playLists = new Playlists(getActivity()); setLibraries(playLists); } private void modeSetTitle(@NonNull ActionMode mode, int selectionNumber) { mode.setTitle(selectionNumber + " " + title_selectedNumber); } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { getMenuInflater().inflate(R.menu.playlist_context_menu, menu); return true; } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onActionItemClicked(@NonNull ActionMode mode, @NonNull MenuItem item) { String[] selectionArgs = getStringArray(MediaStore.Audio.Playlists._ID); selection = getSelection(MediaStore.Audio.Playlists._ID, selectionArgs); switch (item.getItemId()) { case R.id.pcmSelectAll: playListCursorAdapter.selectAllItem(); selectionNumber = playListCursor.getCount(); modeSetTitle(mode, selectionNumber); break; case R.id.pcmRemove: dialogRemovePlaylist(); break; case R.id.pcmRename: if (playListCursorAdapter.getPositionList().size() == 1) { dialogRename(); } else { Toast.makeText(getContext(), title_one_selected_item, Toast.LENGTH_SHORT).show(); } break; } if (item.getItemId() != R.id.pcmSelectAll) { actionMode.finish(); } return true; } private void dialogRename() { AlertDialog.Builder builder = new AlertDialog.Builder( getActivity()); View newPlaylistView = getLayoutInflater().inflate( R.layout.add_newplaylist_alert_dialog_tv, null); final EditText etNewPlaylistName = (EditText) newPlaylistView .findViewById(R.id.etNewPlaylistName); String[] playlistNameArray = getStringArray(PlaylistsColumns.NAME); etNewPlaylistName.setText(playlistNameArray[0]); builder.setView(etNewPlaylistName); final AlertDialog dialog = builder.create(); etNewPlaylistName.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } } }); playlistNameKeyListener(dialog, etNewPlaylistName); dialog.setTitle(title_addNewPlaylist); dialog.setButton(AlertDialog.BUTTON_POSITIVE, title_save, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String playlistName = etNewPlaylistName.getText().toString(); ContentValues contentValues = new ContentValues(); contentValues.put(PlaylistsColumns.NAME, playlistName); Uri playlistUri = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI; playLists.updatePlaylist(playlistUri, contentValues, selection, null); } }); dialog.setButton(AlertDialog.BUTTON_NEGATIVE, title_cancel, new DialogInterface.OnClickListener() { @Override public void onClick(@NonNull DialogInterface dialog, int which) { dialog.cancel(); } }); dialog.show(); } private void dialogRemovePlaylist() { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(title_remove_playlist); builder.setMessage(title_remove_playlist_message); builder.setPositiveButton(title_ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Uri playlistUri = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI; playLists.removePlaylist(playlistUri, selection, null); } }); builder.setNegativeButton(title_cancel, new DialogInterface.OnClickListener() { @Override public void onClick(@NonNull DialogInterface dialog, int which) { dialog.cancel(); } }); AlertDialog dialog = builder.create(); dialog.show(); } @Override public void onDestroyActionMode(ActionMode mode) { selectionNumber = 0; playListCursorAdapter.clearSelection(); actionMode = null; } @Override public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); menu.findItem(R.id.omAddNewPlaylist).setVisible(true); } @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { case R.id.omAddNewPlaylist: dialogAddNewPlaylist(); break; } return true; } private void dialogAddNewPlaylist() { AlertDialog.Builder builder = new AlertDialog.Builder( getActivity()); View newPlaylistView = getLayoutInflater().inflate( R.layout.add_newplaylist_alert_dialog_tv, null); final EditText etNewPlaylistName = (EditText) newPlaylistView .findViewById(R.id.etNewPlaylistName); String newPlaylistName = createNewPlaylistName(playLists.requery()); etNewPlaylistName.setText(newPlaylistName); builder.setView(etNewPlaylistName); final AlertDialog dialog = builder.create(); etNewPlaylistName.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } } }); playlistNameKeyListener(dialog, etNewPlaylistName); dialog.setView(newPlaylistView); dialog.setTitle(title_addNewPlaylist); dialog.setButton(AlertDialog.BUTTON_POSITIVE, title_save, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String playlistName = etNewPlaylistName.getText().toString(); playLists.createPlaylist(playlistName, getPlaylistUri(), null); updateCursor(); } private void updateCursor() { initPlaylist(); initPlaylistCursor(); } }); dialog.setButton(AlertDialog.BUTTON_NEGATIVE, title_cancel, new DialogInterface.OnClickListener() { @Override public void onClick(@NonNull DialogInterface dialog, int which) { dialog.cancel(); } }); dialog.show(); } @Override public void actionClick(int position) { if (playListCursor.moveToPosition(position)) { PlaylistSongFragment playlistSongFragment = new PlaylistSongFragment(); Bundle bundle = new Bundle(); int playlistId = playListCursor.getInt(playListCursor.getColumnIndexOrThrow(BaseColumns._ID)); String playlistName = playListCursor.getString(playListCursor.getColumnIndexOrThrow(MediaStore.Audio.Playlists.NAME)); bundle.putInt(PLAYLIST_ID, playlistId); bundle.putString(PLAYLIST_NAME, playlistName); playlistSongFragment.setArguments(bundle); if (TarMediaPlayerActivity.sdkInt >= Build.VERSION_CODES.LOLLIPOP) { initAnim(playlistSongFragment); } getFragmentManager().beginTransaction(). addToBackStack(playlistSongFragment.getClass().getName()). replace(R.id.container, playlistSongFragment).commit(); } } @Override public void onItemClick(int position) { if (actionMode != null) { toggleSelection(position); return; } if (isFilter) { position = getPositionInMainCursor(position); actionClick(position); searchView.onActionViewCollapsed(); searchView.clearFocus(); } else { actionClick(position); } } @Override public void onDestroy() { playListCursor.close(); super.onDestroy(); } }