package com.sdsmdg.harjot.MusicDNA.fragments.EditSongFragment; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.media.MediaMetadataRetriever; import android.net.Uri; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.sdsmdg.harjot.MusicDNA.activities.HomeActivity; import com.sdsmdg.harjot.MusicDNA.R; import com.sdsmdg.harjot.MusicDNA.activities.SplashActivity; import com.sdsmdg.harjot.MusicDNA.lyrics.Lyrics; import com.sdsmdg.harjot.MusicDNA.utilities.CommonUtils; import com.sdsmdg.harjot.MusicDNA.imageloader.ImageLoader; import com.sdsmdg.harjot.MusicDNA.utilities.DownloadThread; import org.jaudiotagger.audio.AudioFileIO; import org.jaudiotagger.audio.exceptions.CannotReadException; import org.jaudiotagger.audio.exceptions.CannotWriteException; import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException; import org.jaudiotagger.audio.exceptions.ReadOnlyFileException; import org.jaudiotagger.audio.mp3.MP3File; import org.jaudiotagger.tag.FieldDataInvalidException; import org.jaudiotagger.tag.FieldKey; import org.jaudiotagger.tag.Tag; import org.jaudiotagger.tag.TagException; import org.jaudiotagger.tag.id3.AbstractID3v2Tag; import org.jaudiotagger.tag.id3.ID3v1Tag; import org.jaudiotagger.tag.id3.ID3v24Tag; import java.io.File; import java.io.IOException; /** * A simple {@link Fragment} subclass. */ public class EditLocalSongFragment extends Fragment { EditText titleText, artistText, albumText; Button saveButton; ImageView backBtn, backdrop; TextView fragTitle; Context ctx; ImageLoader imgLoader; boolean isTitleNotNull = false; boolean isArtistNotNull = false; boolean isAlbumNotNull = false; MP3File mp3File; Tag tag; ID3v1Tag id3v1Tag; AbstractID3v2Tag id3v2Tag; ID3v24Tag id3v24Tag; EditFragmentCallbackListener mCallback; View bottomMarginLayout; public interface EditFragmentCallbackListener { void onEditSongSave(boolean wasSaveSuccessful); void getNewBitmap(); void deleteMediaStoreCache(); } public EditLocalSongFragment() { // Required empty public constructor } @Override public void onAttach(Context context) { super.onAttach(context); ctx = context; try { imgLoader = new ImageLoader(context); mCallback = (EditFragmentCallbackListener) context; } catch (ClassCastException e) { throw new ClassCastException(context.toString() + " must implement OnHeadlineSelectedListener"); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_edit_local_song, container, false); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); backBtn = (ImageView) view.findViewById(R.id.edit_song_back_btn); backBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getActivity().onBackPressed(); } }); fragTitle = (TextView) view.findViewById(R.id.edit_song_fragment_title); if (SplashActivity.tf4 != null) fragTitle.setTypeface(SplashActivity.tf4); backdrop = (ImageView) view.findViewById(R.id.edit_song_backdrop); imgLoader.DisplayImage(HomeActivity.editSong.getPath(), backdrop); bottomMarginLayout = view.findViewById(R.id.bottom_margin_layout); if (HomeActivity.isReloaded) bottomMarginLayout.getLayoutParams().height = 0; else bottomMarginLayout.getLayoutParams().height = CommonUtils.dpTopx(65, getContext()); ; titleText = (EditText) view.findViewById(R.id.edit_song_title); artistText = (EditText) view.findViewById(R.id.edit_song_artist); albumText = (EditText) view.findViewById(R.id.edit_song_album); saveButton = (Button) view.findViewById(R.id.edit_song_save_button); saveButton.setBackgroundColor(HomeActivity.themeColor); saveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!titleText.getText().toString().trim().equals("")) { HomeActivity.editSong.setTitle(titleText.getText().toString().trim()); isTitleNotNull = true; } else { titleText.setError("Enter a valid Title"); isTitleNotNull = false; } if (!artistText.getText().toString().trim().equals("")) { HomeActivity.editSong.setTitle(artistText.getText().toString().trim()); isArtistNotNull = true; } else { artistText.setError("Enter a valid Artist name"); isArtistNotNull = false; } if (!albumText.getText().toString().trim().equals("")) { HomeActivity.editSong.setTitle(albumText.getText().toString().trim()); isAlbumNotNull = true; } else { albumText.setError("Enter a valid Album name"); isAlbumNotNull = false; } if (isTitleNotNull && isArtistNotNull && isAlbumNotNull) { boolean error = false; try { if (tag != null) { tag.setField(FieldKey.TITLE, titleText.getText().toString().trim()); tag.setField(FieldKey.ARTIST, artistText.getText().toString().trim()); tag.setField(FieldKey.ALBUM, albumText.getText().toString().trim()); } } catch (FieldDataInvalidException e) { error = true; e.printStackTrace(); } try { if (id3v1Tag != null) { id3v1Tag.setField(FieldKey.TITLE, titleText.getText().toString().trim()); id3v1Tag.setField(FieldKey.ARTIST, artistText.getText().toString().trim()); id3v1Tag.setField(FieldKey.ALBUM, albumText.getText().toString().trim()); } } catch (FieldDataInvalidException e) { error = true; e.printStackTrace(); } try { if (id3v2Tag != null) { id3v2Tag.setField(FieldKey.TITLE, titleText.getText().toString().trim()); id3v2Tag.setField(FieldKey.ARTIST, artistText.getText().toString().trim()); id3v2Tag.setField(FieldKey.ALBUM, albumText.getText().toString().trim()); } } catch (FieldDataInvalidException e) { error = true; e.printStackTrace(); } try { if (id3v24Tag != null) { id3v24Tag.setField(FieldKey.TITLE, titleText.getText().toString().trim()); id3v24Tag.setField(FieldKey.ARTIST, artistText.getText().toString().trim()); id3v24Tag.setField(FieldKey.ALBUM, albumText.getText().toString().trim()); } } catch (FieldDataInvalidException e) { error = true; e.printStackTrace(); } try { mp3File.commit(); } catch (CannotWriteException e) { error = true; e.printStackTrace(); } if (!error) { Toast.makeText(ctx, "Saved", Toast.LENGTH_SHORT).show(); HomeActivity.editSong.setTitle(titleText.getText().toString().trim()); HomeActivity.editSong.setArtist(artistText.getText().toString().trim()); HomeActivity.editSong.setAlbum(albumText.getText().toString().trim()); } mCallback.onEditSongSave(!error); } } }); } @Override public void onResume() { super.onResume(); mp3File = null; try { File f = new File(HomeActivity.editSong.getPath()); mp3File = (MP3File) AudioFileIO.read(f); } catch (IOException | CannotReadException | InvalidAudioFrameException | TagException | ReadOnlyFileException e) { e.printStackTrace(); } catch (ClassCastException e) { mp3File = null; e.printStackTrace(); } if (mp3File == null) { Toast.makeText(ctx, "Error in loading the file", Toast.LENGTH_SHORT).show(); mCallback.onEditSongSave(false); } if (mp3File != null && !mp3File.hasID3v2Tag()) { Toast.makeText(ctx, "No Tags Found", Toast.LENGTH_SHORT).show(); mCallback.onEditSongSave(false); } if (mp3File != null && mp3File.hasID3v2Tag()) { titleText.setText(HomeActivity.editSong.getTitle()); artistText.setText(HomeActivity.editSong.getArtist()); albumText.setText(HomeActivity.editSong.getAlbum()); } try { tag = mp3File.getTag(); id3v1Tag = mp3File.getID3v1Tag(); id3v2Tag = mp3File.getID3v2Tag(); id3v24Tag = mp3File.getID3v2TagAsv24(); } catch (Exception e) { e.printStackTrace(); Toast.makeText(ctx, "Error in finding tags", Toast.LENGTH_SHORT).show(); mCallback.onEditSongSave(false); } } public Bitmap getBitmap(String url) { android.media.MediaMetadataRetriever mmr = new MediaMetadataRetriever(); mmr.setDataSource(url); Bitmap bitmap; byte[] data = mmr.getEmbeddedPicture(); if (data != null) { bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); return bitmap; } else { return null; } } public void updateCoverArt(Bitmap bmp, Uri artUri) { // if (bmp != null) { // songImage.setImageBitmap(bmp); // backImage.setImageBitmap(bmp); // } // // File file = new File(artUri.getPath()); // // if (file.exists()) { // Artwork cover = null; // try { // cover = ArtworkFactory.createArtworkFromFile(file); // tag.deleteArtworkField(); // tag.createField(cover); // tag.setField(cover); // mp3File.commit(); // } catch (FieldDataInvalidException e) { // e.printStackTrace(); // } catch (CannotWriteException e) { // e.printStackTrace(); // } catch (IOException e) { // e.printStackTrace(); // } // } // // mCallback2.deleteMediaStoreCache(); } }