package info.guardianproject.securereaderinterface;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Bundle;
import android.os.PowerManager;
import android.support.v4.content.LocalBroadcastManager;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import com.actionbarsherlock.app.SherlockFragmentActivity;
public class LockableActivity extends SherlockFragmentActivity {
private boolean mLockedInOnPause;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LocalBroadcastManager.getInstance(this).registerReceiver(mLockReceiver, new IntentFilter(App.LOCKED_BROADCAST_ACTION));
LocalBroadcastManager.getInstance(this).registerReceiver(mUnlockReceiver, new IntentFilter(App.UNLOCKED_BROADCAST_ACTION));
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB)
{
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE);
}
}
@Override
protected void onDestroy()
{
super.onDestroy();
LocalBroadcastManager.getInstance(this).unregisterReceiver(mLockReceiver);
LocalBroadcastManager.getInstance(this).unregisterReceiver(mUnlockReceiver);
}
@Override
protected void onStart()
{
if (!mLockedInOnPause)
App.getInstance().onActivityResume(this);
super.onStart();
}
@Override
protected void onStop()
{
super.onStop();
if (!mLockedInOnPause)
App.getInstance().onActivityPause(this);
}
@Override
protected void onPause() {
super.onPause();
PowerManager pm =(PowerManager) getSystemService(Context.POWER_SERVICE);
if (pm.isScreenOn() == false)
{
mLockedInOnPause = true;
App.getInstance().onActivityPause(this);
}
}
@Override
protected void onResume()
{
if (mLockedInOnPause)
App.getInstance().onActivityResume(this);
mLockedInOnPause = false;
super.onResume();
}
BroadcastReceiver mLockReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
LockableActivity.this.runOnUiThread(new Runnable()
{
@Override
public void run()
{
onLocked();
}
});
}
};
BroadcastReceiver mUnlockReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
LockableActivity.this.runOnUiThread(new Runnable()
{
@Override
public void run()
{
onUnlocked();
}
});
}
};
private View mContentView;
private boolean mHasResult;
private int mRequestCode;
private int mResultCode;
private Intent mReturnedIntent;
protected void onLocked()
{
mContentView.setVisibility(View.INVISIBLE);
}
protected void onUnlocked()
{
mContentView.setVisibility(View.VISIBLE);
if (mHasResult)
{
mHasResult = false;
onUnlockedActivityResult(mRequestCode, mResultCode, mReturnedIntent);
}
}
@Override
public void onContentChanged() {
super.onContentChanged();
ViewGroup parent = (ViewGroup) (getWindow().getDecorView());
mContentView = parent.getChildAt(0);
}
@Override
public boolean onCreateThumbnail(Bitmap outBitmap, Canvas canvas) {
canvas.drawColor(Color.BLACK);
return true;
}
@Override
final protected void onActivityResult(int requestCode, int resultCode, Intent returnedIntent)
{
super.onActivityResult(requestCode, resultCode, returnedIntent);
if (App.getInstance().isActivityLocked())
{
mHasResult = true;
mRequestCode = requestCode;
mResultCode = resultCode;
mReturnedIntent = returnedIntent;
}
else
{
onUnlockedActivityResult(requestCode, resultCode, returnedIntent);
}
}
protected void onUnlockedActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent)
{
}
}