Merge changes from topic "small_icons"

* changes:
  Use small icon in location and vpn settings UI
  Clean up: use AppPreference for PowerGaugePreference
  Switch to use small icon for most app related pages
  Update UI to use a smaller icon for ManageApplication page.
This commit is contained in:
TreeHugger Robot
2017-10-31 02:44:21 +00:00
committed by Android (Google) Code Review
47 changed files with 587 additions and 398 deletions

View File

@@ -38,6 +38,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.notification.EmptyTextSettings;
import com.android.settings.widget.AppPreference;
import com.android.settings.wrapper.ActivityInfoWrapper;
import com.android.settings.wrapper.UserManagerWrapper;
import com.android.settingslib.wrapper.PackageManagerWrapper;
@@ -176,7 +177,7 @@ public class PictureInPictureSettings extends EmptyTextSettings {
final String packageName = appInfo.packageName;
final CharSequence label = appInfo.loadLabel(pm);
final Preference pref = new Preference(prefContext);
final Preference pref = new AppPreference(prefContext);
pref.setIcon(mIconDrawableFactory.getBadgedIcon(appInfo, userId));
pref.setTitle(pm.getUserBadgedLabel(label, user));
pref.setSummary(PictureInPictureDetails.getPreferenceSummary(prefContext,

View File

@@ -18,14 +18,13 @@ package com.android.settings.applications;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.drawable.ColorDrawable;
import android.text.TextUtils;
import android.text.format.Formatter;
import android.util.Log;
import com.android.settings.AppProgressPreference;
import com.android.settings.widget.AppPreference;
public class ProcessStatsPreference extends AppProgressPreference {
public class ProcessStatsPreference extends AppPreference {
static final String TAG = "ProcessStatsPreference";
private ProcStatsPackageEntry mEntry;

View File

@@ -40,6 +40,7 @@ import android.util.Log;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.widget.AppPreference;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.wrapper.PackageManagerWrapper;
@@ -230,7 +231,7 @@ public class RecentAppsPreferenceController extends AbstractPreferenceController
boolean rebindPref = true;
Preference pref = appPreferences.remove(pkgName);
if (pref == null) {
pref = new Preference(prefContext);
pref = new AppPreference(prefContext);
rebindPref = false;
}
pref.setKey(pkgName);

View File

@@ -84,6 +84,11 @@ public abstract class DefaultAppPickerFragment extends RadioButtonPickerFragment
}
}
@Override
protected int getRadioButtonPreferenceCustomLayoutResId() {
return R.layout.preference_app;
}
protected ConfirmationDialogFragment newConfirmationDialogFragment(String selectedKey,
CharSequence confirmationMessage) {
final ConfirmationDialogFragment fragment = new ConfirmationDialogFragment();

View File

@@ -29,6 +29,7 @@ import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.widget.GearPreference;
import com.android.settingslib.TwoTargetPreference;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.wrapper.PackageManagerWrapper;
@@ -53,6 +54,12 @@ public abstract class DefaultAppPreferenceController extends AbstractPreferenceC
public void updateState(Preference preference) {
final DefaultAppInfo app = getDefaultAppInfo();
CharSequence defaultAppLabel = getDefaultAppLabel();
if (preference instanceof TwoTargetPreference) {
// For use small icon because we are displaying an app preference.
// We only need to do this for TwoTargetPreference because the other prefs are
// already using AppPreference so their icon is already normalized.
((TwoTargetPreference) preference).setUseSmallIcon(true);
}
if (!TextUtils.isEmpty(defaultAppLabel)) {
preference.setSummary(defaultAppLabel);
Utils.setSafeIcon(preference, getDefaultAppIcon());

View File

@@ -22,6 +22,7 @@ import android.graphics.drawable.Drawable;
import android.support.annotation.StringRes;
import android.support.annotation.VisibleForTesting;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -38,33 +39,39 @@ public class ApplicationViewHolder extends RecyclerView.ViewHolder {
private final TextView mAppName;
private final ImageView mAppIcon;
private final boolean mKeepStableHeight;
@VisibleForTesting
View mSummaryContainer;
@VisibleForTesting
final TextView mSummary;
@VisibleForTesting
final TextView mDisabled;
ApplicationViewHolder(View itemView) {
ApplicationViewHolder(View itemView, boolean keepStableHeight) {
super(itemView);
mAppName = itemView.findViewById(android.R.id.title);
mAppIcon = itemView.findViewById(android.R.id.icon);
mSummary = itemView.findViewById(R.id.widget_text1);
mDisabled = itemView.findViewById(R.id.widget_text2);
mSummaryContainer = itemView.findViewById(R.id.summary_container);
mSummary = itemView.findViewById(android.R.id.summary);
mDisabled = itemView.findViewById(R.id.appendix);
mKeepStableHeight = keepStableHeight;
}
static View newView(LayoutInflater inflater, ViewGroup parent) {
final View root = LayoutInflater.from(parent.getContext())
static View newView(ViewGroup parent) {
return LayoutInflater.from(parent.getContext())
.inflate(R.layout.preference_app, parent, false);
inflater.inflate(R.layout.widget_text_views,
root.findViewById(android.R.id.widget_frame));
return root;
}
void setSummary(CharSequence summary) {
mSummary.setText(summary);
updateSummaryContainer();
}
void setSummary(@StringRes int summary) {
mSummary.setText(summary);
updateSummaryContainer();
}
void setEnabled(boolean isEnabled) {
@@ -78,6 +85,10 @@ public class ApplicationViewHolder extends RecyclerView.ViewHolder {
mAppName.setText(title);
}
void setIcon(int drawableRes) {
mAppIcon.setImageResource(drawableRes);
}
void setIcon(Drawable icon) {
if (icon == null) {
return;
@@ -96,6 +107,17 @@ public class ApplicationViewHolder extends RecyclerView.ViewHolder {
} else {
mDisabled.setVisibility(View.GONE);
}
updateSummaryContainer();
}
void updateSummaryContainer() {
if (mKeepStableHeight) {
mSummaryContainer.setVisibility(View.VISIBLE);
return;
}
final boolean hasContent =
!TextUtils.isEmpty(mDisabled.getText()) || !TextUtils.isEmpty(mSummary.getText());
mSummaryContainer.setVisibility(hasContent ? View.VISIBLE : View.GONE);
}
void updateSizeText(AppEntry entry, CharSequence invalidSizeStr, int whichSize) {

View File

@@ -412,20 +412,6 @@ public class ManageApplications extends InstrumentedPreferenceFragment
return null;
}
private boolean isFastScrollEnabled() {
switch (mListType) {
case LIST_TYPE_MAIN:
case LIST_TYPE_NOTIFICATION:
case LIST_TYPE_STORAGE:
case LIST_TYPE_GAMES:
case LIST_TYPE_MOVIES:
case LIST_TYPE_PHOTOGRAPHY:
return mSortOrder == R.id.sort_order_alpha;
default:
return false;
}
}
@Override
public int getMetricsCategory() {
switch (mListType) {
@@ -924,9 +910,9 @@ public class ManageApplications extends InstrumentedPreferenceFragment
@Override
public ApplicationViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final View view = ApplicationViewHolder.newView(
LayoutInflater.from(parent.getContext()), parent);
return new ApplicationViewHolder(view);
final View view = ApplicationViewHolder.newView(parent);
return new ApplicationViewHolder(view,
shouldUseStableItemHeight(mManageApplications.mListType));
}
@Override
@@ -994,7 +980,21 @@ public class ManageApplications extends InstrumentedPreferenceFragment
});
}
static private boolean packageNameEquals(PackageItemInfo info1, PackageItemInfo info2) {
@VisibleForTesting
static boolean shouldUseStableItemHeight(int listType) {
switch (listType) {
case LIST_TYPE_NOTIFICATION:
// Most entries in notification type has no summary. Don't use stable height
// so height is short for most entries.
return false;
default:
// Other types have non-empty summary, so keep the height as we expect summary
// to fill in.
return true;
}
}
private static boolean packageNameEquals(PackageItemInfo info1, PackageItemInfo info2) {
if (info1 == null || info2 == null) {
return false;
}

View File

@@ -19,7 +19,6 @@ package com.android.settings.applications.manageapplications;
import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.InsetDrawable;
import android.os.UserHandle;
import android.provider.DocumentsContract;
import android.support.annotation.WorkerThread;
@@ -39,7 +38,6 @@ public class MusicViewHolderController implements FileViewHolderController {
private static final String TAG = "MusicViewHolderCtrl";
private static final String AUTHORITY_MEDIA = "com.android.providers.media.documents";
private static final int INSET_SIZE = 24; // dp
private Context mContext;
private StorageStatsSource mSource;
@@ -73,8 +71,7 @@ public class MusicViewHolderController implements FileViewHolderController {
@Override
public void setupView(ApplicationViewHolder holder) {
holder.setIcon(
new InsetDrawable(mContext.getDrawable(R.drawable.ic_headset_24dp), INSET_SIZE));
holder.setIcon(R.drawable.ic_headset_24dp);
holder.setTitle(mContext.getText(R.string.audio_files_title));
holder.setSummary(Formatter.formatFileSize(mContext, mMusicSize));
}

View File

@@ -19,7 +19,6 @@ package com.android.settings.applications.manageapplications;
import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.InsetDrawable;
import android.os.UserHandle;
import android.support.annotation.WorkerThread;
import android.text.format.Formatter;
@@ -36,7 +35,6 @@ public class PhotosViewHolderController implements FileViewHolderController {
private static final String TAG = "PhotosViewHolderCtrl";
private static final String IMAGE_MIME_TYPE = "image/*";
private static final int INSET_SIZE = 24; // dp
private Context mContext;
private StorageStatsSource mSource;
@@ -72,8 +70,7 @@ public class PhotosViewHolderController implements FileViewHolderController {
@Override
public void setupView(ApplicationViewHolder holder) {
holder.setIcon(
new InsetDrawable(mContext.getDrawable(R.drawable.ic_photo_library), INSET_SIZE));
holder.setIcon(R.drawable.ic_photo_library);
holder.setTitle(mContext.getText(R.string.storage_detail_images));
holder.setSummary(Formatter.formatFileSize(mContext, mFilesSize));
}