{"id":212125,"date":"2014-02-10T19:29:03","date_gmt":"2014-02-10T15:29:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=212125"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=212125","title":{"rendered":"<span class=\"post_title\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0430\u043b\u0435\u0440\u0435\u0438 \u0430\u043b\u044c\u0431\u043e\u043c\u043e\u0432<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0431\u043b\u043e\u0436\u0435\u043a \u0434\u043b\u044f \u0430\u043b\u044c\u0431\u043e\u043c\u043e\u0432.<br \/>  \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u043a\u043e\u0434\u0435, \u0442\u0430\u043a \u0438 \u0432 \u0432\u0438\u0434\u0435 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0439 \u043a \u043a\u043e\u043c\u043c\u0438\u0442\u0430\u043c. <br \/>  \u0411\u0443\u0434\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/p>\n<p>  <a name=\"habracut\"><\/a><\/p>\n<p>  \u0417\u0430\u0434\u0430\u0447\u0430:<br \/>   \u2014 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u043b\u044c\u0431\u043e\u043c\u043e\u0432<br \/>   \u2014 \u041d\u0430\u0439\u0442\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043e\u0431\u043b\u043e\u0436\u043a\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0430\u043b\u044c\u0431\u043e\u043c\u0430<br \/>   \u2014 \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0445 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043b\u043e\u0436\u043a\u0438 \u0430\u043b\u044c\u0431\u043e\u043c\u043e\u0432 \u0432\u0438\u0434\u0435\u043b \u043a\u0430\u043a \u043d\u0430\u0448 \u043f\u043b\u0435\u0435\u0440, \u0442\u0430\u043a \u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435.<\/p>\n<p>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/fac00e6f04133172ac9d2bf1bc48ea4c0f80f885\">118: \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0442\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u043b\u043e\u0436\u043a\u0438 \u0430\u043b\u044c\u0431\u043e\u043c\u043e\u0432<\/a><\/p>\n<p>   \u2014 \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0442\u0438-\u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0443<br \/>   \u2014 \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u043c\u0435\u043d\u044e \u0432 actionbar, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0438\u0437 \u00ab\u043a\u043e\u043b\u0435\u0441\u0438\u043a\u0430\u00bb \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c. <br \/>   \u2014 \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043c\u0435\u043d\u044e \u2014 \u00ab\u043a\u043e\u043b\u0435\u0441\u0438\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043a\u0440\u0443\u0442\u0438\u0442\u044c\u0441\u044f\u00bb (\u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0431\u0430\u0440).<br \/>   \u2014 \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 ActionBar background<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435, \u044f \u0431\u0443\u0434\u0443 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043a\u043e\u043c\u043c\u0438\u0442\u044b, \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u043c\u0438. \u0422\u0430\u043a \u043a\u0430\u043a \u0438\u043d\u0430\u0447\u0435 \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043e\u0431\u044a\u0451\u043c\u043d\u0430.  <\/p>\n<pre><code class=\"java\">\/**  * Created by recoil on 26.01.14.  *\/ public class ActArtworks extends Activity {      private AQuery aq;     private Menu optionsMenu;     private boolean refreshing = true;     private Activity activity;      public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         \/\/\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u0431\u044d\u043a\u0433\u0440\u0430\u0443\u043d\u0434 \u0430\u043a\u0448\u0435\u043d\u0431\u0430\u0440\u0430         getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.ab_bgr));         \/\/\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0443 \u043d\u0430\u0437\u0430\u0434         getActionBar().setDisplayHomeAsUpEnabled(true);          activity = this;         aq = new AQuery(activity);     }      @Override     public boolean onCreateOptionsMenu(Menu menu) {         this.optionsMenu = menu;         \/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043c\u0435\u043d\u044e \u0432 \u0430\u043a\u0448\u0435\u043d\u0431\u0430\u0440\u0435         MenuInflater inflater = getMenuInflater();         inflater.inflate(R.menu.artwork, menu);          \/\/\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043c\u0435\u043d\u044e \u0441\u043e\u0437\u0434\u0430\u043d\u043e - \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435         update();         return super.onCreateOptionsMenu(menu);     }      public void update() {          AQUtility.debug(&quot;Update progress&quot;);         \/\/\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441 \u0432 &quot;\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f&quot;         refreshing = true;         \/\/\u0440\u0430\u0441\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043b\u0435\u0441\u0435\u043a\u043e         setRefreshActionButtonState();     }      @Override     public boolean onOptionsItemSelected(MenuItem item) {         switch (item.getItemId()) {             case android.R.id.home:                 \/\/\u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0430\u043a\u0442\u0438\u0432\u0438\u0442\u0438 \u043d\u0430 \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u0434\u043e\u043c\u043e\u0439                 finish();                 return true;         }         return super.onOptionsItemSelected(item);     }      public void setRefreshActionButtonState() {          \/\/\u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f - \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c \u0438\u043a\u043e\u043d\u043a\u0443 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430 \u043a\u0440\u0443\u0442\u044f\u0449\u0438\u0439\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0431\u0430\u0440         if (optionsMenu != null) {             final MenuItem refreshItem = optionsMenu                     .findItem(R.id.menu_refresh);             if (refreshItem != null) {                 if (refreshing) {                     refreshItem.setActionView(R.layout.actionbar_indeterminate_progress);                 } else {                     refreshItem.setActionView(null);                 }             }         }     } } <\/code><\/pre>\n<p>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/9cd35d10fe45376f1f711583b16b88a8fd1f33c7\">118: \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0441 fillmediastoretracks \u0434\u043b\u044f \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0442\u0440\u0435\u043a\u043e\u0432 \u0438\u0437 \u043c\u0435\u0434\u0438\u0430\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/a><\/p>\n<p>   \u2014 \u041a\u043b\u0430\u0441\u0441 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b <a href=\"http:\/\/developer.android.com\/reference\/android\/provider\/MediaStore.html\">MediaStore<\/a> \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. <br \/>  \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441, \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u0424\u0430\u0439\u043b\u044b, \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u043f\u043e\u0434 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u00abmedia\u00bb \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. <br \/>   \u2014 \u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0442\u0440\u0435\u043a\u043e\u0432 \u2014 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 ArrayList <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/src\/374969978e81402ac6a06510ff7df488c63071c6\/src\/ru\/recoilme\/freeamp\/FileUtils.java?at=master\">\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f<\/a> \u043a\u0430\u043a \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442.<\/p>\n<p>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/ce53da0356def521bc416730ed5f3ee893c8e7f1\">118: \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0442\u0440\u0435\u043a\u0438<\/a><\/p>\n<p>   \u2014 \u0421\u043f\u0435\u0440\u0432\u0430 \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c ArrayList \u0432\u0441\u0435\u0445 \u0442\u0440\u0435\u043a\u043e\u0432, \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0432 \u0435\u0433\u043e \u0438\u0437 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<br \/>   \u2014 \u0415\u0441\u043b\u0438 \u00absave\u00bb&#8217;\u0430 \u2014 \u043d\u0435\u0442, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0440\u0435\u043a\u043e\u0432 \u0438 \u00ab\u0441\u044d\u0439\u0432\u00bb<\/p>\n<p>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/0bd00eae2c12e3f160a0934866784c9cb347dccb\">118: \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u043b\u044c\u0431\u043e\u043c\u043e\u0432<\/a><\/p>\n<p>   \u2014 \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c GridView \u0432 activity<br \/>   \u2014 \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0430\u0434\u0430\u043f\u0442\u0435\u0440, \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445<br \/>   \u2014 \u0412 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c getView, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f<br \/>   \u2014 \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0439 \u0430\u043b\u044c\u0431\u043e\u043c\u043e\u0432, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0430\u043d\u0434\u0440\u043e\u0438\u0434\u0443<\/p>\n<p>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/b8af45a373bfbca7fb97e6f12e56bccf95b841a0\">118: \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u0434\u0443\u0431\u043b\u0438 \u0430\u043b\u044c\u0431\u043e\u043c\u043e\u0432<\/a><\/p>\n<p>   \u2014 \u0421\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043b\u0438\u0441\u0442 \u0442\u0440\u0435\u043a\u043e\u0432 \u043f\u043e \u0430\u043b\u044c\u0431\u043e\u043c\u0443.<br \/>   \u2014 \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440, \u0438 \u0438\u0434\u0435\u043c \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443. \u041f\u0440\u0438 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0430\u043b\u044c\u0431\u043e\u043c\u0430 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u2014 \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430.<\/p>\n<p>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/a56723ed5003a1812702b9c104c7fb19eab4c240\"> 118: \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 \u0430\u043d\u0434\u0440\u043e\u0438\u0434 8+ (\u0443\u0444!) <\/a><\/p>\n<p>   \u2014 \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 <a href=\"http:\/\/developer.android.com\/tools\/support-library\/features.html\">appcompat<\/a><br \/>  -\u041f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0435 \u043c\u0435\u043d\u044e \u2014 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0432\u043e\u044e \u0441\u0445\u0435\u043c\u0443 \u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043d\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0443\u043d\u043a\u0442 \u043c\u0435\u043d\u044e  <\/p>\n<pre><code class=\"java\">&lt;menu xmlns:android=&quot;http:\/\/schemas.android.com\/apk\/res\/android&quot;       xmlns:FreeAmp=&quot;http:\/\/schemas.android.com\/apk\/res-auto&quot;&gt;     &lt;item android:id=&quot;@+id\/menu_refresh&quot;           android:icon=&quot;@drawable\/ic_action_refresh&quot;           android:title=&quot;&quot;           android:alphabeticShortcut=&quot;r&quot;           android:orderInCategory=&quot;1&quot;           FreeAmp:showAsAction=&quot;always&quot; \/&gt;  &lt;\/menu&gt; <\/code><\/pre>\n<p>   \u2014 \u041d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u0441\u044f \u043e\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0441\u0442\u0438\u043b\u044f   <\/p>\n<pre><code class=\"java\">&lt;style name=&quot;theme&quot; parent=&quot;@style\/Theme.AppCompat&quot;&gt; <\/code><\/pre>\n<p>   \u2014 \u0412\u0441\u0435 activity \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u043e\u0442 ActionBarActivity<br \/>   \u2014 \u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0435\u043d\u044e\u0438\u0442\u0435\u043c\u043e\u0432  <\/p>\n<pre><code class=\"java\">-                    refreshItem.setActionView(R.layout.actionbar_indeterminate_progress); +                    MenuItemCompat.setActionView(refreshItem, R.layout.actionbar_indeterminate_progress); <\/code><\/pre>\n<p>   \u2014 \u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 ListPopupWindow \u2014 \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438<\/p>\n<p>  \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0436\u043a\u043e \u043e\u0442\u0432\u043b\u0435\u0447\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u0430\u0431\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439 (\u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u0430\u0433\u0438)<br \/>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/a7d3401987a790991295319da1d51e883b6c3153\">118: \u043d\u043e\u0442\u0438\u0444\u0438\u043a\u0435\u0439\u0448\u0435\u043d \u0431\u044d\u043a\u0433\u0440\u0430\u0443\u043d\u0434<\/a><br \/>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/29f75e20b26e6bbff6e998c3bac8bbd6414f5c1f\">118: ape \u0431\u0435\u0437 \u0442\u0435\u0433\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 ape<\/a><br \/>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/882bfe637cb71122b2b209869827f05e2576f5ac\">118: \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 .opus<\/a><\/p>\n<p>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/9db50a11673eb8849892fd3f7b528cf43f532fcb\">119: \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 curl<\/a><\/p>\n<p>   \u2014 <a href=\"https:\/\/github.com\/liudongmiao\/curl-android\">curl for android<\/a><br \/>  libcurl.so size:<br \/>   (default is ftp, https with ares)<br \/>   https: ~169K (including http, https)<br \/>   ares: ~28K (adding to https, with ares support)<br \/>   ipv6: ~0K (no extra size)<br \/>   +full: ~278K (all protocols, with ares)<br \/>  \u042d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043c\u0435\u043b\u043e\u0435 \u0438 \u0432\u043e \u043c\u043d\u043e\u0433\u043e\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043a\u0430\u043a \u0438 \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u0434\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u0430, \u0442\u0430\u043a \u0438 \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438. \u0422\u0430\u043a \u043a\u0430\u043a \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043b\u0435\u0435\u0440 \u043f\u043e\u0434 \u0432\u0441\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u2014 \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0431\u0443\u044e \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0412\u044b\u0439\u0434\u0435\u0442 \u043b\u0438 \u0438\u0437 curla \u0442\u043e\u043b\u043a \u2014 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c.<\/p>\n<p>  \u041e\u043f\u044f\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u0441\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0438:<br \/>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/b596520d43670103fc7f3ad3fc4ebac388f26b86\">119: set ringtone<\/a><\/p>\n<p>   \u2014 \u041c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0442\u0440\u0435\u043a\u0430 \u043a\u0430\u043a \u0440\u0438\u043d\u0433\u0442\u043e\u043d (\u0432\u044b\u0434\u0440\u0430\u043d \u0438\u0437 \u0441\u043e\u0440\u0446\u043e\u0432).<\/p>\n<p>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/e2fdd372b6ae47f71cccdfef78555e7831720090#chg-src\/ru\/recoilme\/freeamp\/GetHttpData.java\">119: easy curl request<\/a><\/p>\n<p>   \u2014 \u041a\u043b\u0430\u0441\u0441 \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 curl. \u041f\u043e\u043a\u0430 \u0432\u0441\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0430\u0441\u043a\u0435\u0442\u0438\u0447\u043d\u043e. \u041d\u0430 \u0432\u0445\u043e\u0434\u0435 url \u2014 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0430\u0439\u0442\u043e\u0432 (ByteArrayOutputStream). \u0425\u043e\u0447\u0435\u0448\u044c \u2014 \u0434\u0435\u043b\u0430\u0439 \u0438\u0437 \u043d\u0435\u0433\u043e \u0441\u0442\u0440\u043e\u043a\u0430, \u0430 \u043d\u0435 \u0445\u043e\u0447\u0435\u0448\u044c \u2014 \u0434\u0435\u043b\u0430\u0439 bitmap. \u0418\u043b\u0438 \u0435\u0449\u0435 \u0447\u0442\u043e \u0442\u044c.<\/p>\n<p>  \u041f\u0440\u0438\u0448\u043b\u0438 \u043b\u044e\u0434\u0438 \u0438 \u043d\u0430\u0447\u0430\u043b\u0438 \u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/a4a07ac28b39d1efd6f019a771672b261b923313\">\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 sd cart<\/a><\/p>\n<p>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/df18ed3a6087e1317b35576f04c0a519065d25ad\">121: \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u0430\u043b\u044c\u0431\u0443\u043c\u0430\u0440\u0442 \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0433\u0440\u0438\u0434 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0430\u043b\u044c\u0431\u043e\u043c\u043e\u0432<\/a><\/p>\n<p>   \u2014 \u041e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u0431\u043b\u043e\u0436\u0435\u043a \u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443<br \/>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/5f4179c5a8e077b33bf87745a4aa880438b25291\">121: \u0433\u0435\u043d\u0435\u0440\u0438\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0434\u043b\u044f \u0433\u0440\u0438\u0434\u0432\u044c\u044e<\/a><\/p>\n<p>   \u2014 \u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c json \u0441 \u043e\u0431\u043b\u043e\u0436\u043a\u043e\u0439 \u0430\u043b\u044c\u0431\u043e\u043c\u0430 \u0441 last.fm \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u0435\u0440\u0442\u043a\u0443 \u0432\u043e\u043a\u0440\u0443\u0433 curl  <\/p>\n<pre><code class=\"java\">                     String url = String.format(&quot;http:\/\/ws.audioscrobbler.com\/2.0\/?method=album.getinfo&api_key=0cb75104931acd7f44f571ed12cff105&artist=%s&album=%s&format=json&quot;, Uri.encode(track.getArtist()),Uri.encode(currentAlbum));                      getHttpData = new GetHttpData();                      getHttpData.setUrl(url);                      getHttpData.request();                      String result = new String(getHttpData.getByteArray()); <\/code><\/pre>\n<p>   \u2014 \u041f\u0430\u0440\u0441\u0438\u043c \u043e\u0442\u0432\u0435\u0442  <\/p>\n<pre><code class=\"java\">JSONObject jsonObject = new JSONObject(result);                             jsonObject = jsonObject.getJSONObject(&quot;album&quot;);                             JSONArray image = jsonObject.getJSONArray(&quot;image&quot;);                             for (int i=0;i&lt;image.length();i++) {                                 jsonObject = image.getJSONObject(i);                                 if (jsonObject.getString(&quot;size&quot;).equals(&quot;extralarge&quot;)) {                                     albumArtImageLink = Uri.decode(jsonObject.getString(&quot;#text&quot;));                                      AQUtility.debug(track.getArtist()+&quot;:&quot;+currentAlbum,albumArtImageLink);                                 }                             } <\/code><\/pre>\n<p>   \u2014 \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443  <\/p>\n<pre><code class=\"java\">\/\/download image                                 getHttpData = new GetHttpData();                                 getHttpData.setUrl(albumArtImageLink);                                 getHttpData.request();                                  ContentResolver res = activity.getContentResolver();                                 Bitmap bm = BitmapFactory.decodeByteArray(getHttpData.getByteArray(),0,getHttpData.getByteArray().length); <\/code><\/pre>\n<p>   \u2014 \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 (\u043f\u043e\u0434\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445)<\/p>\n<pre><code class=\"java\">\/\/ Put the newly found artwork in the database.                                     \/\/ Note that this shouldn't be done for the &quot;unknown&quot; album,                                     \/\/ but if this method is called correctly, that won't happen.                                      \/\/ first write it somewhere                                     String file = Environment.getExternalStorageDirectory()                                             + &quot;\/albumthumbs\/&quot; + String.valueOf(System.currentTimeMillis());                                     if (FileUtils.ensureFileExists(file)) {                                         try {                                             OutputStream outstream = new FileOutputStream(file);                                             if (bm.getConfig() == null) {                                                 bm = bm.copy(Bitmap.Config.RGB_565, false);                                                 if (bm == null) {                                                     \/\/return getDefaultArtwork(context);                                                 }                                             }                                             boolean success = bm.compress(Bitmap.CompressFormat.JPEG, 75, outstream);                                             outstream.close();                                             if (success) {                                                 ContentValues values = new ContentValues();                                                 values.put(&quot;album_id&quot;, track.getAlbumId());                                                 values.put(&quot;_data&quot;, file);                                                 Uri newuri = res.insert(MediaUtils.sArtworkUri, values);                                                 if (newuri == null) {                                                     \/\/ Failed to insert in to the database. The most likely                                                     \/\/ cause of this is that the item already existed in the                                                     \/\/ database, and the most likely cause of that is that                                                     \/\/ the album was scanned before, but the user deleted the                                                     \/\/ album art from the sd card.                                                     \/\/ We can ignore that case here, since the media provider                                                     \/\/ will regenerate the album art for those entries when                                                     \/\/ it detects this.                                                     success = false;                                                 }                                             }                                             if (!success) {                                                 File f = new File(file);                                                 f.delete();                                                 iterator.remove();                                             }                                         } catch (FileNotFoundException e) {                                             AQUtility.debug( &quot;error creating file&quot;, e);                                         } catch (IOException e) {                                             AQUtility.debug( &quot;error creating file&quot;, e);                                         }                                     } <\/code><\/pre>\n<p>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/905ccd8141664d477fe0fc9db3419c7ffdb58ffb\">121: out of memory<\/a><\/p>\n<p>   \u2014 \u0421\u043a\u0440\u043e\u043b\u0438\u043c grid \u0432\u0432\u0435\u0440\u0445 \u0432\u043d\u0438\u0437 \u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u043c \u0434\u0432\u0435 \u0432\u0435\u0449\u0438:<br \/>  1. \u0416\u0443\u0442\u043a\u0438\u0435 \u043b\u0430\u0433\u0438 (\u0432\u0441\u0435 \u0432\u0435\u0440\u043d\u043e, \u043d\u0430\u0434\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c)<br \/>  2. out of memory (\u0442\u043e\u0436\u0435 \u0432\u0435\u0440\u043d\u043e, \u043f\u0440\u0430\u0432\u0434\u0430 \u0441\u043b\u043e\u0432\u0438\u043b\u0438 \u0447\u0443\u0442\u044c \u0440\u0430\u043d\u044c\u0448\u0435 \u0447\u0435\u043c \u043e\u0436\u0438\u0434\u0430\u043b\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u0441\u0432\u043e\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u0437 \u0441\u043e\u0440\u0446\u043e\u0432 \u043a\u043e\u0434 \u0432\u043a\u0440\u0430\u043b\u0441\u044f \u0441\u044e\u0440\u043f\u0440\u0438\u0437)<\/p>\n<p>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/8d5a02cc3d4e75ff2e120c33eecbe00be498eb32\">121: LRU Cashe<\/a><\/p>\n<p>   \u2014 \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (http:\/\/developer.android.com\/training\/displaying-bitmaps\/cache-bitmap.html)<\/p>\n<pre><code class=\"java\">\/\/\u0421\u043e\u0437\u0434\u0430\u0435\u043c LruCache: http:\/\/developer.android.com\/training\/displaying-bitmaps\/cache-bitmap.html +    int cacheSize = 20 * 360000; \/\/ &lt;7MiB = 300width * 300heigth * 4bytesperpixel * 20images +    LruCache bitmapCache = new LruCache(cacheSize) { +        protected int sizeOf(int key, Bitmap value) { +            return value.getRowBytes() * value.getHeight();\/\/\u0437\u0434\u0435\u0441\u044c \u043f\u043e \u0447\u0435\u0441\u043d\u043e\u043a\u0443 \u0441\u0447\u0438\u0442\u0430\u0435\u043c +        } +    }; + +    public void addBitmapToMemoryCache(int key, Bitmap bitmap) { +        synchronized (bitmapCache) { +            if (getBitmapFromMemCache(key) == null) { +                bitmapCache.put(key, bitmap); +            } +        } +    } +  +    public Bitmap getBitmapFromMemCache(int key) { +        return (Bitmap) bitmapCache.get(key); +    } <\/code><\/pre>\n<p>   \u2014 \u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438\u0437 \u043a\u0435\u0448\u0430, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432 \u043a\u0435\u0448 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435<\/p>\n<p>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/8e34322b011d0bac4bea15bbd5a13fa889a4cf6b\">121: \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e<\/a><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u044e\u0449\u0438\u0439 \u043a\u0435\u0448 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0438 \u0434\u0432\u0435 \u0432\u0435\u0449\u0438:<br \/>  1. \u041f\u0440\u043e\u043f\u0430\u043b out of memory (\u0447\u0442\u043e \u043b\u043e\u0433\u0438\u0447\u043d\u043e)<br \/>  2. \u041d\u043e \u0442\u043e\u0440\u043c\u043e\u0437\u0430 \u043f\u0440\u0438 \u0441\u043a\u0440\u043e\u043b\u043b\u0435 \u0442\u043e \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c<\/p>\n<p>   \u2014 \u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e<\/p>\n<p>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/ea697c12e281af14d33f2849a8b35b5405d4912d\">121: onScrollStateChanged, onConfigurationChanged<\/a><\/p>\n<p>   \u2014 \u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443, \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u00ab\u043a\u0430\u0442\u043d\u0443\u043b\u00bb \u0441\u043a\u0440\u043e\u043b\u043b \u0438 \u043e\u043d \u00ab\u043f\u0430\u0440\u0438\u0442\u00bb \u043f\u043e \u0438\u043d\u0435\u0440\u0446\u0438\u0438<\/p>\n<p>   \u2014 \u041f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/p>\n<pre><code class=\"java\">void applyAdapter() {         if (tracks == null) return;         adapter = new AdpArtworks(activity,tracks);         int iDisplayWidth = getResources().getDisplayMetrics().widthPixels ;         int numColumns = (iDisplayWidth \/ 310);         gridView.setColumnWidth( (iDisplayWidth \/ numColumns) );         gridView.setNumColumns(numColumns);         gridView.setStretchMode( GridView.NO_STRETCH ) ;         gridView.setAdapter(adapter);         gridView.setOnScrollListener(new AbsListView.OnScrollListener() {             @Override             public void onScrollStateChanged(AbsListView view, int scrollState) {                 adapter.setScrollState(scrollState);                 if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {                     adapter.notifyDataSetChanged();                 }             }              @Override             public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {              }         });     } <\/code><\/pre>\n<p>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/36e4e86c24bd77a6e49f45bb0c3d4b30b5dc87bb\">121: convert drawable 2 bitmap, update<\/a><\/p>\n<p>   \u2014 \u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c xml placeholder&#8217;\u0430 \u0432 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435<br \/>   \u2014 \u0412\u0435\u0448\u0430\u0435\u043c \u0432\u044b\u0437\u043e\u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043a\u043b\u0438\u043a \u043f\u043e \u00ab\u043a\u043e\u043b\u0435\u0441\u0438\u043a\u0443\u00bb \u0432 \u043c\u0435\u043d\u044e<\/p>\n<pre><code class=\"java\">+        final Drawable imgBgr = activity.getResources().getDrawable(R.drawable.row_bgr); +        final Bitmap bitmap = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888); +        Canvas canvas = new Canvas(bitmap); +        imgBgr.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); +        imgBgr.draw(canvas); +        this.placeHolder = bitmap; <\/code><\/pre>\n<p>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/ffb27cc6321efd74b8b1870a10f45c3f1fc59199\">121: \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438<\/a><br \/>  <a href=\"https:\/\/bitbucket.org\/recoilme\/freeamp\/commits\/374969978e81402ac6a06510ff7df488c63071c6\">121: \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435<\/a><\/p>\n<p>   \u2014 \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c progress \u0434\u043b\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0446\u0438\u0438 \u0445\u043e\u0434\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u0430\u043b\u044c\u0431\u0443\u043c\u0430\u0440\u0442\u043e\u0432.<\/p>\n<p>  \u0410 \u0432\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0443\u0442 \u0441\u043b\u0430\u0439\u0434\u044b!<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/alpha.hstor.org\/files\/e30\/a0c\/6e2\/e30a0c6e2469406a98f7938c4eacdffc.png\" alt=\"image\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/files\/8ef\/959\/742\/8ef9597424ed46518c483c1f94516753.png\" alt=\"image\"\/>    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/company\/freeamp\/blog\/212125\/\"> http:\/\/habrahabr.ru\/company\/freeamp\/blog\/212125\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0431\u043b\u043e\u0436\u0435\u043a \u0434\u043b\u044f \u0430\u043b\u044c\u0431\u043e\u043c\u043e\u0432.<br \/>  \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u043a\u043e\u0434\u0435, \u0442\u0430\u043a \u0438 \u0432 \u0432\u0438\u0434\u0435 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0439 \u043a \u043a\u043e\u043c\u043c\u0438\u0442\u0430\u043c. <br \/>  \u0411\u0443\u0434\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-212125","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/212125","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=212125"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/212125\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=212125"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=212125"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=212125"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}