Move proximity sensor logic into VM fragment.
In preparation for moving it from the CallDetailActivity into
the call log. Seems to make sense to consolidate this within the
fragment in any case.
Bug: 20433758
Change-Id: I1aa0cd9a766fac3e1eb9285d31df5ed90523b8ad
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index 0a295c4..536a97c 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -80,7 +80,7 @@
* This activity can be either started with the URI of a single call log entry, or with the
* {@link #EXTRA_CALL_LOG_IDS} extra to specify a group of call log entries.
*/
-public class CallDetailActivity extends Activity implements ProximitySensorAware {
+public class CallDetailActivity extends Activity {
private static final String TAG = "CallDetail";
private static final char LEFT_TO_RIGHT_EMBEDDING = '\u202A';
@@ -142,8 +142,6 @@
/** Whether we should show "remove from call log" in the options menu. */
private boolean mHasRemoveFromCallLogOption;
- private PowerManager.WakeLock mProximityWakeLock;
-
static final String[] CALL_LOG_PROJECTION = new String[] {
CallLog.Calls.DATE,
CallLog.Calls.DURATION,
@@ -197,13 +195,6 @@
mAccountLabel = (TextView) findViewById(R.id.phone_account_label);
mDefaultCountryIso = GeoUtil.getCurrentCountryIso(this);
mContactPhotoManager = ContactPhotoManager.getInstance(this);
- final PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
- if (powerManager.isWakeLockLevelSupported(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK)) {
- mProximityWakeLock = powerManager.newWakeLock(
- PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, TAG);
- } else {
- mProximityWakeLock = null;
- }
mContactInfoHelper = new ContactInfoHelper(this, GeoUtil.getCurrentCountryIso(this));
getActionBar().setDisplayHomeAsUpEnabled(true);
@@ -707,40 +698,6 @@
);
}
- @Override
- protected void onPause() {
- // Immediately stop the proximity sensor.
- disableProximitySensor(false);
- super.onPause();
- }
-
- @Override
- public void enableProximitySensor() {
- if (mProximityWakeLock == null) {
- return;
- }
- if (!mProximityWakeLock.isHeld()) {
- Log.i(TAG, "Acquiring proximity wake lock");
- mProximityWakeLock.acquire();
- } else {
- Log.i(TAG, "Proximity wake lock already acquired");
- }
- }
-
- @Override
- public void disableProximitySensor(boolean waitForFarState) {
- if (mProximityWakeLock == null) {
- return;
- }
- if (mProximityWakeLock.isHeld()) {
- Log.i(TAG, "Releasing proximity wake lock");
- int flags = (waitForFarState ? PowerManager.RELEASE_FLAG_WAIT_FOR_NO_PROXIMITY : 0);
- mProximityWakeLock.release(flags);
- } else {
- Log.i(TAG, "Proximity wake lock already released");
- }
- }
-
private void closeSystemDialogs() {
sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
}
diff --git a/src/com/android/dialer/ProximitySensorAware.java b/src/com/android/dialer/ProximitySensorAware.java
deleted file mode 100644
index 145b860..0000000
--- a/src/com/android/dialer/ProximitySensorAware.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.dialer;
-
-/**
- * An object that is aware of the state of the proximity sensor.
- */
-public interface ProximitySensorAware {
- /** Start tracking the state of the proximity sensor. */
- public void enableProximitySensor();
-
- /**
- * Stop tracking the state of the proximity sensor.
- *
- * @param waitForFarState if true and the sensor is currently in the near state, it will wait
- * until it is again in the far state before stopping to track its state.
- */
- public void disableProximitySensor(boolean waitForFarState);
-}
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java b/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java
index 0d5c3de..fd98688 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java
@@ -41,7 +41,6 @@
import com.android.common.io.MoreCloseables;
import com.android.contacts.commonbind.analytics.AnalyticsUtil;
-import com.android.dialer.ProximitySensorAware;
import com.android.dialer.R;
import com.android.dialer.util.AsyncTaskExecutors;
import com.android.ex.variablespeed.MediaPlayerProxy;
@@ -68,7 +67,7 @@
*/
@NotThreadSafe
public class VoicemailPlaybackFragment extends Fragment {
- private static final String TAG = "VoicemailPlayback";
+ private static final String TAG = VoicemailPlaybackFragment.class.getSimpleName();
private static final int NUMBER_OF_THREADS_IN_POOL = 2;
private static final String[] HAS_CONTENT_PROJECTION = new String[] {
VoicemailContract.Voicemails.HAS_CONTENT,
@@ -80,6 +79,8 @@
private static ScheduledExecutorService mScheduledExecutorService;
private View mPlaybackLayout;
+ private PowerManager.WakeLock mProximityWakeLock;
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
@@ -95,15 +96,24 @@
Uri voicemailUri = arguments.getParcelable(EXTRA_VOICEMAIL_URI);
Preconditions.checkNotNull(voicemailUri, "fragment must contain EXTRA_VOICEMAIL_URI");
boolean startPlayback = arguments.getBoolean(EXTRA_VOICEMAIL_START_PLAYBACK, false);
+
PowerManager powerManager =
(PowerManager) getActivity().getSystemService(Context.POWER_SERVICE);
- PowerManager.WakeLock wakeLock =
- powerManager.newWakeLock(
- PowerManager.SCREEN_DIM_WAKE_LOCK, getClass().getSimpleName());
- mPresenter = new VoicemailPlaybackPresenter(createPlaybackViewImpl(),
- getMediaPlayerInstance(), voicemailUri,
- getScheduledExecutorServiceInstance(), startPlayback,
- AsyncTaskExecutors.createAsyncTaskExecutor(), wakeLock);
+ if (powerManager.isWakeLockLevelSupported(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK)) {
+ mProximityWakeLock = powerManager.newWakeLock(
+ PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, TAG);
+ } else {
+ mProximityWakeLock = null;
+ }
+
+ mPresenter = new VoicemailPlaybackPresenter(
+ createPlaybackViewImpl(),
+ getMediaPlayerInstance(),
+ voicemailUri,
+ getScheduledExecutorServiceInstance(),
+ startPlayback,
+ AsyncTaskExecutors.createAsyncTaskExecutor(),
+ mProximityWakeLock);
mPresenter.onCreate(savedInstanceState);
}
@@ -134,6 +144,7 @@
@Override
public void onPause() {
+ releaseProximitySensor(false /* waitForFarState */);
mPresenter.onPause();
super.onPause();
}
@@ -175,6 +186,31 @@
}
}
+ private void acquireProximitySensor() {
+ if (mProximityWakeLock == null) {
+ return;
+ }
+ if (!mProximityWakeLock.isHeld()) {
+ Log.i(TAG, "Acquiring proximity wake lock");
+ mProximityWakeLock.acquire();
+ } else {
+ Log.i(TAG, "Proximity wake lock already acquired");
+ }
+ }
+
+ private void releaseProximitySensor(boolean waitForFarState) {
+ if (mProximityWakeLock == null) {
+ return;
+ }
+ if (mProximityWakeLock.isHeld()) {
+ Log.i(TAG, "Releasing proximity wake lock");
+ int flags = waitForFarState ? PowerManager.RELEASE_FLAG_WAIT_FOR_NO_PROXIMITY : 0;
+ mProximityWakeLock.release(flags);
+ } else {
+ Log.i(TAG, "Proximity wake lock already released");
+ }
+ }
+
/**
* Formats a number of milliseconds as something that looks like {@code 00:05}.
* <p>
@@ -214,7 +250,7 @@
}
/** Methods required by the PlaybackView for the VoicemailPlaybackPresenter. */
- private static final class PlaybackViewImpl implements VoicemailPlaybackPresenter.PlaybackView {
+ private final class PlaybackViewImpl implements VoicemailPlaybackPresenter.PlaybackView {
private final ActivityReference mActivityReference;
private final Context mApplicationContext;
private final SeekBar mPlaybackSeek;
@@ -311,8 +347,8 @@
public void enableProximitySensor() {
// Only change the state if the activity is still around.
Activity activity = mActivityReference.get();
- if (activity != null && activity instanceof ProximitySensorAware) {
- ((ProximitySensorAware) activity).enableProximitySensor();
+ if (activity != null) {
+ acquireProximitySensor();
}
}
@@ -320,8 +356,8 @@
public void disableProximitySensor() {
// Only change the state if the activity is still around.
Activity activity = mActivityReference.get();
- if (activity != null && activity instanceof ProximitySensorAware) {
- ((ProximitySensorAware) activity).disableProximitySensor(true);
+ if (activity != null) {
+ releaseProximitySensor(true /* waitForFarState */);
}
}