Initial revision
This commit is contained in:
243
app/src/main/java/de/rumpold/androiddsky/ui/DSKYActivity.java
Executable file
243
app/src/main/java/de/rumpold/androiddsky/ui/DSKYActivity.java
Executable file
@@ -0,0 +1,243 @@
|
||||
package de.rumpold.androiddsky.ui;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.graphics.Color;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.support.annotation.IdRes;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
|
||||
import de.rumpold.androiddsky.DSKY;
|
||||
import de.rumpold.androiddsky.R;
|
||||
|
||||
/**
|
||||
* An example full-screen activity that shows and hides the system UI (i.e.
|
||||
* status bar and navigation/system bar) with user interaction.
|
||||
*/
|
||||
public class DSKYActivity extends AppCompatActivity {
|
||||
/**
|
||||
* Whether or not the system UI should be auto-hidden after
|
||||
* {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds.
|
||||
*/
|
||||
private static final boolean AUTO_HIDE = true;
|
||||
|
||||
/**
|
||||
* If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after
|
||||
* user interaction before hiding the system UI.
|
||||
*/
|
||||
private static final int AUTO_HIDE_DELAY_MILLIS = 3000;
|
||||
|
||||
/**
|
||||
* Some older devices needs a small delay between UI widget updates
|
||||
* and a change of the status and navigation bar.
|
||||
*/
|
||||
private static final int UI_ANIMATION_DELAY = 300;
|
||||
|
||||
private final Handler mHideHandler = new Handler();
|
||||
|
||||
private View mContentView;
|
||||
private final Runnable mHidePart2Runnable = new Runnable() {
|
||||
@SuppressLint("InlinedApi")
|
||||
@Override
|
||||
public void run() {
|
||||
// Delayed removal of status and navigation bar
|
||||
|
||||
// Note that some of these constants are new as of API 16 (Jelly Bean)
|
||||
// and API 19 (KitKat). It is safe to use them, as they are inlined
|
||||
// at compile-time and do nothing on earlier devices.
|
||||
mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
|
||||
| View.SYSTEM_UI_FLAG_FULLSCREEN
|
||||
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
||||
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
|
||||
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|
||||
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
|
||||
}
|
||||
};
|
||||
private View mControlsView;
|
||||
private final Runnable mShowPart2Runnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
// Delayed display of UI elements
|
||||
ActionBar actionBar = getSupportActionBar();
|
||||
if (actionBar != null) {
|
||||
actionBar.show();
|
||||
}
|
||||
mControlsView.setVisibility(View.VISIBLE);
|
||||
}
|
||||
};
|
||||
private boolean mVisible;
|
||||
private final Runnable mHideRunnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
hide();
|
||||
}
|
||||
};
|
||||
|
||||
private final DSKY dsky = new DSKY(this);
|
||||
|
||||
public void updateIndicator(@IdRes final int id, final boolean state) {
|
||||
mHideHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
TextView indicator = (TextView) findViewById(id);
|
||||
if (indicator != null) {
|
||||
if (state) {
|
||||
final int color;
|
||||
if ("right".equals(indicator.getTag())) {
|
||||
color = getResources().getColor(R.color.indicatorRightActive);
|
||||
} else {
|
||||
color = getResources().getColor(R.color.indicatorActive);
|
||||
}
|
||||
|
||||
indicator.setBackgroundColor(color);
|
||||
} else {
|
||||
indicator.setBackgroundColor(getResources().getColor(R.color.indicatorPassive));
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void updateDisplay(@IdRes final int id, final String value) {
|
||||
mHideHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
TextView display = (TextView) findViewById(id);
|
||||
display.setText(value);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Touch listener to use for in-layout UI controls to delay hiding the
|
||||
* system UI. This is to prevent the jarring behavior of controls going away
|
||||
* while interacting with activity UI.
|
||||
*/
|
||||
private final View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() {
|
||||
@Override
|
||||
public boolean onTouch(View view, MotionEvent motionEvent) {
|
||||
if (AUTO_HIDE) {
|
||||
delayedHide(AUTO_HIDE_DELAY_MILLIS);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
setContentView(R.layout.activity_dsky);
|
||||
|
||||
mVisible = true;
|
||||
mControlsView = findViewById(R.id.controlBar);
|
||||
mContentView = findViewById(R.id.contentView);
|
||||
|
||||
|
||||
// Set up the user interaction to manually show or hide the system UI.
|
||||
mContentView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
toggle();
|
||||
}
|
||||
});
|
||||
|
||||
// Upon interacting with UI controls, delay any scheduled hide()
|
||||
// operations to prevent the jarring behavior of controls going away
|
||||
// while interacting with the UI.
|
||||
|
||||
View.OnClickListener buttonListener = new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
final Button button = (Button) view;
|
||||
dsky.buttonPressed(button.getText().toString());
|
||||
}
|
||||
};
|
||||
|
||||
findViewById(R.id.btn_verb).setOnClickListener(buttonListener);
|
||||
findViewById(R.id.btn_noun).setOnClickListener(buttonListener);
|
||||
findViewById(R.id.btn_plus).setOnClickListener(buttonListener);
|
||||
findViewById(R.id.btn_minus).setOnClickListener(buttonListener);
|
||||
findViewById(R.id.btn_0).setOnClickListener(buttonListener);
|
||||
findViewById(R.id.btn_1).setOnClickListener(buttonListener);
|
||||
findViewById(R.id.btn_2).setOnClickListener(buttonListener);
|
||||
findViewById(R.id.btn_3).setOnClickListener(buttonListener);
|
||||
findViewById(R.id.btn_4).setOnClickListener(buttonListener);
|
||||
findViewById(R.id.btn_5).setOnClickListener(buttonListener);
|
||||
findViewById(R.id.btn_6).setOnClickListener(buttonListener);
|
||||
findViewById(R.id.btn_7).setOnClickListener(buttonListener);
|
||||
findViewById(R.id.btn_8).setOnClickListener(buttonListener);
|
||||
findViewById(R.id.btn_9).setOnClickListener(buttonListener);
|
||||
findViewById(R.id.btn_clr).setOnClickListener(buttonListener);
|
||||
findViewById(R.id.btn_pro).setOnClickListener(buttonListener);
|
||||
findViewById(R.id.btn_key_rel).setOnClickListener(buttonListener);
|
||||
findViewById(R.id.btn_entr).setOnClickListener(buttonListener);
|
||||
findViewById(R.id.btn_rset).setOnClickListener(buttonListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostCreate(Bundle savedInstanceState) {
|
||||
super.onPostCreate(savedInstanceState);
|
||||
|
||||
// Trigger the initial hide() shortly after the activity has been
|
||||
// created, to briefly hint to the user that UI controls
|
||||
// are available.
|
||||
delayedHide(100);
|
||||
|
||||
dsky.connect();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
dsky.disconnect();
|
||||
}
|
||||
|
||||
private void toggle() {
|
||||
if (mVisible) {
|
||||
hide();
|
||||
} else {
|
||||
show();
|
||||
}
|
||||
}
|
||||
|
||||
private void hide() {
|
||||
// Hide UI first
|
||||
ActionBar actionBar = getSupportActionBar();
|
||||
if (actionBar != null) {
|
||||
actionBar.hide();
|
||||
}
|
||||
mControlsView.setVisibility(View.GONE);
|
||||
mVisible = false;
|
||||
|
||||
// Schedule a runnable to remove the status and navigation bar after a delay
|
||||
mHideHandler.removeCallbacks(mShowPart2Runnable);
|
||||
mHideHandler.postDelayed(mHidePart2Runnable, UI_ANIMATION_DELAY);
|
||||
}
|
||||
|
||||
@SuppressLint("InlinedApi")
|
||||
private void show() {
|
||||
// Show the system bar
|
||||
mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
|
||||
mVisible = true;
|
||||
|
||||
// Schedule a runnable to display UI elements after a delay
|
||||
mHideHandler.removeCallbacks(mHidePart2Runnable);
|
||||
mHideHandler.postDelayed(mShowPart2Runnable, UI_ANIMATION_DELAY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Schedules a call to hide() in [delay] milliseconds, canceling any
|
||||
* previously scheduled calls.
|
||||
*/
|
||||
private void delayedHide(int delayMillis) {
|
||||
mHideHandler.removeCallbacks(mHideRunnable);
|
||||
mHideHandler.postDelayed(mHideRunnable, delayMillis);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user