summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/util
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2018-06-27 15:47:49 -0700
committerSunny Goyal <sunnygoyal@google.com>2018-07-02 11:16:04 -0700
commit7f920b8d5ed41375641cc991a037499443dc9098 (patch)
tree7e61f78359542d81d0f85ab1bffe4d7bf611b84a /src/com/android/launcher3/util
parent132bfb8a1f3d7697b98b9c1813f8fe2ddbfb5b36 (diff)
downloadandroid_packages_apps_Trebuchet-7f920b8d5ed41375641cc991a037499443dc9098.tar.gz
android_packages_apps_Trebuchet-7f920b8d5ed41375641cc991a037499443dc9098.tar.bz2
android_packages_apps_Trebuchet-7f920b8d5ed41375641cc991a037499443dc9098.zip
Cleaning up build rules to simplify customizing derivative projects
> Using {packageName} instead of hardcoding com.android.launcher3 in AndroidManifest.xml for strings which are dependent on packageName > Adding proguard rule to prevent obfuscating any overridable class > Making it easier to extend SettingsActivity by overriding the fragment class Change-Id: I5668c3f33b4cf20ad01d7f54b3d79cc0d268d391
Diffstat (limited to 'src/com/android/launcher3/util')
-rw-r--r--src/com/android/launcher3/util/InstantAppResolver.java5
-rw-r--r--src/com/android/launcher3/util/ResourceBasedOverride.java54
2 files changed, 56 insertions, 3 deletions
diff --git a/src/com/android/launcher3/util/InstantAppResolver.java b/src/com/android/launcher3/util/InstantAppResolver.java
index 4485427f5..5dc7af855 100644
--- a/src/com/android/launcher3/util/InstantAppResolver.java
+++ b/src/com/android/launcher3/util/InstantAppResolver.java
@@ -23,7 +23,6 @@ import android.util.Log;
import com.android.launcher3.AppInfo;
import com.android.launcher3.R;
-import com.android.launcher3.Utilities;
import java.util.Collections;
import java.util.List;
@@ -31,10 +30,10 @@ import java.util.List;
/**
* A wrapper class to access instant app related APIs.
*/
-public class InstantAppResolver {
+public class InstantAppResolver implements ResourceBasedOverride {
public static InstantAppResolver newInstance(Context context) {
- return Utilities.getOverrideObject(
+ return Overrides.getObject(
InstantAppResolver.class, context, R.string.instant_app_resolver_class);
}
diff --git a/src/com/android/launcher3/util/ResourceBasedOverride.java b/src/com/android/launcher3/util/ResourceBasedOverride.java
new file mode 100644
index 000000000..e2c4992a4
--- /dev/null
+++ b/src/com/android/launcher3/util/ResourceBasedOverride.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2018 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.launcher3.util;
+
+import android.content.Context;
+import android.text.TextUtils;
+import android.util.Log;
+
+import java.lang.reflect.InvocationTargetException;
+
+/**
+ * An interface to indicate that a class is dynamically loaded using resource overlay, hence its
+ * class name and constructor should be preserved by proguard
+ */
+public interface ResourceBasedOverride {
+
+ class Overrides {
+
+ private static final String TAG = "Overrides";
+
+ public static <T extends ResourceBasedOverride> T getObject(
+ Class<T> clazz, Context context, int resId) {
+ String className = context.getString(resId);
+ if (!TextUtils.isEmpty(className)) {
+ try {
+ Class<?> cls = Class.forName(className);
+ return (T) cls.getDeclaredConstructor(Context.class).newInstance(context);
+ } catch (ClassNotFoundException | InstantiationException | IllegalAccessException
+ | ClassCastException | NoSuchMethodException | InvocationTargetException e) {
+ Log.e(TAG, "Bad overriden class", e);
+ }
+ }
+
+ try {
+ return clazz.newInstance();
+ } catch (InstantiationException|IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+}