19be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi/* 29be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi * Copyright (C) 2016 The Android Open Source Project 39be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi * 49be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi * Licensed under the Apache License, Version 2.0 (the "License"); 59be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi * you may not use this file except in compliance with the License. 69be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi * You may obtain a copy of the License at 79be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi * 89be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi * http://www.apache.org/licenses/LICENSE-2.0 99be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi * 109be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi * Unless required by applicable law or agreed to in writing, software 119be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi * distributed under the License is distributed on an "AS IS" BASIS, 129be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi * See the License for the specific language governing permissions and 149be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi * limitations under the License 159be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi */ 169be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 179be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishipackage com.android.settings.applications; 189be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 199be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.app.Fragment; 209be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.content.Context; 219be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.content.Intent; 229be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.graphics.drawable.InsetDrawable; 239be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.os.UserHandle; 249be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.support.annotation.WorkerThread; 259be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.text.format.Formatter; 269be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.util.Log; 279be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 289be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport com.android.settings.R; 299be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport com.android.settings.Utils; 309be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport com.android.settingslib.applications.StorageStatsSource; 319be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 329be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport java.io.IOException; 339be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 349be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi/** PhotosViewHolderController controls an Audio/Music file view in the ManageApplications view. */ 359be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishipublic class PhotosViewHolderController implements FileViewHolderController { 369be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi private static final String TAG = "PhotosViewHolderController"; 379be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 389be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi private static final String IMAGE_MIME_TYPE = "image/*"; 399be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi private static final int INSET_SIZE = 24; // dp 409be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 419be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi private Context mContext; 429be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi private StorageStatsSource mSource; 439be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi private String mVolumeUuid; 449be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi private long mFilesSize; 459be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi private UserHandle mUser; 469be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 479be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi public PhotosViewHolderController( 489be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi Context context, StorageStatsSource source, String volumeUuid, UserHandle user) { 499be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi mContext = context; 509be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi mSource = source; 519be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi mVolumeUuid = volumeUuid; 529be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi mUser = user; 539be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi } 549be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 559be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi @Override 569be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi @WorkerThread 579be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi public void queryStats() { 589be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi try { 599be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi StorageStatsSource.ExternalStorageStats stats = 609be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi mSource.getExternalStorageStats(mVolumeUuid, mUser); 619be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi mFilesSize = stats.imageBytes + stats.videoBytes; 629be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi } catch (IOException e) { 639be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi mFilesSize = 0; 649be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi Log.w(TAG, e); 659be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi } 669be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi } 679be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 689be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi @Override 699be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi public boolean shouldShow() { 709be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi return true; 719be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi } 729be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 739be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi @Override 749be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi public void setupView(AppViewHolder holder) { 759be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi holder.appIcon.setImageDrawable( 769be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi new InsetDrawable(mContext.getDrawable(R.drawable.ic_photo_library), INSET_SIZE)); 779be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi holder.appName.setText(mContext.getText(R.string.storage_detail_images)); 789be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi holder.summary.setText(Formatter.formatFileSize(mContext, mFilesSize)); 799be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi } 809be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 819be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi @Override 829be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi public void onClick(Fragment fragment) { 839be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi Intent intent = new Intent(); 849be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi intent.setAction(android.content.Intent.ACTION_VIEW); 859be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi intent.setFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); 869be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi intent.setType(IMAGE_MIME_TYPE); 879be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi intent.putExtra(Intent.EXTRA_FROM_STORAGE, true); 889be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi Utils.launchIntent(fragment, intent); 899be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi } 909be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi} 91