diff options
Diffstat (limited to 'src')
5 files changed, 99 insertions, 4 deletions
diff --git a/src/com/android/launcher3/InstallShortcutReceiver.java b/src/com/android/launcher3/InstallShortcutReceiver.java index 1bab77449..80dec1670 100644 --- a/src/com/android/launcher3/InstallShortcutReceiver.java +++ b/src/com/android/launcher3/InstallShortcutReceiver.java @@ -218,6 +218,10 @@ public class InstallShortcutReceiver extends BroadcastReceiver { queuePendingShortcutInfo(new PendingInstallShortcutInfo(info, widgetId, context), context); } + public static void queueActivityInfo(LauncherActivityInfo activity, Context context) { + queuePendingShortcutInfo(new PendingInstallShortcutInfo(activity, context), context); + } + public static HashSet<ShortcutKey> getPendingShortcuts(Context context) { HashSet<ShortcutKey> result = new HashSet<>(); diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 9b3764977..0a0859758 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1151,9 +1151,10 @@ public class Launcher extends BaseActivity if (mLauncherCallbacks != null) { return mLauncherCallbacks.hasSettings(); } else { - // On devices with a locked orientation, we will at least have the allow rotation - // setting. - return !getResources().getBoolean(R.bool.allow_rotation); + // On O and above we there is always some setting present settings (add icon to + // home screen or icon badging). On earlier APIs we will have the allow rotation + // setting, on devices with a locked orientation, + return Utilities.isAtLeastO() || !getResources().getBoolean(R.bool.allow_rotation); } } diff --git a/src/com/android/launcher3/SessionCommitReceiver.java b/src/com/android/launcher3/SessionCommitReceiver.java new file mode 100644 index 000000000..e8bf0a5c3 --- /dev/null +++ b/src/com/android/launcher3/SessionCommitReceiver.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2008 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; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.pm.LauncherActivityInfo; +import android.content.pm.PackageInstaller; +import android.content.pm.PackageInstaller.SessionInfo; +import android.os.Process; +import android.os.UserHandle; +import android.text.TextUtils; + +import com.android.launcher3.compat.LauncherAppsCompat; + +import java.util.List; + +/** + * BroadcastReceiver to handle session commit intent. + */ +public class SessionCommitReceiver extends BroadcastReceiver { + + // Preference key for automatically adding icon to homescreen. + public static final String ADD_ICON_PREFERENCE_KEY = "pref_add_icon_to_home"; + + @Override + public void onReceive(Context context, Intent intent) { + if (!isEnabled(context)) { + // User has decided to not add icons on homescreen. + return; + } + + SessionInfo info = intent.getParcelableExtra(PackageInstaller.EXTRA_SESSION); + UserHandle user = intent.getParcelableExtra(Intent.EXTRA_USER); + // TODO: Verify install reason + if (TextUtils.isEmpty(info.getAppPackageName())) { + return; + } + + if (!Process.myUserHandle().equals(user)) { + // Managed profile is handled using ManagedProfileHeuristic + return; + } + + List<LauncherActivityInfo> activities = LauncherAppsCompat.getInstance(context) + .getActivityList(info.getAppPackageName(), user); + if (activities == null || activities.isEmpty()) { + // no activity found + return; + } + InstallShortcutReceiver.queueActivityInfo(activities.get(0), context); + } + + public static boolean isEnabled(Context context) { + return Utilities.getPrefs(context).getBoolean(ADD_ICON_PREFERENCE_KEY, true); + } +} diff --git a/src/com/android/launcher3/SettingsActivity.java b/src/com/android/launcher3/SettingsActivity.java index cedeb3967..552e24ae4 100644 --- a/src/com/android/launcher3/SettingsActivity.java +++ b/src/com/android/launcher3/SettingsActivity.java @@ -25,6 +25,7 @@ import android.preference.Preference; import android.preference.PreferenceFragment; import android.provider.Settings; import android.provider.Settings.System; +import android.support.v4.os.BuildCompat; /** * Settings activity for Launcher. Currently implements the following setting: Allow rotation @@ -72,6 +73,11 @@ public class SettingsActivity extends Activity { mRotationLockObserver.onChange(true); rotationPref.setDefaultValue(Utilities.getAllowRotationDefaultValue(getActivity())); } + + if (!BuildCompat.isAtLeastO()) { + getPreferenceScreen().removePreference( + findPreference(SessionCommitReceiver.ADD_ICON_PREFERENCE_KEY)); + } } @Override diff --git a/src/com/android/launcher3/util/ManagedProfileHeuristic.java b/src/com/android/launcher3/util/ManagedProfileHeuristic.java index 189c69076..85a000cd8 100644 --- a/src/com/android/launcher3/util/ManagedProfileHeuristic.java +++ b/src/com/android/launcher3/util/ManagedProfileHeuristic.java @@ -21,6 +21,7 @@ import android.content.SharedPreferences; import android.content.pm.LauncherActivityInfo; import android.os.Process; import android.os.UserHandle; +import android.support.v4.os.BuildCompat; import com.android.launcher3.AppInfo; import com.android.launcher3.FolderInfo; @@ -31,6 +32,7 @@ import com.android.launcher3.LauncherFiles; import com.android.launcher3.LauncherModel; import com.android.launcher3.MainThreadExecutor; import com.android.launcher3.R; +import com.android.launcher3.SessionCommitReceiver; import com.android.launcher3.ShortcutInfo; import com.android.launcher3.compat.UserManagerCompat; import com.android.launcher3.shortcuts.ShortcutInfoCompat; @@ -68,12 +70,15 @@ public class ManagedProfileHeuristic { private final LauncherModel mModel; private final UserHandle mUser; private final IconCache mIconCache; + private final boolean mAddIconsToHomescreen; private ManagedProfileHeuristic(Context context, UserHandle user) { mContext = context; mUser = user; mModel = LauncherAppState.getInstance(context).getModel(); mIconCache = LauncherAppState.getInstance(context).getIconCache(); + mAddIconsToHomescreen = + !BuildCompat.isAtLeastO() || SessionCommitReceiver.isEnabled(context); } public void processPackageRemoved(String[] packages) { @@ -127,7 +132,7 @@ public class ManagedProfileHeuristic { // Do not add shortcuts on the homescreen for the first time. This prevents the launcher // getting filled with the managed user apps, when it start with a fresh DB (or after // a very long time). - if (userAppsExisted && !homescreenApps.isEmpty()) { + if (userAppsExisted && !homescreenApps.isEmpty() && mAddIconsToHomescreen) { mModel.addAndBindAddedWorkspaceItems(new ArrayList<ItemInfo>(homescreenApps)); } } @@ -147,6 +152,13 @@ public class ManagedProfileHeuristic { } // Try to get a work folder. String folderIdKey = USER_FOLDER_ID_PREFIX + mUserManager.getSerialNumberForUser(user); + if (!mAddIconsToHomescreen) { + if (!mPrefs.contains(folderIdKey)) { + // Just mark the folder id preference to avoid new folder creation later. + mPrefs.edit().putLong(folderIdKey, -1).apply(); + } + return; + } if (mPrefs.contains(folderIdKey)) { long folderId = mPrefs.getLong(folderIdKey, 0); final FolderInfo workFolder = mModel.findFolderById(folderId); |