14d48e820ac6d77dea33df9b5c432100345266972Tony Mantler/*
24d48e820ac6d77dea33df9b5c432100345266972Tony Mantler * Copyright (C) 2015 The Android Open Source Project
34d48e820ac6d77dea33df9b5c432100345266972Tony Mantler *
44d48e820ac6d77dea33df9b5c432100345266972Tony Mantler * Licensed under the Apache License, Version 2.0 (the "License");
54d48e820ac6d77dea33df9b5c432100345266972Tony Mantler * you may not use this file except in compliance with the License.
64d48e820ac6d77dea33df9b5c432100345266972Tony Mantler * You may obtain a copy of the License at
74d48e820ac6d77dea33df9b5c432100345266972Tony Mantler *
84d48e820ac6d77dea33df9b5c432100345266972Tony Mantler *      http://www.apache.org/licenses/LICENSE-2.0
94d48e820ac6d77dea33df9b5c432100345266972Tony Mantler *
104d48e820ac6d77dea33df9b5c432100345266972Tony Mantler * Unless required by applicable law or agreed to in writing, software
114d48e820ac6d77dea33df9b5c432100345266972Tony Mantler * distributed under the License is distributed on an "AS IS" BASIS,
124d48e820ac6d77dea33df9b5c432100345266972Tony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134d48e820ac6d77dea33df9b5c432100345266972Tony Mantler * See the License for the specific language governing permissions and
144d48e820ac6d77dea33df9b5c432100345266972Tony Mantler * limitations under the License
154d48e820ac6d77dea33df9b5c432100345266972Tony Mantler */
164d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
174d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerpackage com.android.tv.settings.device.apps;
184d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
194d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerimport android.content.Context;
204d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerimport android.content.pm.ApplicationInfo;
214d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerimport android.content.pm.PackageManager;
224d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerimport android.os.storage.StorageManager;
234d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerimport android.os.storage.VolumeInfo;
244d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerimport android.text.TextUtils;
254d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
264d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerimport com.android.settingslib.applications.ApplicationsState;
274d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerimport com.android.tv.settings.R;
284d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
290935eb479020729a8ee64624394a1d001a748759Tony Mantlerimport java.util.List;
300935eb479020729a8ee64624394a1d001a748759Tony Mantler
314d48e820ac6d77dea33df9b5c432100345266972Tony Mantlerpublic class AppStoragePreference extends AppActionPreference {
324d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    private final PackageManager mPackageManager;
334d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    private final StorageManager mStorageManager;
344d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
354d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    public AppStoragePreference(Context context, ApplicationsState.AppEntry entry) {
364d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        super(context, entry);
374d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        mPackageManager = context.getPackageManager();
384d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        mStorageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
394d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        refresh();
404d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    }
414d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
424d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    public void refresh() {
430935eb479020729a8ee64624394a1d001a748759Tony Mantler        final ApplicationInfo applicationInfo = mEntry.info;
440935eb479020729a8ee64624394a1d001a748759Tony Mantler        final VolumeInfo volumeInfo = mPackageManager.getPackageCurrentVolume(applicationInfo);
450935eb479020729a8ee64624394a1d001a748759Tony Mantler        final List<VolumeInfo> candidates =
460935eb479020729a8ee64624394a1d001a748759Tony Mantler                mPackageManager.getPackageCandidateVolumes(applicationInfo);
470935eb479020729a8ee64624394a1d001a748759Tony Mantler        if (candidates.size() > 1 ||
480935eb479020729a8ee64624394a1d001a748759Tony Mantler                (candidates.size() == 1 && !candidates.contains(volumeInfo))) {
490935eb479020729a8ee64624394a1d001a748759Tony Mantler            setIntent(MoveAppActivity
500935eb479020729a8ee64624394a1d001a748759Tony Mantler                    .getLaunchIntent(getContext(), mEntry.info.packageName, getAppName()));
510935eb479020729a8ee64624394a1d001a748759Tony Mantler        }
524d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
534d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        setTitle(R.string.device_apps_app_management_storage_used);
544d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
554d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        final String volumeDesc = mStorageManager.getBestVolumeDescription(volumeInfo);
564d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        final String size = mEntry.sizeStr;
574d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        if (TextUtils.isEmpty(size)) {
584d48e820ac6d77dea33df9b5c432100345266972Tony Mantler            setSummary(R.string.storage_calculating_size);
594d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        } else {
604d48e820ac6d77dea33df9b5c432100345266972Tony Mantler            setSummary(getContext().getString(R.string.device_apps_app_management_storage_used_desc,
614d48e820ac6d77dea33df9b5c432100345266972Tony Mantler                    mEntry.sizeStr, volumeDesc));
624d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        }
634d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
644d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    }
654d48e820ac6d77dea33df9b5c432100345266972Tony Mantler
664d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    private String getAppName() {
674d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        mEntry.ensureLabel(getContext());
684d48e820ac6d77dea33df9b5c432100345266972Tony Mantler        return mEntry.label;
694d48e820ac6d77dea33df9b5c432100345266972Tony Mantler    }
704d48e820ac6d77dea33df9b5c432100345266972Tony Mantler}
71