package com.baviux.homeassistant.launcher; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.TextView; import com.amirarcane.lockscreen.activity.EnterPinActivity; import com.baviux.homeassistant.HassWebView; public class MainActivity extends AppCompatActivity { private final static String TAG = "HomeAssistantLauncher"; private final static long SESSION_TIMEOUT_MILLIS = 10000; private final static int REQUEST_PIN_CODE = 4100; private Toolbar mToolbar; private HassWebView mWebView; private EditText mUrlEditText; private String mUrl = null; private long mSessionExpireMillis = 0; private boolean mLoggedIn = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mToolbar = findViewById(R.id.toolbar_main); mUrlEditText = findViewById(R.id.urlEditText); setSupportActionBar(mToolbar); Preferences.load(this); mUrlEditText.setText(Preferences.getUrl()); mToolbar.setVisibility(Preferences.getHideToolbar() ? View.GONE : View.VISIBLE); setupWebView(); mUrlEditText.setOnEditorActionListener(mUrlEditTextOnEditorActionListener); } @Override protected void onStop() { if (Preferences.getUseLockScreen() && mLoggedIn) { mSessionExpireMillis = System.currentTimeMillis() + SESSION_TIMEOUT_MILLIS; } super.onStop(); } @Override protected void onResume() { super.onResume(); if (Preferences.getUseLockScreen()){ if (mSessionExpireMillis > 0 && System.currentTimeMillis() > mSessionExpireMillis){ mLoggedIn = false; } if (!mLoggedIn) { Intent intent = new Intent(this, EnterPinActivity.class); startActivityForResult(intent, REQUEST_PIN_CODE); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_main, menu); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.findItem(R.id.menu_lock_screen).setChecked(Preferences.getUseLockScreen()); menu.findItem(R.id.menu_back_key_behavior).setChecked(Preferences.getAdjustBackKeyBehavior()); menu.findItem(R.id.menu_hide_admin_menu_items).setChecked(Preferences.getHideAdminMenuItems()); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.isCheckable()){ item.setChecked(!item.isChecked()); } switch (item.getItemId()) { case R.id.menu_lock_screen: Preferences.setUseLockScreen(item.isChecked()); break; case R.id.menu_back_key_behavior: Preferences.setAdjustBackKeyBehavior(item.isChecked()); mWebView.setAdjustBackKeyBehavior(Preferences.getAdjustBackKeyBehavior()); break; case R.id.menu_hide_admin_menu_items: Preferences.setHideAdminMenuItems(item.isChecked()); mWebView.setHideAdminMenuItems(Preferences.getHideAdminMenuItems()); break; case R.id.menu_hide_top_bar: askHidingTopBar(); break; } Preferences.save(this); return true; } private void askHidingTopBar(){ AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(R.string.hide_top_bar_warning) .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Preferences.setHideToolbar(true); Preferences.save(MainActivity.this); mToolbar.setVisibility(View.GONE); } }) .setNegativeButton(android.R.string.no, null).show(); } private TextView.OnEditorActionListener mUrlEditTextOnEditorActionListener = new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_DONE){ Preferences.setUrl(mUrlEditText.getText().toString()); Preferences.save(MainActivity.this); setupWebView(); mUrlEditText.clearFocus(); ((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(v.getWindowToken(), 0); return true; } return false; } }; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case REQUEST_PIN_CODE: if (resultCode == EnterPinActivity.RESULT_BACK_PRESSED) { finish(); } else if (resultCode == RESULT_OK){ mLoggedIn = true; mSessionExpireMillis = 0; } break; } } private void setupWebView(){ if(mWebView == null) { mWebView = findViewById(R.id.webView); mWebView.setHideAdminMenuItems(Preferences.getHideAdminMenuItems()); mWebView.setAdjustBackKeyBehavior(Preferences.getAdjustBackKeyBehavior()); mWebView.setOnFinishEventHandler(new HassWebView.IOnFinishEventHandler() { @Override public void onFinish() { MainActivity.this.finish(); } }); } String url = Preferences.getUrl(); if (url != null && url.trim().length() > 0 && !url.equals(mUrl)){ mUrl = url; mWebView.loadUrl(mUrl); } } @Override public void onBackPressed() { // If it's handled by WebView -> it's done! if (mWebView != null && mWebView.onBackPressed()){ return; } // If not, if we can go back -> let's go back! if (mWebView != null && mWebView.canGoBack()){ mWebView.goBack(); return; } // Else -> Let parent class handle it super.onBackPressed(); } }