/** * Copyright (C) 2013 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; import android.app.Activity; import android.app.AppOpsManager; import android.app.Fragment; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PermissionGroupInfo; import android.content.pm.PermissionInfo; import android.content.res.Resources; import android.os.Bundle; import android.preference.PreferenceActivity; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.Switch; import android.widget.TextView; import com.android.settings.R; import com.android.settings.Utils; import java.util.List; public class AppOpsDetails extends Fragment { static final String TAG = "AppOpsDetails"; public static final String ARG_PACKAGE_NAME = "package"; private AppOpsState mState; private PackageManager mPm; private AppOpsManager mAppOps; private PackageInfo mPackageInfo; private LayoutInflater mInflater; private View mRootView; private TextView mAppVersion; private LinearLayout mOperationsSection; // Utility method to set application label and icon. private void setAppLabelAndIcon(PackageInfo pkgInfo) { final View appSnippet = mRootView.findViewById(R.id.app_snippet); appSnippet.setPaddingRelative(0, appSnippet.getPaddingTop(), 0, appSnippet.getPaddingBottom()); ImageView icon = (ImageView) appSnippet.findViewById(R.id.app_icon); icon.setImageDrawable(mPm.getApplicationIcon(pkgInfo.applicationInfo)); // Set application name. TextView label = (TextView) appSnippet.findViewById(R.id.app_name); label.setText(mPm.getApplicationLabel(pkgInfo.applicationInfo)); // Version number of application mAppVersion = (TextView) appSnippet.findViewById(R.id.app_size); if (pkgInfo.versionName != null) { mAppVersion.setVisibility(View.VISIBLE); mAppVersion.setText(getActivity().getString(R.string.version_text, String.valueOf(pkgInfo.versionName))); } else { mAppVersion.setVisibility(View.INVISIBLE); } } private String retrieveAppEntry() { final Bundle args = getArguments(); String packageName = (args != null) ? args.getString(ARG_PACKAGE_NAME) : null; if (packageName == null) { Intent intent = (args == null) ? getActivity().getIntent() : (Intent) args.getParcelable("intent"); if (intent != null) { packageName = intent.getData().getSchemeSpecificPart(); } } try { mPackageInfo = mPm.getPackageInfo(packageName, PackageManager.GET_DISABLED_COMPONENTS | PackageManager.GET_UNINSTALLED_PACKAGES); } catch (NameNotFoundException e) { Log.e(TAG, "Exception when retrieving package:" + packageName, e); mPackageInfo = null; } return packageName; } private boolean refreshUi() { if (mPackageInfo == null) { return false; } setAppLabelAndIcon(mPackageInfo); Resources res = getActivity().getResources(); mOperationsSection.removeAllViews(); String lastPermGroup = ""; for (AppOpsState.OpsTemplate tpl : AppOpsState.ALL_TEMPLATES) { List entries = mState.buildState(tpl, mPackageInfo.applicationInfo.uid, mPackageInfo.packageName); for (final AppOpsState.AppOpEntry entry : entries) { for (int i=0; i