package com.mercandalli.android.apps.files;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.content.LocalBroadcastManager;
import android.support.wearable.activity.WearableActivity;
import android.support.wearable.view.BoxInsetLayout;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.wearable.Node;
import com.google.android.gms.wearable.NodeApi;
import com.google.android.gms.wearable.Wearable;
import com.mercandalli.android.apps.files.shared.SharedAudioData;
import com.mercandalli.android.apps.files.shared.SharedAudioPlayerUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.TimeUnit;
/**
* A {@link WearableActivity} used to control the phone or tablet audio player.
*/
public class AudioActivity extends WearableActivity implements View.OnClickListener {
@NonNull
private static final SimpleDateFormat AMBIENT_DATE_FORMAT =
new SimpleDateFormat("HH:mm", Locale.US);
@Nullable
private BoxInsetLayout mContainerView;
@Nullable
private TextView mTextView;
@Nullable
private TextView mClockView;
@Nullable
private ProgressBar mProgressBar;
@Nullable
private ImageView mPlayPauseImageView;
@Nullable
private ImageView mNextImageView;
@Nullable
private ImageView mPreviousImageView;
@Nullable
private GoogleApiClient mGoogleApiClient;
@Nullable
private String mTelNodeId;
@Nullable
private SharedAudioData mSharedAudioData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_audio);
setAmbientEnabled();
findViews();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Wearable.API)
.build();
mGoogleApiClient.connect();
retrieveDeviceNode();
// Register the local broadcast receiver, defined in step 3.
final IntentFilter messageFilter = new IntentFilter(Intent.ACTION_SEND);
final MessageReceiver messageReceiver = new MessageReceiver();
LocalBroadcastManager.getInstance(this).registerReceiver(messageReceiver, messageFilter);
}
@Override
public void onEnterAmbient(Bundle ambientDetails) {
super.onEnterAmbient(ambientDetails);
updateDisplay();
}
@Override
public void onUpdateAmbient() {
super.onUpdateAmbient();
updateDisplay();
}
@Override
public void onExitAmbient() {
updateDisplay();
super.onExitAmbient();
}
@Override
public void onClick(View v) {
if (mSharedAudioData == null) {
return;
}
final int viewId = v.getId();
switch (viewId) {
case R.id.activity_audio_play_pause:
sendToPhone(mSharedAudioData.getTogglePlayPauseOrder());
break;
case R.id.activity_audio_previous:
sendToPhone(SharedAudioPlayerUtils.AUDIO_PLAYER_ACTION_PREVIOUS);
break;
case R.id.activity_audio_next:
sendToPhone(SharedAudioPlayerUtils.AUDIO_PLAYER_ACTION_NEXT);
break;
}
}
private void sendToPhone(@SharedAudioPlayerUtils.Action int order) {
if (mSharedAudioData != null) {
mSharedAudioData.setAction(order);
WearableService.sendPhoneAudioData(mGoogleApiClient, mTelNodeId, mSharedAudioData);
}
}
private void findViews() {
mContainerView = (BoxInsetLayout) findViewById(R.id.activity_audio_container);
mTextView = (TextView) findViewById(R.id.activity_audio_title);
mClockView = (TextView) findViewById(R.id.activity_audio_clock);
mProgressBar = (ProgressBar) findViewById(R.id.activity_main_progress_bar);
mPlayPauseImageView = (ImageView) findViewById(R.id.activity_audio_play_pause);
mPreviousImageView = (ImageView) findViewById(R.id.activity_audio_previous);
mNextImageView = (ImageView) findViewById(R.id.activity_audio_next);
mPlayPauseImageView.setOnClickListener(this);
mPreviousImageView.setOnClickListener(this);
mNextImageView.setOnClickListener(this);
}
private void updateDisplay() {
if (isAmbient()) {
mContainerView.setBackgroundColor(Color.BLACK);
mTextView.setTextColor(Color.WHITE);
mClockView.setVisibility(View.VISIBLE);
mClockView.setText(AMBIENT_DATE_FORMAT.format(new Date()));
} else {
mContainerView.setBackground(null);
mTextView.setTextColor(Color.BLACK);
mClockView.setVisibility(View.GONE);
}
}
private void syncControlVisibility(boolean visible) {
if (visible) {
mProgressBar.setVisibility(View.GONE);
mPlayPauseImageView.setVisibility(View.VISIBLE);
mPreviousImageView.setVisibility(View.VISIBLE);
mNextImageView.setVisibility(View.VISIBLE);
} else {
mProgressBar.setVisibility(View.VISIBLE);
mPlayPauseImageView.setVisibility(View.GONE);
mPreviousImageView.setVisibility(View.GONE);
mNextImageView.setVisibility(View.GONE);
}
}
private void retrieveDeviceNode() {
new Thread(new Runnable() {
@Override
public void run() {
mGoogleApiClient.blockingConnect(WearableService.CONNECTION_TIME_OUT_MS, TimeUnit.MILLISECONDS);
final NodeApi.GetConnectedNodesResult result =
Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await();
final List<Node> nodes = result.getNodes();
if (nodes.size() > 0) {
mTelNodeId = nodes.get(0).getId();
}
mGoogleApiClient.disconnect();
WearableService.askPhoneToBeNotified(mGoogleApiClient, mTelNodeId);
}
}).start();
}
public class MessageReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
mSharedAudioData = new SharedAudioData(intent.getStringExtra("message"));
switch (mSharedAudioData.getStatus()) {
case SharedAudioPlayerUtils.AUDIO_PLAYER_STATUS_PAUSED:
mPlayPauseImageView.setImageResource(R.drawable.ic_play_arrow_white_18dp);
syncControlVisibility(true);
break;
case SharedAudioPlayerUtils.AUDIO_PLAYER_STATUS_PLAYING:
mPlayPauseImageView.setImageResource(R.drawable.ic_pause_white_18dp);
syncControlVisibility(true);
break;
case SharedAudioPlayerUtils.AUDIO_PLAYER_STATUS_PREPARING:
syncControlVisibility(false);
break;
case SharedAudioPlayerUtils.AUDIO_PLAYER_STATUS_UNKNOWN:
syncControlVisibility(false);
break;
}
final StringBuilder text = new StringBuilder();
final String title = mSharedAudioData.getTitle();
if (title != null) {
text.append(title).append("\n");
}
final String artist = mSharedAudioData.getArtist();
if (artist != null) {
text.append(artist).append("\n");
}
final String album = mSharedAudioData.getAlbum();
if (album != null) {
text.append(album).append("\n");
}
mTextView.setText(text.toString());
}
}
}