mirror of
https://github.com/gabehf/tempus.git
synced 2026-03-08 23:18:17 -07:00
feat: Make all objects in Tempo references for quick access
This commit is contained in:
parent
89fa38f5a0
commit
6c637dcbcb
21 changed files with 1030 additions and 35 deletions
|
|
@ -0,0 +1,188 @@
|
|||
package com.cappielloantonio.tempo.util;
|
||||
|
||||
import android.content.ClipData;
|
||||
import android.content.ClipboardManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.cappielloantonio.tempo.R;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import com.google.android.material.color.MaterialColors;
|
||||
|
||||
public final class AssetLinkUtil {
|
||||
public static final String SCHEME = "tempo";
|
||||
public static final String HOST_ASSET = "asset";
|
||||
|
||||
public static final String TYPE_SONG = "song";
|
||||
public static final String TYPE_ALBUM = "album";
|
||||
public static final String TYPE_ARTIST = "artist";
|
||||
public static final String TYPE_PLAYLIST = "playlist";
|
||||
public static final String TYPE_GENRE = "genre";
|
||||
public static final String TYPE_YEAR = "year";
|
||||
|
||||
private AssetLinkUtil() {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static AssetLink parse(@Nullable Intent intent) {
|
||||
if (intent == null) return null;
|
||||
return parse(intent.getData());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static AssetLink parse(@Nullable Uri uri) {
|
||||
if (uri == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!SCHEME.equalsIgnoreCase(uri.getScheme())) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String host = uri.getHost();
|
||||
if (!HOST_ASSET.equalsIgnoreCase(host)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (uri.getPathSegments().size() < 2) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String type = uri.getPathSegments().get(0);
|
||||
String id = uri.getPathSegments().get(1);
|
||||
if (TextUtils.isEmpty(type) || TextUtils.isEmpty(id)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!isSupportedType(type)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new AssetLink(type, id, uri);
|
||||
}
|
||||
|
||||
public static boolean isSupportedType(@Nullable String type) {
|
||||
if (type == null) return false;
|
||||
switch (type) {
|
||||
case TYPE_SONG:
|
||||
case TYPE_ALBUM:
|
||||
case TYPE_ARTIST:
|
||||
case TYPE_PLAYLIST:
|
||||
case TYPE_GENRE:
|
||||
case TYPE_YEAR:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static Uri buildUri(@NonNull String type, @NonNull String id) {
|
||||
return new Uri.Builder()
|
||||
.scheme(SCHEME)
|
||||
.authority(HOST_ASSET)
|
||||
.appendPath(type)
|
||||
.appendPath(id)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static String buildLink(@Nullable String type, @Nullable String id) {
|
||||
if (TextUtils.isEmpty(type) || TextUtils.isEmpty(id) || !isSupportedType(type)) {
|
||||
return null;
|
||||
}
|
||||
return buildUri(Objects.requireNonNull(type), Objects.requireNonNull(id)).toString();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static AssetLink buildAssetLink(@Nullable String type, @Nullable String id) {
|
||||
String link = buildLink(type, id);
|
||||
return parseLinkString(link);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static AssetLink parseLinkString(@Nullable String link) {
|
||||
if (TextUtils.isEmpty(link)) {
|
||||
return null;
|
||||
}
|
||||
return parse(Uri.parse(link));
|
||||
}
|
||||
|
||||
public static void copyToClipboard(@NonNull Context context, @NonNull AssetLink assetLink) {
|
||||
ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
if (clipboardManager == null) {
|
||||
return;
|
||||
}
|
||||
ClipData clipData = ClipData.newPlainText(context.getString(R.string.asset_link_clipboard_label), assetLink.uri.toString());
|
||||
clipboardManager.setPrimaryClip(clipData);
|
||||
}
|
||||
|
||||
@StringRes
|
||||
public static int getLabelRes(@NonNull String type) {
|
||||
switch (type) {
|
||||
case TYPE_SONG:
|
||||
return R.string.asset_link_label_song;
|
||||
case TYPE_ALBUM:
|
||||
return R.string.asset_link_label_album;
|
||||
case TYPE_ARTIST:
|
||||
return R.string.asset_link_label_artist;
|
||||
case TYPE_PLAYLIST:
|
||||
return R.string.asset_link_label_playlist;
|
||||
case TYPE_GENRE:
|
||||
return R.string.asset_link_label_genre;
|
||||
case TYPE_YEAR:
|
||||
return R.string.asset_link_label_year;
|
||||
default:
|
||||
return R.string.asset_link_label_unknown;
|
||||
}
|
||||
}
|
||||
|
||||
public static void applyLinkAppearance(@NonNull View view) {
|
||||
if (view instanceof TextView) {
|
||||
TextView textView = (TextView) view;
|
||||
if (textView.getTag(R.id.tag_link_original_color) == null) {
|
||||
textView.setTag(R.id.tag_link_original_color, textView.getCurrentTextColor());
|
||||
}
|
||||
int accent = MaterialColors.getColor(view, com.google.android.material.R.attr.colorPrimary,
|
||||
ContextCompat.getColor(view.getContext(), android.R.color.holo_blue_light));
|
||||
textView.setTextColor(accent);
|
||||
}
|
||||
}
|
||||
|
||||
public static void clearLinkAppearance(@NonNull View view) {
|
||||
if (view instanceof TextView) {
|
||||
TextView textView = (TextView) view;
|
||||
Object original = textView.getTag(R.id.tag_link_original_color);
|
||||
if (original instanceof Integer) {
|
||||
textView.setTextColor((Integer) original);
|
||||
} else {
|
||||
int defaultColor = MaterialColors.getColor(view, com.google.android.material.R.attr.colorOnSurface,
|
||||
ContextCompat.getColor(view.getContext(), android.R.color.primary_text_light));
|
||||
textView.setTextColor(defaultColor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static final class AssetLink {
|
||||
public final String type;
|
||||
public final String id;
|
||||
public final Uri uri;
|
||||
|
||||
AssetLink(@NonNull String type, @NonNull String id, @NonNull Uri uri) {
|
||||
this.type = type;
|
||||
this.id = id;
|
||||
this.uri = uri;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue