Android Open Source - music-tag Tag Form Activity






From Project

Back to project page music-tag.

License

The source code is released under:

Apache License

If you think the Android project music-tag listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package binauld.pierre.musictag.activities;
//from   w  w  w.j a v  a2s.co m
import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

import com.iangclifton.android.floatlabel.FloatLabel;
import com.melnykov.fab.FloatingActionButton;
import com.melnykov.fab.ObservableScrollView;

import org.apache.commons.lang.StringUtils;
import org.jaudiotagger.audio.AudioFile;
import org.jaudiotagger.audio.AudioFileIO;
import org.jaudiotagger.audio.exceptions.CannotWriteException;
import org.jaudiotagger.tag.FieldDataInvalidException;
import org.jaudiotagger.tag.FieldKey;
import org.jaudiotagger.tag.Tag;
import org.jaudiotagger.tag.datatype.Artwork;

import binauld.pierre.musictag.R;
import binauld.pierre.musictag.decoder.BitmapDecoder;
import binauld.pierre.musictag.decoder.ResourceBitmapDecoder;
import binauld.pierre.musictag.item.AudioItem;
import binauld.pierre.musictag.service.ArtworkService;
import binauld.pierre.musictag.tag.Id3Tag;
import binauld.pierre.musictag.tag.Id3TagParcelable;

public class TagFormActivity extends Activity implements View.OnClickListener {

    private static AudioItem providedItem;

    public static void provideItem(AudioItem item) {
        TagFormActivity.providedItem = item;
    }

    public static final int SUGGESTION_REQUEST_CODE = 1;

    private Resources res;

    private ArtworkService artworkService;

    private AudioItem audioItem;

    private ImageView img_artwork;
    private TextView lbl_filename;
    private EditText txt_title;
    private EditText txt_artist;
    private EditText txt_album;
    private EditText txt_year;
    private EditText txt_album_artist;
    private EditText txt_composer;
    private EditText txt_grouping;
    private EditText txt_genre;
    private EditText txt_disc;
    private EditText txt_track;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Init content
        initContent();

        //Init layout
        this.setContentView(R.layout.activity_tag_form);

        // Init action bar
        ActionBar actionBar = getActionBar();
        if (null != actionBar) {
            actionBar.setDisplayHomeAsUpEnabled(true);
        }

        // Init Floating Action Button
        ObservableScrollView scrollView = (ObservableScrollView) findViewById(R.id.scroll_tag_form);
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab_valid);
        fab.attachToScrollView(scrollView);
        fab.setOnClickListener(this);

        // Init resources
        res = getResources();

        // Init service(s)
        BitmapDecoder defaultArtworkBitmapDecoder = new ResourceBitmapDecoder(res, R.drawable.list_item_placeholder);
        artworkService = new ArtworkService(defaultArtworkBitmapDecoder);

        // Init views
        initViews();
        initActivityTitle();

        // Fill views
        fillViews();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_tag_form, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                onBackPressed();
                return true;
            case R.id.action_settings:
                return true;
            case R.id.action_suggestion:
                callSuggestionActivity();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.fab_valid:
                saveChangeAndFinish();
                break;
            default:
                break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == SUGGESTION_REQUEST_CODE) {
            switch (resultCode) {
                case RESULT_OK:
                    Id3Tag id3Tags = (Id3Tag) data.getParcelableExtra(TagSuggestionActivity.TAG_KEY);
                    id3Tags.saveInto(audioItem.getAudioFile());
                    fillViews();
                    break;
                case RESULT_CANCELED:
                default:
                    break;
            }
        }
    }

    /**
     * Start the suggestion activity.
     */
    private void callSuggestionActivity() {
        Intent intent = new Intent(this, TagSuggestionActivity.class);
        intent.putExtra(TagSuggestionActivity.TAG_KEY, new Id3TagParcelable(audioItem.getAudioFile()));
        startActivityForResult(intent, SUGGESTION_REQUEST_CODE);
    }

    /**
     * Initialize the audio item and finish if it is not possible.
     */
    private void initContent() {
        //TODO: maybe crash on suggestion return
        if (null == providedItem) {
            Log.e(this.getClass().toString(), "No item has been provided.");
            finish();
        } else {
            audioItem = TagFormActivity.providedItem;
        }
    }

    /**
     * Initialize views.
     */
    private void initViews() {
        img_artwork = (ImageView) findViewById(R.id.img_artwork);
        lbl_filename = (TextView) findViewById(R.id.lbl_filename);
        txt_title = ((FloatLabel) findViewById(R.id.txt_title)).getEditText();
        txt_artist = ((FloatLabel) findViewById(R.id.txt_artist)).getEditText();
        txt_album = ((FloatLabel) findViewById(R.id.txt_album)).getEditText();
        txt_year = ((FloatLabel) findViewById(R.id.txt_year)).getEditText();
        txt_disc = ((FloatLabel) findViewById(R.id.txt_disc)).getEditText();
        txt_track = ((FloatLabel) findViewById(R.id.txt_track)).getEditText();
        txt_album_artist = ((FloatLabel) findViewById(R.id.txt_album_artist)).getEditText();
        txt_composer = ((FloatLabel) findViewById(R.id.txt_composer)).getEditText();
        txt_grouping = ((FloatLabel) findViewById(R.id.txt_grouping)).getEditText();
        txt_genre = ((FloatLabel) findViewById(R.id.txt_genre)).getEditText();
    }

    /**
     * Fill views.
     */
    private void fillViews() {
        AudioFile audioFile = audioItem.getAudioFile();
        Tag tags = audioFile.getTag();
        Artwork artwork = tags.getFirstArtwork();
        if (null != artwork) {
            artworkService.setArtwork(audioItem, img_artwork, 200);
        }
        lbl_filename.setText(audioFile.getFile().getAbsolutePath());
        txt_title.setText(tags.getFirst(FieldKey.TITLE));
        txt_artist.setText(tags.getFirst(FieldKey.ARTIST));
        txt_album.setText(tags.getFirst(FieldKey.ALBUM));
        txt_year.setText(tags.getFirst(FieldKey.YEAR));
        txt_disc.setText(tags.getFirst(FieldKey.DISC_NO));
        txt_track.setText(tags.getFirst(FieldKey.TRACK));
        txt_album_artist.setText(tags.getFirst(FieldKey.ALBUM_ARTIST));
        txt_composer.setText(tags.getFirst(FieldKey.COMPOSER));
        txt_grouping.setText(tags.getFirst(FieldKey.GROUPING));
        txt_genre.setText(tags.getFirst(FieldKey.GENRE));
    }

    /**
     * Save the modification into the audio file and finish the activity.
     */
    private void saveChangeAndFinish() {
        Intent intent = new Intent();
        try {
            AudioFile audioFile = audioItem.getAudioFile();
            Tag tags = audioFile.getTag();
            setTagField(tags, FieldKey.TITLE, txt_title.getText().toString());
            setTagField(tags, FieldKey.ARTIST, txt_artist.getText().toString());
            setTagField(tags, FieldKey.ALBUM, txt_album.getText().toString());
            setTagField(tags, FieldKey.ALBUM_ARTIST, txt_album_artist.getText().toString());
            setTagField(tags, FieldKey.COMPOSER, txt_composer.getText().toString());
            setTagField(tags, FieldKey.GROUPING, txt_grouping.getText().toString());
            setTagField(tags, FieldKey.GENRE, txt_genre.getText().toString());
            setNumericTagField(tags, FieldKey.YEAR, txt_year.getText().toString());
            setNumericTagField(tags, FieldKey.DISC_NO, txt_disc.getText().toString());
            setNumericTagField(tags, FieldKey.TRACK, txt_track.getText().toString());
            audioFile.setTag(tags);

            AudioFileIO.write(audioFile);

            setResult(RESULT_OK, intent);
        } catch (CannotWriteException | FieldDataInvalidException e) {
            Log.e(this.getClass().toString(), e.getMessage(), e);
            setResult(RESULT_CANCELED, intent);
        }

        finish();
    }

    /**
     * Initialize the activity title.
     */
    private void initActivityTitle() {
        String title = audioItem.getPrimaryInformation();
        if (StringUtils.isNotBlank(audioItem.getSecondaryInformation())) {
            title += " - " + audioItem.getSecondaryInformation();
        }
        setTitle(title);
    }

    //TODO: Use this kind of logic in Id3Tag for saving.
    private static void setNumericTagField(Tag tags, FieldKey key, String value) throws FieldDataInvalidException {
        if (!StringUtils.isBlank(value) && StringUtils.isNumeric(value)) {
            tags.setField(key, value);
        }
    }

    private static void setTagField(Tag tags, FieldKey key, String value) throws FieldDataInvalidException {
        if (StringUtils.isBlank(value)) {
            value = "";
        }
        tags.setField(key, value);
    }
}




