DefaultHomePicker.java revision a278962dbc545f69ca3712159d438f2e50dab0a5
1b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala/* 2b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * Copyright (C) 2017 The Android Open Source Project 3b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 4b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 5b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * you may not use this file except in compliance with the License. 6b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * You may obtain a copy of the License at 7b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 8b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 9b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 10b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 11b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 12b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * See the License for the specific language governing permissions and 14b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * limitations under the License. 15b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 16b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 172f1a2e423e0fbb64467d6fcfa4e82c6384f31210Eino-Ville Talvalapackage com.android.settings.applications.defaultapps; 18b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 198b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvalaimport android.content.ComponentName; 208b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvalaimport android.content.Context; 218b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvalaimport android.content.IntentFilter; 2249c62f51ba7b91149d428136fac3972ef40dc35fEino-Ville Talvalaimport android.content.pm.ActivityInfo; 2349c62f51ba7b91149d428136fac3972ef40dc35fEino-Ville Talvalaimport android.content.pm.ApplicationInfo; 2449c62f51ba7b91149d428136fac3972ef40dc35fEino-Ville Talvalaimport android.content.pm.PackageManager; 2549c62f51ba7b91149d428136fac3972ef40dc35fEino-Ville Talvalaimport android.content.pm.ResolveInfo; 265398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chenimport android.content.pm.UserInfo; 279c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkinimport android.os.Build; 2849ea6ae76d78ff8d179c0957d4bc55f08cb98d0fYin-Chia Yehimport android.text.TextUtils; 2975a5570f7db6990e12100afbd3985c09fcff8d32Emilian Peev 304af73c2153747d0624ccc75dfa001cb91982957fEino-Ville Talvalaimport com.android.internal.logging.nano.MetricsProto; 31599be6182e1a8f647f02d02ed99d16a74db2a4c6Zhijun Heimport com.android.settings.R; 32b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 33b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvalaimport java.util.ArrayList; 342100ae7d2b448206813de76ec7e7260e4e765193Emilian Peevimport java.util.List; 358b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvala 368b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvalapublic class DefaultHomePicker extends DefaultAppPickerFragment { 37b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 38b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala private String mPackageName; 3921547d66a9ce591ff30a3ad4102f7f30a4764d80Igor Murashkin 40b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala @Override 41b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala public void onAttach(Context context) { 42b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala super.onAttach(context); 43b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala mPackageName = context.getPackageName(); 44b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala } 45b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 46b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala @Override 47b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala public int getMetricsCategory() { 48b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala return MetricsProto.MetricsEvent.DEFAULT_HOME_PICKER; 49b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala } 50b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 51b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala @Override 52b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala protected List<DefaultAppInfo> getCandidates() { 53b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala final boolean mustSupportManagedProfile = hasManagedProfile(); 54b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala final List<DefaultAppInfo> candidates = new ArrayList<>(); 55a636be6c9a8a9192f72a111c2b3084a226d37b7eYin-Chia Yeh final List<ResolveInfo> homeActivities = new ArrayList<>(); 56b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala mPm.getHomeActivities(homeActivities); 57b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 58b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala for (ResolveInfo resolveInfo : homeActivities) { 59b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala final ActivityInfo info = resolveInfo.activityInfo; 60b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala final ComponentName activityName = new ComponentName(info.packageName, info.name); 6121547d66a9ce591ff30a3ad4102f7f30a4764d80Igor Murashkin if (info.packageName.equals(mPackageName)) { 62b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala continue; 63b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala } 64b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 65b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala final String summary; 66b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala if (mustSupportManagedProfile && !launcherHasManagedProfilesFeature(resolveInfo)) { 67b67a3b36fd569e63c1b8ca6b2701c34c7a3927c1Eino-Ville Talvala summary = getContext().getString(R.string.home_work_profile_not_supported); 680cd24f2c569daafdfb2e7567875a864dc53f3698Yin-Chia Yeh } else { 69b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala summary = null; 70b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala } 71b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala final DefaultAppInfo candidate = 72b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala new DefaultAppInfo(mPm, mUserId, activityName, summary); 73b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala candidates.add(candidate); 74b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala } 75b8b77bf59ed377d6a9bcd80b8dbe4e146d5fddd3Zhijun He return candidates; 76b8b77bf59ed377d6a9bcd80b8dbe4e146d5fddd3Zhijun He } 77b67a3b36fd569e63c1b8ca6b2701c34c7a3927c1Eino-Ville Talvala 785b0a58ea45157efcf8b8d742fcc57f60a116ecc9Chien-Yu Chen @Override 795b0a58ea45157efcf8b8d742fcc57f60a116ecc9Chien-Yu Chen protected String getDefaultKey() { 805b0a58ea45157efcf8b8d742fcc57f60a116ecc9Chien-Yu Chen final ArrayList<ResolveInfo> homeActivities = new ArrayList<>(); 815b0a58ea45157efcf8b8d742fcc57f60a116ecc9Chien-Yu Chen final ComponentName currentDefaultHome = mPm.getHomeActivities(homeActivities); 82b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala if (currentDefaultHome != null) { 83b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala return currentDefaultHome.flattenToString(); 84b8b77bf59ed377d6a9bcd80b8dbe4e146d5fddd3Zhijun He } 85b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala return null; 86b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala } 87b8b77bf59ed377d6a9bcd80b8dbe4e146d5fddd3Zhijun He 88b8b77bf59ed377d6a9bcd80b8dbe4e146d5fddd3Zhijun He @Override 89b8b77bf59ed377d6a9bcd80b8dbe4e146d5fddd3Zhijun He protected boolean setDefaultKey(String key) { 90b67a3b36fd569e63c1b8ca6b2701c34c7a3927c1Eino-Ville Talvala if (!TextUtils.isEmpty(key)) { 915b0a58ea45157efcf8b8d742fcc57f60a116ecc9Chien-Yu Chen final ComponentName component = ComponentName.unflattenFromString(key); 925b0a58ea45157efcf8b8d742fcc57f60a116ecc9Chien-Yu Chen final List<ResolveInfo> homeActivities = new ArrayList<>(); 935b0a58ea45157efcf8b8d742fcc57f60a116ecc9Chien-Yu Chen mPm.getHomeActivities(homeActivities); 945b0a58ea45157efcf8b8d742fcc57f60a116ecc9Chien-Yu Chen final List<ComponentName> allComponents = new ArrayList<>(); 95b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala for (ResolveInfo info : homeActivities) { 96b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala final ActivityInfo appInfo = info.activityInfo; 97b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala ComponentName activityName = new ComponentName(appInfo.packageName, appInfo.name); 98b8b77bf59ed377d6a9bcd80b8dbe4e146d5fddd3Zhijun He allComponents.add(activityName); 99b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala } 100b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala mPm.replacePreferredActivity( 101b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala DefaultHomePreferenceController.HOME_FILTER, 102b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala IntentFilter.MATCH_CATEGORY_EMPTY, 103b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala allComponents.toArray(new ComponentName[0]), 104b67a3b36fd569e63c1b8ca6b2701c34c7a3927c1Eino-Ville Talvala component); 105b67a3b36fd569e63c1b8ca6b2701c34c7a3927c1Eino-Ville Talvala return true; 1060cd24f2c569daafdfb2e7567875a864dc53f3698Yin-Chia Yeh } 1070cd24f2c569daafdfb2e7567875a864dc53f3698Yin-Chia Yeh return false; 1085b0a58ea45157efcf8b8d742fcc57f60a116ecc9Chien-Yu Chen } 1095b0a58ea45157efcf8b8d742fcc57f60a116ecc9Chien-Yu Chen 1105b0a58ea45157efcf8b8d742fcc57f60a116ecc9Chien-Yu Chen private boolean hasManagedProfile() { 1115b0a58ea45157efcf8b8d742fcc57f60a116ecc9Chien-Yu Chen final Context context = getContext(); 112b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala List<UserInfo> profiles = mUserManager.getProfiles(context.getUserId()); 113b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala for (UserInfo userInfo : profiles) { 114b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala if (userInfo.isManagedProfile()) { 115b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala return true; 116b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala } 117b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala } 118bbae94a02e73020646535b0d915f4557c39f357bZhijun He return false; 119bbae94a02e73020646535b0d915f4557c39f357bZhijun He } 1206828bb92bd9e5eeb3aa6d049a37e5ddec5dab355Chien-Yu Chen 1216828bb92bd9e5eeb3aa6d049a37e5ddec5dab355Chien-Yu Chen private boolean launcherHasManagedProfilesFeature(ResolveInfo resolveInfo) { 1220cd24f2c569daafdfb2e7567875a864dc53f3698Yin-Chia Yeh try { 1238062d31d27943da4d652878b4c36aeabb8bb8b08Chien-Yu Chen ApplicationInfo appInfo = mPm.getPackageManager().getApplicationInfo( 1240cd24f2c569daafdfb2e7567875a864dc53f3698Yin-Chia Yeh resolveInfo.activityInfo.packageName, 0 /* default flags */); 1250cd24f2c569daafdfb2e7567875a864dc53f3698Yin-Chia Yeh return versionNumberAtLeastL(appInfo.targetSdkVersion); 1260cd24f2c569daafdfb2e7567875a864dc53f3698Yin-Chia Yeh } catch (PackageManager.NameNotFoundException e) { 127bbae94a02e73020646535b0d915f4557c39f357bZhijun He return false; 128bbae94a02e73020646535b0d915f4557c39f357bZhijun He } 1296828bb92bd9e5eeb3aa6d049a37e5ddec5dab355Chien-Yu Chen } 130bbae94a02e73020646535b0d915f4557c39f357bZhijun He 131bbae94a02e73020646535b0d915f4557c39f357bZhijun He private boolean versionNumberAtLeastL(int versionNumber) { 132bbae94a02e73020646535b0d915f4557c39f357bZhijun He return versionNumber >= Build.VERSION_CODES.LOLLIPOP; 133bbae94a02e73020646535b0d915f4557c39f357bZhijun He } 134b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala} 135b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala