use of com.simplecity.amp_library.ui.recyclerview.ItemTouchHelperCallback in project Shuttle by timusus.
the class SettingsFragment method onCreate.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().supportInvalidateOptionsMenu();
mTintManager = new SystemBarTintManager(getActivity());
if (getArguments() != null) {
mPrefResId = getArguments().getInt(PREF_RES_ID);
} else {
mPrefResId = R.xml.settings_headers;
}
// Load the preferences from an XML resource
addPreferencesFromResource(mPrefResId);
mPrefs = PreferenceManager.getDefaultSharedPreferences(getContext());
final Preference chooseTabsPreference = findPreference("pref_tab_chooser");
if (chooseTabsPreference != null) {
chooseTabsPreference.setOnPreferenceClickListener(preference -> {
RecyclerView recyclerView = (RecyclerView) LayoutInflater.from(getContext()).inflate(R.layout.dialog_tab_chooser, null);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
TabsAdapter tabsAdapter = new TabsAdapter(getContext());
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelperCallback(tabsAdapter::moveItem, (fromPosition, toPosition) -> tabsAdapter.updatePreferences(), () -> {
}));
itemTouchHelper.attachToRecyclerView(recyclerView);
tabsAdapter.setListener(new TabsAdapter.TabListener() {
@Override
public void onItemClick(View v, int position, CategoryItem categoryItem) {
categoryItem.setChecked(!categoryItem.isChecked());
com.simplecity.amp_library.utils.AnalyticsManager.logTabVisibilityChanged(categoryItem.isChecked(), categoryItem.title);
tabsAdapter.notifyItemChanged(position);
tabsAdapter.updatePreferences();
}
@Override
public void onStartDrag(RecyclerView.ViewHolder viewHolder) {
itemTouchHelper.startDrag(viewHolder);
}
});
recyclerView.setAdapter(tabsAdapter);
DialogUtils.getBuilder(getContext()).title(R.string.pref_title_choose_tabs).customView(recyclerView, false).positiveText(R.string.button_done).onPositive((materialDialog, dialogAction) -> {
DialogUtils.createRestartDialog(getActivity());
materialDialog.dismiss();
}).show();
return true;
});
}
final Preference colorPickerPreference = findPreference("pref_theme_highlight_color");
if (colorPickerPreference != null) {
colorPickerPreference.setOnPreferenceClickListener(preference -> {
int selectedColor = mPrefs.getInt("pref_theme_highlight_color", -1);
DialogUtils.showColorPickerDialog(this, selectedColor, color -> mPrefs.edit().putInt("pref_theme_highlight_color", color).apply());
return true;
});
}
final Preference accentPickerPreference = findPreference("pref_theme_accent_color");
if (accentPickerPreference != null) {
accentPickerPreference.setOnPreferenceClickListener(preference -> {
int selectedColor = mPrefs.getInt("pref_theme_accent_color", -1);
DialogUtils.showColorPickerDialog(this, selectedColor, ColorPalette.getAccentColors(), ColorPalette.getAccentColorsSub(), color -> mPrefs.edit().putInt("pref_theme_accent_color", color).apply());
return true;
});
}
mListener = (sharedPreferences, key) -> {
if (key.equals("pref_theme_highlight_color") || key.equals("pref_theme_accent_color") || key.equals("pref_theme_white_accent")) {
ThemeUtils.setTheme(getActivity());
ThemeUtils.themeActionBar((SettingsActivity) getActivity());
ThemeUtils.themeStatusBar(getActivity(), mTintManager);
getListView().invalidate();
themeUIElements();
for (int i = 0, size = getListView().getChildCount(); i < size; i++) {
View view = getListView().getChildAt(i);
ThemeUtils.updateThemableViews(view);
}
}
if (key.equals("pref_theme_base") || key.equals("pref_default_page")) {
DialogUtils.createRestartDialog(getActivity());
}
};
final Preference restartPreference = findPreference("pref_restart");
if (restartPreference != null) {
restartPreference.setOnPreferenceClickListener(preference -> {
Intent intent = new Intent(getActivity(), MainActivity.class);
ComponentName componentNAme = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(componentNAme);
startActivity(mainIntent);
return true;
});
}
final CheckBoxPreference showLockscreenArtworkPreference = (CheckBoxPreference) findPreference(SettingsManager.KEY_SHOW_LOCKSCREEN_ARTWORK);
if (showLockscreenArtworkPreference != null) {
showLockscreenArtworkPreference.setOnPreferenceClickListener(preference -> {
MusicUtils.toggleLockscreenArtwork();
return false;
});
}
final Preference downloadArtworkPreference = findPreference("pref_download_artwork");
if (downloadArtworkPreference != null) {
downloadArtworkPreference.setOnPreferenceClickListener(preference -> {
DialogUtils.showDownloadWarningDialog(getActivity(), (materialDialog, dialogAction) -> {
Intent intent = new Intent(getContext(), ArtworkDownloadService.class);
ShuttleApplication.getInstance().startService(intent);
});
return true;
});
}
final Preference deleteArtworkPreference = findPreference("pref_delete_artwork");
if (deleteArtworkPreference != null) {
deleteArtworkPreference.setOnPreferenceClickListener(preference -> {
DialogUtils.getBuilder(getActivity()).title(getString(R.string.pref_title_delete_artwork)).icon(DrawableUtils.themeLightOrDark(getActivity(), getResources().getDrawable(R.drawable.ic_dialog_alert))).content(getString(R.string.delete_artwork_confirmation_dialog)).positiveText(getString(R.string.button_ok)).onPositive((materialDialog, dialogAction) -> {
Glide.get(getContext()).clearMemory();
ShuttleUtils.execute(new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
Glide.get(getContext()).clearDiskCache();
return null;
}
});
}).negativeText(getString(R.string.cancel)).show();
return true;
});
}
final Preference downloadSimpleLastFmScrobbler = findPreference("pref_download_simple_lastfm_scrobbler");
if (downloadSimpleLastFmScrobbler != null) {
if (ShuttleUtils.isAmazonBuild()) {
PreferenceGroup preferenceGroup = (PreferenceGroup) findPreference("pref_key_simple_lastfm_scrobble_settings");
if (preferenceGroup != null) {
preferenceGroup.removePreference(downloadSimpleLastFmScrobbler);
}
} else {
downloadSimpleLastFmScrobbler.setIntent(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=com.adam.aslfms")));
}
}
final Preference about = findPreference("pref_about");
if (about != null) {
about.setOnPreferenceClickListener(preference -> {
View customView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_changelog, null);
WebView webView = (WebView) customView.findViewById(R.id.webView);
int themeType = ThemeUtils.getThemeType(getActivity());
webView.setBackgroundColor(getResources().getColor(android.R.color.transparent));
if (themeType == ThemeUtils.ThemeType.TYPE_LIGHT || themeType == ThemeUtils.ThemeType.TYPE_SOLID_LIGHT) {
webView.loadUrl("file:///android_asset/web/info.html");
} else {
webView.loadUrl("file:///android_asset/web/info_dark.html");
}
DialogUtils.getBuilder(getActivity()).title(R.string.pref_title_about).customView(customView, false).negativeText(R.string.close).show();
AnalyticsManager.logChangelogViewed();
return true;
});
}
final Preference upgrade = findPreference("pref_upgrade");
if (upgrade != null) {
if (ShuttleUtils.isUpgraded()) {
SettingsFragment.this.getPreferenceScreen().removePreference(upgrade);
}
upgrade.setOnPreferenceClickListener(preference -> {
DialogUtils.showUpgradeDialog(getActivity(), (materialDialog, dialogAction) -> {
if (ShuttleUtils.isAmazonBuild()) {
ShuttleUtils.openShuttleLink(getActivity(), "com.simplecity.amp_pro");
} else {
AnalyticsManager.logUpgrade(AnalyticsManager.UpgradeType.UPGRADE);
((SettingsActivity) getActivity()).purchasePremiumUpgrade();
}
});
return true;
});
}
final Preference viewBlacklist = findPreference("pref_blacklist_view");
if (viewBlacklist != null) {
viewBlacklist.setOnPreferenceClickListener(preference -> {
DialogUtils.showBlacklistDialog(getActivity());
return true;
});
}
final Preference viewWhitelist = findPreference("pref_whitelist_view");
if (viewWhitelist != null) {
viewWhitelist.setOnPreferenceClickListener(preference -> {
DialogUtils.showWhitelistDialog(getActivity());
return true;
});
}
final Preference clearBlacklist = findPreference("pref_blacklist_clear");
if (clearBlacklist != null) {
clearBlacklist.setOnPreferenceClickListener(preference -> {
BlacklistHelper.deleteAllSongs();
Toast.makeText(getActivity(), R.string.blacklist_deleted, Toast.LENGTH_SHORT).show();
return true;
});
}
final Preference clearWhitelist = findPreference("pref_whitelist_clear");
if (clearWhitelist != null) {
clearWhitelist.setOnPreferenceClickListener(preference -> {
WhitelistHelper.deleteAllFolders();
Toast.makeText(getActivity(), R.string.whitelist_deleted, Toast.LENGTH_SHORT).show();
return true;
});
}
final CheckBoxPreference ignoreEmbeddedArtwork = (CheckBoxPreference) findPreference(SettingsManager.KEY_IGNORE_EMBEDDED_ARTWORK);
if (ignoreEmbeddedArtwork != null) {
ignoreEmbeddedArtwork.setOnPreferenceChangeListener((preference, newValue) -> {
showArtworkPreferenceDialog();
return true;
});
}
final CheckBoxPreference ignoreFolderArtwork = (CheckBoxPreference) findPreference(SettingsManager.KEY_IGNORE_FOLDER_ARTWORK);
if (ignoreFolderArtwork != null) {
ignoreFolderArtwork.setOnPreferenceChangeListener((preference, newValue) -> {
showArtworkPreferenceDialog();
return true;
});
}
final CheckBoxPreference preferEmbeddedArtwork = (CheckBoxPreference) findPreference(SettingsManager.KEY_PREFER_EMBEDDED_ARTWORK);
if (preferEmbeddedArtwork != null) {
preferEmbeddedArtwork.setOnPreferenceChangeListener((preference, newValue) -> {
showArtworkPreferenceDialog();
return true;
});
}
final CheckBoxPreference ignoreMediaStoreArtwork = (CheckBoxPreference) findPreference(SettingsManager.KEY_IGNORE_MEDIASTORE_ART);
if (ignoreMediaStoreArtwork != null) {
ignoreMediaStoreArtwork.setOnPreferenceChangeListener((preference, newValue) -> {
showArtworkPreferenceDialog();
return true;
});
}
final CheckBoxPreference preferLastFmArtwork = (CheckBoxPreference) findPreference(SettingsManager.KEY_PREFER_LAST_FM);
if (preferLastFmArtwork != null) {
preferLastFmArtwork.setOnPreferenceChangeListener((preference, newValue) -> {
showArtworkPreferenceDialog();
return true;
});
}
final Preference restorePurchases = findPreference("pref_restore_purchases");
if (ShuttleUtils.isAmazonBuild() || ShuttleUtils.isUpgraded()) {
PreferenceGroup preferenceGroup = (PreferenceGroup) findPreference("support_group");
if (preferenceGroup != null) {
preferenceGroup.removePreference(restorePurchases);
}
} else if (restorePurchases != null) {
restorePurchases.setOnPreferenceClickListener(preference -> {
((SettingsActivity) getActivity()).restorePurchases();
return true;
});
}
final Preference versionPreference = findPreference("pref_version");
if (versionPreference != null) {
versionPreference.setSummary("Shuttle Music Player " + BuildConfig.VERSION_NAME + (ShuttleUtils.isUpgraded() ? " (Upgraded)" : " (Free)"));
}
final Preference faqPreference = findPreference("pref_faq");
if (faqPreference != null) {
faqPreference.setOnPreferenceClickListener(preference -> {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.shuttlemusicplayer.com/#faq"));
startActivity(intent);
return true;
});
}
final Preference gplusPreference = findPreference("pref_gplus");
if (gplusPreference != null) {
gplusPreference.setOnPreferenceClickListener(preference -> {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://plus.google.com/communities/112365043563095486408"));
startActivity(intent);
return true;
});
}
final Preference ratePreference = findPreference("pref_rate");
if (ratePreference != null) {
ratePreference.setOnPreferenceClickListener(preference -> {
final String appPackageName = getActivity().getPackageName();
ShuttleUtils.openShuttleLink(getActivity(), appPackageName);
SettingsManager.getInstance().setHasRated();
return true;
});
}
final CheckBoxPreference openOnClickPreference = (CheckBoxPreference) findPreference("pref_open_now_playing_on_click");
if (openOnClickPreference != null) {
if (!ShuttleUtils.isTablet()) {
PreferenceGroup preferenceGroup = (PreferenceGroup) findPreference("display_group");
if (preferenceGroup != null) {
preferenceGroup.removePreference(openOnClickPreference);
}
}
}
if (!ShuttleUtils.hasLollipop()) {
PreferenceScreen preferenceScreen = getPreferenceScreen();
if (preferenceScreen != null) {
Preference notificationPreference = preferenceScreen.findPreference("pref_category_notifications");
if (notificationPreference != null) {
preferenceScreen.removePreference(notificationPreference);
}
}
}
}
use of com.simplecity.amp_library.ui.recyclerview.ItemTouchHelperCallback in project Shuttle by timusus.
the class DetailFragment method onCreateView.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_detail, container, false);
recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(adapter);
if (canEdit()) {
itemTouchHelper = new ItemTouchHelper(new ItemTouchHelperCallback((from, to) -> {
long songViewCount = Stream.of(adapter.items).filter(adaptableItem -> adaptableItem instanceof SongView).count();
int offset = (int) (adapter.getItemCount() - songViewCount);
if (to >= offset) {
adapter.moveItem(from, to);
}
}, (from, to) -> {
// The 'offset' here is the number of items in the list which are not
// SongViews. We need this to determine the actual playlist positions of the items.
long songViewCount = Stream.of(adapter.items).filter(adaptableItem -> adaptableItem instanceof SongView).count();
int offset = (int) (adapter.getItemCount() - songViewCount);
from -= offset;
to -= offset;
try {
MediaStore.Audio.Playlists.Members.moveItem(getActivity().getContentResolver(), playlist.id, from, to);
} catch (IllegalArgumentException e) {
CrashlyticsCore.getInstance().log(String.format("Failed to move playlist item from %s to %s. Adapter count: %s. Error:%s", from, to, adapter.getItemCount(), e.getMessage()));
}
}, null));
itemTouchHelper.attachToRecyclerView(recyclerView);
}
fab = (FloatingActionButton) rootView.findViewById(R.id.fab);
fab.setOnClickListener(this);
lineOne = (TextView) rootView.findViewById(R.id.line_one);
lineTwo = (TextView) rootView.findViewById(R.id.line_two);
overflowButton = (NonScrollImageButton) rootView.findViewById(R.id.btn_overflow);
overflowButton.setOnClickListener(this);
if (albumArtist != null) {
lineOne.setText(albumArtist.name);
overflowButton.setContentDescription(getString(R.string.btn_options, albumArtist.name));
} else if (album != null) {
lineOne.setText(album.name);
overflowButton.setContentDescription(getString(R.string.btn_options, album.name));
} else if (genre != null) {
lineOne.setText(genre.name);
overflowButton.setVisibility(View.GONE);
} else if (playlist != null) {
lineOne.setText(playlist.name);
overflowButton.setContentDescription(getString(R.string.btn_options, playlist.name));
}
textProtectionScrim = rootView.findViewById(R.id.textProtectionScrim);
headerImageView = (ImageView) rootView.findViewById(R.id.background);
String transitionName = getArguments().getString(ARG_TRANSITION_NAME);
ViewCompat.setTransitionName(headerImageView, transitionName);
if (transitionName != null) {
textProtectionScrim.setVisibility(View.GONE);
fab.setVisibility(View.GONE);
}
int width = ResourceUtils.getScreenSize().width + ResourceUtils.toPixels(60);
int height = getResources().getDimensionPixelSize(R.dimen.header_view_height);
if (albumArtist != null || album != null) {
requestManager.load(albumArtist == null ? album : albumArtist).override(width, height).diskCacheStrategy(DiskCacheStrategy.SOURCE).priority(Priority.HIGH).placeholder(GlideUtils.getPlaceHolderDrawable(albumArtist == null ? album.name : albumArtist.name, false)).centerCrop().animate(new AlwaysCrossFade(false)).into(headerImageView);
}
actionMode = null;
//Set the RecyclerView HeaderView height equal to the headerItem height
headerView = rootView.findViewById(R.id.headerView);
headerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
headerView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
DetailFragment.this.headerItem.height = headerView.getHeight();
}
});
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
headerTranslation = headerView.getTranslationY() - dy;
headerImageTranslation = headerImageView.getTranslationY() + dy / 2;
//the header translation.
if (headerTranslation == 0) {
headerImageTranslation = 0;
}
float ratio = Math.min(1, -headerTranslation / headerView.getHeight());
headerView.setTranslationY(headerTranslation);
headerImageView.setTranslationY(headerImageTranslation);
//when recreating this fragment.
if (getActivity() != null) {
if (((MainActivity) getActivity()).canSetAlpha()) {
((MainActivity) getActivity()).setActionBarAlpha(ratio, true);
}
}
}
});
themeUIComponents();
headerView.setTranslationY(headerTranslation);
headerImageView.setTranslationY(headerImageTranslation);
return rootView;
}
use of com.simplecity.amp_library.ui.recyclerview.ItemTouchHelperCallback in project Shuttle by timusus.
the class QueueFragment method onCreateView.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_queue, container, false);
header = rootView.findViewById(R.id.header);
if (ShuttleUtils.isLandscape() || ShuttleUtils.isTablet()) {
header.setVisibility(View.GONE);
} else {
header.setVisibility(View.VISIBLE);
}
lineTwo = (TextView) rootView.findViewById(R.id.line2);
recyclerView = (ScrollBlockingRecyclerView) rootView.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setRecyclerListener(this);
recyclerView.setAdapter(songAdapter);
recyclerView.setStateChangeListener(new OnFastScrollStateChangeListener() {
@Override
public void onFastScrollStart() {
recyclerView.setBlockScroll(false);
}
@Override
public void onFastScrollStop() {
recyclerView.setBlockScroll(true);
}
});
itemTouchHelper = new ItemTouchHelper(new ItemTouchHelperCallback((fromPosition, toPosition) -> {
songAdapter.moveItem(fromPosition, toPosition);
}, (fromPosition, toPosition) -> {
MusicUtils.moveQueueItem(fromPosition, toPosition);
recyclerView.setBlockScroll(true);
}, () -> {
//We've finished our drag event. Allow the sliding up panel to intercept touch events
recyclerView.setBlockScroll(true);
}));
itemTouchHelper.attachToRecyclerView(recyclerView);
themeUIComponents();
updateTrackInfo();
return rootView;
}
Aggregations