Show default app icon in default app screen.
- Renamed AdvancedAppSettings to DefaultAppSettings. - Add logic to DefaultAppPreferenceController to also display icon. - Modified DefautlAssistPrefController to suppress gear icon, and use the controller in default app setting UI to display icon. - Remove dynamic injected payment setting activity and create the setting statically in xml. - Add DefaultPaymentSettingsPreference to display default payment app title (no icon because we can't get it) Change-Id: I6b8c768da0bafe5ec9a85ba9c79c7993b449be25 Fix: 36458534 Test: robotests
This commit is contained in:
@@ -18,7 +18,6 @@ package com.android.settings.applications.defaultapps;
|
||||
|
||||
import android.app.AppGlobals;
|
||||
import android.content.ComponentName;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.ComponentInfo;
|
||||
import android.content.pm.PackageItemInfo;
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.android.settings.applications.defaultapps;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.support.v7.preference.Preference;
|
||||
@@ -54,9 +55,11 @@ public abstract class DefaultAppPreferenceController extends AbstractPreferenceC
|
||||
CharSequence defaultAppLabel = getDefaultAppLabel();
|
||||
if (!TextUtils.isEmpty(defaultAppLabel)) {
|
||||
preference.setSummary(defaultAppLabel);
|
||||
preference.setIcon(getDefaultAppIcon());
|
||||
} else {
|
||||
Log.d(TAG, "No default app");
|
||||
preference.setSummary(R.string.app_list_preference_none);
|
||||
preference.setIcon(null);
|
||||
}
|
||||
mayUpdateGearIcon(app, preference);
|
||||
}
|
||||
@@ -84,6 +87,17 @@ public abstract class DefaultAppPreferenceController extends AbstractPreferenceC
|
||||
return null;
|
||||
}
|
||||
|
||||
public Drawable getDefaultAppIcon() {
|
||||
if (!isAvailable()) {
|
||||
return null;
|
||||
}
|
||||
final DefaultAppInfo app = getDefaultAppInfo();
|
||||
if (app != null) {
|
||||
return app.loadIcon();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public CharSequence getDefaultAppLabel() {
|
||||
if (!isAvailable()) {
|
||||
return null;
|
||||
|
||||
@@ -21,6 +21,7 @@ import android.content.Intent;
|
||||
import android.content.pm.ComponentInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.text.TextUtils;
|
||||
@@ -86,6 +87,18 @@ public class DefaultBrowserPreferenceController extends DefaultAppPreferenceCont
|
||||
return getOnlyAppLabel();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Drawable getDefaultAppIcon() {
|
||||
if (!isAvailable()) {
|
||||
return null;
|
||||
}
|
||||
final DefaultAppInfo defaultApp = getDefaultAppInfo();
|
||||
if (defaultApp != null) {
|
||||
return defaultApp.loadIcon();
|
||||
}
|
||||
return getOnlyAppIcon();
|
||||
}
|
||||
|
||||
private List<ResolveInfo> getCandidates() {
|
||||
return mPackageManager.queryIntentActivitiesAsUser(BROWSE_PROBE, PackageManager.MATCH_ALL,
|
||||
mUserId);
|
||||
@@ -105,6 +118,18 @@ public class DefaultBrowserPreferenceController extends DefaultAppPreferenceCont
|
||||
return null;
|
||||
}
|
||||
|
||||
private Drawable getOnlyAppIcon() {
|
||||
final List<ResolveInfo> list = getCandidates();
|
||||
if (list != null && list.size() == 1) {
|
||||
final ResolveInfo info = list.get(0);
|
||||
final ComponentInfo cn = info.getComponentInfo();
|
||||
final String packageName = cn == null ? null : cn.packageName;
|
||||
Log.d(TAG, "Getting icon for the only browser app: " + packageName);
|
||||
return info.loadIcon(mPackageManager.getPackageManager());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether or not the pkg contains browser capability
|
||||
*/
|
||||
|
||||
@@ -23,8 +23,6 @@ import android.content.IntentFilter;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.android.settings.applications.PackageManagerWrapper;
|
||||
|
||||
@@ -58,28 +56,21 @@ public class DefaultHomePreferenceController extends DefaultAppPreferenceControl
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
super.updateState(preference);
|
||||
final DefaultAppInfo defaultApp = getDefaultAppInfo();
|
||||
final CharSequence defaultAppLabel = defaultApp != null ? defaultApp.loadLabel() : null;
|
||||
if (TextUtils.isEmpty(defaultAppLabel)) {
|
||||
final String onlyAppLabel = getOnlyAppLabel();
|
||||
if (!TextUtils.isEmpty(onlyAppLabel)) {
|
||||
preference.setSummary(onlyAppLabel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected DefaultAppInfo getDefaultAppInfo() {
|
||||
final ArrayList<ResolveInfo> homeActivities = new ArrayList<>();
|
||||
final ComponentName currentDefaultHome = mPackageManager.getHomeActivities(homeActivities);
|
||||
|
||||
return new DefaultAppInfo(mPackageManager, mUserId, currentDefaultHome);
|
||||
if (currentDefaultHome != null) {
|
||||
return new DefaultAppInfo(mPackageManager, mUserId, currentDefaultHome);
|
||||
}
|
||||
final ActivityInfo onlyAppInfo = getOnlyAppInfo();
|
||||
if (onlyAppInfo != null) {
|
||||
return new DefaultAppInfo(mPackageManager, mUserId, onlyAppInfo.getComponentName());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private String getOnlyAppLabel() {
|
||||
private ActivityInfo getOnlyAppInfo() {
|
||||
final List<ResolveInfo> homeActivities = new ArrayList<>();
|
||||
final List<ActivityInfo> appLabels = new ArrayList<>();
|
||||
|
||||
@@ -92,7 +83,7 @@ public class DefaultHomePreferenceController extends DefaultAppPreferenceControl
|
||||
appLabels.add(info);
|
||||
}
|
||||
return appLabels.size() == 1
|
||||
? appLabels.get(0).loadLabel(mPackageManager.getPackageManager()).toString()
|
||||
? appLabels.get(0)
|
||||
: null;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Copyright (C) 2017 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.settings.applications.defaultapps;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.nfc.NfcAdapter;
|
||||
import android.os.UserManager;
|
||||
import android.support.v7.preference.Preference;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.PreferenceControllerMixin;
|
||||
import com.android.settings.nfc.PaymentBackend;
|
||||
import com.android.settingslib.core.AbstractPreferenceController;
|
||||
|
||||
public class DefaultPaymentSettingsPreferenceController extends AbstractPreferenceController
|
||||
implements PreferenceControllerMixin {
|
||||
|
||||
private final NfcAdapter mNfcAdapter;
|
||||
private final PackageManager mPackageManager;
|
||||
private final UserManager mUserManager;
|
||||
private PaymentBackend mPaymentBackend;
|
||||
|
||||
public DefaultPaymentSettingsPreferenceController(Context context) {
|
||||
super(context);
|
||||
mPackageManager = context.getPackageManager();
|
||||
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
||||
mNfcAdapter = NfcAdapter.getDefaultAdapter(mContext);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable() {
|
||||
return mPackageManager.hasSystemFeature(PackageManager.FEATURE_NFC)
|
||||
&& mPackageManager.hasSystemFeature(PackageManager.FEATURE_NFC_HOST_CARD_EMULATION)
|
||||
&& mUserManager.isAdminUser()
|
||||
&& mNfcAdapter != null
|
||||
&& mNfcAdapter.isEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
if (mPaymentBackend == null) {
|
||||
if (mNfcAdapter != null) {
|
||||
mPaymentBackend = new PaymentBackend(mContext);
|
||||
} else {
|
||||
mPaymentBackend = null;
|
||||
}
|
||||
}
|
||||
if (mPaymentBackend == null) {
|
||||
return;
|
||||
}
|
||||
mPaymentBackend.refresh();
|
||||
final PaymentBackend.PaymentAppInfo app = mPaymentBackend.getDefaultApp();
|
||||
if (app != null) {
|
||||
preference.setSummary(app.label);
|
||||
} else {
|
||||
preference.setSummary(R.string.app_list_preference_none);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPreferenceKey() {
|
||||
return "default_payment_app";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user