Advertisement
Guest User

error -38

a guest
Feb 9th, 2014
682
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 33.05 KB | None | 0 0
  1. package com.Driiinx.musicslide;
  2.  
  3. import android.app.Activity;
  4. import android.app.Fragment;
  5. import android.content.Context;
  6. import android.graphics.Bitmap;
  7. import android.graphics.BitmapFactory;
  8. import android.media.AudioManager;
  9. import android.media.MediaMetadataRetriever;
  10. import android.media.MediaPlayer;
  11. import android.net.Uri;
  12. import android.os.Bundle;
  13. import android.os.Environment;
  14. import android.os.PowerManager;
  15. import android.support.v4.app.ActionBarDrawerToggle;
  16. import android.support.v4.view.GravityCompat;
  17. import android.support.v4.widget.DrawerLayout;
  18. import android.util.Log;
  19. import android.view.LayoutInflater;
  20. import android.view.Menu;
  21. import android.view.MenuInflater;
  22. import android.view.MenuItem;
  23. import android.view.View;
  24. import android.view.ViewGroup;
  25. import android.widget.AdapterView;
  26. import android.widget.ArrayAdapter;
  27. import android.widget.ImageButton;
  28. import android.widget.ImageView;
  29. import android.widget.ListView;
  30. import android.widget.SeekBar;
  31. import android.widget.TextView;
  32. import android.widget.Toast;
  33.  
  34. import java.io.File;
  35. import java.io.FileInputStream;
  36. import java.io.FileOutputStream;
  37. import java.io.IOException;
  38. import java.io.ObjectInputStream;
  39. import java.io.ObjectOutputStream;
  40. import java.util.ArrayList;
  41. import java.util.Collections;
  42. import java.util.HashMap;
  43. import java.util.List;
  44.  
  45. public class MainActivity extends Activity implements View.OnClickListener, MediaPlayer.OnPreparedListener, Runnable {
  46.  
  47.     private String[] mPlanetTitles;
  48.     private DrawerLayout mDrawerLayout;
  49.     private ListView mDrawerList;
  50.     private ImageView mMainImageView;
  51.     private ImageView mTitleBarImageView;
  52.     private TextView mTitleBarTitleTextView;
  53.     private TextView mTitleBarArtistTextView;
  54.     private ActionBarDrawerToggle mDrawerToggle;
  55.     private SeekBar mSeekbar;
  56.     private TextView mCurrentPositionText;
  57.     private TextView mDurationText;
  58.     ArrayList<MusicListArray> list;
  59.     Context mContext = this;
  60.     MediaPlayer play_media = new MediaPlayer();
  61.     Thread thread_update_seekbar;
  62.  
  63.     byte[] album_art_byte;
  64.     private CharSequence mDrawerTitle;
  65.     private CharSequence mTitle;
  66.  
  67.  
  68.     Bitmap bitmap;
  69.  
  70.     static int i = 0;
  71.  
  72.     @Override
  73.     protected void onCreate(Bundle savedInstanceState) {
  74.         super.onCreate(savedInstanceState);
  75.         setContentView(R.layout.activity_main);
  76.  
  77.         mTitle = mDrawerTitle = getTitle();
  78.         mSeekbar = (SeekBar) findViewById(R.id.seekBar);
  79.         mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
  80.         mDrawerList = (ListView) findViewById(R.id.right_drawer);
  81.         mCurrentPositionText = (TextView) findViewById(R.id.current_pos);
  82.         mDurationText = (TextView) findViewById(R.id.duration);
  83.         list = new ArrayList<MusicListArray>();
  84.         //getActionBar().setDisplayHomeAsUpEnabled(true);
  85.         getActionBar().setHomeButtonEnabled(true);
  86.  
  87.         System.out.println("Create");
  88.         AudioManager am = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
  89.         play_media.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
  90.         play_media.setOnPreparedListener(this);
  91.         play_media.setOnErrorListener(new MediaPlayer.OnErrorListener() {
  92.             @Override
  93.             public boolean onError(MediaPlayer mediaPlayer, int i, int i2) {
  94.                 String errormsg = "error : " + i + " - " + i2;
  95.                 if(i == MediaPlayer.MEDIA_ERROR_UNKNOWN){
  96.                     errormsg = errormsg + ". unknown ";
  97.                 }if(i == MediaPlayer.MEDIA_ERROR_SERVER_DIED){
  98.                     errormsg = errormsg + "1. server died ";
  99.                 }
  100.                 if(i2 == MediaPlayer.MEDIA_ERROR_IO){
  101.                     errormsg = errormsg + "2. io";
  102.                 }if(i2 == MediaPlayer.MEDIA_ERROR_MALFORMED){
  103.                     errormsg = errormsg + "2. malformed";
  104.                 }if(i2 == MediaPlayer.MEDIA_ERROR_TIMED_OUT){
  105.                     errormsg = errormsg + "2. timed out";
  106.                 }if(i2 == MediaPlayer.MEDIA_ERROR_UNSUPPORTED){
  107.                     errormsg = errormsg + "2. unsupported";
  108.                 }
  109.                 Toast.makeText(getApplicationContext(), errormsg, Toast.LENGTH_SHORT).show();
  110.                 return true;
  111.             }
  112.         });
  113.         play_media.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
  114.             @Override
  115.             public void onCompletion(MediaPlayer mediaPlayer) {
  116.                 if(!play_media.isLooping()){
  117.                     try {
  118.                         mSeekbar.setProgress(0);
  119.                         play_media.reset();
  120.                         play_media.setDataSource(MainActivity.this, Uri.fromFile(list.get(mDrawerList.getCheckedItemPosition()+1).getFile_Dir()));
  121.                         play_media.prepare();
  122.                         int duration = play_media.getDuration() / 1000;
  123.                         int hours = getDurationHours(duration);
  124.                         int minutes = getDurationMinutes(duration,hours);
  125.                         int seconds = getDurationSecond(duration,hours,minutes);
  126.                         if(getDurationHours(duration) == 0){
  127.                             mDurationText.setText(minutes + ":" + seconds);
  128.                         }else{
  129.                             mDurationText.setText(hours + ":" + minutes + ":" + seconds);
  130.                         }
  131.                         mSeekbar.setMax(duration);
  132.                         //startThread();
  133.  
  134.                         //play_media.start();
  135.                         mDrawerList.setItemChecked(mDrawerList.getCheckedItemPosition()+1, true);
  136.                         Uri uri = Uri.fromFile(list.get(mDrawerList.getCheckedItemPosition()).getFile_Dir());
  137.                         MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
  138.                         mediaMetadataRetriever.setDataSource(MainActivity.this,uri);
  139.                         album_art_byte = mediaMetadataRetriever.getEmbeddedPicture();
  140.                         //set Data to the Views
  141.                         if(album_art_byte != null){
  142.                             bitmap = BitmapFactory.decodeByteArray(album_art_byte, 0, album_art_byte.length);
  143.                             if(bitmap != null){
  144.                                 bitmap = cropPicture(bitmap);
  145.                                 mMainImageView.setImageBitmap(bitmap);
  146.                             }
  147.                         }
  148.                         mTitleBarImageView.setImageBitmap(list.get(mDrawerList.getCheckedItemPosition()).getAlbum_Art());
  149.  
  150.                         mTitleBarTitleTextView.setText(list.get(mDrawerList.getCheckedItemPosition()).getTitle());
  151.                         mTitleBarArtistTextView.setText(list.get(mDrawerList.getCheckedItemPosition()).getArtist());
  152.                     } catch (IOException e) {
  153.                         e.printStackTrace();
  154.                     }
  155.                 }
  156.             }
  157.         });
  158.         mSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
  159.  
  160.             @Override
  161.             public void onStopTrackingTouch(SeekBar seekBar) {
  162.                 play_media.seekTo(seekBar.getProgress() * 1000);
  163.             }
  164.  
  165.             @Override
  166.             public void onStartTrackingTouch(SeekBar seekBar) {
  167.  
  168.             }
  169.  
  170.             @Override
  171.             public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
  172.                 int hours = 0;
  173.                 int minutes = 0;
  174.                 int seconds = 0;
  175.                 while (progress > 3600) {
  176.                     hours++;
  177.                     progress = progress - 3600;
  178.                 }
  179.                 while (progress > 60) {
  180.                     minutes++;
  181.                     progress = progress - 3600;
  182.                 }
  183.                 seconds = progress;
  184.                 if (hours == 0) {
  185.                     if(seconds<10){
  186.                         mCurrentPositionText.setText("" + minutes + ":" + "0" + seconds);
  187.                     }else{
  188.                         mCurrentPositionText.setText(minutes + ":" + seconds);
  189.                     }
  190.                 } else {
  191.                     if(seconds<10 && minutes<10){
  192.                         mCurrentPositionText.setText(hours + ":" + "0" + minutes + ":" + "0" + seconds);
  193.                     }else if(seconds<10){
  194.                         mCurrentPositionText.setText(hours + ":" + minutes + ":" + "0" + seconds);
  195.                     }else if(minutes<10){
  196.                         mCurrentPositionText.setText(hours + ":" + "0" + minutes + ":" + seconds);
  197.                     }else{
  198.                         mCurrentPositionText.setText(hours + ":" + minutes + ":" + seconds);
  199.                     }
  200.                 }
  201.  
  202.             }
  203.         });
  204.         // Request audio focus for playback
  205.         AudioManager.OnAudioFocusChangeListener afChangeListener = null;
  206.         int result = am.requestAudioFocus(afChangeListener,
  207.                 // Use the music stream.
  208.                 AudioManager.STREAM_MUSIC,
  209.                 // Request permanent focus.
  210.                 AudioManager.AUDIOFOCUS_GAIN);
  211.         //deserializeTrack();
  212.         setVolumeControlStream(AudioManager.STREAM_MUSIC);
  213.  
  214.  
  215.         mPlanetTitles = getResources().getStringArray(R.array.planets_array);
  216.  
  217.         boolean file_exist = deserializeTrack();
  218.         if(file_exist == false){
  219.             getMP3Files(this, Environment.getExternalStorageDirectory().getPath()+"/Music", list);
  220.             serializeTrack();
  221.         }
  222.         ImageButton button_play = (ImageButton) findViewById(R.id.play_button);
  223.         ImageButton button_next = (ImageButton) findViewById(R.id.next_button);
  224.         ImageButton button_prev = (ImageButton) findViewById(R.id.prev_button);
  225.  
  226.         button_play.setOnClickListener(this);
  227.         button_next.setOnClickListener(this);
  228.         button_prev.setOnClickListener(this);
  229.         StableArrayAdapter adapter = new StableArrayAdapter(this,R.layout.drawer_list_item,list);
  230.         // Set the adapter for the list view
  231.         mDrawerList.setAdapter(adapter);
  232.  
  233.         for (MusicListArray file : list) {
  234.             Log.i("MP3 File name", file.getTitle());
  235.         }
  236.  
  237.  
  238.         //MenuListAdapter adapter = new MenuListAdapter(this, values);
  239.        // ListAdapter adapter = new ArrayAdapter<String>(this,R.layout.drawer_list_item,list);
  240.         //Stable Array .. löschen wauns ned geht
  241.         //StableArrayAdapter adapter = new StableArrayAdapter(this,R.layout.drawer_list_item,list);
  242.         // Set the adapter for the list view
  243.         //mDrawerList.setAdapter(adapter);
  244.  
  245.         mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
  246.  
  247.                 // Set the list's click listener
  248.         mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
  249.  
  250.         mDrawerToggle = new ActionBarDrawerToggle(
  251.                 this,                  /* host Activity */
  252.                 mDrawerLayout,         /* DrawerLayout object */
  253.                 R.drawable.ic_drawer,  /* nav drawer image to replace 'Up' caret */
  254.                 R.string.drawer_open,  /* "open drawer" description for accessibility */
  255.                 R.string.drawer_close  /* "close drawer" description for accessibility */
  256.         ) {
  257.             public void onDrawerClosed(View view) {
  258.                 getActionBar().setTitle(mTitle);
  259.                 invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
  260.             }
  261.  
  262.             public void onDrawerOpened(View drawerView) {
  263.                 getActionBar().setTitle(mDrawerTitle);
  264.                 invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
  265.             }
  266.         };
  267.  
  268.  
  269.         mDrawerLayout.setDrawerListener(mDrawerToggle);
  270.         if (savedInstanceState == null) {
  271.             //getFragmentManager().beginTransaction()
  272.               //      .add(R.id.container, new PlaceholderFragment())
  273.                 //    .commit();
  274.         }
  275.  
  276.  
  277.     }
  278.     @Override
  279.     public void run() {
  280.         int currentPosition= 0;
  281.         int total = play_media.getDuration();
  282.  
  283.         while (play_media!=null && currentPosition<total) {
  284.             try {
  285.                 Thread.sleep(1000);
  286.                 currentPosition= play_media.getCurrentPosition();
  287.             } catch (InterruptedException e) {
  288.                 return;
  289.             } catch (Exception e) {
  290.                 return;
  291.             }
  292.             mSeekbar.setProgress(currentPosition / 1000);
  293.         }
  294.     }
  295.  
  296.  
  297.     protected void onStop(){
  298.         super.onStop();
  299.         System.out.println("Stop");
  300.         Toast.makeText(this,"Stopped",Toast.LENGTH_SHORT).show();
  301.         //serializeTrack();
  302.     }
  303.  
  304.     protected void onRestart(){
  305.         super.onRestart();
  306.         System.out.println("Restart");
  307.         Toast.makeText(this,"Restarted",Toast.LENGTH_SHORT).show();
  308.         //deserializeTrack();
  309.     }
  310.     protected void onDestroy(){
  311.         super.onDestroy();
  312.         System.out.println("Destroy");
  313.         Toast.makeText(this,"Destroyed",Toast.LENGTH_SHORT).show();
  314.         list.clear();
  315.         play_media.reset();
  316.         thread_update_seekbar.interrupt();
  317.         //serializeTrack();
  318.     }
  319.  
  320.  
  321.     public void serializeTrack(){
  322.         try {
  323.             File file = new File("List.bin");
  324.             FileOutputStream stream_out_file = new FileOutputStream(file);
  325.             ObjectOutputStream stream_out_object = new ObjectOutputStream(stream_out_file);
  326.             stream_out_object.writeObject(list);
  327.             stream_out_object.close();
  328.             stream_out_file.close();
  329.         } catch (IOException e) {
  330.             e.printStackTrace();
  331.         }
  332.     }
  333.  
  334.     public boolean deserializeTrack(){
  335.         File file = new File("List.bin");
  336.         if(file.exists()){
  337.             try {
  338.                 FileInputStream stream_in_file = new FileInputStream(file);
  339.                 ObjectInputStream stream_in_object = new ObjectInputStream(stream_in_file);
  340.                 list = (ArrayList<MusicListArray>) stream_in_object.readObject();
  341.                 stream_in_object.close();
  342.                 stream_in_file.close();
  343.             } catch (IOException e) {
  344.                 e.printStackTrace();
  345.             } catch (ClassNotFoundException e) {
  346.                 e.printStackTrace();
  347.             }finally {
  348.                 return true;
  349.             }
  350.         }else{
  351.             return false;
  352.         }
  353.     }
  354.  
  355.     private void getMP3Files(Context context, String directory,ArrayList<MusicListArray> mp3_list){
  356.  
  357.         MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
  358.         Uri uri;
  359.  
  360.         /*File[] files = Directory.listFiles(new MP3FileNameFilter());
  361.         files = Directory.listFiles();*/
  362.  
  363.         File folder = new File(directory);
  364.         for (File file : folder.listFiles()) {
  365.             if (file.isFile()) {
  366.                 if (file.getName().endsWith(".mp3") || file.getName().endsWith(".MP3")) {
  367.                     uri = Uri.fromFile(file);
  368.                     mediaMetadataRetriever.setDataSource(context,uri);
  369.                     String artist = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
  370.                     String title = file.getName();
  371.                     album_art_byte = mediaMetadataRetriever.getEmbeddedPicture();
  372.                     if(album_art_byte != null){
  373.                         bitmap = decodeSampledBitmapFromResource(album_art_byte,45,45);
  374.                     }else{
  375.                         bitmap = null;
  376.                     }
  377.                     /*if(album_art != null){
  378.                         //if(bitmap_art == null){
  379.                             bitmap = BitmapFactory.decodeByteArray(album_art, 0, album_art.length);
  380.                         //}
  381.                         //bitmap = bitmap_art;
  382.                     }else{
  383.                         //if(bitmap_no_art == null){
  384.                             bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_launcher);
  385.                         //}
  386.                         //bitmap = bitmap_no_art;
  387.                     }
  388.                     if(bitmap == null){
  389.                         bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_launcher);
  390.                     }*/
  391.                     if (title.indexOf(".") > 0)
  392.                         title = title.substring(0, title.lastIndexOf("."));
  393.                     if(artist == null){
  394.                         artist = getString(R.string.unknown_artist);
  395.                     }
  396.                     mp3_list.add(new MusicListArray(title,artist,file,bitmap));
  397.                 }
  398.             }else if(file.isDirectory()){
  399.                 if(i != 3){
  400.                     getMP3Files(context, file.getPath(), mp3_list);
  401.                     i++;
  402.                 }else{
  403.                     i=0;
  404.                 }
  405.             }
  406.         }
  407.         Collections.sort(mp3_list);
  408.  
  409.         /*for(int i=0;i<files.length;i++){
  410.             mp3_list.add(new MusicListArray(files[i].getName(),"Test",files[i]));
  411.         }*/
  412.         //return mp3_list;
  413.     }
  414.  
  415.  
  416.     @Override
  417.     public boolean onCreateOptionsMenu(Menu menu) {
  418.         MenuInflater inflater = getMenuInflater();
  419.         inflater.inflate(R.menu.main, menu);
  420.         return super.onCreateOptionsMenu(menu);
  421.     }
  422.  
  423.     public boolean onPrepareOptionsMenu(Menu menu) {
  424.         boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
  425.         menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
  426.         return super.onPrepareOptionsMenu(menu);
  427.     }
  428.     @Override
  429.     public boolean onOptionsItemSelected(MenuItem item) {
  430.         // Handle action bar item clicks here. The action bar will
  431.         // automatically handle clicks on the Home/Up button, so long
  432.         // as you specify a parent activity in AndroidManifest.xml.
  433.         //int id = item.getItemId();
  434.         //if (id == R.id.action_settings) return true;
  435.         //return super.onOptionsItemSelected(item);
  436.  
  437.         // Öffnet und schließt den Navigation Drawer bei Klick auf den Titel/das Icon in der ActionBar
  438.  
  439.         if (item.getItemId() == android.R.id.home) {
  440.             if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
  441.                 mDrawerLayout.closeDrawer(mDrawerList);
  442.             } else {
  443.                 mDrawerLayout.openDrawer(mDrawerList);
  444.             }
  445.         }
  446.  
  447.         // Gibt den ActionBar-Buttons Funktionen
  448.         switch (item.getItemId()) {
  449.             case R.id.action_settings:
  450.                 // Tu' etwas!
  451.                 return true;
  452.             default:
  453.                 return super.onOptionsItemSelected(item);
  454.         }
  455.     }
  456.  
  457.     @Override
  458.     public void onClick(View view) {
  459.         if(view.getId() == R.id.play_button){
  460.             if(play_media.isPlaying()){
  461.                 play_media.pause();
  462.                 ImageButton button_play = (ImageButton) findViewById(R.id.play_button);
  463.                 button_play.setImageBitmap(BitmapFactory.decodeResource(this.getResources(),R.drawable.ic_play));
  464.             }else{
  465.                 play_media.start();
  466.                 ImageButton button_play = (ImageButton) findViewById(R.id.play_button);
  467.                 button_play.setImageBitmap(BitmapFactory.decodeResource(this.getResources(),R.drawable.ic_pause));
  468.  
  469.             }
  470.         }else if(view.getId() == R.id.next_button){
  471.             try {
  472.                 mSeekbar.setProgress(0);
  473.                 play_media.reset();
  474.                 play_media.setDataSource(MainActivity.this, Uri.fromFile(list.get(mDrawerList.getCheckedItemPosition()+1).getFile_Dir()));
  475.                 play_media.prepare();
  476.                 int duration = play_media.getDuration() / 1000;
  477.                 int hours = getDurationHours(duration);
  478.                 int minutes = getDurationMinutes(duration,hours);
  479.                 int seconds = getDurationSecond(duration,hours,minutes);
  480.                 if(getDurationHours(duration) == 0){
  481.                     mDurationText.setText(minutes + ":" + seconds);
  482.                 }else{
  483.                     mDurationText.setText(hours + ":" + minutes + ":" + seconds);
  484.                 }
  485.                 mSeekbar.setMax(duration);
  486.                 //startThread();
  487.  
  488.                 //play_media.start();
  489.                 mDrawerList.setItemChecked(mDrawerList.getCheckedItemPosition()+1, true);
  490.                 Uri uri = Uri.fromFile(list.get(mDrawerList.getCheckedItemPosition()).getFile_Dir());
  491.                 MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
  492.                 mediaMetadataRetriever.setDataSource(MainActivity.this,uri);
  493.                 album_art_byte = mediaMetadataRetriever.getEmbeddedPicture();
  494.                 //set Data to the Views
  495.                 if(album_art_byte != null){
  496.                     bitmap = BitmapFactory.decodeByteArray(album_art_byte, 0, album_art_byte.length);
  497.                     if(bitmap != null){
  498.                         bitmap = cropPicture(bitmap);
  499.                         mMainImageView.setImageBitmap(bitmap);
  500.                     }
  501.                 }
  502.                 mTitleBarImageView.setImageBitmap(list.get(mDrawerList.getCheckedItemPosition()).getAlbum_Art());
  503.  
  504.                 mTitleBarTitleTextView.setText(list.get(mDrawerList.getCheckedItemPosition()).getTitle());
  505.                 mTitleBarArtistTextView.setText(list.get(mDrawerList.getCheckedItemPosition()).getArtist());
  506.             } catch (IOException e) {
  507.                 e.printStackTrace();
  508.             }
  509.         }else if(view.getId() == R.id.prev_button){
  510.             try {
  511.                 play_media.reset();
  512.                 play_media.setDataSource(MainActivity.this, Uri.fromFile(list.get(mDrawerList.getCheckedItemPosition()-1).getFile_Dir()));
  513.                 play_media.prepare();
  514.                 int duration = play_media.getDuration() / 1000;
  515.                 int hours = getDurationHours(duration);
  516.                 int minutes = getDurationMinutes(duration,hours);
  517.                 int seconds = getDurationSecond(duration,hours,minutes);
  518.                 if(getDurationHours(duration) == 0){
  519.                     mDurationText.setText(minutes + ":" + seconds);
  520.                 }else{
  521.                     mDurationText.setText(hours + ":" + minutes + ":" + seconds);
  522.                 }
  523.                 mSeekbar.setMax(duration);
  524.                 mSeekbar.setProgress(0);
  525.  
  526.                 //play_media.start();
  527.                 mDrawerList.setItemChecked(mDrawerList.getCheckedItemPosition()-1, true);
  528.                 Uri uri = Uri.fromFile(list.get(mDrawerList.getCheckedItemPosition()).getFile_Dir());
  529.                 MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
  530.                 mediaMetadataRetriever.setDataSource(MainActivity.this,uri);
  531.                 album_art_byte = mediaMetadataRetriever.getEmbeddedPicture();
  532.                 //set Data to the Views
  533.                 if(album_art_byte != null){
  534.                     bitmap = BitmapFactory.decodeByteArray(album_art_byte, 0, album_art_byte.length);
  535.                     if(bitmap != null){
  536.                         bitmap = cropPicture(bitmap);
  537.                         mMainImageView.setImageBitmap(bitmap);
  538.                     }
  539.                 }
  540.                 mTitleBarImageView.setImageBitmap(list.get(mDrawerList.getCheckedItemPosition()).getAlbum_Art());
  541.  
  542.                 mTitleBarTitleTextView.setText(list.get(mDrawerList.getCheckedItemPosition()).getTitle());
  543.                 mTitleBarArtistTextView.setText(list.get(mDrawerList.getCheckedItemPosition()).getArtist());
  544.             } catch (IOException e) {
  545.                 e.printStackTrace();
  546.             }
  547.         }
  548.  
  549.     }
  550.  
  551.     @Override
  552.     public void onPrepared(MediaPlayer mediaPlayer) {
  553.         play_media.start();
  554.     }
  555.  
  556.     /**
  557.      * A placeholder fragment containing a simple view.
  558.      */
  559.     public static class PlaceholderFragment extends Fragment {
  560.  
  561.         public PlaceholderFragment() {
  562.         }
  563.  
  564.         @Override
  565.         public View onCreateView(LayoutInflater inflater, ViewGroup container,
  566.                 Bundle savedInstanceState) {
  567.             View rootView = inflater.inflate(R.layout.drawer_list_item, container, false);
  568.             return rootView;
  569.         }
  570.     }
  571.  
  572.     private class DrawerItemClickListener implements android.widget.AdapterView.OnItemClickListener {
  573.  
  574.         Uri uri;
  575.         MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
  576.  
  577.  
  578.         @Override
  579.         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  580.  
  581.             try {
  582.  
  583.                 play_media.reset();
  584.                 play_media.setDataSource(MainActivity.this, Uri.fromFile(list.get(position).getFile_Dir()));
  585.                 play_media.prepare();
  586.                 int duration = play_media.getDuration() / 1000;
  587.                 int hours = getDurationHours(duration);
  588.                 int minutes = getDurationMinutes(duration,hours);
  589.                 int seconds = getDurationSecond(duration,hours,minutes);
  590.                 if(getDurationHours(duration) == 0){
  591.                     mDurationText.setText(minutes + ":" + seconds);
  592.                 }else{
  593.                     mDurationText.setText(hours + ":" + minutes + ":" + seconds);
  594.                 }
  595.                 mSeekbar.setProgress(0);
  596.                 mSeekbar.setMax(duration);
  597.                 startThread();
  598.                 //mRunnable.run();
  599.  
  600.  
  601.             } catch (IOException e) {
  602.                 e.printStackTrace();
  603.             }
  604.  
  605.             //Get Views
  606.             mMainImageView = (ImageView) findViewById(R.id.main_image);
  607.             mTitleBarImageView = (ImageView) findViewById(R.id.icon_titlebar);
  608.             mTitleBarTitleTextView = (TextView) findViewById(R.id.title_line_titlebar);
  609.             mTitleBarArtistTextView = (TextView) findViewById(R.id.artist_line_titlebar);
  610.             ImageButton play_button = (ImageButton) findViewById(R.id.play_button);
  611.  
  612.             uri = Uri.fromFile(list.get(position).getFile_Dir());
  613.             mediaMetadataRetriever.setDataSource(MainActivity.this,uri);
  614.             album_art_byte = mediaMetadataRetriever.getEmbeddedPicture();
  615.             //set Data to the Views
  616.             if(album_art_byte != null){
  617.                 bitmap = BitmapFactory.decodeByteArray(album_art_byte, 0, album_art_byte.length);
  618.                 if(bitmap != null){
  619.                     bitmap = cropPicture(bitmap);
  620.                     mMainImageView.setImageBitmap(bitmap);
  621.                 }
  622.             }
  623.             mTitleBarImageView.setImageBitmap(list.get(position).getAlbum_Art());
  624.  
  625.             //bitmap = list.get(position).getAlbum_Art();
  626.             //bitmap = Bitmap.createBitmap(bitmap,0,0,220,220);
  627.             mMainImageView.setImageBitmap(bitmap);
  628.             play_button.setImageBitmap(BitmapFactory.decodeResource(MainActivity.this.getResources(),R.drawable.ic_pause));
  629.             mTitleBarTitleTextView.setText(list.get(position).getTitle());
  630.             mTitleBarArtistTextView.setText(list.get(position).getArtist());
  631.  
  632.             mDrawerList.setItemChecked(position, true);
  633.             getActionBar().setTitle(mTitle);
  634.             //mDrawerLayout.closeDrawer(mDrawerList);
  635.         }
  636.     }
  637.     private void selectItem(int position) {
  638.  
  639.         // Highlight the selected item, update the title, and close the drawer
  640.         mDrawerList.setItemChecked(position, true);
  641.         setTitle(mPlanetTitles[position]);
  642.         mDrawerLayout.closeDrawer(mDrawerList);
  643.     }
  644.  
  645. //Stable ArrayAdapter .. löschen wauns ned geht
  646.     private class StableArrayAdapter extends ArrayAdapter<MusicListArray> {
  647.  
  648.         HashMap<MusicListArray, Integer> mIdMap = new HashMap<MusicListArray, Integer>();
  649.         Context context;
  650.         ArrayList<MusicListArray> mArrayTrackList;
  651.  
  652.         MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
  653.         Uri uri;
  654.  
  655.         //ArrayList einfüügen stott List!!!
  656.         public StableArrayAdapter(Context context, int textViewResourceId,List<MusicListArray> objects) {
  657.             super(context, textViewResourceId, objects);
  658.             this.context = context;
  659.               for (int i = 0; i < objects.size(); ++i) {
  660.                   mIdMap.put(objects.get(i), i);
  661.               }
  662.             mArrayTrackList = (ArrayList) objects;
  663.         }
  664.  
  665.         @Override
  666.         public View getView(int position, View convertView, ViewGroup parent){
  667.             // 1. Create inflater
  668.             LayoutInflater inflater = (LayoutInflater) context
  669.                     .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  670.  
  671.             // 2. Get rowView from inflater
  672.             View rowView = inflater.inflate(R.layout.drawer_list_item, parent, false);
  673.  
  674.             // 3. Get the two text view from the rowView
  675.             TextView titleView = (TextView) rowView.findViewById(R.id.title_line);
  676.             TextView artistView = (TextView) rowView.findViewById(R.id.artist_line);
  677.             ImageView album_art = (ImageView) rowView.findViewById(R.id.icon);
  678.  
  679.             // 4. Set the text for textView
  680.             titleView.setText(mArrayTrackList.get(position).getTitle());
  681.             artistView.setText(mArrayTrackList.get(position).getArtist());
  682.  
  683.             uri = Uri.fromFile(mArrayTrackList.get(position).getFile_Dir());
  684.             mediaMetadataRetriever.setDataSource(context, uri);
  685.             album_art_byte = mediaMetadataRetriever.getEmbeddedPicture();
  686.  
  687.             if(album_art_byte != null){
  688.                 bitmap = decodeSampledBitmapFromResource(album_art_byte, 45, 45);
  689.                 if(bitmap != null){
  690.                     album_art.setImageBitmap(bitmap);
  691.                 }
  692.             }
  693.  
  694.  
  695.             return rowView;
  696.         }
  697.  
  698.  
  699.  
  700.         @Override
  701.         public long getItemId(int position) {
  702.             MusicListArray item = getItem(position);
  703.             return mIdMap.get(item);
  704.         }
  705.  
  706.         @Override
  707.         public boolean hasStableIds() {
  708.             return true;
  709.         }
  710.  
  711.     }
  712.  
  713.     public int calculateInSampleSize(
  714.             BitmapFactory.Options options, int reqWidth, int reqHeight) {
  715.         // Raw height and width of image
  716.         final int height = options.outHeight;
  717.         final int width = options.outWidth;
  718.         int inSampleSize = 1;
  719.  
  720.         if (height > reqHeight || width > reqWidth) {
  721.  
  722.             final int halfHeight = height / 2;
  723.             final int halfWidth = width / 2;
  724.  
  725.             // Calculate the largest inSampleSize value that is a power of 2 and keeps both
  726.             // height and width larger than the requested height and width.
  727.             while ((halfHeight / inSampleSize) > reqHeight
  728.                     && (halfWidth / inSampleSize) > reqWidth) {
  729.                 inSampleSize *= 2;
  730.             }
  731.         }
  732.  
  733.         return inSampleSize;
  734.     }
  735.  
  736.     public  Bitmap decodeSampledBitmapFromResource(byte[] image_stream,
  737.                                                    int reqWidth, int reqHeight) {
  738.  
  739.         Bitmap return_bitmap;
  740.         // First decode with inJustDecodeBounds=true to check dimensions
  741.         BitmapFactory.Options options = new BitmapFactory.Options();
  742.         options.inJustDecodeBounds = true;
  743.         BitmapFactory.decodeByteArray(image_stream, 0, image_stream.length, options);
  744.  
  745.         // Calculate inSampleSize
  746.         options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
  747.  
  748.         // Decode bitmap with inSampleSize set
  749.         options.inJustDecodeBounds = false;
  750.         return_bitmap = BitmapFactory.decodeByteArray(image_stream, 0, image_stream.length, options);
  751.         if(return_bitmap != null){
  752.             return cropPicture(return_bitmap);
  753.         }else{
  754.             return null;
  755.         }
  756.  
  757.     }
  758.     public Bitmap cropPicture(Bitmap bitmap){
  759.         if (bitmap.getWidth() >= bitmap.getHeight()){
  760.  
  761.             bitmap = Bitmap.createBitmap(
  762.                     bitmap,
  763.                     bitmap.getWidth()/2 - bitmap.getHeight()/2,
  764.                     0,
  765.                     bitmap.getHeight(),
  766.                     bitmap.getHeight()
  767.             );
  768.  
  769.         }else{
  770.  
  771.             bitmap = Bitmap.createBitmap(
  772.                     bitmap,
  773.                     0,
  774.                     bitmap.getHeight()/2 - bitmap.getWidth()/2,
  775.                     bitmap.getWidth(),
  776.                     bitmap.getWidth()
  777.             );
  778.         }
  779.         return bitmap;
  780.     }
  781.     public void startThread(){
  782.         thread_update_seekbar = new Thread(this);
  783.         thread_update_seekbar.start();
  784.     }
  785.  
  786.     public int getDurationHours(int progress){
  787.         int hours = 0;
  788.         while(progress > 3600){
  789.             hours++;
  790.             progress =progress - 3600;
  791.         }
  792.         return hours;
  793.     }
  794.     public int getDurationMinutes(int progress,int hours){
  795.         int minutes = 0;
  796.         progress = progress - (hours*3600);
  797.         while(progress > 60){
  798.             minutes++;
  799.             progress =progress - 60;
  800.         }
  801.         return minutes;
  802.     }
  803.     public int getDurationSecond(int progress,int hours, int minutes){
  804.         int seconds = 0;
  805.         seconds = progress - (hours*3600) - (minutes*60);
  806.         return seconds;
  807.     }
  808. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement