package com.bucketdevelopers.uft;
import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import com.common.methods.ExternalStorage;
import com.common.methods.XmlParser;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.support.v7.app.ActionBarActivity;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
MyPageAdapter pageAdapter;
WifiManager wifi_manager;
private WifiConfiguration config;
private Menu menuobj;
public enum WIFI_AP_STATE {
WIFI_AP_STATE_DISABLING, WIFI_AP_STATE_DISABLED, WIFI_AP_STATE_ENABLING, WIFI_AP_STATE_ENABLED, WIFI_AP_STATE_FAILED
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// initialising XML list for file selection..
XmlParser.checkXml(getFilesDir(), "list.xml"); // Create xml file
// For wifi and hotspot management
wifi_manager = (WifiManager) getSystemService(ServerService.WIFI_SERVICE);
// Processing in the splash
/*
* To create the folder /sdcard/webserverdata
*/
try {
String path = ExternalStorage.getsdcardfolderpath();
File temppath = new File(path);
if (!temppath.exists()) {
temppath.mkdir();
}
} catch (Exception e) {
Toast.makeText(MainActivity.this, "Error: SD card unavailable.",
Toast.LENGTH_LONG).show();
Log.d("FTDebug", e.toString());
MainActivity.this.finish();
}
// Setting up Indicators (page indicators)
final View pg1indicator = findViewById(R.id.page1);
final View pg2indicator = findViewById(R.id.page2);
final View pg3indicator = findViewById(R.id.page3);
pg1indicator.setBackgroundColor(0XFF18a4df);
// For Top ActionBar
// getSupportActionBar().setTitle(
// Html.fromHtml("<font color=\"#81cda8\">"
// + getString(R.string.app_name) + "</font>"));
// android.support.v7.app.ActionBar acbar = getSupportActionBar();
// acbar.setCustomView(R.layout.actionbar_top); // load your layout
// acbar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME
// | ActionBar.DISPLAY_SHOW_CUSTOM); // show it
// For Fragments Setup
List<Fragment> fragments = getFragments();
pageAdapter = new MyPageAdapter(getSupportFragmentManager(), fragments);
final ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
pager.setAdapter(pageAdapter);
pager.setOnPageChangeListener(new OnPageChangeListener() {
public void onPageScrollStateChanged(int state) {
}
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
}
public void onPageSelected(int position) {
// Toast.makeText(getApplicationContext(), "page: " + position,
// Toast.LENGTH_SHORT).show();
switch (position) {
case 0:
pg1indicator.setBackgroundColor(0XFF18a4df);
pg2indicator.setBackgroundColor(0XFF607086);
pg3indicator.setBackgroundColor(0XFF607086);
break;
case 1:
pg1indicator.setBackgroundColor(0XFF607086);
pg2indicator.setBackgroundColor(0XFF18a4df);
pg3indicator.setBackgroundColor(0XFF607086);
break;
case 2:
pg1indicator.setBackgroundColor(0XFF607086);
pg2indicator.setBackgroundColor(0XFF607086);
pg3indicator.setBackgroundColor(0XFF18a4df);
break;
}
}
});
}
private List<Fragment> getFragments() {
List<Fragment> fList = new ArrayList<Fragment>();
fList.add(Screen1.newInstance(""));
fList.add(Listpage.newInstance(this));
fList.add(ReceivedPage.newInstance(this));
return fList;
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
updateToggleDisplay();
super.onRestoreInstanceState(savedInstanceState);
}
@Override
protected void onRestart() {
updateToggleDisplay();
super.onRestart();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
menuobj = menu;
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.About:
updateToggleDisplay();
return true;
case R.id.Settings:
updateToggleDisplay();
return true;
case R.id.wifi_hotspot:
// SWITCH ON?OFF WIFI HOTSPOT HERE
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.FROYO) {
Toast.makeText(getApplicationContext(),
"Hotspot is not supported by your Version of Android ",
Toast.LENGTH_LONG).show();
} else {
if (isWifiApEnabled()) {
enableHotspot(false);
item.setIcon(R.drawable.hotspot);
} else {
enableHotspot(true);
item.setIcon(R.drawable.hotspot_selected);
}
}
updateToggleDisplay();
return true;
case R.id.wifi:
// Toggling Wifi
enableHotspot(false);
wifi_manager = (WifiManager) this
.getSystemService(Context.WIFI_SERVICE);
if (wifi_manager.isWifiEnabled()) {
wifi_manager.setWifiEnabled(false);
item.setIcon(R.drawable.wifi);
} else {
wifi_manager.setWifiEnabled(true);
item.setIcon(R.drawable.wifi_selected);
MainActivity.this.startActivity(new Intent(
WifiManager.ACTION_PICK_WIFI_NETWORK));
}
updateToggleDisplay();
return true;
case R.id.data_connection:
if (checkMobileData()) {
try {
turnData(false);
item.setIcon(R.drawable.data_connect);
} catch (Exception e) {
Toast.makeText(getApplicationContext(),
"Please turn off your data manually",
Toast.LENGTH_LONG).show();
e.printStackTrace();
}
} else {
try {
turnData(true);
item.setIcon(R.drawable.data_connect_selected);
} catch (Exception e) {
Toast.makeText(getApplicationContext(),
"Please turn on your data manually",
Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
updateToggleDisplay();
return true;
default:
updateToggleDisplay();
break;
}
final Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
updateToggleDisplay();
handler.postDelayed(this, 3 * 1000L);
}
});
return super.onOptionsItemSelected(item);
}
/************************************************************************/
// Methods for wifi hotspot and data Connection managements start
//
/************************************************************************/
/*
* Method to Toggle Hotspot
*/
private void enableHotspot(boolean enabled) {
WifiConfiguration wifi_configuration = null;
wifi_manager.setWifiEnabled(false);
try {
// USE REFLECTION TO GET METHOD "SetWifiAPEnabled"
Method method = wifi_manager.getClass().getMethod(
"setWifiApEnabled", WifiConfiguration.class, boolean.class);
method.invoke(wifi_manager, wifi_configuration, enabled);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
if (enabled) {
// To Display SSID
Method[] methods = wifi_manager.getClass().getDeclaredMethods();
for (Method m : methods) {
if (m.getName().equals("getWifiApConfiguration")) {
try {
config = (WifiConfiguration) m.invoke(wifi_manager);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
Toast.makeText(getApplicationContext(),
"Hotspot Created : " + config.SSID,
Toast.LENGTH_LONG).show();
// here, the "config" variable holds the info, your SSID is
// in
// config.SSID
}
}
}
}// end of WifiToggle
// Checking wifi Hotspot state
/* the following method is for getting the wifi hotspot state */
public WIFI_AP_STATE getWifiApState() {
try {
Method method = wifi_manager.getClass().getMethod("getWifiApState");
int tmp = ((Integer) method.invoke(wifi_manager));
// Fix for Android 4
if (tmp > 10) {
tmp = tmp - 10;
}
return WIFI_AP_STATE.class.getEnumConstants()[tmp];
} catch (Exception e) {
Log.e(this.getClass().toString(), "", e);
return WIFI_AP_STATE.WIFI_AP_STATE_FAILED;
}
}
/**
* Return whether Wi-Fi Hotspot is enabled or disabled.
*
* @return {@code true} if Wi-Fi AP is enabled
* @see #getWifiApState()
*/
public boolean isWifiApEnabled() {
return getWifiApState() == WIFI_AP_STATE.WIFI_AP_STATE_ENABLED;
}
// Enable/Disable Data Connection
@SuppressWarnings({ "unchecked", "rawtypes" })
void turnData(boolean ON) throws Exception {
int bv = android.os.Build.VERSION.SDK_INT;
if (bv == Build.VERSION_CODES.FROYO) {
Log.i("version:", "Found Froyo");
try {
Method dataConnSwitchmethod;
Class telephonyManagerClass;
Object ITelephonyStub;
Class ITelephonyClass;
TelephonyManager telephonyManager = (TelephonyManager) getApplicationContext()
.getSystemService(Context.TELEPHONY_SERVICE);
telephonyManagerClass = Class.forName(telephonyManager
.getClass().getName());
Method getITelephonyMethod = telephonyManagerClass
.getDeclaredMethod("getITelephony");
getITelephonyMethod.setAccessible(true);
ITelephonyStub = getITelephonyMethod.invoke(telephonyManager);
ITelephonyClass = Class.forName(ITelephonyStub.getClass()
.getName());
if (ON) {
dataConnSwitchmethod = ITelephonyClass
.getDeclaredMethod("enableDataConnectivity");
} else {
dataConnSwitchmethod = ITelephonyClass
.getDeclaredMethod("disableDataConnectivity");
}
dataConnSwitchmethod.setAccessible(true);
dataConnSwitchmethod.invoke(ITelephonyStub);
} catch (Exception e) {
Log.e("Error:", e.toString());
}
} else {
Log.i("version:", "Found Gingerbread+");
final ConnectivityManager conman = (ConnectivityManager) getApplicationContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
final Class conmanClass = Class
.forName(conman.getClass().getName());
final Field iConnectivityManagerField = conmanClass
.getDeclaredField("mService");
iConnectivityManagerField.setAccessible(true);
final Object iConnectivityManager = iConnectivityManagerField
.get(conman);
final Class iConnectivityManagerClass = Class
.forName(iConnectivityManager.getClass().getName());
final Method setMobileDataEnabledMethod = iConnectivityManagerClass
.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
setMobileDataEnabledMethod.setAccessible(true);
setMobileDataEnabledMethod.invoke(iConnectivityManager, ON);
}
}
// Method to check mobile data state
public boolean checkMobileData() {
ConnectivityManager connManager1 = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo mMobile = connManager1
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (mMobile.isConnected()) {
return true;
} else {
return false;
}
}
// Method to update the display of Toggles
void updateToggleDisplay() {
boolean hotspot;
boolean mobiledata = checkMobileData();
boolean wifi = wifi_manager.isWifiEnabled();
menuobj.getItem(3).setIcon(R.drawable.hotspot);
menuobj.getItem(4).setIcon(R.drawable.wifi);
menuobj.getItem(5).setIcon(R.drawable.data_connect);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) {
hotspot = isWifiApEnabled();
if (hotspot) {
menuobj.getItem(3).setIcon(R.drawable.hotspot_selected);
}
}
if (wifi) {
menuobj.getItem(4).setIcon(R.drawable.wifi_selected);
}
if (mobiledata) {
menuobj.getItem(5).setIcon(R.drawable.data_connect_selected);
}
}
}// end of Activity