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

Commit 2c24f71c authored by Chiao Cheng's avatar Chiao Cheng Committed by Isaac Katzenelson
Browse files

Sort alarms by time again.

Change default alarm to 12am instead of 6am. Added smooth scrolling to correct
position when order is changed from time modification. Also adding scroll back
to top when adding new alarm.

Bug: 7316415
Change-Id: I61bf4626a7c40694150ee95088eef137afbdd5d9
parent 45df1666
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -128,7 +128,7 @@ public final class Alarm implements Parcelable {
         * The default sort order for this table
         */
        public static final String DEFAULT_SORT_ORDER =
                _ID + " DESC";
                HOUR + ", " + MINUTES + " ASC" + ", " + _ID + " DESC";

        // Used when filtering enabled alarms.
        public static final String WHERE_ENABLED = ENABLED + "=1";
@@ -228,7 +228,7 @@ public final class Alarm implements Parcelable {
    // Creates a default alarm at the current time.
    public Alarm() {
        id = -1;
        hour = 6;
        hour = 0;
        minutes = 0;
        vibrate = true;
        daysOfWeek = new DaysOfWeek(0);
+39 −40
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@ public class AlarmClock extends Activity implements LoaderManager.LoaderCallback
    private ActionableToastBar mUndoBar;

    private Alarm mSelectedAlarm;
    private int mScrollToAlarmId = -1;

    // This flag relies on the activity having a "standard" launchMode and a new instance of this
    // activity being created when launched.
@@ -178,12 +179,6 @@ public class AlarmClock extends Activity implements LoaderManager.LoaderCallback
        }
    }

    private void addNewAlarm() {
        // TODO: change to async
        mAdapter.setNewAlarmCreated(true);
        asyncAddAlarm();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
@@ -198,7 +193,7 @@ public class AlarmClock extends Activity implements LoaderManager.LoaderCallback
                startActivity(new Intent(this, SettingsActivity.class));
                return true;
            case R.id.menu_item_add_alarm:
                addNewAlarm();
                asyncAddAlarm();
                return true;
            case android.R.id.home:
                Intent intent = new Intent(this, DeskClock.class);
@@ -239,8 +234,8 @@ public class AlarmClock extends Activity implements LoaderManager.LoaderCallback
        alarm.hour = hourOfDay;
        alarm.minutes = minute;
        alarm.enabled = true;
        mScrollToAlarmId = alarm.id;
        asyncUpdateAlarm(alarm, true);

    }

    private void showLabelDialog(final Alarm alarm) {
@@ -275,19 +270,32 @@ public class AlarmClock extends Activity implements LoaderManager.LoaderCallback
        gotoAlarmIfSpecified();
    }

    /**
     * Checks if an alarm was passed in.  If so, go to that particular alarm in the list.
     */
    /** If an alarm was passed in via intent and goes to that particular alarm in the list. */
    private void gotoAlarmIfSpecified() {
        final Intent intent = getIntent();
        if (mFirstLoad && intent != null) {
            final Alarm alarm = (Alarm) intent.getParcelableExtra(Alarms.ALARM_INTENT_EXTRA);
            if (alarm != null) {
                scrollToAlarm(alarm.id);
            }
        } else if (mScrollToAlarmId != -1) {
            scrollToAlarm(mScrollToAlarmId);
            mScrollToAlarmId = -1;
        }
        mFirstLoad = false;
    }

    /**
     * Scroll to alarm with given alarm id.
     *
     * @param alarmId The alarm id to scroll to.
     */
    private void scrollToAlarm(int alarmId) {
        for (int i = 0; i < mAdapter.getCount(); i++) {
            long id = mAdapter.getItemId(i);
                    if (id == alarm.id) {
                        mAdapter.setNewAlarm(alarm.id);
                        mAlarmsList.setSelection(i);
            if (id == alarmId) {
                mAdapter.setNewAlarm(alarmId);
                mAlarmsList.smoothScrollToPositionFromTop(i, 0);

                final int firstPositionId = mAlarmsList.getFirstVisiblePosition();
                final int childId = i - firstPositionId;
@@ -298,9 +306,6 @@ public class AlarmClock extends Activity implements LoaderManager.LoaderCallback
            }
        }
    }
        }
        mFirstLoad = false;
    }

    @Override
    public void onLoaderReset(Loader<Cursor> cursorLoader) {
@@ -350,7 +355,6 @@ public class AlarmClock extends Activity implements LoaderManager.LoaderCallback
        private final HashSet<Integer> mExpanded = new HashSet<Integer>();
        private final HashSet<Integer> mRepeatChecked = new HashSet<Integer>();
        private Bundle mPreviousDaysOfWeekMap = new Bundle();
        private boolean mNewAlarmCreated = false;

        private final boolean mHasVibrator;

@@ -485,15 +489,6 @@ public class AlarmClock extends Activity implements LoaderManager.LoaderCallback
            final ItemHolder itemHolder = (ItemHolder) view.getTag();
            itemHolder.alarm = alarm;

            boolean forceExpand = false;
            if (cursor.getPosition() == 0) {

                if (mNewAlarmCreated) {
                    mNewAlarmCreated = false;
                    forceExpand = true;
                }
            }

            // We must unset the listener first because this maybe a recycled view so changing the
            // state would affect the wrong alarm.
            itemHolder.onoff.setOnCheckedChangeListener(null);
@@ -564,7 +559,7 @@ public class AlarmClock extends Activity implements LoaderManager.LoaderCallback
                itemHolder.label.setVisibility(View.GONE);
            }

            if (isAlarmExpanded(alarm) || forceExpand) {
            if (isAlarmExpanded(alarm)) {
                expandAlarm(itemHolder);
            }
        }
@@ -787,10 +782,6 @@ public class AlarmClock extends Activity implements LoaderManager.LoaderCallback
            return 1;
        }

        public void setNewAlarmCreated(boolean newAlarmCreated) {
            mNewAlarmCreated = newAlarmCreated;
        }

        public int[] getExpandedArray() {
            final int[] ids = new int[mExpanded.size()];
            int index = 0;
@@ -863,6 +854,14 @@ public class AlarmClock extends Activity implements LoaderManager.LoaderCallback
                if (alarm.enabled) {
                    popToast(alarm);
                }
                mAdapter.setNewAlarm(alarm.id);
                scrollToAlarm(alarm.id);

                // We need to refresh the first view item because bindView may have been called
                // before setNewAlarm took effect. In that case, the newly created alarm will not be
                // expanded.
                View view = mAlarmsList.getChildAt(0);
                mAdapter.getView(0, view, mAlarmsList);
            }
        };
        updateTask.execute();