Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e7016d6a authored by Romain Hunault's avatar Romain Hunault 🚴🏻
Browse files

Merge remote-tracking branch 'origin/lineage-16.0' into v1-pie

parents be0c3bd7 f98664ef
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.IconDrawableFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -60,6 +61,7 @@ public class AppOpsCategory extends ListFragment implements
    AppListAdapter mAdapter;

    String mCurrentPkgName;
    private int mCurrentPkgUid;

    public AppOpsCategory() {
    }
@@ -264,10 +266,12 @@ public class AppOpsCategory extends ListFragment implements
        private final LayoutInflater mInflater;
        private final AppOpsState mState;
        private final boolean mUserControlled;
        private final Context mContext;

        List<AppOpEntry> mList;

        public AppListAdapter(Context context, AppOpsState state, boolean userControlled) {
            mContext = context;
            mResources = context.getResources();
            mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            mState = state;
@@ -309,7 +313,8 @@ public class AppOpsCategory extends ListFragment implements

            AppOpEntry item = getItem(position);
            ((ImageView) view.findViewById(R.id.app_icon)).setImageDrawable(
                    item.getAppEntry().getIcon());
                    IconDrawableFactory.newInstance(mContext).getBadgedIcon(
                            item.getAppEntry().getApplicationInfo()));
            ((TextView) view.findViewById(R.id.app_name)).setText(item.getAppEntry().getLabel());
            if (mUserControlled) {
                ((TextView) view.findViewById(R.id.op_name)).setText(
@@ -361,6 +366,7 @@ public class AppOpsCategory extends ListFragment implements
        // start new fragment to display extended information
        final Bundle args = new Bundle();
        args.putString(AppOpsDetails.ARG_PACKAGE_NAME, mCurrentPkgName);
        args.putInt(AppOpsDetails.ARG_PACKAGE_UID, mCurrentPkgUid);

        new SubSettingLauncher(getContext())
                .setDestination(AppOpsDetails.class.getName())
@@ -388,6 +394,7 @@ public class AppOpsCategory extends ListFragment implements
                entry.overridePrimaryOpMode(mode);
            } else {
                mCurrentPkgName = entry.getAppEntry().getApplicationInfo().packageName;
                mCurrentPkgUid = entry.getAppEntry().getApplicationInfo().uid;
                startApplicationDetailsActivity();
            }
        }
+10 −3
Original line number Diff line number Diff line
@@ -30,12 +30,14 @@ import android.content.pm.PermissionInfo;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.UserHandle;
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference.OnPreferenceChangeListener;
import android.support.v7.preference.PreferenceScreen;
import android.text.TextUtils;
import android.util.IconDrawableFactory;
import android.util.Log;

