package com.ptrprograms.endgamewatchface;
import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.support.wearable.view.BoxInsetLayout;
import android.support.wearable.view.WearableListView;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowInsets;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.PendingResult;
import com.google.android.gms.wearable.DataApi;
import com.google.android.gms.wearable.PutDataMapRequest;
import com.google.android.gms.wearable.PutDataRequest;
import com.google.android.gms.wearable.Wearable;
import java.util.Date;
/**
* Created by paulruiz on 3/31/15.
*/
public class WatchFaceConfigActivity extends Activity implements
WearableListView.ClickListener, WearableListView.OnScrollListener {
private GoogleApiClient mGoogleApiClient;
private TextView mHeader;
private TypedArray mImageResourceList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_background_selector);
mImageResourceList = getResources().obtainTypedArray( R.array.background_resource_ids );
mHeader = (TextView) findViewById( R.id.header );
WearableListView listView = (WearableListView) findViewById( R.id.background_picker );
BoxInsetLayout content = (BoxInsetLayout) findViewById( R.id.content );
content.setOnApplyWindowInsetsListener( new View.OnApplyWindowInsetsListener() {
@Override
public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
if( !insets.isRound() ) {
v.setPaddingRelative( (getResources().getDimensionPixelSize( R.dimen.content_padding_start ) ),
v.getPaddingTop(),
v.getPaddingEnd(),
v.getPaddingBottom() );
}
return v.onApplyWindowInsets( insets );
}
});
listView.setHasFixedSize( true );
listView.setClickListener( this );
listView.addOnScrollListener( this );
String[] backgrounds = getResources().getStringArray( R.array.background_array );
listView.setAdapter( new BackgroundListAdapter( backgrounds ) );
}
private void initGoogleApiClient() {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(Bundle connectionHint) {
}
@Override
public void onConnectionSuspended(int cause) {
}
})
.addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(ConnectionResult result) {
Log.e( "Wearable", "On connection failed: " + result.toString() );
}
})
.addApi(Wearable.API)
.build();
}
@Override
protected void onStart() {
super.onStart();
if( mGoogleApiClient == null )
initGoogleApiClient();
mGoogleApiClient.connect();
}
@Override
protected void onStop() {
if( mGoogleApiClient != null && mGoogleApiClient.isConnected() )
mGoogleApiClient.disconnect();
super.onStop();
}
@Override
public void onClick(WearableListView.ViewHolder viewHolder) {
BackgroundItemViewHolder holder = (BackgroundItemViewHolder) viewHolder;
PutDataMapRequest putDataMapRequest = PutDataMapRequest.create(WatchFace.DATA_LAYER_PATH);
putDataMapRequest.getDataMap().putLong( WatchFace.KEY_TIME, new Date().getTime() );
putDataMapRequest.getDataMap().putInt(WatchFace.KEY_BACKGROUND_POSITION, holder.getPosition());
PutDataRequest putDataReq = putDataMapRequest.asPutDataRequest();
PendingResult<DataApi.DataItemResult> result = Wearable.DataApi.putDataItem( mGoogleApiClient, putDataReq );
finish();
}
@Override
public void onTopEmptyRegionClick() {
}
@Override
public void onScroll(int i) {
}
@Override
public void onAbsoluteScrollChange(int scroll) {
float newTranslation = Math.min(-scroll, 0);
mHeader.setTranslationY(newTranslation);
}
@Override
public void onScrollStateChanged(int i) {
}
@Override
public void onCentralPositionChanged(int i) {
}
private class BackgroundListAdapter extends WearableListView.Adapter {
private final String[] mBackgrounds;
public BackgroundListAdapter( String[] backgrounds ) {
mBackgrounds = backgrounds;
}
@Override
public WearableListView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int position ) {
return new BackgroundItemViewHolder( new BackgroundItem( viewGroup.getContext() ) );
}
@Override
public void onBindViewHolder(WearableListView.ViewHolder viewHolder, int position ) {
BackgroundItemViewHolder holder = (BackgroundItemViewHolder) viewHolder;
String backgroundName = mBackgrounds[ position ];
holder.mBackgroundItem.setBackground( backgroundName, position );
RecyclerView.LayoutParams layoutParams = new RecyclerView.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT );
int backgroundPickerItemMargin = (int) getResources().getDimension( R.dimen.background_picker_item_margin );
if( position == 0 ) {
layoutParams.setMargins( 0, backgroundPickerItemMargin, 0, 0 );
} else if( position == mBackgrounds.length - 1 ) {
layoutParams.setMargins( 0, 0, 0, backgroundPickerItemMargin );
} else {
layoutParams.setMargins( 0, 0, 0, 0 );
}
holder.itemView.setLayoutParams( layoutParams );
}
@Override
public int getItemCount() {
return mBackgrounds.length;
}
}
private static class BackgroundItemViewHolder extends WearableListView.ViewHolder {
private final BackgroundItem mBackgroundItem;
public BackgroundItemViewHolder( BackgroundItem item ) {
super( item );
mBackgroundItem = item;
}
}
private static class BackgroundItem extends LinearLayout implements WearableListView.OnCenterProximityListener {
public final TextView mLabel;
private final ImageView mBackground;
private TypedArray mImageResourceList;
public BackgroundItem( Context context ) {
super( context );
View.inflate( context, R.layout.background_picker_item, this );
mLabel = (TextView) findViewById( R.id.label );
mBackground = (ImageView) findViewById( R.id.background );
mImageResourceList = getResources().obtainTypedArray( R.array.background_icons_resource_ids );
}
private void setBackground( String backgroundName, int position ) {
mLabel.setText( backgroundName );
mImageResourceList.getResourceId(position, -1);
mBackground.setImageDrawable( getResources().getDrawable( mImageResourceList.getResourceId( position, -1 ) ) );
}
@Override
public void onCenterPosition(boolean animate) {
}
@Override
public void onNonCenterPosition(boolean animate) {
}
}
}