Commit 10a2d2ce authored by Marcin Wiacek's avatar Marcin Wiacek Committed by Commit Bot

@IntDef cleanup in the CreateRouteRequest

@IntDef/@StringDef annotation are preferred way for declaring
set of String/int values.

1. they need less space in APK than enum, see
https://developer.android.com/topic/performance/reduce-apk-size#remove-enums
2. they give more control over allowed values than "static final" values

Main goal of patch is writing "static final" values, enum
and some classes in one common @IntDef/@StringDef form:

1. with @IntDef/@StringDef first, @Retention second
   and related @interface third
2. with values inside @interface
3. with NUM_ENTRIES declaring number of entries if necessary
4. with comment about numbering from 0 without gaps when necessary
5. with @Retention(RetentionPolicy.SOURCE)
6. without "static final" in the @interface

Change-Id: I3660a7c2497124f18168d4e8f24495feb21b2818
Reviewed-on: https://chromium-review.googlesource.com/1150525Reviewed-by: default avatarZhiqiang Zhang <zqzhang@chromium.org>
Commit-Queue: Marcin Wiącek <marcin@mwiacek.com>
Cr-Commit-Position: refs/heads/master@{#578468}
parent 45e2565a
...@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.media.router.cast; ...@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.media.router.cast;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.IntDef;
import com.google.android.gms.cast.Cast; import com.google.android.gms.cast.Cast;
import com.google.android.gms.cast.LaunchOptions; import com.google.android.gms.cast.LaunchOptions;
...@@ -23,6 +24,9 @@ import org.chromium.chrome.browser.media.router.MediaSink; ...@@ -23,6 +24,9 @@ import org.chromium.chrome.browser.media.router.MediaSink;
import org.chromium.chrome.browser.media.router.MediaSource; import org.chromium.chrome.browser.media.router.MediaSource;
import org.chromium.chrome.browser.media.router.cast.remoting.RemotingCastSession; import org.chromium.chrome.browser.media.router.cast.remoting.RemotingCastSession;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.annotation.Nullable; import javax.annotation.Nullable;
/** /**
...@@ -37,12 +41,17 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks, ...@@ -37,12 +41,17 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks,
ChromeCastSessionManager.CastSessionLaunchRequest { ChromeCastSessionManager.CastSessionLaunchRequest {
private static final String TAG = "MediaRouter"; private static final String TAG = "MediaRouter";
private static final int STATE_IDLE = 0; @IntDef({State.IDLE, State.CONNECTING_TO_API, State.API_CONNECTION_SUSPENDED,
private static final int STATE_CONNECTING_TO_API = 1; State.LAUNCHING_APPLICATION, State.LAUNCH_SUCCEEDED, State.TERMINATED})
private static final int STATE_API_CONNECTION_SUSPENDED = 2; @Retention(RetentionPolicy.SOURCE)
private static final int STATE_LAUNCHING_APPLICATION = 3; private @interface State {
private static final int STATE_LAUNCH_SUCCEEDED = 4; int IDLE = 0;
private static final int STATE_TERMINATED = 5; int CONNECTING_TO_API = 1;
int API_CONNECTION_SUSPENDED = 2;
int LAUNCHING_APPLICATION = 3;
int LAUNCH_SUCCEEDED = 4;
int TERMINATED = 5;
}
private final MediaSource mSource; private final MediaSource mSource;
private final MediaSink mSink; private final MediaSink mSink;
...@@ -53,15 +62,20 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks, ...@@ -53,15 +62,20 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks,
private final int mRequestId; private final int mRequestId;
private final CastMessageHandler mMessageHandler; private final CastMessageHandler mMessageHandler;
private final ChromeCastSessionManager.CastSessionManagerListener mSessionListener; private final ChromeCastSessionManager.CastSessionManagerListener mSessionListener;
private final RequestedCastSessionType mSessionType; private final @RequestedCastSessionType int mSessionType;
private GoogleApiClient mApiClient; private GoogleApiClient mApiClient;
private int mState = STATE_IDLE; private @State int mState = State.IDLE;
// Used to identify whether the request should launch a CastSessionImpl or a RemotingCastSession // Used to identify whether the request should launch a CastSessionImpl or a RemotingCastSession
// (based off of wheter the route creation was requested by a RemotingMediaRouteProvider or a // (based off of wheter the route creation was requested by a RemotingMediaRouteProvider or a
// CastMediaRouteProvider). // CastMediaRouteProvider).
public enum RequestedCastSessionType { CAST, REMOTE } @IntDef({RequestedCastSessionType.CAST, RequestedCastSessionType.REMOTE})
@Retention(RetentionPolicy.SOURCE)
public @interface RequestedCastSessionType {
int CAST = 0;
int REMOTE = 1;
}
/** /**
* Initializes the request. * Initializes the request.
...@@ -79,7 +93,8 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks, ...@@ -79,7 +93,8 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks,
public CreateRouteRequest(MediaSource source, MediaSink sink, String presentationId, public CreateRouteRequest(MediaSource source, MediaSink sink, String presentationId,
String origin, int tabId, boolean isIncognito, int requestId, String origin, int tabId, boolean isIncognito, int requestId,
ChromeCastSessionManager.CastSessionManagerListener listener, ChromeCastSessionManager.CastSessionManagerListener listener,
RequestedCastSessionType sessionType, @Nullable CastMessageHandler messageHandler) { @RequestedCastSessionType int sessionType,
@Nullable CastMessageHandler messageHandler) {
assert source != null; assert source != null;
assert sink != null; assert sink != null;
...@@ -140,11 +155,11 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks, ...@@ -140,11 +155,11 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks,
*/ */
@Override @Override
public void start(Cast.Listener castListener) { public void start(Cast.Listener castListener) {
if (mState != STATE_IDLE) throwInvalidState(); if (mState != State.IDLE) throwInvalidState();
mApiClient = createApiClient(castListener); mApiClient = createApiClient(castListener);
mApiClient.connect(); mApiClient.connect();
mState = STATE_CONNECTING_TO_API; mState = State.CONNECTING_TO_API;
} }
///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////
...@@ -152,16 +167,16 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks, ...@@ -152,16 +167,16 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks,
@Override @Override
public void onConnected(Bundle connectionHint) { public void onConnected(Bundle connectionHint) {
if (mState != STATE_CONNECTING_TO_API && mState != STATE_API_CONNECTION_SUSPENDED) { if (mState != State.CONNECTING_TO_API && mState != State.API_CONNECTION_SUSPENDED) {
throwInvalidState(); throwInvalidState();
} }
if (mState == STATE_API_CONNECTION_SUSPENDED) return; if (mState == State.API_CONNECTION_SUSPENDED) return;
try { try {
launchApplication(mApiClient, mSource.getApplicationId(), true) launchApplication(mApiClient, mSource.getApplicationId(), true)
.setResultCallback(this); .setResultCallback(this);
mState = STATE_LAUNCHING_APPLICATION; mState = State.LAUNCHING_APPLICATION;
} catch (Exception e) { } catch (Exception e) {
Log.e(TAG, "Launch application failed: %s", mSource.getApplicationId(), e); Log.e(TAG, "Launch application failed: %s", mSource.getApplicationId(), e);
reportError(); reportError();
...@@ -170,12 +185,12 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks, ...@@ -170,12 +185,12 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks,
@Override @Override
public void onConnectionSuspended(int cause) { public void onConnectionSuspended(int cause) {
mState = STATE_API_CONNECTION_SUSPENDED; mState = State.API_CONNECTION_SUSPENDED;
} }
@Override @Override
public void onConnectionFailed(ConnectionResult result) { public void onConnectionFailed(ConnectionResult result) {
if (mState != STATE_CONNECTING_TO_API) throwInvalidState(); if (mState != State.CONNECTING_TO_API) throwInvalidState();
Log.e(TAG, "GoogleApiClient connection failed: %d, %b", result.getErrorCode(), Log.e(TAG, "GoogleApiClient connection failed: %d, %b", result.getErrorCode(),
result.hasResolution()); result.hasResolution());
...@@ -187,8 +202,7 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks, ...@@ -187,8 +202,7 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks,
*/ */
@Override @Override
public void onResult(Cast.ApplicationConnectionResult result) { public void onResult(Cast.ApplicationConnectionResult result) {
if (mState != STATE_LAUNCHING_APPLICATION if (mState != State.LAUNCHING_APPLICATION && mState != State.API_CONNECTION_SUSPENDED) {
&& mState != STATE_API_CONNECTION_SUSPENDED) {
throwInvalidState(); throwInvalidState();
} }
...@@ -200,7 +214,7 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks, ...@@ -200,7 +214,7 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks,
return; return;
} }
mState = STATE_LAUNCH_SUCCEEDED; mState = State.LAUNCH_SUCCEEDED;
reportSuccess(result); reportSuccess(result);
} }
...@@ -234,17 +248,17 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks, ...@@ -234,17 +248,17 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks,
} }
private void reportSuccess(Cast.ApplicationConnectionResult result) { private void reportSuccess(Cast.ApplicationConnectionResult result) {
if (mState != STATE_LAUNCH_SUCCEEDED) throwInvalidState(); if (mState != State.LAUNCH_SUCCEEDED) throwInvalidState();
CastSession session = null; CastSession session = null;
switch (mSessionType) { switch (mSessionType) {
case CAST: case RequestedCastSessionType.CAST:
session = new CastSessionImpl(mApiClient, result.getSessionId(), session = new CastSessionImpl(mApiClient, result.getSessionId(),
result.getApplicationMetadata(), result.getApplicationStatus(), result.getApplicationMetadata(), result.getApplicationStatus(),
mSink.getDevice(), mOrigin, mTabId, mIsIncognito, mSource, mMessageHandler); mSink.getDevice(), mOrigin, mTabId, mIsIncognito, mSource, mMessageHandler);
break; break;
case REMOTE: case RequestedCastSessionType.REMOTE:
session = new RemotingCastSession(mApiClient, result.getSessionId(), session = new RemotingCastSession(mApiClient, result.getSessionId(),
result.getApplicationMetadata(), result.getApplicationStatus(), result.getApplicationMetadata(), result.getApplicationStatus(),
mSink.getDevice(), mOrigin, mTabId, mIsIncognito, mSource); mSink.getDevice(), mOrigin, mTabId, mIsIncognito, mSource);
...@@ -257,7 +271,7 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks, ...@@ -257,7 +271,7 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks,
} }
private void reportError() { private void reportError() {
if (mState == STATE_TERMINATED) throwInvalidState(); if (mState == State.TERMINATED) throwInvalidState();
ChromeCastSessionManager.get().onSessionStartFailed(); ChromeCastSessionManager.get().onSessionStartFailed();
...@@ -267,6 +281,6 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks, ...@@ -267,6 +281,6 @@ public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks,
private void terminate() { private void terminate() {
mApiClient.unregisterConnectionCallbacks(this); mApiClient.unregisterConnectionCallbacks(this);
mApiClient.unregisterConnectionFailedListener(this); mApiClient.unregisterConnectionFailedListener(this);
mState = STATE_TERMINATED; mState = State.TERMINATED;
} }
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment