package com.nf2m.fragment; import android.Manifest; import android.annotation.TargetApi; import android.app.Service; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.database.Cursor; import android.database.CursorIndexOutOfBoundsException; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.media.AudioManager; import android.media.RingtoneManager; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.os.Messenger; import android.os.RemoteException; import android.preference.PreferenceManager; import android.provider.BaseColumns; import android.provider.MediaStore; import android.provider.Settings; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.content.ContextCompat; import android.support.v4.view.MenuItemCompat; import android.support.v4.view.ViewPager; import android.support.v7.graphics.Palette; import android.support.v7.widget.ShareActionProvider; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.animation.AlphaAnimation; import android.widget.ImageView; import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.ads.AdListener; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdView; import com.google.android.gms.ads.MobileAds; import com.nf2m.R; import com.nf2m.RandomSong; import com.nf2m.activity.TarMediaPlayerActivity; import com.nf2m.adapter.AlbumImagePagerAdapter; import com.nf2m.adapter.LibraryCursorAdapter; import com.nf2m.model.Songs; import com.nf2m.preferences.Preferences; import com.nf2m.rater.AppRater; import com.nf2m.service.MediaPlayerService; import com.nf2m.util.ImageCache; import com.nf2m.util.ImageFetcher; import com.nf2m.view.AlbumViewPager; import java.util.ArrayList; import butterknife.Bind; import butterknife.ButterKnife; import static com.nf2m.service.MediaPlayerService.songsCursor; public class NowPlayingFragment extends Fragment implements View.OnClickListener, SeekBar.OnSeekBarChangeListener, ViewPager.OnPageChangeListener, View.OnTouchListener { public static final String SHUFFLE_OFF = "shuffle_off"; public static final String SHUFFLE_ON = "shuffle_on"; private static final String FAVORITE_ON = "favorite_on"; private static final String FAVORITE_OFF = "favorite_off"; public static final String REPEAT_OFF = "repeat_off"; public static final String REPEAT_ONE = "repeat_one"; public static final String REPEAT_ALL = "repeat_all"; private static final String UNMUTE = "unmute"; private static final String MUTE = "mute"; public static final String PLAY = "play"; public static final String PAUSE = "pause"; private static final String IMAGE_CACHE_DIR = "images"; private static final int WRITE_SETTINGS_REQUEST_CODE = 0; private static final String ADMOB_APP_ID = "ca-app-pub-1919079474554324~4430454094"; public static String songTitle; private String album; private String artist; @Bind(R.id.tvSongTitle) TextView tvSongTitle; @Bind(R.id.tvAlbumName) TextView tvAlbumName; @Bind(R.id.tvArtistName) TextView tvArtistName; @Bind(R.id.tvIncSongDuration) TextView tvIncSongDuration; @Bind(R.id.tvDecSongDuration) TextView tvDecSongDuration; @Bind(R.id.ivShuffle) ImageView ivShuffle; @Bind(R.id.ivNext) ImageView ivNext; @Bind(R.id.ivPlay) ImageView ivPlay; @Bind(R.id.ivPrevious) ImageView ivPrevious; @Bind(R.id.ivRepeat) ImageView ivRepeat; @Bind(R.id.sbSongDuration) SeekBar sbSongDuration; @Bind(R.id.ivVolume) ImageView ivVolume; @Bind(R.id.ivRingTone) ImageView ivRingTone; @Bind(R.id.sbVolume) SeekBar sbVolume; @Bind(R.id.ivVolumeOff) ImageView ivVolumeOff; @Bind(R.id.ivFavorite) ImageView ivFavorite; @Bind(R.id.ivVolumeUp) ImageView ivVolumeUp; @Bind(R.id.volumeLayout) View volumeLayout; @Bind(R.id.rlPlayer) View rlPlayer; @Bind(R.id.vpAlbumArt) AlbumViewPager vpAlbumArt; @Bind(R.id.adView) AdView adView; public static int song_duration_state; private static int volume; @Nullable public static String shuffle_state; @Nullable public static String repeat_state; @NonNull public static String play_state = PLAY; @NonNull private static String mute_state = UNMUTE; private int songPos; @Nullable private Messenger serviceMessenger; @NonNull private final Messenger messenger = new Messenger(new MediaHandler()); private boolean isBindService; private static int duration; public static String songPath; private SharedPreferences defaultSharedPreferences; public static int progress; private String favorite_state; private static ImageFetcher mImageFetcher; private static boolean isCurrentItem; @Nullable private ArrayList<String> favorite_ids; private Preferences preferences; @Nullable public static String album_art_path; private int primaryColor; private int primaryDarkColor; private int pagePosition; private AlbumImagePagerAdapter mAdapter; public static boolean isConstantPos; private AudioManager audioManager; private int maxVolume; private boolean isVolumeLayoutShow; public NowPlayingFragment() { } private Context getApplicationContext() { return getContext(); } private class MediaHandler extends Handler { @Override public void handleMessage(@NonNull Message msg) { switch (msg.what) { case MediaPlayerService.MSG_NEXT: next(); break; case MediaPlayerService.MSG_PREVIOUS: previous(); break; case MediaPlayerService.MSG_CURRENT_DURATION: final int pos = msg.getData().getInt(MediaPlayerService.DATA_KEY_CURRENT_POS); setDuration(pos); break; case MediaPlayerService.MSG_PLAY_STATE: final int state = msg.getData().getInt(MediaPlayerService.DATA_KEY_PLAY_STATE); if (state == 1) { play_state = PAUSE; } else { play_state = PLAY; } ivPlay.setImageDrawable(getPlayDrawable()); break; } super.handleMessage(msg); } } private void sendMessageToService(int what) { if (isBindService) { if (serviceMessenger != null) { Message message = Message.obtain(null, what); message.replyTo = messenger; try { serviceMessenger.send(message); } catch (RemoteException e) { e.printStackTrace(); } } } } private void setDuration(int pos) { //init variable int remaining_pos = duration - pos; String current_duration = LibraryCursorAdapter.convertMinuteToMillis(pos); String remaining_duration = LibraryCursorAdapter.convertMinuteToMillis(remaining_pos); //set variable sbSongDuration.setProgress(pos); tvDecSongDuration.setText(remaining_duration); tvIncSongDuration.setText(current_duration); song_duration_state = pos; } @Nullable private final ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { serviceMessenger = new Messenger(service); Message msg = Message.obtain(null, MediaPlayerService.MSG_ADD_CLIENT); msg.replyTo = messenger; try { serviceMessenger.send(msg); } catch (RemoteException e) { e.printStackTrace(); } if (MediaPlayerService.newPlay) { play(); play_state = PAUSE; } isBindService = true; } @Override public void onServiceDisconnected(ComponentName name) { serviceMessenger = null; isBindService = false; } }; private void play() { sendMessageToService(MediaPlayerService.MSG_PLAY); } private void pause() { sendMessageToService(MediaPlayerService.MSG_PAUSE); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ((TarMediaPlayerActivity) getActivity()).setActionBarTitle(getString(R.string.title_now_playing)); getPreferences(); MobileAds.initialize(getContext(), ADMOB_APP_ID); } @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.now_playing_layout, container, false); ButterKnife.bind(this, view); return view; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); if (checkStoragePermission()) return; if (songsCursor == null || songsCursor.isClosed()) { Songs songs = new Songs(getActivity()); String where = preferences.getPrefQueryWhere(); ArrayList<String> selectionArgs = preferences.getPrefQuerySelectionArgs(); String prefQueryUri = preferences.getPrefQueryUri(); if (where == null && selectionArgs == null && prefQueryUri == null) { songsCursor = songs.getCursor(); } else { String[] selection = null; if (selectionArgs != null) { selection = selectionArgs.toArray(new String[selectionArgs.size()]); } songsCursor = songs.initCursor(Uri.parse(prefQueryUri), null, where, selection, songs.getSortOrder()); } } //Buraya şarkı yok ise bir şeyler yapılacak if (songsCursor == null || songsCursor.getCount() == 0) { toastMessage(R.string.no_songs); getActivity().finish(); return; } init(); AppRater.app_launched(getContext()); } private boolean checkStoragePermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) { getActivity().finish(); return true; } } return false; } private void init() { initImageFetcher(); initAudio(); initMediaService(); initSettingPreferences(); setHasOptionsMenu(true); volumeStickWhite(); setSongPref(); initListener(); initViewPager(); initAnim(); initAudioManager(); initVolume(); initAdMob(); } private void initAdMob() { AdRequest adRequest = new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR).build(); adView.loadAd(adRequest); adView.setAdListener(new AdListener() { @Override public void onAdFailedToLoad(int i) { super.onAdFailedToLoad(i); adView.setVisibility(View.GONE); } }); } private void initVolume() { maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); sbVolume.setMax(maxVolume); int volume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); sbVolume.setProgress(volume); setVolumeDrawable(volume); } private void setVolumeDrawable(int volume) { if (volume == 0) { ivVolumeUp.setImageDrawable(getDrawable(R.drawable.ic_volume_mute)); } else if (volume <= maxVolume / 2) { ivVolumeUp.setImageDrawable(getDrawable(R.drawable.ic_volume_down)); } else { ivVolumeUp.setImageDrawable(getDrawable(R.drawable.ic_volume_up)); } } private void initAudioManager() { audioManager = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE); } private void initAnim() { initColor(); if (TarMediaPlayerActivity.sdkInt >= Build.VERSION_CODES.LOLLIPOP) { setAnimMaterial(primaryColor, primaryDarkColor); } else { setAnim(primaryColor); } } private void setAnim(int primaryColor) { TarMediaPlayerActivity.toolbar.setBackgroundColor(primaryColor); rlPlayer.setBackgroundColor(primaryColor); } private void initColor() { if (isAdded()) { Bitmap bitmap = BitmapFactory.decodeFile(album_art_path); if (bitmap != null) { Palette palette = Palette.from(bitmap).generate(); primaryColor = palette.getVibrantColor(getColor(R.color.primary_text)); primaryDarkColor = palette.getDarkVibrantColor(getColor(R.color.primary_text)); } else { primaryDarkColor = getColor(R.color.primary_dark); primaryColor = getColor(R.color.primary); } } } @TargetApi(Build.VERSION_CODES.LOLLIPOP) private void setAnimMaterial(int primaryColor, int primaryDarkColor) { if (getActivity().getWindow() != null) { getActivity().getWindow().setStatusBarColor(primaryDarkColor); } TarMediaPlayerActivity.toolbar.setBackgroundColor(primaryColor); rlPlayer.setBackgroundColor(primaryColor); } private void initViewPager() { mAdapter = new AlbumImagePagerAdapter(getFragmentManager(), songsCursor, getApplicationContext()); vpAlbumArt.setAdapter(mAdapter); isConstantPos = true; vpAlbumArt.setCurrentItem(songPos); vpAlbumArt.addOnPageChangeListener(this); } private void initImageFetcher() { final DisplayMetrics displayMetrics = new DisplayMetrics(); getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); final int height = displayMetrics.heightPixels; final int width = displayMetrics.widthPixels; final int longest = (height > width ? height : width) / 2; ImageCache.ImageCacheParams cacheParams = new ImageCache.ImageCacheParams(getActivity(), IMAGE_CACHE_DIR); cacheParams.setMemCacheSizePercent(0.25f); // Set memory cache to 25% of app memory // The ImageFetcher takes care of loading images into our ImageView children asynchronously mImageFetcher = new ImageFetcher(getActivity(), longest); mImageFetcher.addImageCache(getFragmentManager(), cacheParams); mImageFetcher.setImageFadeIn(false); } private void initAudio() { if (songPos >= songsCursor.getCount() || songPos < 0) { songPos = 0; } setAudio(); } private void setAudio() { try { songsCursor.moveToPosition(songPos); } catch (CursorIndexOutOfBoundsException e) { e.printStackTrace(); songsCursor.moveToPosition(0); } songPath = getStringInSongsCursor(MediaStore.Audio.AudioColumns.DATA); songTitle = getStringInSongsCursor(MediaStore.Audio.AudioColumns.TITLE); album = getStringInSongsCursor(MediaStore.Audio.AudioColumns.ALBUM); artist = getStringInSongsCursor(MediaStore.Audio.AudioColumns.ARTIST); duration = getIntInSongsCursor(MediaStore.Audio.AudioColumns.DURATION); LibraryCursorAdapter.convertMinuteToMillis(duration); favorite_state = getFavoriteState(); album_art_path = getAlbumPath(getStringInSongsCursor(MediaStore.Audio.AudioColumns.ALBUM_ID), getContext()); } private String getStringInSongsCursor(String columnName) { return songsCursor.getString(songsCursor.getColumnIndexOrThrow(columnName)); } private int getIntInSongsCursor(String columnName) { return songsCursor.getInt(songsCursor.getColumnIndexOrThrow(columnName)); } @NonNull private String getFavoriteState() { String audio_id = getStringInSongsCursor(MediaStore.Audio.AudioColumns._ID); if (favorite_ids == null) { favorite_ids = new ArrayList<>(); } for (String favorite_id : favorite_ids) { if (favorite_id.equalsIgnoreCase(audio_id)) { return FAVORITE_ON; } } return FAVORITE_OFF; } @Nullable public static String getAlbumPath(String album_id, @NonNull Context context) { String albumPath = null; Cursor albumCursor = context.getContentResolver().query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, null, BaseColumns._ID + " =? ", new String[]{album_id}, null); if (albumCursor != null && albumCursor.getCount() != 0) { albumCursor.moveToFirst(); albumPath = albumCursor.getString(albumCursor.getColumnIndexOrThrow(MediaStore.Audio.AlbumColumns.ALBUM_ART)); } if (albumCursor != null) { albumCursor.close(); } return albumPath; } private void initSettingPreferences() { defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); } private void initMediaService() { Intent serviceIntent = new Intent(getActivity(), MediaPlayerService.class); getActivity().startService(serviceIntent); if (MediaPlayerService.isPlaying) { play_state = PAUSE; } doBindService(); } private void doBindService() { getActivity().bindService(TarMediaPlayerActivity.serviceIntent, serviceConnection, Service.BIND_AUTO_CREATE); isBindService = true; } private void doUnBindService() { sendMessageToService(MediaPlayerService.MSG_REMOVE_CLIENT); if (isBindService) { getActivity().unbindService(serviceConnection); isBindService = false; } } @Override public void onResume() { super.onResume(); if (mImageFetcher != null) { mImageFetcher.setExitTasksEarly(false); } } @Override public void onPause() { super.onPause(); if (mImageFetcher != null) { mImageFetcher.setExitTasksEarly(true); mImageFetcher.flushCache(); } } private void getPreferences() { preferences = Preferences.newInstance(getApplicationContext()); songPos = preferences.getPrefSongPosition(); song_duration_state = preferences.getPrefSongDuration(); volume = preferences.getPrefVolume(); shuffle_state = preferences.getPrefShuffle(); repeat_state = preferences.getPrefRepeat(); favorite_ids = preferences.getPrefFavorites(); } private void initListener() { //click listener ivRepeat.setOnClickListener(this); ivPlay.setOnClickListener(this); ivPrevious.setOnClickListener(this); ivNext.setOnClickListener(this); ivShuffle.setOnClickListener(this); ivFavorite.setOnClickListener(this); ivVolume.setOnClickListener(this); ivRingTone.setOnClickListener(this); ivVolumeOff.setOnClickListener(this); //seek change listener sbSongDuration.setOnSeekBarChangeListener(this); sbVolume.setOnSeekBarChangeListener(this); vpAlbumArt.setOnTouchListener(this); } private void volumeStickWhite() { if (TarMediaPlayerActivity.sdkInt <= Build.VERSION_CODES.KITKAT) { sbSongDuration.getProgressDrawable().setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY); sbSongDuration.getThumb().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN); setSBVolumeWhiteDrawable(); } } private void setSBVolumeWhiteDrawable() { sbVolume.getProgressDrawable().setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY); sbVolume.getThumb().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN); } private void setSongPref() { tvSongTitle.setText(songTitle); tvAlbumName.setText(album); tvArtistName.setText(artist); setDuration(song_duration_state); ivShuffle.setImageDrawable(getShuffleDrawable()); ivRepeat.setImageDrawable(getRepeatDrawable()); ivPlay.setImageDrawable(getPlayDrawable()); setSongDuration(); ivFavorite.setImageDrawable(getFavoriteDrawable()); } private void setSongDuration() { sbSongDuration.setMax(duration); sbSongDuration.setProgress(song_duration_state); } private Drawable getRepeatDrawable() { if (repeat_state.equalsIgnoreCase(REPEAT_ALL)) { vpAlbumArt.setTouchEnabled(true); return getDrawable(R.drawable.ic_repeat_all); } else if (repeat_state.equalsIgnoreCase(REPEAT_ONE)) { vpAlbumArt.setTouchEnabled(false); return getDrawable(R.drawable.ic_repeat_one); } else { vpAlbumArt.setTouchEnabled(true); return getDrawable(R.drawable.ic_repeat); } } private Drawable getShuffleDrawable() { if (shuffle_state.equalsIgnoreCase(SHUFFLE_ON)) { return getDrawable(R.drawable.ic_shuffle_on); } else { RandomSong.randomPosList = new ArrayList<>(); return getDrawable(R.drawable.ic_shuffle_off); } } private Drawable getPlayDrawable() { if (play_state.equalsIgnoreCase(PLAY)) { return getDrawable(R.drawable.ic_play_arrow); } else { return getDrawable(R.drawable.ic_pause); } } private Drawable getFavoriteDrawable() { if (favorite_state.equalsIgnoreCase(FAVORITE_ON)) { return getDrawable(R.drawable.ic_favorite_on); } else { return getDrawable(R.drawable.ic_favorite_off); } } private Drawable getDrawable(int res) { return ContextCompat.getDrawable(getContext(), res); } private int getColor(int color) { return ContextCompat.getColor(getContext(), color); } @Override public void onDestroy() { if (songsCursor.getCount() != 0) { setLastValuesInPref(); doUnBindService(); MediaPlayerService.newPlay = false; if (mImageFetcher != null) { mImageFetcher.closeCache(); } } super.onDestroy(); } private void setLastValuesInPref() { preferences.setPrefSongPos(songPos); preferences.setPrefDuration(song_duration_state); preferences.setPrefVolume(volume); preferences.setPrefShuffle(shuffle_state); preferences.setPrefRepeat(repeat_state); preferences.setPrefFavorites(favorite_ids); } @Override public boolean onTouch(View v, @NonNull MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { if (isVolumeLayoutShow) { volumeLayout.setVisibility(View.GONE); isVolumeLayoutShow = false; } } return false; } @Override public void onClick(@NonNull View v) { switch (v.getId()) { case R.id.ivRepeat: changeRepeatState(); ivRepeat.setImageDrawable(getRepeatDrawable()); sendMessageToService(MediaPlayerService.MSG_REPEAT_STATE); break; case R.id.ivPrevious: previous(); break; case R.id.ivPlay: changePlayState(); ivPlay.setImageDrawable(getPlayDrawable()); break; case R.id.ivNext: next(); break; case R.id.ivShuffle: changeShuffleState(); ivShuffle.setImageDrawable(getShuffleDrawable()); break; case R.id.ivFavorite: changeFavoriteState(); ivFavorite.setImageDrawable(getFavoriteDrawable()); setFavoriteList(); break; case R.id.ivVolume: if (isVolumeLayoutShow) { volumeLayout.setVisibility(View.GONE); isVolumeLayoutShow = false; } else { animationVolumeLayoutShow(); } break; case R.id.ivRingTone: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Settings.System.canWrite(getApplicationContext())) { setAsRingtone(); } else { Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS); startActivityForResult(intent, WRITE_SETTINGS_REQUEST_CODE); } } break; case R.id.ivVolumeOff: setVolumeMuteDrawable(); if (mute_state.equalsIgnoreCase(MUTE)) { setMute(true); mute_state = UNMUTE; toastMessage(R.string.titile_mute_off); sbVolume.setEnabled(true); setSBVolumeWhiteDrawable(); } else if (mute_state.equalsIgnoreCase(UNMUTE)) { setMute(false); mute_state = MUTE; toastMessage(R.string.title_mute_on); sbVolume.setEnabled(false); setSBVolumeWhiteDrawable(); } break; } } @TargetApi(Build.VERSION_CODES.M) @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == WRITE_SETTINGS_REQUEST_CODE) { if (Settings.System.canWrite(getApplicationContext())) { setAsRingtone(); } } } private void setMute(boolean isMute) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (isMute) { audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_MUTE, 0); } else { audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_UNMUTE, 0); } } else { audioManager.setStreamMute(AudioManager.STREAM_MUSIC, isMute); } } private void animationVolumeLayoutShow() { isVolumeLayoutShow = true; volumeLayout.setVisibility(View.VISIBLE); final AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1); alphaAnimation.setDuration(500); volumeLayout.startAnimation(alphaAnimation); } private void setVolumeMuteDrawable() { if (mute_state.equalsIgnoreCase(MUTE)) { ivVolumeOff.setImageDrawable(getDrawable(R.drawable.ic_volume_on)); } else if (mute_state.equalsIgnoreCase(UNMUTE)) { ivVolumeOff.setImageDrawable(getDrawable(R.drawable.ic_volume_off)); } } private void setAsRingtone() { if (songsCursor.getCount() != 0) { int audio_id = getIntInSongsCursor(MediaStore.Audio.AudioColumns._ID); String ringtoneUri = "content://media/external/audio/media/" + audio_id; RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE, Uri.parse(ringtoneUri)); Toast.makeText(getApplicationContext(), getResources().getString(R.string.title_songAsPhoneRingtone), Toast.LENGTH_SHORT).show(); } } private void previous() { isCurrentItem = true; playPreviousSong(); if (shuffle_state.equalsIgnoreCase(SHUFFLE_ON)) { int i = vpAlbumArt.getCurrentItem(); if (i != 0) { i--; } vpAlbumArt.setCurrentItem(i, false); } else { vpAlbumArt.setCurrentItem(songPos, false); } } private void next() { isCurrentItem = true; playNextSong(); if (shuffle_state.equalsIgnoreCase(SHUFFLE_ON)) { int i = vpAlbumArt.getCurrentItem(); if (i != songsCursor.getCount() - 1) { i++; } vpAlbumArt.setCurrentItem(i, false); } else { vpAlbumArt.setCurrentItem(songPos, false); } } private void setFavoriteList() { songsCursor.moveToPosition(songPos); String audio_id = getStringInSongsCursor(MediaStore.Audio.AudioColumns._ID); String stringInSongsCursor = getStringInSongsCursor(MediaStore.Audio.AudioColumns.TITLE); if (favorite_state.equalsIgnoreCase(FAVORITE_OFF)) { for (String favorite : favorite_ids) { if (favorite.equalsIgnoreCase(audio_id)) { favorite_ids.remove(favorite); toastMessage(R.string.title_favorite_remove); return; } } } else { if (favorite_ids.add(audio_id)) { toastMessage(R.string.title_favorite_add); } } } private void toastMessage(int messageId) { Toast.makeText(getApplicationContext(), messageId, Toast.LENGTH_SHORT).show(); } private void playPreviousSong() { if (shuffle_state.equalsIgnoreCase(SHUFFLE_ON)) { int currentItem = vpAlbumArt.getCurrentItem(); if (isCurrentItem) { if (currentItem != 0) { currentItem--; } } playRandomSong(currentItem); } else if (songPos == 0) { if (repeat_state.equalsIgnoreCase(REPEAT_ALL)) { songPos = songsCursor.getCount() - 1; } else { return; } } else if (!repeat_state.equalsIgnoreCase(REPEAT_ONE)) { songPos--; } playNextOrPreviousSong(); } private void playNextSong() { if (shuffle_state.equalsIgnoreCase(SHUFFLE_ON)) { int currentItem = vpAlbumArt.getCurrentItem(); if (isCurrentItem) { if (currentItem != songsCursor.getCount() - 1) { currentItem++; } } playRandomSong(currentItem); } else if (songPos == songsCursor.getCount() - 1) { if (repeat_state.equalsIgnoreCase(REPEAT_ALL)) { songPos = 0; } else { return; } } else if (!repeat_state.equalsIgnoreCase(REPEAT_ONE)) { songPos++; } playNextOrPreviousSong(); } private void playRandomSong(int currentItem) { try { songPos = RandomSong.randomPosMap.get(currentItem); } catch (Exception e) { e.printStackTrace(); songPos = currentItem; } } private void playNextOrPreviousSong() { preferences.setPrefSongPos(songPos); play_state = PAUSE; MediaPlayerService.newPlay = true; initAudio(); initAnim(); setSongPref(); play(); } private void changeShuffleState() { if (shuffle_state.equalsIgnoreCase(SHUFFLE_ON)) { shuffle_state = SHUFFLE_OFF; defaultSharedPreferences.edit().putBoolean(SettingsFragment.KEY_PREF_SHUFFLE, false).apply(); RandomSong.randomPosMap.clear(); isConstantPos = true; mAdapter.notifyDataSetChanged(); toastMessage(R.string.title_shuffle_off); } else if (shuffle_state.equalsIgnoreCase(SHUFFLE_OFF)) { shuffle_state = SHUFFLE_ON; defaultSharedPreferences.edit().putBoolean(SettingsFragment.KEY_PREF_SHUFFLE, true).apply(); toastMessage(R.string.title_shuffle_on); } preferences.setPrefShuffle(shuffle_state); } private void changePlayState() { if (play_state.equalsIgnoreCase(PLAY)) { play_state = PAUSE; play(); } else if (play_state.equalsIgnoreCase(PAUSE)) { play_state = PLAY; pause(); } } private void changeFavoriteState() { if (favorite_state.equalsIgnoreCase(FAVORITE_OFF)) { favorite_state = FAVORITE_ON; } else if (favorite_state.equalsIgnoreCase(FAVORITE_ON)) { favorite_state = FAVORITE_OFF; } } private void changeRepeatState() { if (repeat_state.equalsIgnoreCase(REPEAT_ALL)) { repeat_state = REPEAT_OFF; toastMessage(R.string.message_repeat_off); defaultSharedPreferences.edit().putString(SettingsFragment.KEY_PREF_REPEAT, getString(R.string.title_repeat_off)).apply(); } else if (repeat_state.equalsIgnoreCase(REPEAT_OFF)) { repeat_state = REPEAT_ONE; defaultSharedPreferences.edit().putString(SettingsFragment.KEY_PREF_REPEAT, getString(R.string.title_repeat_one)).apply(); toastMessage(R.string.message_repeat_one); } else if (repeat_state.equalsIgnoreCase(REPEAT_ONE)) { repeat_state = REPEAT_ALL; defaultSharedPreferences.edit().putString(SettingsFragment.KEY_PREF_REPEAT, getString(R.string.title_repeat_all)).apply(); toastMessage(R.string.message_repeat_all); } preferences.setPrefRepeat(repeat_state); } @Override public void onProgressChanged(@NonNull SeekBar seekBar, int progress, boolean fromUser) { if (seekBar.getId() == R.id.sbSongDuration) { setDuration(progress); } else if (seekBar.getId() == R.id.sbVolume) { if (fromUser) { audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0); setVolumeDrawable(progress); } } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(@NonNull SeekBar seekBar) { if (seekBar.getId() == R.id.sbSongDuration) { progress = seekBar.getProgress(); sendMessageToService(MediaPlayerService.MSG_SEEK_TO); } } @Override public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { inflater.inflate(R.menu.now_playing_options_menu, menu); //set up sharing provider try { initShareItem(menu); } catch (Exception e) { e.printStackTrace(); } } private void initShareItem(@NonNull Menu menu) { MenuItem shareItem = menu.findItem(R.id.npomShare); ShareActionProvider shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem); shareActionProvider.setShareIntent(getShareIntent()); } @NonNull private Intent getShareIntent() { int audio_id = getIntInSongsCursor(MediaStore.Audio.AudioColumns._ID); Uri uri = Uri.parse("content://media/external/audio/media/" + audio_id); Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_STREAM, uri); shareIntent.setType("*/*"); return shareIntent; } @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { case R.id.npomList: //now playing liste yönlendirir. TarMediaPlayerActivity.item_state = TarMediaPlayerActivity.ITEM_STATE_NOWPLAYLIST; getActivity().onBackPressed(); break; } return super.onOptionsItemSelected(item); } static ImageFetcher getImageFetcher() { return mImageFetcher; } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { if (isCurrentItem || isConstantPos) { isCurrentItem = false; isConstantPos = false; return; } try { if (positionOffset == 0) { int realPos = position % songsCursor.getCount(); if (shuffle_state.equalsIgnoreCase(SHUFFLE_ON)) { if (pagePosition < realPos) { pagePosition = realPos; playNextSong(); } else if (pagePosition > realPos) { pagePosition = realPos; playPreviousSong(); } playRandomSong(vpAlbumArt.getCurrentItem()); } else if (songPos > realPos) { playPreviousSong(); } else if (songPos < realPos) { playNextSong(); } } } catch (ArithmeticException e) { e.printStackTrace(); } } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { } }