Skip to content

Commit

Permalink
Switched from using LocalBroadcastManager to LiveData for broadcastin…
Browse files Browse the repository at this point in the history
…g, and optimized some code.
  • Loading branch information
VictorModi committed Feb 10, 2024
1 parent 629d660 commit ddc979a
Show file tree
Hide file tree
Showing 20 changed files with 164 additions and 170 deletions.
48 changes: 12 additions & 36 deletions app/src/main/java/cn/zhaiyifan/lyric/LyricUtils.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
package cn.zhaiyifan.lyric;

import android.media.MediaMetadata;
import android.text.TextUtils;
import android.util.Log;

import cn.zhaiyifan.lyric.model.Lyric;
import cn.zhaiyifan.lyric.model.Lyric.Sentence;
import statusbar.finder.provider.ILrcProvider;

import java.io.*;
import java.nio.file.Files;
import java.util.Collections;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.LinkedList;
import java.util.List;

Expand Down Expand Up @@ -57,12 +55,13 @@ public static Lyric parseLyric(ILrcProvider.LyricResult lyricResult, MediaMetada
}

public static Lyric parseLyric(ILrcProvider.LyricResult lyricResult, ILrcProvider.MediaInfo mediaInfo) {
if (lyricResult.mLyric == null) return null;
Lyric lyric = new Lyric();
try {
BufferedReader br = new BufferedReader(new StringReader(lyricResult.mLyric));
String line;
while ((line = br.readLine()) != null) {
parseLine(lyric.sentenceList, line, lyric);
if (!parseLine(lyric.sentenceList, line, lyric)) return null;
}
lyric.sentenceList.sort(new Lyric.SentenceComparator());
} catch (IOException e) {
Expand All @@ -73,7 +72,7 @@ public static Lyric parseLyric(ILrcProvider.LyricResult lyricResult, ILrcProvide
BufferedReader tbr = new BufferedReader(new StringReader(lyricResult.mTranslatedLyric));
String transLine;
while ((transLine = tbr.readLine()) != null) {
parseLine(lyric.transSentenceList, transLine, lyric);
if (!parseLine(lyric.transSentenceList, transLine, lyric)) return null;
}
lyric.transSentenceList.sort(new Lyric.SentenceComparator());
} catch (IOException e) {
Expand All @@ -88,29 +87,6 @@ public static Lyric parseLyric(ILrcProvider.LyricResult lyricResult, ILrcProvide
return lyric;
}

/**
* Save lyric to local app directory
*
* @return Saved destination. Null if failed.
*/
public static String saveLyric(Lyric lyric) {
return "";
}

/**
* Get sentence according to timestamp.
*/
public static Sentence getSentence(List<Sentence> lyricList, long ts) {
return getSentence(lyricList, ts, 0);
}

/**
* Get sentence according to timestamp and current index.
*/
public static Sentence getSentence(List<Sentence> lyricList, long ts, int index) {
return getSentence(lyricList, ts, index, 0);
}

/**
* Get sentence according to timestamp, current index, offset.
*/
Expand Down Expand Up @@ -174,7 +150,7 @@ private static boolean parseLine(List<Sentence> sentenceList, String line, Lyric
int lineLength = line.length();
line = line.trim();
int openBracketIndex, closedBracketIndex;
openBracketIndex = line.indexOf('[', 0);
openBracketIndex = line.indexOf('[');

while (openBracketIndex != -1) {
closedBracketIndex = line.indexOf(']', openBracketIndex);
Expand Down Expand Up @@ -222,7 +198,7 @@ private static boolean parseLine(List<Sentence> sentenceList, String line, Lyric
closedBracketIndex = nextClosedBracketIndex;
}

String content = line.substring(closedBracketIndex + 1, line.length());
String content = line.substring(closedBracketIndex + 1);
for (long timestamp : timestampList) {
lyric.addSentence(sentenceList, content, timestamp);
}
Expand All @@ -244,7 +220,7 @@ private static boolean parseLine(List<Sentence> sentenceList, String line, Lyric
* @return 此时间表示的毫秒
*/
private static long parseTime(String time, Lyric lyric) {
String[] ss = time.split("\\:|\\.");
String[] ss = time.split("[:.]");
// 如果 是两位以后,就非法了
if (ss.length < 2) {
return -1;
Expand All @@ -262,7 +238,7 @@ private static long parseTime(String time, Lyric lyric) {
throw new RuntimeException("数字不合法!");
}
// System.out.println("time" + (min * 60 + sec) * 1000L);
return (min * 60 + sec) * 1000L;
return (min * 60L + sec) * 1000L;
} catch (Exception exe) {
return -1;
}
Expand All @@ -275,7 +251,7 @@ private static long parseTime(String time, Lyric lyric) {
throw new RuntimeException("数字不合法!");
}
// System.out.println("time" + (min * 60 + sec) * 1000L + mm);
return (min * 60 + sec) * 1000L + mm;
return (min * 60L + sec) * 1000L + mm;
} catch (Exception exe) {
return -1;
}
Expand All @@ -293,7 +269,7 @@ private static long parseTime(String time, Lyric lyric) {
private static int parseOffset(String str) {
if (str.equalsIgnoreCase("0"))
return 0;
String[] ss = str.split("\\:");
String[] ss = str.split(":");
if (ss.length == 2) {
if (ss[0].equalsIgnoreCase("offset")) {
int os = Integer.parseInt(ss[1]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,13 @@
import android.widget.LinearLayout;
import android.widget.Switch;
import android.widget.TextView;

import androidx.annotation.ColorInt;

import com.android.settingslib.utils.BuildCompatUtils;
import statusbar.finder.R;

import java.util.ArrayList;
import java.util.List;

import statusbar.finder.R;

/**
* MainSwitchBar is a View with a customized Switch.
* This component is used as the main switch of the page
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,13 @@
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.widget.Switch;

import androidx.preference.PreferenceViewHolder;
import androidx.preference.TwoStatePreference;
import statusbar.finder.R;

import java.util.ArrayList;
import java.util.List;

import statusbar.finder.R;

/**
* MainSwitchPreference is a Preference with a customized Switch.
* This component is used as the main switch of the page
Expand Down
29 changes: 17 additions & 12 deletions app/src/main/java/statusbar/finder/LrcGetter.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,30 @@

import android.content.Context;
import android.media.MediaMetadata;

import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Objects;

import cn.zhaiyifan.lyric.LyricUtils;
import cn.zhaiyifan.lyric.model.Lyric;
import com.github.houbb.opencc4j.util.ZhConverterUtil;
import com.moji4j.MojiConverter;
import com.moji4j.MojiDetector;
import statusbar.finder.misc.Constants;
import statusbar.finder.provider.*;
import statusbar.finder.provider.utils.LyricSearchUtil;
import statusbar.finder.misc.checkStringLang;
import statusbar.finder.provider.ILrcProvider;
import statusbar.finder.provider.KugouProvider;
import statusbar.finder.provider.MusixMatchProvider;
import statusbar.finder.provider.NeteaseProvider;
import statusbar.finder.provider.utils.LyricSearchUtil;

import com.github.houbb.opencc4j.util.ZhConverterUtil;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Objects;

public class LrcGetter {
static final String TAG = "LrcGetter";
private static final ILrcProvider[] providers = {
new MusixMatchProvider(),
new NeteaseProvider(),
new KugouProvider(),
new QQMusicProvider()
// new QQMusicProvider()
};
private static MessageDigest messageDigest;

Expand All @@ -36,12 +36,13 @@ public static Lyric getLyric(Context context, MediaMetadata mediaMetadata, Strin
public static Lyric getLyric(Context context, ILrcProvider.MediaInfo mediaInfo, String sysLang, String packageName) {
LyricsDatabase lyricsDatabase = new LyricsDatabase(context);
// Log.d(TAG, "curMediaData" + new SimpleSongInfo(mediaMetadata));
ILrcProvider.MediaInfo hiraganaMediaInfo = null;
ILrcProvider.MediaInfo hiraganaMediaInfo;
if (messageDigest == null) {
try {
messageDigest = MessageDigest.getInstance("SHA");
} catch (NoSuchAlgorithmException e) {
e.fillInStackTrace();
lyricsDatabase.close();
return null;
}
}
Expand All @@ -59,6 +60,7 @@ public static Lyric getLyric(Context context, ILrcProvider.MediaInfo mediaInfo,
hiraganaMediaInfo = mediaInfo.clone();
hiraganaMediaInfo.setTitle(converter.convertRomajiToHiragana(mediaInfo.getTitle()));
if (detector.hasLatin(hiraganaMediaInfo.getTitle())) {
lyricsDatabase.close();
return null;
}
currentResult = searchLyricsResultByInfo(hiraganaMediaInfo);
Expand All @@ -76,6 +78,7 @@ public static Lyric getLyric(Context context, ILrcProvider.MediaInfo mediaInfo,
}
if (currentResult == null) {
lyricsDatabase.insertLyricIntoDatabase(null, mediaInfo, packageName);
lyricsDatabase.close();
return null;
}
}
Expand Down Expand Up @@ -105,8 +108,10 @@ public static Lyric getLyric(Context context, ILrcProvider.MediaInfo mediaInfo,
}

if (lyricsDatabase.insertLyricIntoDatabase(currentResult, mediaInfo, packageName)) {
lyricsDatabase.close();
return LyricUtils.parseLyric(currentResult, currentResult.resultInfo);
}
lyricsDatabase.close();
return null;
}

Expand Down
1 change: 0 additions & 1 deletion app/src/main/java/statusbar/finder/LyricsDatabase.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.media.MediaMetadata;
import android.util.Log;
import androidx.annotation.Nullable;
import statusbar.finder.provider.ILrcProvider;
Expand Down
39 changes: 18 additions & 21 deletions app/src/main/java/statusbar/finder/MusicListenerService.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,7 @@
import android.annotation.SuppressLint;
import android.app.Notification;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.*;
import android.media.MediaMetadata;
import android.media.session.MediaController;
import android.media.session.MediaSessionManager;
Expand All @@ -20,28 +15,25 @@
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.text.TextUtils;

import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.lifecycle.Observer;
import androidx.preference.PreferenceManager;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Objects;

import cn.lyric.getter.api.API;
import cn.lyric.getter.api.data.ExtraData;
import cn.lyric.getter.api.tools.Tools;

import cn.zhaiyifan.lyric.LyricUtils;
import cn.zhaiyifan.lyric.model.Lyric;

import statusbar.finder.broadcast.AppsChangedLiveData;
import statusbar.finder.misc.Constants;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Objects;

public class MusicListenerService extends NotificationListenerService {

private static final int NOTIFICATION_ID_LRC = 1;
Expand All @@ -53,6 +45,7 @@ public class MusicListenerService extends NotificationListenerService {
private NotificationManager mNotificationManager;

private final ArrayList<String> mTargetPackageList = new ArrayList<>();
private Observer<Void> mObserver;
private SharedPreferences mSharedPreferences;

private Lyric mLyric;
Expand All @@ -70,7 +63,7 @@ public class MusicListenerService extends NotificationListenerService {
@Override
public void onReceive(Context context, Intent intent) {
if (Objects.equals(intent.getAction(), Constants.BROADCAST_TARGET_APP_CHANGED)) {
updateIgnoredPackageList();
updateTargetPackageList();
unBindMediaListeners();
bindMediaListeners();
}
Expand Down Expand Up @@ -194,16 +187,20 @@ public void onListenerConnected() {
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mLyricNotification = buildLrcNotification();
mMediaSessionManager = (MediaSessionManager) getSystemService(Context.MEDIA_SESSION_SERVICE);
LocalBroadcastManager.getInstance(this).registerReceiver(mTargetPackageReceiver, new IntentFilter(Constants.BROADCAST_TARGET_APP_CHANGED));
updateIgnoredPackageList();
mObserver = data -> {
updateTargetPackageList();
bindMediaListeners();
};
AppsChangedLiveData.getInstance().observeForever(mObserver);
updateTargetPackageList();
bindMediaListeners();
}

@Override
public void onListenerDisconnected() {
stopLyric();
unBindMediaListeners();
LocalBroadcastManager.getInstance(this).unregisterReceiver(mTargetPackageReceiver);
AppsChangedLiveData.getInstance().removeObserver(mObserver);
super.onListenerDisconnected();
}

Expand Down Expand Up @@ -231,7 +228,7 @@ private void unBindMediaListeners() {
mMediaController = null;
}

private void updateIgnoredPackageList() {
private void updateTargetPackageList() {
mTargetPackageList.clear();
String value = mSharedPreferences.getString(Constants.PREFERENCE_KEY_TARGET_PACKAGES, "");
String[] arr = value.split(";");
Expand Down
Loading

0 comments on commit ddc979a

Please sign in to comment.