/* * 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.documentsui; import android.app.ActivityManager; import android.app.Application; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.graphics.Point; public class DocumentsApplication extends Application { private RootsCache mRoots; private Point mThumbnailsSize; private ThumbnailCache mThumbnails; public static RootsCache getRootsCache(Context context) { return ((DocumentsApplication) context.getApplicationContext()).mRoots; } public static ThumbnailCache getThumbnailsCache(Context context, Point size) { final DocumentsApplication app = (DocumentsApplication) context.getApplicationContext(); final ThumbnailCache thumbnails = app.mThumbnails; if (!size.equals(app.mThumbnailsSize)) { thumbnails.evictAll(); app.mThumbnailsSize = size; } return thumbnails; } @Override public void onCreate() { final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); final int memoryClassBytes = am.getMemoryClass() * 1024 * 1024; mRoots = new RootsCache(this); mThumbnails = new ThumbnailCache(memoryClassBytes / 4); final IntentFilter packageFilter = new IntentFilter(); packageFilter.addAction(Intent.ACTION_PACKAGE_ADDED); packageFilter.addAction(Intent.ACTION_PACKAGE_CHANGED); packageFilter.addAction(Intent.ACTION_PACKAGE_REMOVED); packageFilter.addDataScheme("package"); registerReceiver(mPackageReceiver, packageFilter); } @Override public void onTrimMemory(int level) { super.onTrimMemory(level); if (level >= TRIM_MEMORY_MODERATE) { mThumbnails.evictAll(); } else if (level >= TRIM_MEMORY_BACKGROUND) { mThumbnails.trimToSize(mThumbnails.size() / 2); } } private BroadcastReceiver mPackageReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // TODO: narrow changed/removed to only packages that have backends mRoots.update(); } }; }