package im.ricochet.androidod; import android.content.Intent; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import od.Od; public class RemoteActivity extends AppCompatActivity { private static final String DEVICE_NAME_KEY = "deviceName"; private static final String BATTERY_LEVEL_KEY = "batteryLevel"; private static final String VIBE_LEVEL_KEY = "vibeLEvel"; TextView deviceText; TextView batteryText; TextView statusText; Button offButton; Button lowButton; Button medButton; Button highButton; Button disconnectButton; int vibeLevel = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_remote); deviceText = (TextView)findViewById(R.id.deviceName); batteryText = (TextView)findViewById(R.id.batteryLevel); statusText = (TextView)findViewById(R.id.status); offButton = (Button)findViewById(R.id.offButton); lowButton = (Button)findViewById(R.id.lowButton); medButton = (Button)findViewById(R.id.medButton); highButton = (Button)findViewById(R.id.highButton); disconnectButton = (Button)findViewById(R.id.disconnetButton); offButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { SetLevelTask setLevelTask = new SetLevelTask(); setLevelTask.execute(0); } }); lowButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { SetLevelTask setLevelTask = new SetLevelTask(); setLevelTask.execute(2); } }); medButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { SetLevelTask setLevelTask = new SetLevelTask(); setLevelTask.execute(4); } }); highButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { SetLevelTask setLevelTask = new SetLevelTask(); setLevelTask.execute(6); } }); disconnectButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { DisconnectTask disconnectTask = new DisconnectTask(); disconnectTask.execute(); } }); if (savedInstanceState != null) { deviceText.setText(savedInstanceState.getString(DEVICE_NAME_KEY)); batteryText.setText(savedInstanceState.getString(BATTERY_LEVEL_KEY)); vibeLevel = savedInstanceState.getInt(VIBE_LEVEL_KEY); setVibeLevel(vibeLevel); } else { GetDeviceNameTask getDeviceNameTask = new GetDeviceNameTask(); getDeviceNameTask.execute(); GetBatteryTask getBatteryTask = new GetBatteryTask(); getBatteryTask.execute(); GetLevelTask getLevelTask = new GetLevelTask(); getLevelTask.execute(); } } @Override protected void onSaveInstanceState(final Bundle outState) { outState.putString(DEVICE_NAME_KEY, deviceText.getText().toString()); outState.putString(BATTERY_LEVEL_KEY, batteryText.getText().toString()); outState.putInt(VIBE_LEVEL_KEY, vibeLevel); } // current impelementation of OD server can return 0 to 6 (potentially downsampled from 12?) // The go API respects that, further downsample to [off low med high] here // Assuming 1 means off and 2-6 are active states... private void setVibeLevel(int newVibeLevel) { vibeLevel = newVibeLevel; if (vibeLevel == 1) { statusText.setText("Off"); } else if (vibeLevel == 2) { statusText.setText("Low"); } else if (vibeLevel == 3 || vibeLevel == 4) { statusText.setText("Medium"); } else if (vibeLevel == 5 || vibeLevel == 6) { statusText.setText("High"); } } private class GetDeviceNameTask extends AsyncTask { @Override protected String doInBackground(Void... params) { String name = Od.getDeviceName(); return name; } @Override protected void onPostExecute(String deviceName) { deviceText.setText(deviceName); } } private class GetBatteryTask extends AsyncTask { @Override protected String doInBackground(Void... params) { String batteryLevel = Od.getBatteryLevel(); return batteryLevel; } @Override protected void onPostExecute(String batteryLevel) { batteryText.setText(batteryLevel + "%"); } } private class GetLevelTask extends AsyncTask { @Override protected Integer doInBackground(Void... params) { Integer vibeLevel = (int) Od.getVibeLevel(); return vibeLevel; } @Override protected void onPostExecute(Integer newVibeLevel) { setVibeLevel(newVibeLevel); } } private class SetLevelTask extends AsyncTask { @Override protected Integer doInBackground(Integer... params) { Integer newVibeLevel = params[0]; Od.setVibeLevel(newVibeLevel); return newVibeLevel; } @Override protected void onPostExecute(Integer newVibeLevel) { setVibeLevel(newVibeLevel); } } private class DisconnectTask extends AsyncTask { @Override protected Void doInBackground(Void ...params) { Od.odClientDisconnect(); return null; } @Override protected void onPostExecute(Void nothing) { Intent i = new Intent(getApplicationContext(), ConnectActivity.class); startActivity(i); } } }