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;