Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e755d469 authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Implementing a package install progress listener for L

issue: 15835307

Change-Id: I71aaea087963f2e0e1206447190cbe23c174057d
parent c5b6ac72
Loading
Loading
Loading
Loading
+38 −55
Original line number Diff line number Diff line
@@ -434,37 +434,24 @@ public class BubbleTextView extends TextView {
    }

    public void applyState() {
        if (getTag() instanceof ShortcutInfo) {
            ShortcutInfo info = (ShortcutInfo) getTag();
            final int state = info.getState();

            final int progressLevel;
        final int state = getState();
            if (DEBUG) Log.d(TAG, "applying icon state: " + state);

            switch(state) {
                case ShortcutInfo.PACKAGE_STATE_DEFAULT:
                super.setText(mDefaultText);
                    progressLevel = 100;
                    break;

            case ShortcutInfo.PACKAGE_STATE_ENQUEUED:
                setText(R.string.package_state_enqueued);
                progressLevel = 0;
                break;

            case ShortcutInfo.PACKAGE_STATE_DOWNLOADING:
                setText(R.string.package_state_downloading);
                // TODO(sunnygoyal): fix progress
                progressLevel = 30;
                break;

                case ShortcutInfo.PACKAGE_STATE_INSTALLING:
                    setText(R.string.package_state_installing);
                progressLevel = 100;
                    progressLevel = info.getProgress();
                    break;

                case ShortcutInfo.PACKAGE_STATE_ERROR:
                setText(R.string.package_state_error);
                progressLevel = 0;
                break;

                case ShortcutInfo.PACKAGE_STATE_UNKNOWN:
                default:
                    progressLevel = 0;
@@ -474,25 +461,21 @@ public class BubbleTextView extends TextView {

            Drawable[] drawables = getCompoundDrawables();
            Drawable top = drawables[1];
        if ((top != null) && !(top instanceof PreloadIconDrawable)) {
            top = new PreloadIconDrawable(top, getResources());
            setCompoundDrawables(drawables[0], top, drawables[2], drawables[3]);
        }
            if (top != null) {
            top.setLevel(progressLevel);
            if ((top instanceof PreloadIconDrawable)
                    && (state == ShortcutInfo.PACKAGE_STATE_DEFAULT)) {
                ((PreloadIconDrawable) top).maybePerformFinishedAnimation();
            }
                final PreloadIconDrawable preloadDrawable;
                if (top instanceof PreloadIconDrawable) {
                    preloadDrawable = (PreloadIconDrawable) top;
                } else {
                    preloadDrawable = new PreloadIconDrawable(top, getResources());
                    setCompoundDrawables(drawables[0], preloadDrawable, drawables[2], drawables[3]);
                }

                preloadDrawable.setLevel(progressLevel);
                if (state == ShortcutInfo.PACKAGE_STATE_DEFAULT) {
                    preloadDrawable.maybePerformFinishedAnimation();
                }

    private int getState() {
        if (! (getTag() instanceof ShortcutInfo)) {
            return ShortcutInfo.PACKAGE_STATE_DEFAULT;
        } else {
            ShortcutInfo info = (ShortcutInfo) getTag();
            return info.getState();
            }
        }
    }
}
+11 −8
Original line number Diff line number Diff line
@@ -82,10 +82,9 @@ import android.view.Menu;
import android.view.MotionEvent;
import android.view.Surface;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.Window;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewAnimationUtils;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
@@ -93,9 +92,7 @@ import android.view.Window;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityEvent;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.LinearInterpolator;
import android.view.inputmethod.InputMethodManager;
import android.widget.Advanceable;
import android.widget.FrameLayout;
@@ -107,10 +104,10 @@ import com.android.launcher3.DropTarget.DragObject;
import com.android.launcher3.PagedView.PageSwitchListener;
import com.android.launcher3.compat.LauncherActivityInfoCompat;
import com.android.launcher3.compat.LauncherAppsCompat;
import com.android.launcher3.compat.PackageInstallerCompat;
import com.android.launcher3.compat.PackageInstallerCompat.PackageInstallInfo;
import com.android.launcher3.compat.UserHandleCompat;
import com.android.launcher3.compat.UserManagerCompat;
import com.android.launcher3.DropTarget.DragObject;
import com.android.launcher3.PagedView.PageSwitchListener;

import java.io.DataInputStream;
import java.io.DataOutputStream;
@@ -1055,12 +1052,15 @@ public class Launcher extends Activity
        }
        mWorkspace.updateInteractionForState();
        mWorkspace.onResume();

        PackageInstallerCompat.getInstance(this).onResume();
    }

    @Override
    protected void onPause() {
        // Ensure that items added to Launcher are queued until Launcher returns
        InstallShortcutReceiver.enableInstallQueue();
        PackageInstallerCompat.getInstance(this).onPause();

        super.onPause();
        mPaused = true;
@@ -2028,6 +2028,7 @@ public class Launcher extends Activity
        mWorkspace = null;
        mDragController = null;

        PackageInstallerCompat.getInstance(this).onStop();
        LauncherAnimUtils.onDestroyActivity();
    }

@@ -4478,6 +4479,7 @@ public class Launcher extends Activity
            mWorkspace.getUniqueComponents(true, null);
            mIntentsOnWorkspaceFromUpgradePath = mWorkspace.getUniqueComponents(true, null);
        }
        PackageInstallerCompat.getInstance(this).onFinishBind();
    }

    private void sendLoadingCompleteBroadcastIfNecessary() {
@@ -4591,9 +4593,10 @@ public class Launcher extends Activity
     *
     * Implementation of the method from LauncherModel.Callbacks.
     */
    public void updatePackageState(String pkgName, int state) {
    @Override
    public void updatePackageState(ArrayList<PackageInstallInfo> installInfo) {
        if (mWorkspace != null) {
            mWorkspace.updatePackageState(pkgName, state);
            mWorkspace.updatePackageState(installInfo);
        }
    }

+9 −4
Original line number Diff line number Diff line
@@ -17,7 +17,11 @@
package com.android.launcher3;

import android.app.SearchManager;
import android.content.*;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.database.ContentObserver;
@@ -25,8 +29,10 @@ import android.os.Handler;
import android.util.Log;

import com.android.launcher3.compat.LauncherAppsCompat;
import com.android.launcher3.compat.PackageInstallerCompat.PackageInstallInfo;

import java.lang.ref.WeakReference;
import java.util.ArrayList;

public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks {
    private static final String TAG = "LauncherAppState";
@@ -251,8 +257,7 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks {
        return getInstance().mBuildInfo.isDogfoodBuild();
    }

    public void setPackageState(String pkgName, int state) {
        if (DEBUG) Log.d(TAG, "setPackageState(" + pkgName + ", " +  state  + ")");
        mModel.setPackageState(pkgName, state);
    public void setPackageState(ArrayList<PackageInstallInfo> installInfo) {
        mModel.setPackageState(installInfo);
    }
}
+4 −3
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ import android.util.Pair;
import com.android.launcher3.InstallWidgetReceiver.WidgetMimeTypeHandlerData;
import com.android.launcher3.compat.LauncherActivityInfoCompat;
import com.android.launcher3.compat.LauncherAppsCompat;
import com.android.launcher3.compat.PackageInstallerCompat.PackageInstallInfo;
import com.android.launcher3.compat.UserHandleCompat;
import com.android.launcher3.compat.UserManagerCompat;

@@ -195,7 +196,7 @@ public class LauncherModel extends BroadcastReceiver
                                  ArrayList<ItemInfo> addAnimated,
                                  ArrayList<AppInfo> addedApps);
        public void bindAppsUpdated(ArrayList<AppInfo> apps);
        public void updatePackageState(String pkgName, int state);
        public void updatePackageState(ArrayList<PackageInstallInfo> installInfo);
        public void bindComponentsRemoved(ArrayList<String> packageNames,
                        ArrayList<AppInfo> appInfos, UserHandleCompat user);
        public void bindPackagesUpdated(ArrayList<Object> widgetsAndShortcuts);
@@ -332,13 +333,13 @@ public class LauncherModel extends BroadcastReceiver
        return null;
    }

    public void setPackageState(final String pkgName, final int state) {
    public void setPackageState(final ArrayList<PackageInstallInfo> installInfo) {
        // Process the updated package state
        Runnable r = new Runnable() {
            public void run() {
                Callbacks callbacks = mCallbacks != null ? mCallbacks.get() : null;
                if (callbacks != null) {
                    callbacks.updatePackageState(pkgName, state);
                    callbacks.updatePackageState(installInfo);
                }
            }
        };
+18 −11
Original line number Diff line number Diff line
@@ -42,13 +42,7 @@ public class ShortcutInfo extends ItemInfo {
    public static final int PACKAGE_STATE_DEFAULT = 0;

    /** {@link #mState} meaning some external entity has promised to install this package. */
    public static final int PACKAGE_STATE_ENQUEUED = 1;

    /** {@link #mState} meaning but some external entity is downloading this package. */
    public static final int PACKAGE_STATE_DOWNLOADING = 2;

    /** {@link #mState} meaning some external entity is installing this package. */
    public static final int PACKAGE_STATE_INSTALLING = 3;
    public static final int PACKAGE_STATE_INSTALLING = 1;

    /**
     * The intent used to start the application.
@@ -89,6 +83,11 @@ public class ShortcutInfo extends ItemInfo {
     */
    protected int mState;

    /**
     * The installation progress [0-100] of the package that this shortcut represents.
     */
    protected int mProgress;

    long firstInstallTime;
    int flags = 0;

@@ -237,16 +236,24 @@ public class ShortcutInfo extends ItemInfo {

    public boolean isAbandoned() {
        return isPromise()
                && (mState == ShortcutInfo.PACKAGE_STATE_ERROR
                        || mState == ShortcutInfo.PACKAGE_STATE_UNKNOWN);
                && (mState == PACKAGE_STATE_ERROR
                        || mState == PACKAGE_STATE_UNKNOWN);
    }

    public int getState() {
        return mState;
    public int getProgress() {
        return mProgress;
    }

    public void setProgress(int progress) {
        mProgress = progress;
    }

    public void setState(int state) {
        mState = state;
    }

    public int getState() {
        return mState;
    }
}
Loading