package in.ceeq.home.dashboard;
import hirondelle.date4j.DateTime;
import in.ceeq.LauncherActivity;
import in.ceeq.R;
import in.ceeq.commons.Utils;
import in.ceeq.home.backup.BackupFragment;
import in.ceeq.home.security.SecurityFragment;
import in.ceeq.receivers.OutgoingCallsReceiver;
import in.ceeq.receivers.PowerButtonReceiver;
import in.ceeq.services.ProtectorService;
import in.ceeq.services.ProtectorService.ProtectorType;
import java.util.ArrayList;
import java.util.TimeZone;
import android.app.ActionBar;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.widget.DrawerLayout;
import android.support.v4.widget.DrawerLayout.DrawerListener;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;
import com.google.android.gms.plus.PlusOneButton;
public class DashboardFragment extends Fragment implements DrawerListener, View.OnClickListener,
DialogInterface.OnClickListener, DialogInterface.OnKeyListener {
private static final int PLUS_ONE_REQUEST_CODE = 9025;
public static final int DIALOG_TYPE_FEEDBACK = 1;
public static final int DIALOG_TYPE_PROTECT = 2;
public static final int DIALOG_TYPE_STEALTH = 3;
public static final int DIALOG_TYPE_LOCKER = 4;
public static final int DIALOG_TYPE_PROXIMITY = 5;
private View view;
private int counter;
private ExpandableListView notificationAdapter;
private ExpandableListAdapter notificationListAdapter;
private TextView statusText;
private LinearLayout statusBox;
private ArrayList<Integer> notificationList;
private ToggleButton protectMe;
private ToggleButton stealthMode;
private ToggleButton applicationLocker;
private ToggleButton proximityAlarm;
private Button sendFeedback;
private PlusOneButton plusOneButton;
private Button backupButton, securityButton;
private FragmentManager fragmentManager;
private DrawerLayout drawerLayout;
private ActionBarDrawerToggle drawerToggle;
private Context context;
private AlertDialog.Builder alertDialogBuilder;
private LayoutInflater layoutInflater;
private int dialogType;
public static DashboardFragment getInstance() {
return new DashboardFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = getActivity();
alertDialogBuilder = new AlertDialog.Builder(context);
layoutInflater = getActivity().getLayoutInflater();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_dashboard, container, false);
setUpUi(view);
setupListeners();
restoreToggleStates(view);
setHasOptionsMenu(true);
ActionBar actionBar = getActivity().getActionBar();
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
return view;
}
private void setUpUi(View view) {
// notificationAdapter = (ExpandableListView) view.findViewById(R.id.notifications);
notificationList = new ArrayList<Integer>();
statusText = (TextView) view.findViewById(R.id.statusText);
statusBox = (LinearLayout) view.findViewById(R.id.statusBox);
backupButton = (Button) view.findViewById(R.id.backupButton);
securityButton = (Button) view.findViewById(R.id.securityButton);
sendFeedback = (Button) view.findViewById(R.id.feedbackButton);
protectMe = (ToggleButton) view.findViewById(R.id.toggle_protect);
stealthMode = (ToggleButton) view.findViewById(R.id.toggle_stealth);
applicationLocker = (ToggleButton) view.findViewById(R.id.toggle_locker);
proximityAlarm = (ToggleButton) view.findViewById(R.id.toggle_proximity);
if (setStatus() > 0) {
statusText.setText(getString(R.string.app_status_bad));
statusBox.setBackgroundResource(R.color.red);
getActivity().getActionBar().setBackgroundDrawable(getResources().getDrawable(R.color.red));
showNotification();
} else {
statusText.setText(getString(R.string.app_status_good));
statusBox.setBackgroundResource(R.color.green);
getActivity().getActionBar().setBackgroundDrawable(getResources().getDrawable(R.color.green));
showNotification();
}
notificationListAdapter = new NotificationListAdapter(context, counter, Utils.getBooleanPrefs(context,
Utils.APP_STATUS), notificationList);
// notificationAdapter.setAdapter(notificationListAdapter);
plusOneButton = (PlusOneButton) view.findViewById(R.id.plus_one_button);
plusOneButton.initialize("http://plus.google.com/116561373543243917689", PLUS_ONE_REQUEST_CODE);
}
public void restoreToggleStates(View v) {
protectMe.setChecked(Utils.getBooleanPrefs(context, Utils.PROTECT_ME_STATUS));
stealthMode.setChecked(Utils.getBooleanPrefs(context, Utils.STEALTH_MODE_STATUS));
stealthMode = (ToggleButton) v.findViewById(R.id.toggle_stealth);
stealthMode.setChecked(Utils.getBooleanPrefs(context, Utils.STEALTH_MODE_STATUS));
applicationLocker = (ToggleButton) v.findViewById(R.id.toggle_locker);
applicationLocker.setChecked(Utils.getBooleanPrefs(context, Utils.STEALTH_MODE_STATUS));
proximityAlarm = (ToggleButton) v.findViewById(R.id.toggle_proximity);
proximityAlarm.setChecked(Utils.getBooleanPrefs(context, Utils.STEALTH_MODE_STATUS));
}
public void setupListeners() {
fragmentManager = ((FragmentActivity) context).getSupportFragmentManager();
backupButton.setOnClickListener(this);
securityButton.setOnClickListener(this);
sendFeedback.setOnClickListener(this);
stealthMode.setOnClickListener(this);
protectMe.setOnClickListener(this);
applicationLocker.setOnClickListener(this);
proximityAlarm.setOnClickListener(this);
}
public void showNotification() {
if (Utils.getBooleanPrefs(context, Utils.NOTIFICATIONS_STATUS))
Utils.notification(Utils.NOTIFICATION_NOTIFY, context, 0);
}
public int setStatus() {
counter = 0;
boolean backupStatus = setBackupStatus();
boolean securityStatus = setSecurityStatus();
if (backupStatus & securityStatus) {
Utils.setBooleanPrefs(context, Utils.APP_STATUS, true);
} else {
Utils.setBooleanPrefs(context, Utils.APP_STATUS, false);
}
return counter;
}
public boolean setBackupStatus() {
if (Utils.getBooleanPrefs(context, Utils.AUTO_BACKUP_STATUS) & isBackupDelayed()) {
return true;
} else if (!Utils.getBooleanPrefs(context, Utils.AUTO_BACKUP_STATUS)) {
notificationList.add(Constants.STATUS_AUTO_BACKUP_DISABLED);
counter++;
return false;
} else if (Utils.getBooleanPrefs(context, Utils.AUTO_BACKUP_STATUS) & !isBackupDelayed()) {
notificationList.add(Constants.STATUS_BACKUP_DISABLED);
counter++;
return false;
} else if (!Utils.getBooleanPrefs(context, Utils.AUTO_BACKUP_STATUS) & !isBackupDelayed()) {
notificationList.add(Constants.STATUS_AUTO_BACKUP_DISABLED);
notificationList.add(Constants.STATUS_BACKUP_DISABLED);
counter += 2;
return false;
}
return false;
}
public boolean isBackupDelayed() {
if (Utils.getStringPrefs(context, Utils.LAST_BACKUP_DATE).isEmpty())
return true;
if (DateTime.now(TimeZone.getDefault()).numDaysFrom(
new DateTime(Utils.getStringPrefs(context, Utils.LAST_BACKUP_DATE))) > -3)
return true;
return false;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.home, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (drawerToggle.onOptionsItemSelected(item)) {
return true;
}
return true;
}
public boolean setSecurityStatus() {
boolean deviceAdminEnabled = Utils.getBooleanPrefs(context, Utils.DEVICE_ADMIN_STATUS);
boolean gpsEnabled = Utils.enabled(Utils.GPS, context);
if (gpsEnabled & deviceAdminEnabled) {
return true;
} else if (gpsEnabled & !deviceAdminEnabled) {
notificationList.add(Constants.STATUS_DEVICE_ADMIN_DISABLED);
counter++;
return false;
} else if (!gpsEnabled & deviceAdminEnabled) {
notificationList.add(Constants.STATUS_GPS_DISABLED);
counter++;
return false;
} else if (!gpsEnabled & !deviceAdminEnabled) {
notificationList.add(Constants.STATUS_GPS_DISABLED);
notificationList.add(Constants.STATUS_DEVICE_ADMIN_DISABLED);
counter += 2;
return false;
}
return false;
}
@Override
public void onDrawerClosed(View arg0) {
}
@Override
public void onDrawerOpened(View arg0) {
}
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
drawerLayout.bringChildToFront(drawerView);
drawerLayout.requestLayout();
}
@Override
public void onDrawerStateChanged(int arg0) {
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.backupButton:
fragmentManager.beginTransaction().replace(R.id.container, BackupFragment.getInstance()).commit();
break;
case R.id.securityButton:
fragmentManager.beginTransaction().replace(R.id.container, SecurityFragment.getInstance()).commit();
break;
case R.id.feedbackButton:
showFeedbackDialog();
break;
case R.id.toggle_protect:
dialogType = DIALOG_TYPE_PROTECT;
if (((ToggleButton) v).isChecked()) {
showProtectMeDialog();
} else {
setUpProtectMe(false);
}
break;
case R.id.toggle_stealth:
dialogType = DIALOG_TYPE_STEALTH;
if (((ToggleButton) v).isChecked()) {
showStealthModeDialog();
} else {
setUpStealthMode(false);
}
break;
case R.id.toggle_locker:
dialogType = DIALOG_TYPE_LOCKER;
break;
case R.id.toggle_proximity:
dialogType = DIALOG_TYPE_PROXIMITY;
break;
}
}
private void showFeedbackDialog() {
alertDialogBuilder.setTitle(R.string.dialog_title_feedback).setPositiveButton(getString(R.string.send), this)
.setNegativeButton(getString(R.string.cancel), this).setOnKeyListener(this)
.setView(layoutInflater.inflate(R.layout.dialog_feedback, null)).create().show();
}
private void showProtectMeDialog() {
alertDialogBuilder.setTitle(R.string.dialog_title_protect).setPositiveButton(getString(R.string.save), this)
.setNegativeButton(getString(R.string.cancel), this).setOnKeyListener(this);
View protectMeView = layoutInflater.inflate(R.layout.dialog_protect_me, null);
// Button facebookConnect = (Button) protectMeView
// .findViewById(R.id.facebook_login);
LinearLayout socialBox = (LinearLayout) protectMeView.findViewById(R.id.social_box);
if (Utils.getBooleanPrefs(context, Utils.FACEBOOK_CONNECT_STATUS)) {
socialBox.setVisibility(View.GONE);
} else {
socialBox.setVisibility(View.VISIBLE);
}
// facebookConnect.setOnClickListener(new OnClickListener() {
// @Override
// public void onClick(View v) {
// Home.this.connectFacebook();
// }
// });
EditText distressMessage = (EditText) protectMeView.findViewById(R.id.distressMessage);
String storedMessage = Utils.getStringPrefs(context, Utils.DISTRESS_MESSAGE);
if (!storedMessage.isEmpty())
distressMessage.setText(storedMessage);
alertDialogBuilder.setView(protectMeView).create().show();
}
private void showStealthModeDialog() {
alertDialogBuilder.setTitle(R.string.dialog_title_stealth).setPositiveButton(getString(R.string.enable), this)
.setNegativeButton(getString(R.string.cancel), this).setOnKeyListener(this)
.setView(layoutInflater.inflate(R.layout.dialog_stealth_mode, null)).create().show();
}
private void setUpProtectMe(boolean status) {
Utils.setBooleanPrefs(context, Utils.PROTECT_ME_STATUS, status);
if (status) {
setupPowerButtonReceiver(true);
Toast.makeText(context, "Protect me enabled. Just press power button 10 times for help.",
Toast.LENGTH_SHORT).show();
} else {
setupPowerButtonReceiver(false);
Toast.makeText(context, "Protect me disabled.", Toast.LENGTH_SHORT).show();
}
}
private void setUpStealthMode(boolean status) {
Utils.setBooleanPrefs(context, Utils.STEALTH_MODE_STATUS, status);
Utils.setBooleanPrefs(context, Utils.NOTIFICATIONS_STATUS, status);
if (status) {
Toast.makeText(context, "Stealth Mode enabled.", Toast.LENGTH_SHORT).show();
context.getPackageManager().setComponentEnabledSetting(
new ComponentName("in.ceeq", "in.ceeq.LauncherActivity"),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
Utils.removeAllNotifications(context);
setupOutgoingCallsReceiver(true);
try {
startActivity(new Intent(context, LauncherActivity.class));
} catch (Exception e) {
// Let it be 3:)
}
} else {
context.getPackageManager().setComponentEnabledSetting(new ComponentName(context, LauncherActivity.class),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
context.getPackageManager().setComponentEnabledSetting(
new ComponentName("in.ceeq", "in.ceeq.LauncherActivity"),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
Utils.showNotifications(context);
setupOutgoingCallsReceiver(false);
Toast.makeText(context, "Stealth Mode disabled.", Toast.LENGTH_SHORT).show();
}
}
private void setupOutgoingCallsReceiver(boolean status) {
ComponentName componentName = new ComponentName(getActivity(), OutgoingCallsReceiver.class);
if (status) {
try {
context.getPackageManager().setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
} catch (Exception e) {
e.printStackTrace();
}
} else {
try {
if (componentName != null)
context.getPackageManager().setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void startProtectorService() {
Intent startProtector = new Intent(context, ProtectorService.class);
startProtector.putExtra(ProtectorService.ACTION, ProtectorType.START);
context.startService(startProtector);
}
public void stopProtectorService() {
if (Utils.getBooleanPrefs(context, Utils.PROTECT_ME_STATUS)) {
Intent stopProtector = new Intent(context, ProtectorService.class);
context.stopService(stopProtector);
}
}
private void setupPowerButtonReceiver(boolean status) {
BroadcastReceiver power = new PowerButtonReceiver();
if (status) {
try {
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
context.registerReceiver(power, filter);
} catch (Exception e) {
e.printStackTrace();
}
} else {
try {
context.unregisterReceiver(power);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
return false;
}
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
case DIALOG_TYPE_PROTECT:
setUpProtectMe(true);
break;
case DIALOG_TYPE_STEALTH:
setUpStealthMode(true);
break;
case DIALOG_TYPE_FEEDBACK:
sendFeedbackMessage();
break;
case DialogInterface.BUTTON_NEGATIVE:
dialog.dismiss();
switch (dialogType) {
case DIALOG_TYPE_PROTECT:
protectMe.setChecked(false);
break;
case DIALOG_TYPE_STEALTH:
stealthMode.setChecked(false);
break;
}
break;
}
}
private void sendFeedbackMessage() {
}
// public void updateFacebookConnectPreferences() {
//
// Session session = Session.getActiveSession();
// if (session.isOpened()) {
// preferencesHelper.setBoolean(
// PreferencesHelper.FACEBOOK_CONNECT_STATUS, true);
// } else {
// preferencesHelper.setBoolean(
// PreferencesHelper.FACEBOOK_CONNECT_STATUS, false);
// }
// @Override
// public void onStart() {
// super.onStart();
// Session.getActiveSession().addCallback(statusCallback);
// }
// @Override
// public void onStop() {
// super.onStop();
// Session.getActiveSession().removeCallback(statusCallback);
// }
// @Override
// protected void onResume() {
// super.onResume();
// checkPlayServices();
// }
// @Override
// protected void onSaveInstanceState(Bundle outState) {
// super.onSaveInstanceState(outState);
// Session session = Session.getActiveSession();
// Session.saveSession(session, outState);
// }
// @Override
// protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// super.onActivityResult(requestCode, resultCode, data);
// // Session.getActiveSession().onActivityResult(this, requestCode,
// resultCode, data);
// updateFacebookConnectPreferences();
// }
// public void setupFacebookConnect(Bundle savedInstanceState) {
// Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
//
// Session session = Session.getActiveSession();
// if (session == null) {
// if (savedInstanceState != null) {
// session = Session.restoreSession(this, null, statusCallback,
// savedInstanceState);
// }
// if (session == null) {
// session = new Session(this);
// }
// Session.setActiveSession(session);
// if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
// session.openForRead(new Session.OpenRequest(this)
// .setCallback(statusCallback));
// }
// }
// private Session.StatusCallback statusCallback = new FBSessionStatus();
// }
//
// public void connectFacebook() {
// Session session = Session.getActiveSession();
// if (!session.isOpened() && !session.isClosed()) {
// session.openForRead(new Session.OpenRequest(this)
// .setCallback(statusCallback));
// } else {
// Session.openActiveSession(this, true, statusCallback);
// }
// }
}