/* * The MIT License (MIT) * * Copyright 2016 Arnab Chakraborty. http://arnab.ch * * Permission is hereby granted, free of charge, to any person obtaining a copy of this * software and associated documentation files (the "Software"), to deal in the Software * without restriction, including without limitation the rights to use, copy, modify, * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be included in all copies * or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package org.anbox.appmgr; import android.content.Context; import android.content.pm.ApplicationInfo; import android.graphics.drawable.Drawable; import java.io.File; /** * @credit http://developer.android.com/reference/android/content/AsyncTaskLoader.html */ public class AppModel { private final Context mContext; private final ApplicationInfo mInfo; private String mAppLabel; private Drawable mIcon; private boolean mMounted; private final File mApkFile; public AppModel(Context context, ApplicationInfo info) { mContext = context; mInfo = info; mApkFile = new File(info.sourceDir); } public ApplicationInfo getAppInfo() { return mInfo; } public String getApplicationPackageName() { return getAppInfo().packageName; } public String getLabel() { return mAppLabel; } public Drawable getIcon() { if (mIcon == null) { if (mApkFile.exists()) { mIcon = mInfo.loadIcon(mContext.getPackageManager()); return mIcon; } else { mMounted = false; } } else if (!mMounted) { // If the app wasn't mounted but is now mounted, reload // its icon. if (mApkFile.exists()) { mMounted = true; mIcon = mInfo.loadIcon(mContext.getPackageManager()); return mIcon; } } else { return mIcon; } return mContext.getResources().getDrawable(android.R.drawable.sym_def_app_icon); } void loadLabel(Context context) { if (mAppLabel == null || !mMounted) { if (!mApkFile.exists()) { mMounted = false; mAppLabel = mInfo.packageName; } else { mMounted = true; CharSequence label = mInfo.loadLabel(context.getPackageManager()); mAppLabel = label != null ? label.toString() : mInfo.packageName; } } } }