From e8bef567be76aae21f857df0c368321a2c9205a2 Mon Sep 17 00:00:00 2001 From: FongMi Date: Wed, 16 Aug 2023 17:10:16 +0800 Subject: [PATCH] Add biometric --- app/build.gradle | 5 +++-- .../android/tv/ui/activity/LiveActivity.java | 17 ++++++++++++++--- .../com/fongmi/android/tv/utils/Biometric.java | 13 +++++++++++++ .../android/tv/ui/activity/LiveActivity.java | 17 ++++++++++++++--- 4 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/com/fongmi/android/tv/utils/Biometric.java diff --git a/app/build.gradle b/app/build.gradle index 505800e2a..668da4ca7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,12 +21,12 @@ android { leanback { dimension "mode" versionCode 204 - versionName "20230816" + versionName "20230816#2" } mobile { dimension "mode" versionCode 204 - versionName "20230816" + versionName "20230816#2" } java { dimension "api" @@ -104,6 +104,7 @@ dependencies { implementation project(':media-lib-session') implementation project(':media-lib-ui') implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'androidx.biometric:biometric:1.1.0' implementation 'androidx.lifecycle:lifecycle-viewmodel:2.5.1' implementation 'androidx.room:room-runtime:2.5.2' implementation 'cat.ereza:customactivityoncrash:2.4.0' diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index efa4c84d7..ea9eb3569 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -48,6 +48,7 @@ import com.fongmi.android.tv.ui.custom.dialog.PassDialog; import com.fongmi.android.tv.ui.custom.dialog.TrackDialog; import com.fongmi.android.tv.ui.presenter.ChannelPresenter; import com.fongmi.android.tv.ui.presenter.GroupPresenter; +import com.fongmi.android.tv.utils.Biometric; import com.fongmi.android.tv.utils.Clock; import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.ResUtil; @@ -69,7 +70,7 @@ import okhttp3.Call; import okhttp3.Response; import tv.danmaku.ijk.media.player.ui.IjkVideoView; -public class LiveActivity extends BaseActivity implements GroupPresenter.OnClickListener, ChannelPresenter.OnClickListener, CustomKeyDownLive.Listener, CustomLiveListView.Callback, TrackDialog.Listener, PassCallback, LiveCallback { +public class LiveActivity extends BaseActivity implements GroupPresenter.OnClickListener, ChannelPresenter.OnClickListener, CustomKeyDownLive.Listener, CustomLiveListView.Callback, TrackDialog.Listener, Biometric.Callback, PassCallback, LiveCallback { private ActivityLiveBinding mBinding; private ArrayObjectAdapter mChannelAdapter; @@ -429,7 +430,8 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick mChannelAdapter.setItems(item.getChannel(), null); mBinding.channel.setSelectedPosition(Math.max(item.getPosition(), 0)); if (!item.isKeep() || ++count < 5 || mHides.isEmpty()) return; - PassDialog.create().show(this); + if (Biometric.enable()) Biometric.show(this); + else PassDialog.create().show(this); App.removeCallbacks(mR0); resetPass(); } @@ -533,12 +535,21 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick @Override public void setPass(String pass) { + unlock(pass); + } + + @Override + public void onBiometricSuccess() { + unlock(null); + } + + private void unlock(String pass) { boolean first = true; int position = mGroupAdapter.size(); Iterator iterator = mHides.iterator(); while (iterator.hasNext()) { Group item = iterator.next(); - if (!item.getPass().equals(pass)) continue; + if (pass != null && !pass.equals(item.getPass())) continue; mGroupAdapter.add(mGroupAdapter.size(), item); if (first) mBinding.group.setSelectedPosition(position); if (first) onItemClick(mGroup = item); diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Biometric.java b/app/src/main/java/com/fongmi/android/tv/utils/Biometric.java new file mode 100644 index 000000000..dcd7f2688 --- /dev/null +++ b/app/src/main/java/com/fongmi/android/tv/utils/Biometric.java @@ -0,0 +1,13 @@ +package com.fongmi.android.tv.utils; + +public class Biometric { + + public static boolean enable() { + return false; + } + + public interface Callback { + + void onBiometricSuccess(); + } +} diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index ddbac0f27..c8d1b3cab 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -48,6 +48,7 @@ import com.fongmi.android.tv.ui.custom.dialog.CastDialog; import com.fongmi.android.tv.ui.custom.dialog.LiveDialog; import com.fongmi.android.tv.ui.custom.dialog.PassDialog; import com.fongmi.android.tv.ui.custom.dialog.TrackDialog; +import com.fongmi.android.tv.utils.Biometric; import com.fongmi.android.tv.utils.Clock; import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.PiP; @@ -71,7 +72,7 @@ import okhttp3.Call; import okhttp3.Response; import tv.danmaku.ijk.media.player.ui.IjkVideoView; -public class LiveActivity extends BaseActivity implements CustomKeyDownLive.Listener, CastDialog.Listener, PiPReceiver.Listener, TrackDialog.Listener, PassCallback, LiveCallback, GroupAdapter.OnClickListener, ChannelAdapter.OnClickListener { +public class LiveActivity extends BaseActivity implements CustomKeyDownLive.Listener, CastDialog.Listener, PiPReceiver.Listener, TrackDialog.Listener, Biometric.Callback, PassCallback, LiveCallback, GroupAdapter.OnClickListener, ChannelAdapter.OnClickListener { private ChannelAdapter mChannelAdapter; private ActivityLiveBinding mBinding; @@ -451,7 +452,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List mChannelAdapter.setSelected(item.getPosition()); mBinding.channel.scrollToPosition(Math.max(item.getPosition(), 0)); if (!item.isKeep() || ++count < 5 || mHides.isEmpty()) return; - PassDialog.create().show(this); + if (Biometric.enable()) Biometric.show(this); + else PassDialog.create().show(this); resetPass(); } @@ -555,11 +557,20 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List @Override public void setPass(String pass) { + unlock(pass); + } + + @Override + public void onBiometricSuccess() { + unlock(null); + } + + private void unlock(String pass) { boolean first = true; Iterator iterator = mHides.iterator(); while (iterator.hasNext()) { Group item = iterator.next(); - if (!item.getPass().equals(pass)) continue; + if (pass != null && !pass.equals(item.getPass())) continue; mGroupAdapter.add(item); if (first) onItemClick(item); iterator.remove();