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) {
}
}