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();
}
}