blob: d9ff3618f1c345a434f3ef5c3740592866f18c1c [file] [log] [blame]
roger xue4f32fb92017-02-28 16:29:01 -08001/*
davidlnb71a3c02018-07-27 09:58:40 -07002 * Copyright (C) 2018 The Android Open Source Project
roger xue4f32fb92017-02-28 16:29:01 -08003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
Heemin Seogc72a4292018-10-26 16:33:34 -070014 * limitations under the License.
roger xue4f32fb92017-02-28 16:29:01 -080015 */
davidlnb71a3c02018-07-27 09:58:40 -070016
roger xue4f32fb92017-02-28 16:29:01 -080017package com.android.car.settings.applications;
18
roger xue4f32fb92017-02-28 16:29:01 -080019import android.content.Context;
roger xue4f32fb92017-02-28 16:29:01 -080020import android.content.pm.PackageInfo;
21import android.content.pm.PackageManager;
roger xue4f32fb92017-02-28 16:29:01 -080022import android.os.Bundle;
23import android.os.UserHandle;
roger xue4f32fb92017-02-28 16:29:01 -080024
Heemin Seogc72a4292018-10-26 16:33:34 -070025import androidx.annotation.XmlRes;
Lujiang Xue6a1d5342018-05-21 09:02:58 -070026
roger xue4f32fb92017-02-28 16:29:01 -080027import com.android.car.settings.R;
Rodrigo Lagos4f12d922018-05-10 16:55:06 -070028import com.android.car.settings.common.Logger;
Heemin Seog4c242f12018-12-18 13:26:51 -080029import com.android.car.settings.common.SettingsFragment;
Lujiang Xuea7813ff2019-01-15 09:02:34 -080030import com.android.settingslib.applications.ApplicationsState;
roger xue4f32fb92017-02-28 16:29:01 -080031
roger xue4f32fb92017-02-28 16:29:01 -080032/**
Alex Stetsone5386222020-11-13 14:03:58 -080033 * Shows details about an application.
roger xue4f32fb92017-02-28 16:29:01 -080034 */
Alex Stetsone5386222020-11-13 14:03:58 -080035public class ApplicationDetailsFragment extends SettingsFragment {
Heemin Seogc72a4292018-10-26 16:33:34 -070036 private static final Logger LOG = new Logger(ApplicationDetailsFragment.class);
Lujiang Xuea7813ff2019-01-15 09:02:34 -080037 public static final String EXTRA_PACKAGE_NAME = "extra_package_name";
roger xue4f32fb92017-02-28 16:29:01 -080038
davidlnffbcb2f2019-02-06 15:58:57 -080039 private PackageManager mPm;
davidlnffbcb2f2019-02-06 15:58:57 -080040
Lujiang Xuea7813ff2019-01-15 09:02:34 -080041 private String mPackageName;
Lujiang Xuebc2bc2f2017-08-28 15:59:58 -070042 private PackageInfo mPackageInfo;
davidlnffbcb2f2019-02-06 15:58:57 -080043 private ApplicationsState mAppState;
davidlnffbcb2f2019-02-06 15:58:57 -080044 private ApplicationsState.AppEntry mAppEntry;
roger xue24b50802017-04-04 11:59:04 -070045
Lujiang Xuea7813ff2019-01-15 09:02:34 -080046 /** Creates an instance of this fragment, passing packageName as an argument. */
47 public static ApplicationDetailsFragment getInstance(String packageName) {
Heemin Seogc72a4292018-10-26 16:33:34 -070048 ApplicationDetailsFragment applicationDetailFragment = new ApplicationDetailsFragment();
davidlncb0bfa22018-08-27 14:13:05 -070049 Bundle bundle = new Bundle();
Lujiang Xuea7813ff2019-01-15 09:02:34 -080050 bundle.putString(EXTRA_PACKAGE_NAME, packageName);
roger xue24b50802017-04-04 11:59:04 -070051 applicationDetailFragment.setArguments(bundle);
52 return applicationDetailFragment;
53 }
54
roger xue4f32fb92017-02-28 16:29:01 -080055 @Override
Peter Li62e62f22019-10-15 16:24:34 -070056 @XmlRes
57 protected int getPreferenceScreenResId() {
58 return R.xml.application_details_fragment;
davidlncb0bfa22018-08-27 14:13:05 -070059 }
60
61 @Override
Heemin Seogc72a4292018-10-26 16:33:34 -070062 public void onAttach(Context context) {
63 super.onAttach(context);
davidlnffbcb2f2019-02-06 15:58:57 -080064 mPm = context.getPackageManager();
davidlncb0bfa22018-08-27 14:13:05 -070065
Heemin Seogc72a4292018-10-26 16:33:34 -070066 // These should be loaded before onCreate() so that the controller operates as expected.
Lujiang Xuea7813ff2019-01-15 09:02:34 -080067 mPackageName = getArguments().getString(EXTRA_PACKAGE_NAME);
davidlnffbcb2f2019-02-06 15:58:57 -080068
69 mAppState = ApplicationsState.getInstance(requireActivity().getApplication());
davidlnffbcb2f2019-02-06 15:58:57 -080070
71 retrieveAppEntry();
Lujiang Xuea7813ff2019-01-15 09:02:34 -080072
Heemin Seogc72a4292018-10-26 16:33:34 -070073 use(ApplicationPreferenceController.class,
Lujiang Xuea7813ff2019-01-15 09:02:34 -080074 R.string.pk_application_details_app)
davidlnffbcb2f2019-02-06 15:58:57 -080075 .setAppEntry(mAppEntry).setAppState(mAppState);
Alex Stetsone5386222020-11-13 14:03:58 -080076 use(ApplicationActionButtonsPreferenceController.class,
77 R.string.pk_application_details_action_buttons)
78 .setAppEntry(mAppEntry).setAppState(mAppState).setPackageName(mPackageName);
Adora Zhang77c9ce02019-03-08 13:15:32 -080079 use(NotificationsPreferenceController.class,
80 R.string.pk_application_details_notifications).setPackageInfo(mPackageInfo);
Heemin Seogc72a4292018-10-26 16:33:34 -070081 use(PermissionsPreferenceController.class,
Lujiang Xuea7813ff2019-01-15 09:02:34 -080082 R.string.pk_application_details_permissions).setPackageName(mPackageName);
JianYang Liu10a21c02019-11-20 10:09:16 -080083 use(StoragePreferenceController.class,
84 R.string.pk_application_details_storage)
85 .setAppEntry(mAppEntry).setPackageName(mPackageName);
Heemin Seogc72a4292018-10-26 16:33:34 -070086 use(VersionPreferenceController.class,
87 R.string.pk_application_details_version).setPackageInfo(mPackageInfo);
roger xue24b50802017-04-04 11:59:04 -070088 }
89
davidlnffbcb2f2019-02-06 15:58:57 -080090 private void retrieveAppEntry() {
Anthony Hugh4607bf72019-10-09 16:18:46 -070091 mAppEntry = mAppState.getEntry(mPackageName, UserHandle.myUserId());
davidlnffbcb2f2019-02-06 15:58:57 -080092 if (mAppEntry != null) {
93 try {
94 mPackageInfo = mPm.getPackageInfo(mPackageName,
95 PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER
96 | PackageManager.GET_SIGNATURES | PackageManager.GET_PERMISSIONS);
97 } catch (PackageManager.NameNotFoundException e) {
98 LOG.e("Exception when retrieving package:" + mPackageName, e);
99 mPackageInfo = null;
100 }
roger xue4f32fb92017-02-28 16:29:01 -0800101 } else {
davidlnffbcb2f2019-02-06 15:58:57 -0800102 mPackageInfo = null;
roger xue4f32fb92017-02-28 16:29:01 -0800103 }
roger xue4f32fb92017-02-28 16:29:01 -0800104 }
roger xue4f32fb92017-02-28 16:29:01 -0800105}