import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -54,6 +56,7 @@ public class AppOpsDetails extends SettingsPreferenceFragment {
    static final String TAG = "AppOpsDetails";

    public static final String ARG_PACKAGE_NAME = "package";
    public static final String ARG_PACKAGE_UID = "package_uid";
    private static final String KEY_HEADER = "header";

    private AppOpsState mState;
@@ -148,7 +151,8 @@ public class AppOpsDetails extends SettingsPreferenceFragment {
        final Activity activity = getActivity();
        final Preference pref = EntityHeaderController
                .newInstance(getActivity(), this /* fragment */, null /* header */)
                .setIcon(mPm.getApplicationIcon(appInfo))
                .setIcon(IconDrawableFactory.newInstance(getContext())
                        .getBadgedIcon(appInfo))
                .setLabel(label)
                .setPackageName(appInfo.packageName)
                .setUid(appInfo.uid)
@@ -163,6 +167,8 @@ public class AppOpsDetails extends SettingsPreferenceFragment {
    private String retrieveAppEntry() {
        final Bundle args = getArguments();
        String packageName = (args != null) ? args.getString(ARG_PACKAGE_NAME) : null;
        int packageUserId = (args != null) ? UserHandle.getUserId(args.getInt(ARG_PACKAGE_UID)) : 0;

        if (packageName == null) {
            Intent intent = (args == null) ?
                    getActivity().getIntent() : (Intent) args.getParcelable("intent");
@@ -171,9 +177,10 @@ public class AppOpsDetails extends SettingsPreferenceFragment {
            }
        }
        try {
            mPackageInfo = mPm.getPackageInfo(packageName,
            mPackageInfo = mPm.getPackageInfoAsUser(packageName,
                    PackageManager.MATCH_DISABLED_COMPONENTS |
                    PackageManager.MATCH_ANY_USER);
                    PackageManager.MATCH_ANY_USER,
                    packageUserId);
        } catch (NameNotFoundException e) {
            Log.e(TAG, "Exception when retrieving package:" + packageName, e);
            mPackageInfo = null;
+15 −35
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.content.SharedPreferences;
import android.graphics.drawable.Drawable;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.UserHandle;
import android.text.format.DateUtils;
import android.util.Log;
import android.util.SparseArray;
@@ -292,7 +293,6 @@ public class AppOpsState {
     * This class holds the per-item data in our Loader.
     */
    public static class AppEntry {
        private final AppOpsState mState;
        private final ApplicationInfo mInfo;
        private final File mApkFile;
        private final SparseArray<AppOpsManager.OpEntry> mOps
@@ -300,11 +300,9 @@ public class AppOpsState {
        private final SparseArray<AppOpEntry> mOpSwitches
                = new SparseArray<AppOpEntry>();
        private String mLabel;
        private Drawable mIcon;
        private boolean mMounted;

        public AppEntry(AppOpsState state, ApplicationInfo info) {
            mState = state;
            mInfo = info;
            mApkFile = new File(info.sourceDir);
        }
@@ -330,30 +328,6 @@ public class AppOpsState {
            return mLabel;
        }

        public Drawable getIcon() {
            if (mIcon == null) {
                if (mApkFile.exists()) {
                    mIcon = mInfo.loadIcon(mState.mPm);
                    return mIcon;
                } else {
                    mMounted = false;
                }
            } else if (!mMounted) {
                // If the app wasn't mounted but is now mounted, reload
                // its icon.
                if (mApkFile.exists()) {
                    mMounted = true;
                    mIcon = mInfo.loadIcon(mState.mPm);
                    return mIcon;
                }
            } else {
                return mIcon;
            }

            return mState.mContext.getDrawable(
                    android.R.drawable.sym_def_app_icon);
        }

        @Override public String toString() {
            return mLabel;
        }
@@ -602,12 +576,12 @@ public class AppOpsState {
    }

    private AppEntry getAppEntry(final Context context, final HashMap<String, AppEntry> appEntries,
            final String packageName, ApplicationInfo appInfo, boolean applyFilters) {
            final String packageName, ApplicationInfo appInfo, int userId, boolean applyFilters) {

        if (appInfo == null) {
            try {
                appInfo = mPm.getApplicationInfo(packageName,
                        PackageManager.GET_DISABLED_COMPONENTS);
                appInfo = mPm.getApplicationInfoAsUser(packageName,
                        PackageManager.GET_DISABLED_COMPONENTS, userId);
            } catch (PackageManager.NameNotFoundException e) {
                Log.w(TAG, "Unable to find info for package " + packageName);
                return null;
@@ -627,11 +601,11 @@ public class AppOpsState {
            }
        }

        AppEntry appEntry = appEntries.get(packageName);
        AppEntry appEntry = appEntries.get(String.format("%d_%s", userId, packageName));
        if (appEntry == null) {
            appEntry = new AppEntry(this, appInfo);
            appEntry.loadLabel(context);
            appEntries.put(packageName, appEntry);
            appEntries.put(String.format("%d_%s", userId, packageName), appEntry);
        }
        return appEntry;
    }
@@ -715,8 +689,9 @@ public class AppOpsState {
        if (pkgs != null) {
            for (int i=0; i<pkgs.size(); i++) {
                AppOpsManager.PackageOps pkgOps = pkgs.get(i);
                int userId = UserHandle.getUserId(pkgOps.getUid());
                AppEntry appEntry = getAppEntry(context, appEntries, pkgOps.getPackageName(), null,
                        applyFilters);
                        userId, applyFilters);
                if (appEntry == null) {
                    continue;
                }
@@ -740,7 +715,8 @@ public class AppOpsState {
        if (packageName != null) {
            apps = new ArrayList<PackageInfo>();
            try {
                PackageInfo pi = mPm.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS);
                PackageInfo pi = mPm.getPackageInfoAsUser(packageName,
                        PackageManager.GET_PERMISSIONS, UserHandle.getUserId(uid));
                apps.add(pi);
            } catch (NameNotFoundException e) {
            }
@@ -751,8 +727,12 @@ public class AppOpsState {
        }
        for (int i=0; i<apps.size(); i++) {
            PackageInfo appInfo = apps.get(i);
            int userId = UserHandle.getUserId(uid);
            if (appInfo.applicationInfo != null) {
                userId = UserHandle.getUserId(appInfo.applicationInfo.uid);
            }
            AppEntry appEntry = getAppEntry(context, appEntries, appInfo.packageName,
                    appInfo.applicationInfo, applyFilters);
                    appInfo.applicationInfo, userId, applyFilters);
            if (appEntry == null) {
                continue;
            }