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

Commit 5286d3ff authored by justinzhang's avatar justinzhang
Browse files

Hide status bars in lock task

Call StatusBarManager to show/hide status bars for lock task.
(Same CL as https://googleplex-android-review.git.corp.google.com/#/c/461068/,
sorry for the confusion.)

Bug: 13669575
Change-Id: I5c90bdb1d868aa02d3679e854b5ccbe434d996d6
parent 27692098
Loading
Loading
Loading
Loading
+56 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import android.app.PendingIntent;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.IActivityManager.WaitResult;
import android.app.ResultInfo;
import android.app.StatusBarManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.IIntentSender;
@@ -73,6 +74,7 @@ import android.os.ParcelFileDescriptor;
import android.os.PowerManager;
import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.UserHandle;
import android.service.voice.IVoiceInteractionSession;
@@ -88,11 +90,13 @@ import android.view.Surface;
import com.android.internal.app.HeavyWeightSwitcherActivity;
import com.android.internal.app.IVoiceInteractor;
import com.android.internal.os.TransferPipe;
import com.android.internal.statusbar.IStatusBarService;
import com.android.server.LocalServices;
import com.android.server.am.ActivityManagerService.PendingActivityLaunch;
import com.android.server.am.ActivityStack.ActivityState;
import com.android.server.wm.WindowManagerService;


import java.io.FileDescriptor;
import java.io.IOException;
import java.io.PrintWriter;
@@ -128,9 +132,15 @@ public final class ActivityStackSupervisor implements DisplayListener {
    static final int HANDLE_DISPLAY_CHANGED = FIRST_SUPERVISOR_STACK_MSG + 6;
    static final int HANDLE_DISPLAY_REMOVED = FIRST_SUPERVISOR_STACK_MSG + 7;
    static final int CONTAINER_CALLBACK_VISIBILITY = FIRST_SUPERVISOR_STACK_MSG + 8;
    static final int LOCK_TASK_START_MSG = FIRST_SUPERVISOR_STACK_MSG + 9;
    static final int LOCK_TASK_END_MSG = FIRST_SUPERVISOR_STACK_MSG + 10;

    private final static String VIRTUAL_DISPLAY_BASE_NAME = "ActivityViewVirtualDisplay";

    /** Status Bar Service **/
    private IBinder mToken = new Binder();
    private IStatusBarService mStatusBarService;

    // For debugging to make sure the caller when acquiring/releasing our
    // wake lock is the system process.
    static final boolean VALIDATE_WAKE_LOCK_CALLER = false;
@@ -249,6 +259,21 @@ public final class ActivityStackSupervisor implements DisplayListener {
        mLaunchingActivity.setReferenceCounted(false);
    }

    // This function returns a IStatusBarService. The value is from ServiceManager.
    // getService and is cached.
    private IStatusBarService getStatusBarService() {
        synchronized (mService) {
            if (mStatusBarService == null) {
                mStatusBarService = IStatusBarService.Stub.asInterface(
                    ServiceManager.checkService(Context.STATUS_BAR_SERVICE));
                if (mStatusBarService == null) {
                    Slog.w("StatusBarManager", "warning: no STATUS_BAR_SERVICE");
                }
            }
            return mStatusBarService;
        }
    }

    void setWindowManager(WindowManagerService wm) {
        synchronized (mService) {
            mWindowManager = wm;
@@ -2898,9 +2923,12 @@ public final class ActivityStackSupervisor implements DisplayListener {
    }

    void setLockTaskModeLocked(TaskRecord task) {
        final Message lockTaskMsg = Message.obtain();
        if (task == null) {
            // Take out of lock task mode.
            mLockTaskModeTask = null;
            lockTaskMsg.what = LOCK_TASK_END_MSG;
            mHandler.sendMessage(lockTaskMsg);
            return;
        }
        if (isLockTaskModeViolation(task)) {
@@ -2910,6 +2938,8 @@ public final class ActivityStackSupervisor implements DisplayListener {
        mLockTaskModeTask = task;
        findTaskToMoveToFrontLocked(task, 0, null);
        resumeTopActivitiesLocked();
        lockTaskMsg.what = LOCK_TASK_START_MSG;
        mHandler.sendMessage(lockTaskMsg);
    }

    boolean isLockTaskModeViolation(TaskRecord task) {
@@ -3006,6 +3036,32 @@ public final class ActivityStackSupervisor implements DisplayListener {
                    } catch (RemoteException e) {
                    }
                }
                case LOCK_TASK_START_MSG: {
                    // When lock task starts, we disable the status bars.
                    try {
                        if (getStatusBarService() != null) {
                            getStatusBarService().disable
                                (StatusBarManager.DISABLE_MASK ^ StatusBarManager.DISABLE_BACK,
                                mToken, mService.mContext.getPackageName());
                        }
                    } catch (RemoteException ex) {
                        throw new RuntimeException(ex);
                    }
                    break;
                }
                case LOCK_TASK_END_MSG: {
                    // When lock task ends, we enable the status bars.
                    try {
                       if (getStatusBarService() != null) {
                           getStatusBarService().disable
                               (StatusBarManager.DISABLE_NONE,
                               mToken, mService.mContext.getPackageName());
                       }
                    } catch (RemoteException ex) {
                        throw new RuntimeException(ex);
                    }
                    break;
                }
            }
        }
    }