diff --git a/proguard.flags b/proguard.flags
index 232b805a1..bc9c5a2a6 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -107,9 +107,6 @@
*;
}
--keep class com.google.android.apps.nexuslauncher.CustomIconProvider {
- *;
-}
-keep class com.google.android.apps.nexuslauncher.CustomDrawableFactory {
*;
diff --git a/res/values/config.xml b/res/values/config.xml
index 547c63634..a9698b4e3 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -104,11 +104,12 @@
true
+
- com.google.android.apps.nexuslauncher.CustomIconProvider
+ com.google.android.apps.nexuslauncher.DynamicIconProvider
- com.google.android.apps.nexuslauncher.CustomDrawableFactory
+ com.google.android.apps.nexuslauncher.DynamicDrawableFactory
com.google.android.apps.nexuslauncher.CustomAppPredictor
diff --git a/res/xml/launcher_preferences.xml b/res/xml/launcher_preferences.xml
index b63486de8..b37655808 100644
--- a/res/xml/launcher_preferences.xml
+++ b/res/xml/launcher_preferences.xml
@@ -288,13 +288,6 @@
android:entryValues="@array/icon_shape_override_paths_values"
android:defaultValue=""
android:persistent="false" />
-
-
diff --git a/src/com/google/android/apps/nexuslauncher/CustomDrawableFactory.java b/src/com/google/android/apps/nexuslauncher/CustomDrawableFactory.java
deleted file mode 100644
index 05b759731..000000000
--- a/src/com/google/android/apps/nexuslauncher/CustomDrawableFactory.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.google.android.apps.nexuslauncher;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-
-import com.android.launcher3.FastBitmapDrawable;
-import com.android.launcher3.ItemInfo;
-import com.android.launcher3.Utilities;
-
-public class CustomDrawableFactory extends DynamicDrawableFactory {
- private final boolean hasIconPack;
-
- public CustomDrawableFactory(Context context) {
- super(context);
- hasIconPack = !Utilities.getPrefs(context).getString(SettingsActivity.ICON_PACK_PREF, "").isEmpty();
- }
-
- @Override
- public FastBitmapDrawable newIcon(Bitmap icon, ItemInfo info) {
- if (hasIconPack) {
- return new FastBitmapDrawable(icon);
- }
- return super.newIcon(icon, info);
- }
-}
diff --git a/src/com/google/android/apps/nexuslauncher/CustomIconPreference.java b/src/com/google/android/apps/nexuslauncher/CustomIconPreference.java
deleted file mode 100644
index 0f46820bb..000000000
--- a/src/com/google/android/apps/nexuslauncher/CustomIconPreference.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.google.android.apps.nexuslauncher;
-
-import android.app.AlertDialog;
-import android.content.Context;
-import android.preference.ListPreference;
-import android.util.AttributeSet;
-
-import com.android.launcher3.R;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class CustomIconPreference extends ListPreference {
- public CustomIconPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- }
-
- public CustomIconPreference(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- }
-
- public CustomIconPreference(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public CustomIconPreference(Context context) {
- super(context);
- }
-
- @Override
- protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
- reloadIconPacks();
- super.onPrepareDialogBuilder(builder);
- }
-
- void reloadIconPacks() {
- Context context = getContext();
- HashMap packList = CustomIconUtils.getPackProviders(context);
-
- CharSequence[] keys = new String[packList.size() + 1];
- keys[0] = context.getResources().getString(R.string.icon_shape_system_default);
-
- CharSequence[] values = new String[keys.length];
- values[0] = "";
-
- int i = 1;
- for (Map.Entry entry : packList.entrySet()) {
- keys[i] = entry.getValue();
- values[i++] = entry.getKey();
- }
-
- setEntries(keys);
- setEntryValues(values);
- }
-}
\ No newline at end of file
diff --git a/src/com/google/android/apps/nexuslauncher/CustomIconProvider.java b/src/com/google/android/apps/nexuslauncher/CustomIconProvider.java
deleted file mode 100644
index fe84ec985..000000000
--- a/src/com/google/android/apps/nexuslauncher/CustomIconProvider.java
+++ /dev/null
@@ -1,186 +0,0 @@
-package com.google.android.apps.nexuslauncher;
-
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.LauncherActivityInfo;
-import android.content.pm.PackageManager;
-import android.content.res.AssetManager;
-import android.content.res.Resources;
-import android.content.res.XmlResourceParser;
-import android.graphics.drawable.AdaptiveIconDrawable;
-import android.graphics.drawable.Drawable;
-import android.os.Handler;
-import android.os.UserHandle;
-
-import com.android.launcher3.LauncherAppState;
-import com.android.launcher3.LauncherModel;
-import com.android.launcher3.Utilities;
-import com.android.launcher3.compat.LauncherAppsCompat;
-import com.android.launcher3.compat.UserManagerCompat;
-import com.android.launcher3.shortcuts.DeepShortcutManager;
-import com.android.launcher3.shortcuts.ShortcutInfoCompat;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.IOException;
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-public class CustomIconProvider extends DynamicIconProvider implements Runnable {
- private final Context mContext;
- private final PackageManager mPackageManager;
- private final BroadcastReceiver mDateChangeReceiver;
- private final Map mIconPackComponents = new HashMap<>();
- private final Map mIconPackCalendars = new HashMap<>();
- private Thread mThread;
- private String mIconPack;
- private int mDateOfMonth;
-
- public CustomIconProvider(Context context) {
- super(context);
- mContext = context;
- mDateChangeReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (!Utilities.ATLEAST_NOUGAT) {
- int dateOfMonth = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
- if (dateOfMonth == mDateOfMonth) {
- return;
- }
- mDateOfMonth = dateOfMonth;
- }
- for (UserHandle user : UserManagerCompat.getInstance(context).getUserProfiles()) {
- LauncherAppsCompat apps = LauncherAppsCompat.getInstance(mContext);
- Set packages = new HashSet<>();
- for (Map.Entry calendars : mIconPackCalendars.entrySet()) {
- ComponentName componentName = ComponentName.unflattenFromString(calendars.getKey().substring(14, calendars.getKey().length() - 1));
- if (componentName != null) {
- String pkg = componentName.getPackageName();
- if (!apps.getActivityList(pkg, user).isEmpty()) {
- packages.add(pkg);
- }
- }
- }
- LauncherModel model = LauncherAppState.getInstance(context).getModel();
- for (String pkg : packages) {
- model.onPackageChanged(pkg, user);
- List shortcuts = DeepShortcutManager.getInstance(context).queryForPinnedShortcuts(pkg, user);
- if (!shortcuts.isEmpty()) {
- model.updatePinnedShortcuts(pkg, shortcuts, user);
- }
- }
- }
- }
- };
- IntentFilter intentFilter = new IntentFilter(Intent.ACTION_DATE_CHANGED);
- intentFilter.addAction(Intent.ACTION_TIME_CHANGED);
- intentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
- if (!Utilities.ATLEAST_NOUGAT) {
- intentFilter.addAction(Intent.ACTION_TIME_TICK);
- }
- mContext.registerReceiver(mDateChangeReceiver, intentFilter, null, new Handler(LauncherModel.getWorkerLooper()));
-
- mPackageManager = context.getPackageManager();
-
- mThread = new Thread(this);
- mThread.start();
- }
-
- @Override
- public void run() {
- mIconPack = Utilities.getPrefs(mContext).getString(SettingsActivity.ICON_PACK_PREF, "");
- if (CustomIconUtils.isPackProvider(mContext, mIconPack)) {
- try {
- Resources res = mPackageManager.getResourcesForApplication(mIconPack);
- int resId = res.getIdentifier("appfilter", "xml", mIconPack);
- if (resId != 0) {
- XmlResourceParser parseXml = mPackageManager.getXml(mIconPack, resId, null);
- while (parseXml.next() != XmlPullParser.END_DOCUMENT) {
- if (parseXml.getEventType() == XmlPullParser.START_TAG) {
- boolean isCalendar = parseXml.getName().equals("calendar");
- if (isCalendar || parseXml.getName().equals("item")) {
- String componentName = parseXml.getAttributeValue(null, "component");
- String drawableName = parseXml.getAttributeValue(null, isCalendar ? "prefix" : "drawable");
- if (componentName != null && drawableName != null) {
- if (isCalendar) {
- mIconPackCalendars.put(componentName, drawableName);
- } else {
- int drawableId = res.getIdentifier(drawableName, "drawable", mIconPack);
- if (drawableId != 0) {
- mIconPackComponents.put(componentName, drawableId);
- }
- }
- }
- }
- }
- }
- }
- } catch (PackageManager.NameNotFoundException | XmlPullParserException | IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- @Override
- public Drawable getIcon(LauncherActivityInfo launcherActivityInfo, int iconDpi, boolean flattenDrawable) {
- try {
- mThread.join();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
-
- String packageName = launcherActivityInfo.getApplicationInfo().packageName;
- String component = launcherActivityInfo.getComponentName().toString();
- Drawable drawable = null;
- if (mIconPackCalendars.containsKey(component)) {
- try {
- Resources res = mPackageManager.getResourcesForApplication(mIconPack);
- int drawableId = res.getIdentifier(mIconPackCalendars.get(component)
- + Calendar.getInstance().get(Calendar.DAY_OF_MONTH), "drawable", mIconPack);
- if (drawableId != 0) {
- drawable = mPackageManager.getDrawable(mIconPack, drawableId, null);
- }
- } catch (PackageManager.NameNotFoundException ignored) {
- }
- } else if (mIconPackComponents.containsKey(component)) {
- drawable = mPackageManager.getDrawable(mIconPack, mIconPackComponents.get(component), null);
- }
-
- if (drawable == null) {
- drawable = super.getIcon(launcherActivityInfo, iconDpi, flattenDrawable);
- if ((!Utilities.ATLEAST_OREO || !(drawable instanceof AdaptiveIconDrawable)) &&
- !"com.google.android.calendar".equals(packageName)) {
- Drawable roundIcon = getRoundIcon(packageName, iconDpi);
- if (roundIcon != null) {
- drawable = roundIcon;
- }
- }
- }
- return drawable;
- }
-
- private Drawable getRoundIcon(String packageName, int iconDpi) {
- try {
- Resources resourcesForApplication = mPackageManager.getResourcesForApplication(packageName);
- AssetManager assets = resourcesForApplication.getAssets();
- XmlResourceParser parseXml = assets.openXmlResourceParser("AndroidManifest.xml");
- while (parseXml.next() != XmlPullParser.END_DOCUMENT)
- if (parseXml.getEventType() == XmlPullParser.START_TAG && parseXml.getName().equals("application"))
- for (int i = 0; i < parseXml.getAttributeCount(); i++)
- if (parseXml.getAttributeName(i).equals("roundIcon"))
- return resourcesForApplication.getDrawableForDensity(Integer.parseInt(parseXml.getAttributeValue(i).substring(1)), iconDpi);
- parseXml.close();
- } catch (PackageManager.NameNotFoundException | Resources.NotFoundException | IOException | XmlPullParserException ex) {
- ex.printStackTrace();
- }
- return null;
- }
-}
diff --git a/src/com/google/android/apps/nexuslauncher/CustomIconUtils.java b/src/com/google/android/apps/nexuslauncher/CustomIconUtils.java
deleted file mode 100644
index 5f6b20dd4..000000000
--- a/src/com/google/android/apps/nexuslauncher/CustomIconUtils.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.google.android.apps.nexuslauncher;
-
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-public class CustomIconUtils {
- public final static String[] ICON_INTENTS = new String[] {
- "com.fede.launcher.THEME_ICONPACK",
- "com.anddoes.launcher.THEME",
- "com.teslacoilsw.launcher.THEME",
- "com.gau.go.launcherex.theme",
- "org.adw.launcher.THEMES",
- "org.adw.launcher.icons.ACTION_PICK_ICON"
- };
-
- public static HashMap getPackProviders(Context context) {
- PackageManager pm = context.getPackageManager();
- HashMap packs = new HashMap<>();
- for (String intent : ICON_INTENTS) {
- for (ResolveInfo info : pm.queryIntentActivities(new Intent(intent), PackageManager.GET_META_DATA)) {
- packs.put(info.activityInfo.packageName, info.loadLabel(pm));
- }
- }
- return packs;
- }
-
- public static boolean isPackProvider(Context context, String packageName) {
- PackageManager pm = context.getPackageManager();
- for (String intent : ICON_INTENTS) {
- if (pm.queryIntentActivities(new Intent(intent).setPackage(packageName),
- PackageManager.GET_META_DATA).iterator().hasNext()) {
- return true;
- }
- }
- return false;
- }
-}
diff --git a/src/com/google/android/apps/nexuslauncher/SettingsActivity.java b/src/com/google/android/apps/nexuslauncher/SettingsActivity.java
index c11cb5a2e..11bac7faa 100644
--- a/src/com/google/android/apps/nexuslauncher/SettingsActivity.java
+++ b/src/com/google/android/apps/nexuslauncher/SettingsActivity.java
@@ -1,13 +1,9 @@
package com.google.android.apps.nexuslauncher;
-import android.annotation.SuppressLint;
-import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.Fragment;
-import android.app.PendingIntent;
-import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@@ -16,7 +12,6 @@
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.os.Bundle;
-import android.os.SystemClock;
import android.os.Vibrator;
import android.preference.Preference;
import android.preference.PreferenceFragment;
@@ -26,16 +21,13 @@
import android.widget.Toast;
import com.android.launcher3.BuildConfig;
-import com.android.launcher3.LauncherAppState;
-import com.android.launcher3.LauncherModel;
import com.android.launcher3.MultiSelectRecyclerViewActivity;
+
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
-import com.android.launcher3.util.LooperExecutor;
import com.google.android.apps.nexuslauncher.smartspace.SmartspaceController;
public class SettingsActivity extends com.android.launcher3.SettingsActivity implements PreferenceFragment.OnPreferenceStartFragmentCallback {
- public final static String ICON_PACK_PREF = "pref_icon_pack";
public final static String SHOW_PREDICTIONS_PREF = "pref_show_predictions";
public final static String ENABLE_MINUS_ONE_PREF = "pref_enable_minus_one";
public final static String SMARTSPACE_PREF = "pref_smartspace";
@@ -63,7 +55,6 @@ public boolean onPreferenceStartFragment(PreferenceFragment preferenceFragment,
public static class MySettingsFragment extends com.android.launcher3.SettingsActivity.LauncherSettingsFragment
implements Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener {
- private CustomIconPreference mIconPackPref;
private Context mContext;
@Override
@@ -89,8 +80,7 @@ public void onCreate(Bundle bundle) {
}
findPreference(APP_BUILD_DATE_PREF).setSummary(BuildConfig.BUILD_TIME + "\n" + "(" + BuildConfig.BUILD_HOST + "/" + BuildConfig.BUILD_WHOAMI + ")");
- mIconPackPref = (CustomIconPreference) findPreference(ICON_PACK_PREF);
- mIconPackPref.setOnPreferenceChangeListener(this);
+
Preference vibrate = findPreference(Utilities.VIBRATIONFEEDBACKTEST);
vibrate.setOnPreferenceClickListener(this);
@@ -138,50 +128,11 @@ private String getDisplayGoogleTitle() {
@Override
public void onResume() {
super.onResume();
- mIconPackPref.reloadIconPacks();
}
@Override
public boolean onPreferenceChange(Preference preference, final Object newValue) {
switch (preference.getKey()) {
- case ICON_PACK_PREF:
- ProgressDialog.show(mContext,
- null /* title */,
- mContext.getString(R.string.state_loading),
- true /* indeterminate */,
- false /* cancelable */);
-
- new LooperExecutor(LauncherModel.getWorkerLooper()).execute(new Runnable() {
- @SuppressLint("ApplySharedPref")
- @Override
- public void run() {
- // Clear the icon cache.
- LauncherAppState.getInstance(mContext).getIconCache().clear();
-
- // Wait for it
- try {
- Thread.sleep(1000);
- } catch (Exception e) {
- Log.e("SettingsActivity", "Error waiting", e);
- }
-
- if (Utilities.ATLEAST_MARSHMALLOW) {
- // Schedule an alarm before we kill ourself.
- Intent homeIntent = new Intent(Intent.ACTION_MAIN)
- .addCategory(Intent.CATEGORY_HOME)
- .setPackage(mContext.getPackageName())
- .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- PendingIntent pi = PendingIntent.getActivity(mContext, 0,
- homeIntent, PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT);
- getContext().getSystemService(AlarmManager.class).setExact(
- AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 50, pi);
- }
-
- // Kill process
- android.os.Process.killProcess(android.os.Process.myPid());
- }
- });
- return true;
case SHOW_PREDICTIONS_PREF:
if ((boolean) newValue) {
return true;