/*
* Copyright (C) 2012 Louis Fazen
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.alphabetbloc.accessadmin.activities;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.WindowManager;
import com.alphabetbloc.accessadmin.R;
import com.alphabetbloc.accessadmin.data.Constants;
import com.alphabetbloc.accessadmin.data.Policy;
import com.alphabetbloc.accessadmin.receivers.AirplaneOnReceiver;
public class DeviceHoldActivity extends Activity implements OnTouchListener {
protected static final int DEVICE_ADMIN = 1;
private static final String TAG = DeviceHoldActivity.class.getSimpleName();
private boolean mAirplaneMode = false;
private AirplaneOnReceiver mAirplaneOnReceiver;
// slightly added security, prevent exiting activity via calling into device
protected void startAirplaneMode() {
mAirplaneMode = true;
}
private void registerAirplaneOnReceiver() {
mAirplaneOnReceiver = new AirplaneOnReceiver();
IntentFilter airplaneFilter = new IntentFilter(Constants.AIRPLANE_MODE);
registerReceiver(mAirplaneOnReceiver, airplaneFilter);
if(Constants.DEBUG) Log.v(TAG, "registering airplane receiver");
boolean enabled = Settings.System.getInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1;
if (!enabled) {
Settings.System.putInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 1);
Intent i = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
i.putExtra("state", 1);
sendBroadcast(i);
}
}
protected void stopAirplaneMode() {
if (mAirplaneMode) {
mAirplaneMode = false;
unregisterReceiver(mAirplaneOnReceiver);
if(Constants.DEBUG) Log.v(TAG, "unregistering airplane receiver");
boolean enabled = Settings.System.getInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1;
if (enabled) {
Settings.System.putInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0);
Intent i = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
i.putExtra("state", 0);
sendBroadcast(i);
}
}
// else we must have already stopped airplane mode
}
private void unregisterAirplaneReceiver() {
unregisterReceiver(mAirplaneOnReceiver);
Log.v(TAG, "unregistering airplane receiver");
}
@Override
protected void onPause() {
super.onPause();
if (mAirplaneMode)
unregisterAirplaneReceiver();
}
@Override
protected void onResume() {
super.onResume();
if (mAirplaneMode)
registerAirplaneOnReceiver();
}
// ////// CONSUMES ALL UI EVENTS ////////
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, DEVICE_ADMIN, 0, getString(R.string.device_admin)).setIcon(android.R.drawable.ic_menu_preferences);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean showMenu = prefs.getBoolean(Constants.SHOW_MENU, false);
Policy policy = new Policy(this);
if (!policy.isAdminActive() || !showMenu)
return false;
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case DEVICE_ADMIN:
Intent ip = new Intent(getApplicationContext(), AdminLoginActivity.class);
startActivity(ip);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
// Consume all UI events except Menu, Exit and Pwd Btns
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// NB: Override this in all child activities
return false;
}
@Override
public void onBackPressed() {
return;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_HOME || keyCode == KeyEvent.KEYCODE_SEARCH || keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}
return false;
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_HOME || keyCode == KeyEvent.KEYCODE_SEARCH || keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}
return false;
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN || event.getAction() == KeyEvent.ACTION_UP) {
if (event.getKeyCode() == KeyEvent.KEYCODE_HOME || event.getKeyCode() == KeyEvent.KEYCODE_SEARCH || event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
return true;
}
}
return super.dispatchKeyEvent(event);
}
@Override
public boolean dispatchTrackballEvent(MotionEvent ev) {
return true;
}
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
return true;
}
@Override
public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return true;
}
@Override
public boolean onTrackballEvent(MotionEvent event) {
return true;
}
}