package mobi.acpm.inspeckage.ui;
import android.Manifest;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import java.io.File;
import mobi.acpm.inspeckage.Module;
import mobi.acpm.inspeckage.R;
import mobi.acpm.inspeckage.util.Config;
import mobi.acpm.inspeckage.util.FileUtil;
import mobi.acpm.inspeckage.webserver.InspeckageService;
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
private SharedPreferences mPrefs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
mPrefs = getSharedPreferences(Module.PREFS, MODE_WORLD_READABLE);
//main fragment
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
MainFragment mainFragment = new MainFragment(this);
fragmentTransaction.replace(R.id.container, mainFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
boolean granted = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
if (!granted) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);
}
}else{
File inspeckage = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + Config.P_ROOT);
if (!inspeckage.exists()) {
inspeckage.mkdirs();
}
hideItem();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case 0: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay!
File inspeckage = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + Config.P_ROOT);
if (!inspeckage.exists()) {
inspeckage.mkdirs();
}
} else {
// permission denied
//Util.showNotification(getApplicationContext(),"");
}
return;
}
case 1:{
return;
}
}
}
private void hideItem()
{
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
Menu nav_Menu = navigationView.getMenu();
nav_Menu.findItem(R.id.nav_auth).setVisible(false);
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
int count = getFragmentManager().getBackStackEntryCount();
if (count == 1) {
stopService();
super.onBackPressed();
//additional code
} else {
getFragmentManager().popBackStack();
}
}
@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);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
int id = item.getItemId();
if (id == R.id.nav_clear) {
clearAll();
TextView txtAppSelected = (TextView) findViewById(R.id.txtAppSelected);
if(txtAppSelected!=null) {
txtAppSelected.setText("... ");
}
} else if (id == R.id.nav_close) {
clearAll();
stopService();
super.finish();
android.os.Process.killProcess(android.os.Process.myPid());
} else if (id == R.id.nav_config) {
ConfigFragment configFragment = new ConfigFragment(this);
fragmentTransaction.replace(R.id.container, configFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
} else if (id == R.id.nav_auth) {
AuthFragment authFragment = new AuthFragment(this);
fragmentTransaction.replace(R.id.container, authFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
} else if (id == R.id.nav_share) {
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "https://github.com/ac-pm/Inspeckage");
sendIntent.setType("text/plain");
startActivity(sendIntent);
}else{
MainFragment mainFragment = new MainFragment();
fragmentTransaction.replace(R.id.container, mainFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
public void stopService() {
stopService(new Intent(this, InspeckageService.class));
}
private void clearAll(){
SharedPreferences.Editor edit = mPrefs.edit();
String appPath = Environment.getExternalStorageDirectory().getAbsolutePath();
if (!mPrefs.getBoolean(Config.SP_HAS_W_PERMISSION, false)) {
appPath = mPrefs.getString(Config.SP_DATA_DIR, "");
}
edit.putString(Config.SP_PROXY_HOST, "");
edit.putString(Config.SP_PROXY_PORT, "");
edit.putBoolean(Config.SP_SWITCH_PROXY, false);
edit.putBoolean(Config.SP_FLAG_SECURE, false);
edit.putBoolean(Config.SP_UNPINNING, false);
edit.putBoolean(Config.SP_EXPORTED, false);
edit.putBoolean(Config.SP_HAS_W_PERMISSION, true);
edit.putString(Config.SP_SERVER_HOST, null);
edit.putString(Config.SP_SERVER_PORT, null);
edit.putString(Config.SP_SERVER_IP, null);
edit.putString(Config.SP_SERVER_INTERFACES, "");
edit.putString(Config.SP_PACKAGE, "");
edit.putString(Config.SP_APP_NAME, "");
edit.putString(Config.SP_APP_VERSION, "");
edit.putString(Config.SP_DEBUGGABLE, "");
edit.putString(Config.SP_APK_DIR, "");
edit.putString(Config.SP_UID, "");
edit.putString(Config.SP_GIDS, "");
edit.putString(Config.SP_DATA_DIR, "");
//white img
edit.putString(Config.SP_APP_ICON_BASE64, "iVBORw0KGgoAAAANSUhEUgAAABoAAAAbCAIAAADtdAg8AAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAJUlEQVRIiWP8//8/A/UAExXNGjVu1LhR40aNGzVu1LhR44aScQDKygMz8IbG2QAAAABJRU5ErkJggg==");
edit.putString(Config.SP_EXP_ACTIVITIES, "");
edit.putString(Config.SP_N_EXP_ACTIVITIES, "");
edit.putString(Config.SP_REQ_PERMISSIONS, "");
edit.putString(Config.SP_APP_PERMISSIONS, "");
edit.putString(Config.SP_N_EXP_PROVIDER, "");
edit.putString(Config.SP_N_EXP_SERVICES, "");
edit.putString(Config.SP_N_EXP_BROADCAST, "");
edit.putString(Config.SP_EXP_SERVICES, "");
edit.putString(Config.SP_EXP_BROADCAST, "");
edit.putString(Config.SP_EXP_PROVIDER, "");
edit.putString(Config.SP_SHARED_LIB, "");
edit.putBoolean(Config.SP_APP_IS_RUNNING, false);
edit.putString(Config.SP_DATA_DIR_TREE, "");
edit.putString(Config.SP_USER_HOOKS, "");
edit.apply();
File root = new File(appPath + Config.P_ROOT);
FileUtil.deleteRecursive(root);
}
}