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

Commit ff9c65a2 authored by Michael Jurka's avatar Michael Jurka Committed by Android Git Automerger
Browse files

am 6dd6d43a: am b1c5ec17: am 1254f2f4: Persist reordering/deleting widgets on keyguard

* commit '6dd6d43a':
  Persist reordering/deleting widgets on keyguard
parents 865517a7 6dd6d43a
Loading
Loading
Loading
Loading
+30 −14
Original line number Diff line number Diff line
@@ -16,10 +16,6 @@

package com.android.internal.widget;

import com.android.internal.R;
import com.android.internal.telephony.ITelephony;
import com.google.android.collect.Lists;

import android.app.ActivityManagerNative;
import android.app.admin.DevicePolicyManager;
import android.content.ContentResolver;
@@ -42,12 +38,13 @@ import android.util.Log;
import android.view.View;
import android.widget.Button;

import org.apache.harmony.kernel.vm.StringUtils;
import com.android.internal.R;
import com.android.internal.telephony.ITelephony;
import com.google.android.collect.Lists;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.List;

/**
@@ -127,6 +124,11 @@ public class LockPatternUtils {
     */
    public static final int FLAG_BIOMETRIC_WEAK_LIVELINESS = 0x1;

    /**
     * Pseudo-appwidget id we use to represent the default clock status widget
     */
    public static final int ID_DEFAULT_STATUS_WIDGET = -2;

    protected final static String LOCKOUT_PERMANENT_KEY = "lockscreen.lockedoutpermanently";
    protected final static String LOCKOUT_ATTEMPT_DEADLINE = "lockscreen.lockoutattemptdeadline";
    protected final static String PATTERN_EVER_CHOSEN_KEY = "lockscreen.patterneverchosen";
