package tv.emby.embyatv.base;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import tv.emby.embyatv.R;
import tv.emby.embyatv.TvApp;
import tv.emby.embyatv.search.SearchActivity;
import tv.emby.embyatv.util.Utils;
/**
* Created by Eric on 2/18/2015.
*/
public class BaseActivity extends Activity {
private TvApp app = TvApp.getApplication();
private long timeoutInterval = 3600000;
private Handler handler = new Handler();
private Runnable loop;
private IKeyListener keyListener;
private IMessageListener messageListener;
private View messageUi;
private TextView messageTitle;
private TextView messageMessage;
private ImageView messageIcon;
private int messageTimeout = 6000;
private int farRight;
private int msgPos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
timeoutInterval = Long.parseLong(PreferenceManager.getDefaultSharedPreferences(app).getString("pref_auto_logoff_timeout","3600000"));
startAutoLogoffLoop();
TvApp.getApplication().setCurrentActivity(this);
//Add message UI - delay to ensure on top of other views
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (!isFinishing() && app.getCurrentActivity() != null) {
FrameLayout root = (FrameLayout) findViewById(android.R.id.content);
messageUi = View.inflate(app.getCurrentActivity(), R.layout.message, null);
messageTitle = (TextView) messageUi.findViewById(R.id.msgTitle);
messageMessage = (TextView) messageUi.findViewById(R.id.message);
messageIcon = (ImageView) messageUi.findViewById(R.id.msgIcon);
messageUi.setAlpha(0);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.RIGHT | Gravity.BOTTOM);
params.bottomMargin = Utils.convertDpToPixel(TvApp.getApplication().getCurrentActivity(), 50);
Rect windowSize = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(windowSize);
farRight = windowSize.right;
msgPos = farRight - Utils.convertDpToPixel(TvApp.getApplication().getCurrentActivity(), 500);
messageUi.setLeft(farRight);
root.addView(messageUi, params);
}
}
}, 500);
}
public void showMessage(String title, String msg) {
showMessage(title, msg, messageTimeout, null, null);
}
public void showMessage(String title, String msg, int timeout) {
showMessage(title, msg, timeout, null, null);
}
public void showMessage(String title, String msg, int timeout, Integer icon, Integer background) {
if (messageUi != null && !isFinishing()) {
messageTitle.setText(title);
messageMessage.setText(msg);
if (icon != null) messageIcon.setImageResource(icon);
if (background != null) messageUi.setBackgroundResource(background);
messageUi.animate().x(msgPos).alpha(1).setDuration(300);
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (messageUi != null && !isFinishing()) {
messageUi.animate().alpha(0).x(farRight).setDuration(300);
}
}
},timeout);
}
}
//Banish task bars and navigation controls on non-TV devices
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus && android.os.Build.VERSION.SDK_INT >= 19) {
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);}
}
@Override
protected void onResume() {
super.onResume();
TvApp.getApplication().setCurrentActivity(this);
}
@Override
protected void onPause() {
super.onPause();
TvApp.getApplication().setCurrentActivity(null);
}
@Override
protected void onDestroy() {
if (handler != null && loop != null) handler.removeCallbacks(loop);
super.onDestroy();
}
@Override
public void onUserInteraction() {
super.onUserInteraction();
app.setLastUserInteraction(System.currentTimeMillis());
}
private void startAutoLogoffLoop() {
loop = new Runnable() {
@Override
public void run() {
if (System.currentTimeMillis() > app.getLastUserInteraction() + timeoutInterval) {
app.getLogger().Info("Logging off due to inactivity "+app.getLastUserInteraction());
Utils.showToast(app, "Emby Logging off due to inactivity...");
if (app.getPlaybackController() != null && app.getPlaybackController().isPaused()) {
app.getLogger().Info("Playback was paused, stopping gracefully...");
app.getPlaybackController().stop();
}
finish();
} else {
handler.postDelayed(this, 30000);
}
}
};
handler.postDelayed(loop, 60000);
}
public void registerKeyListener(IKeyListener listener) {
keyListener = listener;
}
public void registerMessageListener(IMessageListener listener) {
messageListener = listener;
}
public void sendMessage(CustomMessage message) {
if (messageListener != null) messageListener.onMessageReceived(message);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
return keyListener != null ? keyListener.onKeyUp(keyCode, event) || super.onKeyUp(keyCode, event) : super.onKeyUp(keyCode, event);
}
@Override
public boolean onSearchRequested() {
TvApp.getApplication().showSearch(this, false);
return true;
}
}