/* This file is part of Subsonic. Subsonic is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Subsonic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Subsonic. If not, see <http://www.gnu.org/licenses/>. Copyright 2015 (C) Scott Jackson */ package github.daneren2005.dsub.view; import android.content.Context; import android.content.SharedPreferences; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; import java.util.ArrayList; import github.daneren2005.dsub.R; import github.daneren2005.dsub.domain.MusicDirectory; import github.daneren2005.dsub.service.MusicService; import github.daneren2005.dsub.service.MusicServiceFactory; import github.daneren2005.dsub.util.Constants; import github.daneren2005.dsub.util.FileUtil; import github.daneren2005.dsub.util.Util; public class AlbumListCountView extends UpdateView2<Integer, Void> { private final String TAG = AlbumListCountView.class.getSimpleName(); private TextView titleView; private TextView countView; private int startCount; private int count = 0; public AlbumListCountView(Context context) { super(context, false); this.context = context; LayoutInflater.from(context).inflate(R.layout.basic_count_item, this, true); titleView = (TextView) findViewById(R.id.basic_count_name); countView = (TextView) findViewById(R.id.basic_count_count); } protected void setObjectImpl(Integer albumListString, Void dummy) { titleView.setText(albumListString); SharedPreferences prefs = Util.getPreferences(context); startCount = prefs.getInt(Constants.PREFERENCES_KEY_RECENT_COUNT + Util.getActiveServer(context), 0); count = startCount; update(); } @Override protected void updateBackground() { try { String recentAddedFile = Util.getCacheName(context, "recent_count"); ArrayList<String> recents = FileUtil.deserialize(context, recentAddedFile, ArrayList.class); if (recents == null) { recents = new ArrayList<String>(); } MusicService musicService = MusicServiceFactory.getMusicService(context); MusicDirectory recentlyAdded = musicService.getAlbumList("newest", 20, 0, false, context, null); // If first run, just put everything in it and return 0 boolean firstRun = recents.isEmpty(); // Count how many new albums are in the list count = 0; for (MusicDirectory.Entry album : recentlyAdded.getChildren()) { if (!recents.contains(album.getId())) { recents.add(album.getId()); count++; } } // Keep recents list from growing infinitely while (recents.size() > 40) { recents.remove(0); } FileUtil.serialize(context, recents, recentAddedFile); if (!firstRun) { // Add the old count which will get cleared out after viewing recents count += startCount; SharedPreferences.Editor editor = Util.getPreferences(context).edit(); editor.putInt(Constants.PREFERENCES_KEY_RECENT_COUNT + Util.getActiveServer(context), count); editor.commit(); } } catch(Exception e) { Log.w(TAG, "Failed to refresh most recent count", e); } } @Override protected void update() { // Update count display with appropriate information if(count <= 0) { countView.setVisibility(View.GONE); } else { String displayName; if(count < 10) { displayName = "0" + count; } else { displayName = "" + count; } countView.setText(displayName); countView.setVisibility(View.VISIBLE); } } @Override public void onClick() { SharedPreferences.Editor editor = Util.getPreferences(context).edit(); editor.putInt(Constants.PREFERENCES_KEY_RECENT_COUNT + Util.getActiveServer(context), 0); editor.commit(); count = 0; update(); } }