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

Commit e25e9f83 authored by Isaac Katzenelson's avatar Isaac Katzenelson Committed by Android (Google) Code Review
Browse files

Merge "Keep screen on when running stopwatch" into ics-ub-clock-amazon

parents 0b7c93a6 64056d41
Loading
Loading
Loading
Loading
+43 −11
Original line number Diff line number Diff line
@@ -20,15 +20,13 @@ import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.drawable.TransitionDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.preference.PreferenceManager;
import android.support.v13.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
@@ -38,10 +36,6 @@ import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.view.animation.TranslateAnimation;
import android.widget.PopupMenu;
import android.widget.TextView;

@@ -134,6 +128,7 @@ public class DeskClock extends Activity implements LabelDialogFragment.TimerLabe
            mStopwatchTab.setContentDescription(R.string.menu_stopwatch);
            mTabsAdapter.addTab(mStopwatchTab, StopwatchFragment.class,STOPWATCH_TAB_INDEX);
            mActionBar.setSelectedNavigationItem(selectedIndex);
            mTabsAdapter.notifySelectedPage(selectedIndex);
        }
    }

@@ -268,10 +263,19 @@ public class DeskClock extends Activity implements LabelDialogFragment.TimerLabe
        Log.v(LOG_TAG, "Setting home time zone to " + homeTimeZone);
    }

    public boolean isClockTab() {
        return mViewPager.getCurrentItem() == CLOCK_TAB_INDEX;
    public void registerPageChangedListener(DeskClockFragment frag) {
        if (mTabsAdapter != null) {
            mTabsAdapter.registerPageChangedListener(frag);
        }
    }

    public void unregisterPageChangedListener(DeskClockFragment frag) {
        if (mTabsAdapter != null) {
            mTabsAdapter.unregisterPageChangedListener(frag);
        }
    }


    /***
     * Adapter for wrapping together the ActionBar's tab with the ViewPager
     */
@@ -300,6 +304,8 @@ public class DeskClock extends Activity implements LabelDialogFragment.TimerLabe
        ActionBar mMainActionBar;
        Context mContext;
        ViewPager mPager;
        // Used for doing callbacks to fragments.
        ArrayList<String> mFragmentTags = new ArrayList<String>();

        public TabsAdapter(Activity activity, ViewPager pager) {
            super(activity.getFragmentManager());
@@ -340,6 +346,7 @@ public class DeskClock extends Activity implements LabelDialogFragment.TimerLabe
        @Override
        public void onPageSelected(int position) {
            mMainActionBar.setSelectedNavigationItem(position);
            notifyPageChanged(position);
        }

        @Override
@@ -363,14 +370,39 @@ public class DeskClock extends Activity implements LabelDialogFragment.TimerLabe
            // Do nothing

        }

        public void notifySelectedPage(int page) {
            notifyPageChanged(page);
        }

        private void notifyPageChanged(int newPage) {
            for (String tag : mFragmentTags) {
                final FragmentManager fm = getFragmentManager();
                DeskClockFragment f = (DeskClockFragment) fm.findFragmentByTag(tag);
                if (f != null) {
                    f.onPageChanged(newPage);
                }
            }
        }

        public void registerPageChangedListener(DeskClockFragment frag) {
            mFragmentTags.add(frag.getTag());
            // Since registering a listener by the fragment is done sometimes after the page
            // was already changed, make sure the fragment gets the current page
            frag.onPageChanged(mMainActionBar.getSelectedNavigationIndex());
        }

        public void unregisterPageChangedListener(DeskClockFragment frag) {
            mFragmentTags.remove(frag.getTag());
        }
    }

    public static abstract class OnTapListener implements OnTouchListener {
        private float mLastTouchX;
        private float mLastTouchY;
        private long mLastTouchTime;
        private TextView mMakePressedTextView;
        private int mPressedColor, mGrayColor;
        private final TextView mMakePressedTextView;
        private final int mPressedColor, mGrayColor;
        private final float MAX_MOVEMENT_ALLOWED = 20;
        private final long MAX_TIME_ALLOWED = 500;

+2 −11
Original line number Diff line number Diff line
@@ -17,19 +17,10 @@
package com.android.deskclock;

import android.app.Fragment;
import android.content.Context;

public class DeskClockFragment extends Fragment {
    protected Context mContext;
    private boolean mButtonClicked = false;

    protected void buttonClicked(boolean state) {
        mButtonClicked = state;
    }

    public boolean isButtonClicked() {
        boolean res = mButtonClicked;
        mButtonClicked = false;
        return res;
    public void onPageChanged(int page) {
        // Do nothing here , only in derived classes
    }
}
+43 −10
Original line number Diff line number Diff line
@@ -9,6 +9,8 @@ import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
@@ -17,7 +19,6 @@ import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListPopupWindow;
@@ -28,7 +29,6 @@ import android.widget.TextView;
import com.android.deskclock.CircleButtonsLinearLayout;
import com.android.deskclock.CircleTimerView;
import com.android.deskclock.DeskClock;
import com.android.deskclock.DeskClock.OnTapListener;
import com.android.deskclock.DeskClockFragment;
import com.android.deskclock.Log;
import com.android.deskclock.R;
@@ -38,10 +38,10 @@ import com.android.deskclock.timer.CountingTimerView;
import java.util.ArrayList;
import java.util.List;

/**
 * TODO: Insert description here. (generated by isaackatz)
 */
public class StopwatchFragment extends DeskClockFragment implements OnSharedPreferenceChangeListener{
public class StopwatchFragment extends DeskClockFragment
        implements OnSharedPreferenceChangeListener {

    private static final String TAG = "StopwatchFragment";
    int mState = Stopwatches.STOPWATCH_RESET;

    // Stopwatch views that are accessed by the activity
@@ -52,6 +52,7 @@ public class StopwatchFragment extends DeskClockFragment implements OnSharedPref
    private ListView mLapsList;
    private ImageButton mShareButton;
    private ListPopupWindow mSharePopup;
    private WakeLock mWakeLock;

    // Used for calculating the time from the start taking into account the pause times
    long mStartTime = 0;
@@ -185,7 +186,6 @@ public class StopwatchFragment extends DeskClockFragment implements OnSharedPref
        Intent intent = new Intent(context, StopwatchService.class);
        intent.putExtra(Stopwatches.MESSAGE_TIME, time);
        intent.putExtra(Stopwatches.SHOW_NOTIF, false);
        buttonClicked(true);
        switch (mState) {
            case Stopwatches.STOPWATCH_RUNNING:
                // do stop
@@ -194,6 +194,7 @@ public class StopwatchFragment extends DeskClockFragment implements OnSharedPref
                doStop();
                intent.setAction(Stopwatches.STOP_STOPWATCH);
                context.startService(intent);
                releaseWakeLock();
                break;
            case Stopwatches.STOPWATCH_RESET:
            case Stopwatches.STOPWATCH_STOPPED:
@@ -201,6 +202,7 @@ public class StopwatchFragment extends DeskClockFragment implements OnSharedPref
                doStart(time);
                intent.setAction(Stopwatches.START_STOPWATCH);
                context.startService(intent);
                acquireWakeLock();
                break;
            default:
                Log.wtf("Illegal state " + mState
@@ -224,7 +226,6 @@ public class StopwatchFragment extends DeskClockFragment implements OnSharedPref
                Intent intent = new Intent(context, StopwatchService.class);
                intent.putExtra(Stopwatches.MESSAGE_TIME, time);
                intent.putExtra(Stopwatches.SHOW_NOTIF, false);
                buttonClicked(true);
                switch (mState) {
                    case Stopwatches.STOPWATCH_RUNNING:
                        // Save lap time
@@ -238,6 +239,7 @@ public class StopwatchFragment extends DeskClockFragment implements OnSharedPref
                        doReset();
                        intent.setAction(Stopwatches.RESET_STOPWATCH);
                        context.startService(intent);
                        releaseWakeLock();
                        break;
                    default:
                        Log.wtf("Illegal state " + mState
@@ -300,12 +302,13 @@ public class StopwatchFragment extends DeskClockFragment implements OnSharedPref
        setButtons(mState);
        mTimeText.setTime(mAccumulatedTime, true, true);
        if (mState == Stopwatches.STOPWATCH_RUNNING) {
            acquireWakeLock();
            startUpdateThread();
        } else if (mState == Stopwatches.STOPWATCH_STOPPED && mAccumulatedTime != 0) {
            mTimeText.blinkTimeStr(true);
        }
        showLaps();

        ((DeskClock)getActivity()).registerPageChangedListener(this);
        super.onResume();
    }

@@ -325,10 +328,20 @@ public class StopwatchFragment extends DeskClockFragment implements OnSharedPref
            mSharePopup.dismiss();
            mSharePopup = null;
        }

        ((DeskClock)getActivity()).unregisterPageChangedListener(this);
        releaseWakeLock();
        super.onPause();
    }

    @Override
    public void onPageChanged(int page) {
        if (page == DeskClock.STOPWATCH_TAB_INDEX && mState == Stopwatches.STOPWATCH_RUNNING) {
            acquireWakeLock();
        } else {
            releaseWakeLock();
        }
    }

    private void doStop() {
        stopUpdateThread();
        mTime.pauseIntervalAnimation();
@@ -743,4 +756,24 @@ public class StopwatchFragment extends DeskClockFragment implements OnSharedPref
            }
        }
    }

    // Used to keeps screen on when stopwatch is running.

    private void acquireWakeLock() {
        if (mWakeLock == null) {
            final PowerManager pm =
                    (PowerManager) getActivity().getSystemService(Context.POWER_SERVICE);
            mWakeLock = pm.newWakeLock(
                    PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, TAG);
            mWakeLock.setReferenceCounted(false);
        }
        mWakeLock.acquire();
    }

    private void releaseWakeLock() {
        if (mWakeLock != null && mWakeLock.isHeld()) {
            mWakeLock.release();
        }
    }

}