package tv.piratemedia.lightcontroler; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Resources; import android.graphics.Point; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.view.ViewPager; import android.support.wearable.view.DismissOverlayView; import android.util.Log; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.widget.LinearLayout; import android.widget.TextView; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.PendingResult; import com.google.android.gms.common.api.ResultCallback; import com.google.android.gms.wearable.Node; import com.google.android.gms.wearable.NodeApi; import com.google.android.gms.wearable.Wearable; import java.util.List; public class MainActivity extends FragmentActivity { private ZonesPagerAdapter FragAdapter; private ViewPager ZonePager; private DismissOverlayView mDismissOverlayView; private GestureDetector mGestureDetector; public GoogleApiClient mGoogleApiClient; public Boolean isRound = false; private Boolean disableTouch = false; private BroadcastReceiver bc; private int screenHeight = 0; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ShapeWear.initShapeWear(this); ShapeWear.setOnShapeChangeListener(new ShapeWear.OnShapeChangeListener() { @Override public void shapeDetected(ShapeWear.ScreenShape screenShape) { //Do your stuff here for example: switch (screenShape){ case MOTO_ROUND: case ROUND: isRound = true; break; case RECTANGLE: isRound = false; break; } if(isRound) { findViewById(R.id.rim).setBackground(getResources().getDrawable(R.drawable.color_border)); } else { findViewById(R.id.rim).setBackground(getResources().getDrawable(R.drawable.color_border_square)); } } }); Point point = new Point(); WindowManager wm = (WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE); wm.getDefaultDisplay().getSize(point); screenHeight = point.y; brightnessValPixels = screenHeight; pixelsPerBrightnessStep = screenHeight / (float) BRIGHTNESS_STEPS; resources = getResources(); brightnessTextContainer = (LinearLayout) findViewById(R.id.brightnesscontainer); txtBrightness = (TextView) findViewById(R.id.brightnesstext); mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(Wearable.API) .build(); mGoogleApiClient.connect(); mDismissOverlayView = (DismissOverlayView) findViewById(R.id.dismiss); mDismissOverlayView.setIntroText(R.string.intro_text); mDismissOverlayView.showIntroIfNecessary(); mGestureDetector = new GestureDetector(this, new LongPressListener()); FragAdapter = new ZonesPagerAdapter(getSupportFragmentManager()); ZonePager = (ViewPager) findViewById(R.id.pager); ZonePager.setAdapter(FragAdapter); ZonePager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i2) { } @Override public void onPageSelected(int i) { if (FragAdapter.isColor(i)) { if (isRound) { findViewById(R.id.rim).setBackground(getResources().getDrawable(R.drawable.color_border)); } else { findViewById(R.id.rim).setBackground(getResources().getDrawable(R.drawable.color_border_square)); } } else { if (isRound) { findViewById(R.id.rim).setBackground(getResources().getDrawable(R.drawable.white_border)); } else { findViewById(R.id.rim).setBackground(getResources().getDrawable(R.drawable.white_border_square)); } } } @Override public void onPageScrollStateChanged(int i) { } }); bc = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.d("Received", intent.getAction()); if(intent.getAction().equals("tv.piratemedia.lightcontroler.wear.updated_zones")) { for(int i = 0; i < FragAdapter.getCount(); i++) { Log.d("Received", "update name in fragment"); try { ColorZoneFragment f = (ColorZoneFragment) FragAdapter.getItem(i); f.updateName(); } catch(ClassCastException e) { WhiteZoneFragment f = (WhiteZoneFragment) FragAdapter.getItem(i); f.updateName(); } } } } }; } @Override protected void onResume() { super.onResume(); IntentFilter intentFilter = new IntentFilter( "tv.piratemedia.lightcontroler.wear.updated_zones"); registerReceiver(bc, intentFilter); final PendingResult<NodeApi.GetConnectedNodesResult> nodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient); nodes.setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() { @Override public void onResult(NodeApi.GetConnectedNodesResult result) { final List<Node> nodes = result.getNodes(); if (nodes != null) { for (int i = 0; i < nodes.size(); i++) { final Node node = nodes.get(i); Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), "/zones", null); } } } }); } @Override protected void onPause() { unregisterReceiver(bc); super.onPause(); } private float startX = 0; private float startY = 0; private float deltaX = 0; private float deltaY = 0; private boolean swipingVertical = false; private float brightnessValPixels = 0; private float brightnessValPixelsTemp = 0; private int brightnessVal = 0; private int oldBrightnessVal = -1; private final int BRIGHTNESS_STEPS = 20; private float pixelsPerBrightnessStep = 1; Resources resources; LinearLayout brightnessTextContainer; TextView txtBrightness; @Override public boolean dispatchTouchEvent(MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN) { deltaX = event.getX() - startX; deltaY = event.getY() - startY; if((Math.abs(deltaY) > Math.abs(deltaX))) { // Save start position for future reference startX = event.getX(); startY = event.getY(); } } else if (event.getAction() == MotionEvent.ACTION_UP) { ZonePager.setEnabled(true); deltaX = event.getX() - startX; deltaY = event.getY() - startY; if((Math.abs(deltaY) > Math.abs(deltaX))) { // Apply new brightness setting deltaY = event.getY() - startY; brightnessValPixels -= deltaY; brightnessValPixels = Math.max(brightnessValPixels, 0); brightnessValPixels = Math.min(brightnessValPixels, screenHeight); brightnessVal = Math.round(brightnessValPixels / pixelsPerBrightnessStep); System.out.println(pixelsPerBrightnessStep); // Protecting the controller from being sent more commands than it needs to be if (brightnessVal != oldBrightnessVal) { oldBrightnessVal = brightnessVal; // Send new brightness val to phone to send to hub if (mGoogleApiClient != null) { final PendingResult<NodeApi.GetConnectedNodesResult> nodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient); nodes.setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() { @Override public void onResult(NodeApi.GetConnectedNodesResult result) { final List<Node> nodes = result.getNodes(); if (nodes != null) { for (int i = 0; i < nodes.size(); i++) { final Node node = nodes.get(i); Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), "/" + ZonePager.getCurrentItem() + "/level/"+ brightnessVal, null); } } } }); } } } brightnessTextContainer.setVisibility(View.INVISIBLE); } else if(event.getAction() == MotionEvent.ACTION_MOVE) { deltaX = event.getX() - startX; deltaY = event.getY() - startY; if((Math.abs(deltaY) > Math.abs(deltaX))) { // Decide if brightness swipe if (Math.abs(deltaY) > 20) { // If it is, disable the background fragment to prevent it from being inadvertently pressed ZonePager.setEnabled(false); } // Calculate new brightness step, but only display the current value on the screen System.out.println(deltaY); brightnessValPixelsTemp = brightnessValPixels; brightnessValPixelsTemp -= deltaY; brightnessValPixelsTemp = Math.max(brightnessValPixelsTemp, 0); brightnessValPixelsTemp = Math.min(brightnessValPixelsTemp, screenHeight); int brightnessPercentage = Math.round((brightnessValPixelsTemp / screenHeight) * 100); txtBrightness.setText(resources.getString(R.string.brightness_percentage, brightnessPercentage)); brightnessTextContainer.setVisibility(View.VISIBLE); } } return mGestureDetector.onTouchEvent(event) || super.dispatchTouchEvent(event); } private class LongPressListener extends GestureDetector.SimpleOnGestureListener { @Override public void onLongPress(MotionEvent event) { mDismissOverlayView.show(); } } }