mirror of
https://github.com/Benjamin-Wiegand/a-tv-remote-receiver.git
synced 2026-07-20 05:22:10 -07:00
add preference screen
This commit is contained in:
@@ -36,6 +36,7 @@ dependencies {
|
||||
implementation libs.bouncycastle
|
||||
implementation libs.androidx.leanback
|
||||
implementation libs.gson
|
||||
implementation libs.preference
|
||||
testImplementation libs.junit
|
||||
androidTestImplementation libs.ext.junit
|
||||
androidTestImplementation libs.espresso.core
|
||||
|
||||
@@ -106,6 +106,12 @@
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name=".ui.preference.BasicSettingsActivity"
|
||||
android:exported="false"
|
||||
android:theme="@style/Theme.ATVRemoteReceiver.Leanback"
|
||||
/>
|
||||
|
||||
<service
|
||||
android:name=".control.AccessibilityInputService"
|
||||
android:exported="false"
|
||||
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package io.benwiegand.atvremote.receiver.ui.preference;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.annotation.XmlRes;
|
||||
import androidx.leanback.preference.LeanbackPreferenceFragmentCompat;
|
||||
|
||||
// this is boilerplate for preference api
|
||||
public class BasicPreferenceFragment extends LeanbackPreferenceFragmentCompat {
|
||||
@XmlRes
|
||||
private final int preferenceRes;
|
||||
|
||||
public BasicPreferenceFragment(int preferenceRes) {
|
||||
this.preferenceRes = preferenceRes;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||
setPreferencesFromResource(preferenceRes, rootKey);
|
||||
}
|
||||
}
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
package io.benwiegand.atvremote.receiver.ui.preference;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.XmlRes;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
|
||||
import io.benwiegand.atvremote.receiver.R;
|
||||
|
||||
// even more boilerplate for the preferences api
|
||||
public class BasicSettingsActivity extends FragmentActivity {
|
||||
private static final String TAG = BasicSettingsActivity.class.getSimpleName();
|
||||
|
||||
public static final String EXTRA_PREFERENCE_XML_RESOURCE = "xmlres";
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_basic_settings);
|
||||
|
||||
int preferenceRes = getIntent().getIntExtra(EXTRA_PREFERENCE_XML_RESOURCE, -1);
|
||||
if (preferenceRes == -1) {
|
||||
Log.wtf(TAG, "required extra for preference xml resource id not provided!");
|
||||
assert false;
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
getSupportFragmentManager().beginTransaction()
|
||||
.replace(R.id.root, new BasicSettingsFragment(preferenceRes))
|
||||
.commitNow();
|
||||
|
||||
}
|
||||
|
||||
public static Intent getLaunchIntent(Context context, @XmlRes int preferenceRes) {
|
||||
return new Intent(context, BasicSettingsActivity.class)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
|
||||
.putExtra(EXTRA_PREFERENCE_XML_RESOURCE, preferenceRes);
|
||||
}
|
||||
}
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
package io.benwiegand.atvremote.receiver.ui.preference;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.XmlRes;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.leanback.preference.LeanbackSettingsFragmentCompat;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceFragmentCompat;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
// more boilerplate for preference api
|
||||
public class BasicSettingsFragment extends LeanbackSettingsFragmentCompat {
|
||||
private static final String TAG = BasicSettingsFragment.class.getSimpleName();
|
||||
|
||||
private final Supplier<Fragment> initialScreenSupplier;
|
||||
|
||||
public BasicSettingsFragment(Supplier<Fragment> initialScreenSupplier) {
|
||||
this.initialScreenSupplier = initialScreenSupplier;
|
||||
}
|
||||
|
||||
/**
|
||||
* creates a BasicSettingsFragment initialized with a BasicPreferenceFragment
|
||||
* @param basicPreferenceRes the xml preference resource to use for constructing the BasicPreferenceFragment
|
||||
*/
|
||||
public BasicSettingsFragment(@XmlRes int basicPreferenceRes) {
|
||||
this(() -> new BasicPreferenceFragment(basicPreferenceRes));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPreferenceStartInitialScreen() {
|
||||
startPreferenceFragment(initialScreenSupplier.get());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceStartFragment(PreferenceFragmentCompat caller, Preference pref) {
|
||||
Log.wtf(TAG, "preference fragment not handled: " + pref.getFragment());
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceStartScreen(PreferenceFragmentCompat caller, PreferenceScreen pref) {
|
||||
Log.wtf(TAG, "preference screen not handled: " + pref.getFragment());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/root"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
>
|
||||
|
||||
</FrameLayout>
|
||||
@@ -7,6 +7,7 @@ appcompat = "1.7.0"
|
||||
material = "1.12.0"
|
||||
activity = "1.10.1"
|
||||
leanback = "1.2.0"
|
||||
leanback-preference = "1.2.0"
|
||||
bouncycastle = "1.45"
|
||||
gson = "2.13.1"
|
||||
|
||||
@@ -20,6 +21,7 @@ activity = { group = "androidx.activity", name = "activity", version.ref = "acti
|
||||
androidx-leanback = { group = "androidx.leanback", name = "leanback", version.ref = "leanback" }
|
||||
bouncycastle = { group = "org.bouncycastle", name = "bcprov-jdk16", version.ref = "bouncycastle" }
|
||||
gson = { group = "com.google.code.gson", name = "gson", version.ref = "gson" }
|
||||
preference = { group = "androidx.leanback", name = "leanback-preference", version.ref = "leanback-preference" }
|
||||
|
||||
[plugins]
|
||||
android-application = { id = "com.android.application", version.ref = "agp" }
|
||||
|
||||
Reference in New Issue
Block a user