com.aniruddhc.acemusic.player.BlacklistManagerActivity.BlacklistManagerActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.aniruddhc.acemusic.player.BlacklistManagerActivity.BlacklistManagerActivity.java

Source

/*
 * Copyright (C) 2014 Saravan Pantham
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.aniruddhc.acemusic.player.BlacklistManagerActivity;

import java.util.HashMap;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.text.Spannable;
import android.text.SpannableString;
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

import com.aniruddhc.acemusic.player.R;
import com.aniruddhc.acemusic.player.Helpers.UIElementsHelper;
import com.aniruddhc.acemusic.player.MusicLibraryEditorActivity.AlbumsPickerFragment;
import com.aniruddhc.acemusic.player.MusicLibraryEditorActivity.ArtistsPickerFragment;
import com.aniruddhc.acemusic.player.MusicLibraryEditorActivity.SongsPickerFragment;
import com.aniruddhc.acemusic.player.Utils.Common;
import com.aniruddhc.acemusic.player.Utils.TypefaceSpan;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;

public class BlacklistManagerActivity extends FragmentActivity {

    private Context mContext;
    private Common mApp;
    private Activity mActivity;
    private SharedPreferences sharedPreferences;
    private String libraryName;
    private String libraryIconName;
    public static ActionBar actionBar;
    public static String currentTab = "Artists";
    public static DisplayImageOptions displayImageOptions;
    public static HashMap<String, Boolean> songIdBlacklistStatusPair = new HashMap<String, Boolean>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        //Initialize Context and SharedPreferences.
        mContext = this;
        mActivity = this;
        mApp = (Common) this.getApplicationContext();
        sharedPreferences = mContext.getSharedPreferences("com.aniruddhc.acemusic.player", Context.MODE_PRIVATE);

        //Set the UI theme.
        if (mApp.getCurrentTheme() == Common.DARK_THEME) {
            setTheme(R.style.AppTheme);
        } else {
            setTheme(R.style.AppThemeLight);
        }
        super.onCreate(savedInstanceState);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            getWindow().setBackgroundDrawable(UIElementsHelper.getGeneralActionBarBackground(mContext));
            int topPadding = Common.getStatusBarHeight(mContext);
            View activityView = (View) findViewById(android.R.id.content);

            //Calculate ActionBar height
            TypedValue tv = new TypedValue();
            int actionBarHeight = 0;
            if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
                actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,
                        getResources().getDisplayMetrics());
            }

            if (activityView != null) {
                activityView.setPadding(0, topPadding + actionBarHeight, 0, 0);
            }

        }

        //Retrieve the actionbar.
        actionBar = getActionBar();

        //Create a set of options to optimize the bitmap memory usage.
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        options.inJustDecodeBounds = false;
        options.inPurgeable = true;

        //Display Image Options.
        int defaultArt = UIElementsHelper.getIcon(mContext, "default_album_art_padded");
        displayImageOptions = new DisplayImageOptions.Builder().showImageForEmptyUri(R.drawable.default_album_art)
                .showImageOnFail(R.drawable.default_album_art).showStubImage(R.drawable.transparent_drawable)
                .cacheInMemory(false).cacheOnDisc(true).decodingOptions(options)
                .imageScaleType(ImageScaleType.EXACTLY).bitmapConfig(Bitmap.Config.RGB_565)
                .displayer(new FadeInBitmapDisplayer(400)).delayBeforeLoading(100).build();

        //Retrieve a list of blacklisted songs.
        AsyncGetAllSongIdsBlacklistStatusTask task = new AsyncGetAllSongIdsBlacklistStatusTask();
        task.execute();

    }

    private class TabListener<T extends android.app.Fragment> implements ActionBar.TabListener {
        private android.app.Fragment mFragment;
        private final Activity mActivity;
        private final String mTag;
        private final Class<T> mClass;

        public TabListener(Activity activity, String tag, Class<T> clz) {
            mActivity = activity;
            mTag = tag;
            mClass = clz;
        }

        @Override
        public void onTabReselected(Tab arg0, android.app.FragmentTransaction arg1) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {

            currentTab = (String) tab.getText();
            //Check if the fragment is already initialized
            if (mFragment == null) {
                //If not, instantiate and add it to the activity
                mFragment = android.app.Fragment.instantiate(mActivity, mClass.getName());
                ft.add(android.R.id.content, mFragment, mTag);
            } else {
                //If it exists, simply attach it in order to show it
                ft.attach(mFragment);
            }

        }

        @Override
        public void onTabUnselected(Tab arg0, android.app.FragmentTransaction ft) {
            if (mFragment != null) {
                ft.detach(mFragment);
            }

        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.blacklist_manager, menu);

        ActionBar actionBar = getActionBar();
        actionBar.setBackgroundDrawable(UIElementsHelper.getGeneralActionBarBackground(mContext));
        SpannableString s = new SpannableString(getResources().getString(R.string.blacklist_manager));
        s.setSpan(new TypefaceSpan(this, "RobotoCondensed-Light"), 0, s.length(),
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        actionBar.setTitle(s);

        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.done_blacklist_manager:
            AsyncBlacklistSongsTask task = new AsyncBlacklistSongsTask();
            task.execute();
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }

    }

    @Override
    public void onPause() {
        super.onPause();
        songIdBlacklistStatusPair.clear();

        if (SongsPickerFragment.cursor != null) {
            SongsPickerFragment.cursor.close();
            SongsPickerFragment.cursor = null;
        }

        if (AlbumsPickerFragment.cursor != null) {
            AlbumsPickerFragment.cursor.close();
            AlbumsPickerFragment.cursor = null;
        }

        if (ArtistsPickerFragment.cursor != null) {
            ArtistsPickerFragment.cursor.close();
            ArtistsPickerFragment.cursor = null;
        }

    }

    class AsyncBlacklistSongsTask extends AsyncTask<String, String, String> {

        private ProgressDialog pd;

        @Override
        public void onPreExecute() {
            super.onPreExecute();

            pd = new ProgressDialog(mContext);
            pd.setTitle(R.string.blacklist_manager);
            pd.setIndeterminate(true);
            pd.setMessage(mContext.getResources().getString(R.string.updating_blacklists));
            pd.setCancelable(false);
            pd.setCanceledOnTouchOutside(false);
            pd.show();

        }

        @Override
        protected String doInBackground(String... params) {
            mApp.getDBAccessHelper().batchUpdateSongBlacklist(songIdBlacklistStatusPair);
            return null;
        }

        @Override
        public void onPostExecute(String result) {
            super.onPostExecute(result);

            //Dismiss the progress dialog.
            pd.dismiss();
            mActivity.finish();
            Toast.makeText(mContext, R.string.done_updating_blacklists, Toast.LENGTH_LONG).show();
        }

    }

    class AsyncGetAllSongIdsBlacklistStatusTask extends AsyncTask<String, String, String> {

        private ProgressDialog pd;

        @Override
        public void onPreExecute() {
            super.onPreExecute();

            pd = new ProgressDialog(mContext);
            pd.setTitle(R.string.blacklist_manager);
            pd.setIndeterminate(true);
            pd.setMessage(mContext.getResources().getString(R.string.fetching_blacklists));
            pd.setCancelable(false);
            pd.setCanceledOnTouchOutside(false);
            pd.show();

        }

        @Override
        protected String doInBackground(String... params) {
            songIdBlacklistStatusPair = mApp.getDBAccessHelper().getAllSongIdsBlacklistStatus();
            return null;
        }

        @Override
        public void onPostExecute(String result) {
            super.onPostExecute(result);

            //Dismiss the progress dialog.
            pd.dismiss();

            //Initialize the tabs.
            //Attach tabs to the ActionBar.
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

            //Add the artists tab.
            String artistsLabel = getResources().getString(R.string.artists);
            Tab tab = actionBar.newTab();
            tab.setText(artistsLabel);
            TabListener<BlacklistedArtistsPickerFragment> artistsTabListener = new TabListener<BlacklistedArtistsPickerFragment>(
                    mActivity, artistsLabel, BlacklistedArtistsPickerFragment.class);

            tab.setTabListener(artistsTabListener);
            actionBar.addTab(tab);

            //Add the albums tab.
            String albumsLabel = getResources().getString(R.string.albums);
            tab = actionBar.newTab();
            tab.setText(albumsLabel);
            TabListener<BlacklistedAlbumsPickerFragment> albumsTabListener = new TabListener<BlacklistedAlbumsPickerFragment>(
                    mActivity, albumsLabel, BlacklistedAlbumsPickerFragment.class);

            tab.setTabListener(albumsTabListener);
            actionBar.addTab(tab);

            //Add the songs tab.
            String songsLabel = getResources().getString(R.string.songs);
            tab = actionBar.newTab();
            tab.setText(songsLabel);
            TabListener<BlacklistedSongsPickerFragment> songsTabListener = new TabListener<BlacklistedSongsPickerFragment>(
                    mActivity, songsLabel, BlacklistedSongsPickerFragment.class);

            tab.setTabListener(songsTabListener);
            actionBar.addTab(tab);

        }

    }

}