@@ -1052,7 +1054,7 @@ public class LockPatternUtils {
                mContentResolver, Settings.Secure.LOCK_SCREEN_APPWIDGET_IDS,
                UserHandle.USER_CURRENT);
        String delims = ",";
        if (appWidgetIdString != null) {
        if (appWidgetIdString != null && appWidgetIdString.length() > 0) {
            String[] appWidgetStringIds = appWidgetIdString.split(delims);
            int[] appWidgetIds = new int[appWidgetStringIds.length];
            for (int i = 0; i < appWidgetStringIds.length; i++) {
@@ -1060,13 +1062,18 @@ public class LockPatternUtils {
                try {
                    appWidgetIds[i] = Integer.decode(appWidget);
                } catch (NumberFormatException e) {
                    Log.d(TAG, "Error when parsing widget id " + appWidget);
                    return null;
                }
            }
            return appWidgetIds;
        }
        if (appWidgetIdString == null) {
            return new int[] { LockPatternUtils.ID_DEFAULT_STATUS_WIDGET };
        } else {
            return new int[0];
        }
    }

    private static String combineStrings(int[] list, String separator) {
        int listLength = list.length;
@@ -1111,8 +1118,15 @@ public class LockPatternUtils {
                        UserHandle.USER_CURRENT);
    }

    public void addAppWidget(int widgetId, int index) {
    // TODO: log an error if this returns false
    public boolean addAppWidget(int widgetId, int index) {
        int[] widgets = getAppWidgets();
        if (widgets == null) {
            return false;
        }
        if (index < 0 || index >= widgets.length) {
            return false;
        }
        int[] newWidgets = new int[widgets.length + 1];
        for (int i = 0, j = 0; i < newWidgets.length; i++) {
            if (index == i) {
@@ -1125,17 +1139,19 @@ public class LockPatternUtils {
            }
        }
        writeAppWidgets(newWidgets);
        return true;
    }

    public boolean removeAppWidget(int widgetId, int index) {
    public boolean removeAppWidget(int widgetId) {
        int[] widgets = getAppWidgets();

        int[] newWidgets = new int[widgets.length - 1];
        for (int i = 0, j = 0; i < widgets.length; i++) {
            if (index == i) {
                if (widgets[i] != widgetId) {
                    return false;
                }
            if (widgets[i] == widgetId) {
                // continue...
            } else if (j >= newWidgets.length) {
                // we couldn't find the widget
                return false;
            } else {
                newWidgets[j] = widgets[i];
                j++;
+0 −1
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@ import android.os.SystemClock;
import android.telephony.TelephonyManager;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

import com.android.internal.telephony.IccCardConstants.State;
+4 −23
Original line number Diff line number Diff line
@@ -17,41 +17,22 @@
package com.android.internal.policy.impl.keyguard;

import android.content.Context;
import android.util.AttributeSet;
import android.view.HapticFeedbackConstants;
import android.view.View;
import android.view.ViewParent;

import com.android.internal.widget.LockPatternUtils;
import java.util.List;

import android.app.admin.DevicePolicyManager;
import android.content.res.Configuration;
import android.graphics.Rect;

import com.android.internal.widget.PasswordEntryKeyboardView;

import android.os.CountDownTimer;
import android.os.SystemClock;
import android.text.Editable;
import android.text.InputType;
import android.text.SpannableStringBuilder;
import android.text.TextWatcher;
import android.text.method.DigitsKeyListener;
import android.text.method.TextKeyListener;
import android.text.style.TextAppearanceSpan;
import android.util.AttributeSet;
import android.view.HapticFeedbackConstants;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.InputMethodSubtype;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;

import com.android.internal.R;
import com.android.internal.widget.LockPatternUtils;

/**
 * Base class for PIN and password unlock screens.
+0 −1
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;

import android.util.Log;
+29 −10
Original line number Diff line number Diff line
@@ -161,7 +161,7 @@ public class KeyguardHostView extends KeyguardViewBase {
        mAppWidgetContainer.setMinScale(0.5f);

        addDefaultWidgets();
        maybePopulateWidgets();
        addWidgetsFromSettings();

        mViewStateManager = new KeyguardViewStateManager();
        SlidingChallengeLayout slider =
@@ -170,6 +170,7 @@ public class KeyguardHostView extends KeyguardViewBase {
            slider.setOnChallengeScrolledListener(mViewStateManager);
        }
        mAppWidgetContainer.setViewStateManager(mViewStateManager);
        mAppWidgetContainer.setLockPatternUtils(mLockPatternUtils);

        mViewStateManager.setPagedView(mAppWidgetContainer);
        mViewStateManager.setChallengeLayout(slider != null ? slider :
@@ -635,9 +636,11 @@ public class KeyguardHostView extends KeyguardViewBase {
            if (navigationText != null) {
                view.setSecurityMessageDisplay(new KeyguardNavigationManager(navigationText));
            } else {
                if (mKeyguardStatusViewManager != null) {
                    view.setSecurityMessageDisplay(mKeyguardStatusViewManager);
                }
            }
        }

        if (securityMode == SecurityMode.SimPin || securityMode == SecurityMode.SimPuk ||
            securityMode == SecurityMode.Account) {
@@ -826,7 +829,8 @@ public class KeyguardHostView extends KeyguardViewBase {
            AppWidgetHostView view = getAppWidgetHost().createView(mContext, appId, appWidgetInfo);
            addWidget(view, pageIndex);
        } else {
            Log.w(TAG, "AppWidgetInfo was null; not adding widget id " + appId);
            Log.w(TAG, "AppWidgetInfo for app widget id " + appId + " was null, deleting");
            mLockPatternUtils.removeAppWidget(appId);
        }
    }

@@ -876,8 +880,6 @@ public class KeyguardHostView extends KeyguardViewBase {

        View addWidget = inflater.inflate(R.layout.keyguard_add_widget, null, true);
        mAppWidgetContainer.addWidget(addWidget);
        View statusWidget = inflater.inflate(R.layout.keyguard_status_view, null, true);
        mAppWidgetContainer.addWidget(statusWidget);
        if (mContext.getResources().getBoolean(R.bool.kg_enable_camera_default_widget)) {
            View cameraWidget =
                    CameraWidgetFrame.create(mContext, mCameraWidgetCallbacks, mActivityLauncher);
@@ -950,12 +952,15 @@ public class KeyguardHostView extends KeyguardViewBase {
            });
        }

        mKeyguardStatusViewManager = ((KeyguardStatusView)
                findViewById(R.id.keyguard_status_view_face_palm)).getManager();
        KeyguardStatusView ksv = (KeyguardStatusView)
                findViewById(R.id.keyguard_status_view_face_palm);
        if (ksv != null) {
            mKeyguardStatusViewManager = ksv.getManager();
        }

    }

    private void maybePopulateWidgets() {
    private void addWidgetsFromSettings() {
        DevicePolicyManager dpm =
                (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
        if (dpm != null) {
@@ -980,7 +985,11 @@ public class KeyguardHostView extends KeyguardViewBase {
            Log.d(TAG, "Problem reading widgets");
        } else {
            for (int i = widgets.length -1; i >= 0; i--) {
                if (widgets[i] != -1) {
                if (widgets[i] == LockPatternUtils.ID_DEFAULT_STATUS_WIDGET) {
                    LayoutInflater inflater = LayoutInflater.from(mContext);
                    View statusWidget = inflater.inflate(R.layout.keyguard_status_view, null, true);
                    mAppWidgetContainer.addWidget(statusWidget, addPageIndex + 1);
                } else {
                    // We add the widgets from left to right, starting after the first page after
                    // the add page. We count down, since the order will be persisted from right
                    // to left, starting after camera.
@@ -1064,8 +1073,18 @@ public class KeyguardHostView extends KeyguardViewBase {
                pageToShow = multiUserPosition;
            } else {
                final View statusView = findViewById(R.id.keyguard_status_view);
                int statusViewIndex = mAppWidgetContainer.indexOfChild(statusView);
                if (statusViewIndex == -1) {
                    // TEMP code for default page
                    if (mAppWidgetContainer.getChildCount() > 2) {
                        pageToShow = mAppWidgetContainer.getChildCount() - 2;
                    } else {
                        pageToShow = 0;
                    }
                } else {
                    pageToShow = mAppWidgetContainer.indexOfChild(statusView);
                }
            }
            if (mTransportState == TRANSPORT_VISIBLE) {
                mTransportState = TRANSPORT_INVISIBLE;
            }
Loading