diff --git a/Android.mk b/Android.mk index 61734fb1b508a4e8cd901f29630505edf76c319d..537004e4e4a0358a81db6f992f1378c29ffbcd03 100644 --- a/Android.mk +++ b/Android.mk @@ -1,6 +1,16 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) +LOCAL_SRC_FILES := \ + $(call all-logtags-files-under, src) + +LOCAL_MODULE := settings-logtags + +include $(BUILD_STATIC_JAVA_LIBRARY) + +# Build the Settings APK +include $(CLEAR_VARS) + LOCAL_JAVA_LIBRARIES := bouncycastle core-oj telephony-common ims-common LOCAL_STATIC_JAVA_LIBRARIES := \ android-support-v4 \ @@ -9,13 +19,13 @@ LOCAL_STATIC_JAVA_LIBRARIES := \ android-support-v7-preference \ android-support-v7-appcompat \ android-support-v14-preference \ - jsr305 + jsr305 \ + settings-logtags LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := \ - $(call all-java-files-under, src) \ - src/com/android/settings/EventLogTags.logtags + $(call all-java-files-under, src) LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res \ frameworks/support/v7/preference/res \ diff --git a/proguard.flags b/proguard.flags index 3c3300e806476583ec127fafcede6606a4e43d54..f3c218a54df79ab01dfd55d85dc02945e29f6aef 100644 --- a/proguard.flags +++ b/proguard.flags @@ -17,6 +17,7 @@ -keep class com.android.settings.users.* -keep class com.android.settings.nfc.* -keep class com.android.settings.notification.* +-keep class com.android.settings.overlay.FeatureFactoryImpl -keep class com.android.settings.accessibility.*FragmentForSetupWizard -keep class com.android.settings.display.*FragmentForSetupWizard diff --git a/res/values/config.xml b/res/values/config.xml index 3f25fc626a795e36481d3a4eb4646872154e5dfd..6cae9cfa6ee04a9a3091874860628868662d98ba 100755 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -38,4 +38,6 @@ <!-- When true enable color temperature setting. --> <bool name="config_enableColorTemperature">false</bool> + <!-- Fully-qualified class name for the implementation of the FeatureFactory to be instantiated. --> + <string name="config_featureFactory" translatable="false">com.android.settings.overlay.FeatureFactoryImpl</string> </resources> diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index 53c97b580c728bf42ae2d5a7f2be0fb6934d920b..56a9e5487b8cfdd0abc1747495ddf5d26e134501 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -102,6 +102,7 @@ import com.android.settings.notification.ZenModePrioritySettings; import com.android.settings.notification.ZenModeScheduleRuleSettings; import com.android.settings.notification.ZenModeSettings; import com.android.settings.notification.ZenModeVisualInterruptionSettings; +import com.android.settings.overlay.FeatureFactory; import com.android.settings.print.PrintJobSettingsFragment; import com.android.settings.print.PrintSettingsFragment; import com.android.settings.search.DynamicIndexableContentMonitor; @@ -681,6 +682,9 @@ public class SettingsActivity extends SettingsDrawerActivity } } + // Will remove this line before submitting. + FeatureFactory.getFactory(this).createToastController().makeToast(this); + if (DEBUG_TIMING) Log.d(LOG_TAG, "onCreate took " + (System.currentTimeMillis() - startTime) + " ms"); } diff --git a/src/com/android/settings/overlay/FeatureFactory.java b/src/com/android/settings/overlay/FeatureFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..a5e779d354d9ce20cef2238a7193509466b7b0a6 --- /dev/null +++ b/src/com/android/settings/overlay/FeatureFactory.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.overlay; + +import android.content.Context; +import android.text.TextUtils; +import android.util.Log; + +import com.android.settings.R; + +/** + * Abstract class for creating feature controllers. Allows OEM implementations to define their own + * factories with their own controllers containing whatever code is needed to implement + * the features. To provide a factory implementation, implementors should override + * {@link R.string#config_featureFactory} in their override. + */ +public abstract class FeatureFactory { + private static final String LOG_TAG = "FeatureFactory"; + private static final boolean DEBUG = false; + + private static FeatureFactory sFactory; + + /** + * Returns a factory for creating feature controllers. Creates the factory if it does not + * already exist. Uses the value of {@link R.string#config_featureFactory} to instantiate + * a factory implementation. + */ + public static FeatureFactory getFactory(Context context) { + if (sFactory != null) { + return sFactory; + } + + if (DEBUG) Log.d(LOG_TAG, "getFactory"); + final String clsName = context.getString(R.string.config_featureFactory); + if (TextUtils.isEmpty(clsName)) { + throw new UnsupportedOperationException("No feature factory configured"); + } + try { + sFactory = (FeatureFactory) context.getClassLoader().loadClass(clsName).newInstance(); + } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { + throw new FactoryNotFoundException(e); + } + + if (DEBUG) Log.d(LOG_TAG, "started " + sFactory.getClass().getSimpleName()); + return sFactory; + } + + /** + * Creates stub controller that makes {@link android.widget.Toast}s. + * Will be removed before submitting. + */ + public abstract ToastController createToastController(); + + public static class FactoryNotFoundException extends RuntimeException { + public FactoryNotFoundException(Throwable throwable) { + super("Unable to create factory. Did you misconfigure Proguard?", throwable); + } + } +} diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..4220bc015e8d215495d1c69e40b008fc5f177865 --- /dev/null +++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.overlay; + +import android.content.Context; +import android.widget.Toast; + +/** + * {@link FeatureFactory} implementation for AOSP Settings. + */ +public class FeatureFactoryImpl extends FeatureFactory { + @Override + public ToastController createToastController() { + return new ToastController() { + @Override + public void makeToast(Context context) { + Toast.makeText(context, "Here's a piece of AOSP toast", Toast.LENGTH_LONG).show(); + } + }; + } +} diff --git a/src/com/android/settings/overlay/ToastController.java b/src/com/android/settings/overlay/ToastController.java new file mode 100644 index 0000000000000000000000000000000000000000..d009ce2c3d2fea8a4c13ac94964a9398cc531ed0 --- /dev/null +++ b/src/com/android/settings/overlay/ToastController.java @@ -0,0 +1,10 @@ +package com.android.settings.overlay; + +import android.content.Context; + +/** + * Will be removed before submitting. Just a proof of concept for review. + */ +public interface ToastController { + void makeToast(Context context); +}