TYPE3
[iec.git] / src / type3_AndroidCloud / anbox-master / android / appmgr / src / org / anbox / appmgr / AppModel.java
diff --git a/src/type3_AndroidCloud/anbox-master/android/appmgr/src/org/anbox/appmgr/AppModel.java b/src/type3_AndroidCloud/anbox-master/android/appmgr/src/org/anbox/appmgr/AppModel.java
new file mode 100644 (file)
index 0000000..cc4896b
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * 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;
+            }
+        }
+    }
+}