From 87ccd55e8a90ff5d1c30f852941d523a83ab735a Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Fri, 11 Dec 2015 21:39:54 -0500 Subject: [PATCH] Switch Tuner to support prefs (and some improvements) Change-Id: I2ef62c0c56d4af69f9f34e1cfd297999d59b7da6 --- packages/SystemUI/Android.mk | 11 +++- packages/SystemUI/AndroidManifest.xml | 2 +- packages/SystemUI/proguard.flags | 6 +++ packages/SystemUI/res/values/styles.xml | 4 ++ packages/SystemUI/res/xml/tuner_prefs.xml | 5 +- .../systemui/tuner/DemoModeFragment.java | 14 +++-- .../systemui/tuner/StatusBarSwitch.java | 10 ++-- .../android/systemui/tuner/TunerActivity.java | 54 +++++++++++++++++-- .../android/systemui/tuner/TunerFragment.java | 32 +++++------ .../android/systemui/tuner/TunerSwitch.java | 10 ++-- packages/SystemUI/tests/Android.mk | 12 ++++- 11 files changed, 113 insertions(+), 47 deletions(-) diff --git a/packages/SystemUI/Android.mk b/packages/SystemUI/Android.mk index eb63e5d55f9a2..61cad2fde6d88 100644 --- a/packages/SystemUI/Android.mk +++ b/packages/SystemUI/Android.mk @@ -8,7 +8,11 @@ LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-proto-files-unde LOCAL_STATIC_JAVA_LIBRARIES := \ Keyguard \ - android-support-v7-recyclerview + android-support-v7-recyclerview \ + android-support-v7-preference \ + android-support-v7-appcompat \ + android-support-v14-preference + LOCAL_JAVA_LIBRARIES := telephony-common LOCAL_PACKAGE_NAME := SystemUI @@ -22,10 +26,13 @@ LOCAL_PROGUARD_FLAG_FILES := proguard.flags LOCAL_RESOURCE_DIR := \ frameworks/base/packages/Keyguard/res \ $(LOCAL_PATH)/res \ + frameworks/support/v7/preference/res \ + frameworks/support/v14/preference/res \ + frameworks/support/v7/appcompat/res \ frameworks/support/v7/recyclerview/res LOCAL_AAPT_FLAGS := --auto-add-overlay \ - --extra-packages com.android.keyguard:android.support.v7.recyclerview + --extra-packages com.android.keyguard:android.support.v7.recyclerview:android.support.v7.preference:android.support.v14.preference:android.support.v7.appcompat ifneq ($(SYSTEM_UI_INCREMENTAL_BUILDS),) LOCAL_PROGUARD_ENABLED := disabled diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index 51b84f52498df..02ddae6845bcf 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -186,7 +186,7 @@ diff --git a/packages/SystemUI/proguard.flags b/packages/SystemUI/proguard.flags index 75e7959607378..6a10c2c625085 100644 --- a/packages/SystemUI/proguard.flags +++ b/packages/SystemUI/proguard.flags @@ -27,3 +27,9 @@ public float getTaskProgress(); public void setTaskProgress(float); } + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keep class ** extends android.support.v14.preference.PreferenceFragment diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml index 47ad6dc2a8ad8..aad428ae40323 100644 --- a/packages/SystemUI/res/values/styles.xml +++ b/packages/SystemUI/res/values/styles.xml @@ -315,4 +315,8 @@ 48dp + + diff --git a/packages/SystemUI/res/xml/tuner_prefs.xml b/packages/SystemUI/res/xml/tuner_prefs.xml index 43359b32fe8a4..6103216d7cabd 100644 --- a/packages/SystemUI/res/xml/tuner_prefs.xml +++ b/packages/SystemUI/res/xml/tuner_prefs.xml @@ -24,6 +24,7 @@ sysui:defValue="true" /> + android:title="@string/demo_mode" + android:fragment="com.android.systemui.tuner.DemoModeFragment" /> cls = Class.forName(pref.getFragment()); + Fragment fragment = (Fragment) cls.newInstance(); + FragmentTransaction transaction = getFragmentManager().beginTransaction(); + transaction.replace(R.id.content_frame, fragment); + transaction.addToBackStack("PreferenceFragment"); + transaction.commit(); + return true; + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) { + Log.d("TunerActivity", "Problem launching fragment", e); + return false; + } + } + + @Override + public boolean onPreferenceStartScreen(PreferenceFragment caller, PreferenceScreen pref) { + FragmentTransaction transaction = getFragmentManager().beginTransaction(); + SubSettingsFragment fragment = new SubSettingsFragment(); + final Bundle b = new Bundle(1); + b.putString(PreferenceFragment.ARG_PREFERENCE_ROOT, pref.getKey()); + fragment.setArguments(b); + fragment.setTargetFragment(caller, 0); + transaction.replace(R.id.content_frame, fragment); + transaction.addToBackStack("PreferenceFragment"); + transaction.commit(); + return true; + } + + public static class SubSettingsFragment extends PreferenceFragment { + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + setPreferenceScreen((PreferenceScreen) ((PreferenceFragment) getTargetFragment()) + .getPreferenceScreen().findPreference(rootKey)); + } + } + } diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerFragment.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerFragment.java index b620b50bfcffc..a3fe6bb61a183 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/TunerFragment.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerFragment.java @@ -24,20 +24,19 @@ import android.database.ContentObserver; import android.net.Uri; import android.os.Bundle; import android.os.Handler; -import android.preference.Preference; -import android.preference.Preference.OnPreferenceChangeListener; -import android.preference.Preference.OnPreferenceClickListener; -import android.preference.PreferenceFragment; -import android.preference.SwitchPreference; import android.provider.Settings; import android.provider.Settings.System; +import android.support.v14.preference.PreferenceFragment; +import android.support.v14.preference.SwitchPreference; +import android.support.v7.preference.Preference; +import android.support.v7.preference.Preference.OnPreferenceChangeListener; +import android.support.v7.preference.Preference.OnPreferenceClickListener; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; + import com.android.internal.logging.MetricsLogger; import com.android.systemui.R; -import com.android.systemui.qs.QSPanel; -import com.android.systemui.tuner.TunerService.Tunable; import static com.android.systemui.BatteryMeterDrawable.SHOW_PERCENT_SETTING; @@ -45,8 +44,6 @@ public class TunerFragment extends PreferenceFragment { private static final String TAG = "TunerFragment"; - private static final String KEY_QS_TUNER = "qs_tuner"; - private static final String KEY_DEMO_MODE = "demo_mode"; private static final String KEY_BATTERY_PCT = "battery_pct"; public static final String SETTING_SEEN_TUNER_WARNING = "seen_tuner_warning"; @@ -59,23 +56,18 @@ public class TunerFragment extends PreferenceFragment { private SwitchPreference mBatteryPct; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - addPreferencesFromResource(R.xml.tuner_prefs); getActivity().getActionBar().setDisplayHomeAsUpEnabled(true); setHasOptionsMenu(true); + } + + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + addPreferencesFromResource(R.xml.tuner_prefs); - findPreference(KEY_DEMO_MODE).setOnPreferenceClickListener(new OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { - FragmentTransaction ft = getFragmentManager().beginTransaction(); - ft.replace(android.R.id.content, new DemoModeFragment(), "DemoMode"); - ft.addToBackStack(null); - ft.commit(); - return true; - } - }); mBatteryPct = (SwitchPreference) findPreference(KEY_BATTERY_PCT); if (Settings.Secure.getInt(getContext().getContentResolver(), SETTING_SEEN_TUNER_WARNING, 0) == 0) { diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java index 54078b0cfd917..7ad752ec74ce2 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java @@ -2,8 +2,8 @@ package com.android.systemui.tuner; import android.content.Context; import android.content.res.TypedArray; -import android.preference.SwitchPreference; import android.provider.Settings; +import android.support.v14.preference.SwitchPreference; import android.util.AttributeSet; import com.android.systemui.R; @@ -21,15 +21,15 @@ public class TunerSwitch extends SwitchPreference implements Tunable { } @Override - protected void onAttachedToActivity() { - super.onAttachedToActivity(); + public void onAttached() { + super.onAttached(); TunerService.get(getContext()).addTunable(this, getKey()); } @Override - protected void onDetachedFromActivity() { + public void onDetached() { TunerService.get(getContext()).removeTunable(this); - super.onDetachedFromActivity(); + super.onDetached(); } @Override diff --git a/packages/SystemUI/tests/Android.mk b/packages/SystemUI/tests/Android.mk index 9cf64d347e4a9..b7a41e21e7d45 100644 --- a/packages/SystemUI/tests/Android.mk +++ b/packages/SystemUI/tests/Android.mk @@ -21,7 +21,8 @@ LOCAL_PROTOC_OPTIMIZE_TYPE := nano LOCAL_PROTOC_FLAGS := -I$(LOCAL_PATH)/.. LOCAL_PROTO_JAVA_OUTPUT_PARAMS := optional_field_style=accessors -LOCAL_AAPT_FLAGS := --auto-add-overlay --extra-packages com.android.systemui:com.android.keyguard +LOCAL_AAPT_FLAGS := --auto-add-overlay \ + --extra-packages com.android.systemui:com.android.keyguard:android.support.v14.preference:android.support.v7.preference:android.support.v7.appcompat:android.support.v7.recyclerview LOCAL_SRC_FILES := $(call all-java-files-under, src) \ $(call all-Iaidl-files-under, src) \ @@ -30,6 +31,10 @@ LOCAL_SRC_FILES := $(call all-java-files-under, src) \ src/com/android/systemui/EventLogTags.logtags LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res \ + frameworks/support/v7/preference/res \ + frameworks/support/v14/preference/res \ + frameworks/support/v7/appcompat/res \ + frameworks/support/v7/recyclerview/res \ frameworks/base/packages/SystemUI/res \ frameworks/base/packages/Keyguard/res @@ -40,7 +45,10 @@ LOCAL_PACKAGE_NAME := SystemUITests LOCAL_STATIC_JAVA_LIBRARIES := \ mockito-target \ Keyguard \ - android-support-v7-recyclerview + android-support-v7-recyclerview \ + android-support-v7-preference \ + android-support-v7-appcompat \ + android-support-v14-preference # sign this with platform cert, so this test is allowed to inject key events into # UI it doesn't own. This is necessary to allow screenshots to be taken