diff --git a/cSploit/src/main/java/org/csploit/android/MainActivity.java b/cSploit/src/main/java/org/csploit/android/MainActivity.java index 79accb87a7..fb2a856d99 100644 --- a/cSploit/src/main/java/org/csploit/android/MainActivity.java +++ b/cSploit/src/main/java/org/csploit/android/MainActivity.java @@ -19,34 +19,168 @@ */ package org.csploit.android; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.content.res.TypedArray; +import android.net.Uri; import android.os.Bundle; +import android.support.v4.widget.DrawerLayout; +import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; +import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; + +import org.csploit.android.gui.dialogs.AboutDialog; + +import java.util.ArrayList; public class MainActivity extends AppCompatActivity { - MainFragment f; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - SharedPreferences themePrefs = getSharedPreferences("THEME", 0); - if (themePrefs.getBoolean("isDark", false)) - setTheme(R.style.DarkTheme); - else - setTheme(R.style.AppTheme); - setContentView(R.layout.main); - if (findViewById(R.id.mainframe) != null) { - if (savedInstanceState != null) { - return; - } - f = new MainFragment(); - getSupportFragmentManager().beginTransaction() - .add(R.id.mainframe, f).commit(); - } - } - - public void onBackPressed() { - f.onBackPressed(); - } + MainFragment f; + ActionBarDrawerToggle mDrawerToggle; + DrawerLayout dl; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + SharedPreferences themePrefs = getSharedPreferences("THEME", 0); + if (themePrefs.getBoolean("isDark", false)) + setTheme(R.style.DarkTheme); + else + setTheme(R.style.AppTheme); + setContentView(R.layout.main); + if (findViewById(R.id.mainframe) != null) { + if (savedInstanceState != null) { + return; + } + dl = (DrawerLayout) findViewById(R.id.drawer_layout); + ListView rv = (ListView) findViewById(R.id.drawer_listview); + String[] items = getResources().getStringArray(R.array.sidebar_item_array); + TypedArray option_icons = getResources().obtainTypedArray(R.array.sidebar_icon_array); + ArrayList itemsList = new ArrayList<>(); + // load up the drawer with options from the array + for (int x = 0; x < items.length; x++) { + itemsList.add(new DrawerItem(option_icons.getResourceId(x, -1), items[x])); + } + option_icons.recycle(); + rv.setAdapter(new SideBarArrayAdapter(this, + R.layout.main_drawer_item, itemsList)); + rv.setOnItemClickListener(new DrawerItemClickListener()); + mDrawerToggle = new ActionBarDrawerToggle(this, + dl, R.string.drawer_was_opened, R.string.drawer_was_closed); + dl.setDrawerListener(mDrawerToggle); + mDrawerToggle.syncState(); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setHomeButtonEnabled(true); + + f = new MainFragment(); + getSupportFragmentManager().beginTransaction() + .add(R.id.mainframe, f).commit(); + } + } + + public boolean onOptionsItemSelected(MenuItem item) { + if (mDrawerToggle.onOptionsItemSelected(item)) { + return true; + } + return true; + } + + public void onBackPressed() { + f.onBackPressed(); + } + + public void launchSettings() { + startActivity(new Intent(this, SettingsActivity.class)); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); + } + + public void launchAbout() { + new AboutDialog(this).show(); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + // Sync the toggle state after onRestoreInstanceState has occurred. + mDrawerToggle.syncState(); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + mDrawerToggle.onConfigurationChanged(newConfig); + } + + public class DrawerItem { + public int icon; + public String name; + + public DrawerItem(int icon, String name) { + this.icon = icon; + this.name = name; + } + } + + private class DrawerItemClickListener implements ListView.OnItemClickListener { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + dl.closeDrawers(); + switch (position) { + case 0: //about + launchAbout(); + break; + case 1: + launchSettings(); + break; + case 2: + String uri = getString(R.string.github_new_issue_url); + Intent browser = new Intent(Intent.ACTION_VIEW, Uri.parse(uri)); + startActivity(browser); + break; + } + } + } + + public class SideBarArrayAdapter extends ArrayAdapter { + + private final Context context; + private final int layoutResourceId; + private ArrayList data = null; + + public SideBarArrayAdapter(Context context, int layoutResourceId, ArrayList data) { + super(context, layoutResourceId, data); + this.context = context; + this.layoutResourceId = layoutResourceId; + this.data = data; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + LayoutInflater inflater = ((Activity) context).getLayoutInflater(); + View v = inflater.inflate(layoutResourceId, parent, false); + + ImageView imageView = (ImageView) v.findViewById(R.id.drawer_item_icon); + TextView textView = (TextView) v.findViewById(R.id.drawer_item_title); + + DrawerItem item = data.get(position); + + imageView.setImageResource(item.icon); + textView.setText(item.name); + + return v; + } + } + + } \ No newline at end of file diff --git a/cSploit/src/main/res/drawable/ic_bug_report_24dp.xml b/cSploit/src/main/res/drawable/ic_bug_report_24dp.xml new file mode 100644 index 0000000000..54a3c7ce57 --- /dev/null +++ b/cSploit/src/main/res/drawable/ic_bug_report_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/cSploit/src/main/res/drawable/ic_info_24dp.xml b/cSploit/src/main/res/drawable/ic_info_24dp.xml new file mode 100644 index 0000000000..60f3bfec63 --- /dev/null +++ b/cSploit/src/main/res/drawable/ic_info_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/cSploit/src/main/res/drawable/ic_settings_24dp.xml b/cSploit/src/main/res/drawable/ic_settings_24dp.xml new file mode 100644 index 0000000000..3e3f27f367 --- /dev/null +++ b/cSploit/src/main/res/drawable/ic_settings_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/cSploit/src/main/res/layout/main.xml b/cSploit/src/main/res/layout/main.xml index c0c59ac306..fb40cee137 100644 --- a/cSploit/src/main/res/layout/main.xml +++ b/cSploit/src/main/res/layout/main.xml @@ -1,5 +1,41 @@ - \ No newline at end of file + android:layout_gravity="start" + android:orientation="vertical"> + + + + + + + + + + + \ No newline at end of file diff --git a/cSploit/src/main/res/layout/main_drawer_item.xml b/cSploit/src/main/res/layout/main_drawer_item.xml new file mode 100644 index 0000000000..88cb1d7526 --- /dev/null +++ b/cSploit/src/main/res/layout/main_drawer_item.xml @@ -0,0 +1,28 @@ + + + + + + + diff --git a/cSploit/src/main/res/values/arrays.xml b/cSploit/src/main/res/values/arrays.xml new file mode 100644 index 0000000000..b9751cef1d --- /dev/null +++ b/cSploit/src/main/res/values/arrays.xml @@ -0,0 +1,15 @@ + + + + @string/menu_about + @string/menu_settings + @string/menu_submit_issue + + + @drawable/ic_info_24dp + @drawable/ic_settings_24dp + @drawable/ic_bug_report_24dp + + + \ No newline at end of file diff --git a/cSploit/src/main/res/values/strings.xml b/cSploit/src/main/res/values/strings.xml index 88f723d086..08bf4602ea 100644 --- a/cSploit/src/main/res/values/strings.xml +++ b/cSploit/src/main/res/values/strings.xml @@ -537,4 +537,7 @@ delete current session and start another? any interface Error initializing %s + The Drawer was opened. + The Drawer was closed. +