Java Source Code List

binauld.pierre.musictag.ApplicationTest.java
binauld.pierre.musictag.activities.MainActivity.java
binauld.pierre.musictag.activities.SettingsActivity.java
binauld.pierre.musictag.activities.TagFormActivity.java
binauld.pierre.musictag.activities.TagSuggestionActivity.java
binauld.pierre.musictag.adapter.LibraryItemAdapter.java
binauld.pierre.musictag.adapter.SuggestionItemAdapter.java
binauld.pierre.musictag.adapter.SuggestionViewHolder.java
binauld.pierre.musictag.collection.LibraryItemComparator.java
binauld.pierre.musictag.collection.MultipleBufferedList.java
binauld.pierre.musictag.decoder.AudioFileBitmapDecoder.java
binauld.pierre.musictag.decoder.BitmapDecoder.java
binauld.pierre.musictag.decoder.ResourceBitmapDecoder.java
binauld.pierre.musictag.factory.FileFilterFactory.java
binauld.pierre.musictag.factory.LibraryItemFactory.java
binauld.pierre.musictag.fragments.SettingsFragment.java
binauld.pierre.musictag.helper.LibraryItemFactoryHelper.java
binauld.pierre.musictag.helper.LoaderHelper.java
binauld.pierre.musictag.io.ArtworkLoader.java
binauld.pierre.musictag.io.AsyncDrawable.java
binauld.pierre.musictag.io.DefaultArtworkLoader.java
binauld.pierre.musictag.io.LibraryItemLoaderManager.java
binauld.pierre.musictag.io.LibraryItemLoader.java
binauld.pierre.musictag.io.SuggestionLoader.java
binauld.pierre.musictag.item.AudioItem.java
binauld.pierre.musictag.item.ChildItem.java
binauld.pierre.musictag.item.FolderItem.java
binauld.pierre.musictag.item.LibraryItem.java
binauld.pierre.musictag.item.LoadingState.java
binauld.pierre.musictag.item.NodeItem.java
binauld.pierre.musictag.item.SuggestionItem.java
binauld.pierre.musictag.service.ArtworkService.java
binauld.pierre.musictag.service.CacheService.java
binauld.pierre.musictag.service.Locator.java
binauld.pierre.musictag.tag.Id3TagParcelable.java
binauld.pierre.musictag.tag.Id3Tag.java
binauld.pierre.musictag.tag.SupportedTag.java
binauld.pierre.musictag.widget.AnimatedProgressBar.java