From 31dd65440f62d563701398776cb8b5b5b10f8780 Mon Sep 17 00:00:00 2001 From: PeratX <1215714524@qq.com> Date: Wed, 19 Apr 2017 21:13:54 +0800 Subject: [PATCH] Added navigation view --- app/src/main/AndroidManifest.xml | 3 +- .../daedalus/activity/AboutActivity.java | 38 ++++++++++---- .../daedalus/activity/MainActivity.java | 52 ++++++++++++++++--- .../daedalus/service/DaedalusVpnService.java | 4 +- app/src/main/res/drawable/side_nav_bar.xml | 9 ++++ app/src/main/res/layout/activity_about.xml | 10 +--- app/src/main/res/layout/activity_main.xml | 26 ++++++---- app/src/main/res/layout/app_bar_main.xml | 34 ++++++++++++ app/src/main/res/layout/nav_header_main.xml | 40 ++++++++++++++ .../main/res/menu/activity_main_drawer.xml | 20 +++++++ app/src/main/res/values-zh/strings.xml | 5 ++ app/src/main/res/values/dimens.xml | 3 ++ app/src/main/res/values/strings.xml | 5 ++ app/src/main/res/xml/shortcuts.xml | 2 +- 14 files changed, 212 insertions(+), 39 deletions(-) create mode 100644 app/src/main/res/drawable/side_nav_bar.xml create mode 100644 app/src/main/res/layout/app_bar_main.xml create mode 100644 app/src/main/res/layout/nav_header_main.xml create mode 100644 app/src/main/res/menu/activity_main_drawer.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d61e4f8..009dce3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -41,7 +41,8 @@ + android:launchMode="singleTask" + android:theme="@style/AppTheme.NoActionBar"> diff --git a/app/src/main/java/org/itxtech/daedalus/activity/AboutActivity.java b/app/src/main/java/org/itxtech/daedalus/activity/AboutActivity.java index dd19206..b40b3c0 100644 --- a/app/src/main/java/org/itxtech/daedalus/activity/AboutActivity.java +++ b/app/src/main/java/org/itxtech/daedalus/activity/AboutActivity.java @@ -10,6 +10,7 @@ import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.ViewGroup; import android.webkit.WebView; import android.webkit.WebViewClient; import org.itxtech.daedalus.BuildConfig; @@ -28,6 +29,7 @@ import java.util.Locale; * the Free Software Foundation, version 3. */ public class AboutActivity extends AppCompatActivity { + private WebView mWebView = null; @SuppressLint({"JavascriptInterface", "SetJavaScriptEnabled", "addJavascriptInterface"}) @Override @@ -35,13 +37,14 @@ public class AboutActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_about); - WebView view = (WebView) findViewById(R.id.webView_about); + mWebView = new WebView(this.getApplicationContext()); + ((ViewGroup) findViewById(R.id.activity_about)).addView(mWebView); - view.getSettings().setJavaScriptEnabled(true); - view.setBackgroundColor(0); - view.addJavascriptInterface(this, "JavascriptInterface"); + mWebView.getSettings().setJavaScriptEnabled(true); + mWebView.setBackgroundColor(0); + mWebView.addJavascriptInterface(this, "JavascriptInterface"); - view.setOnLongClickListener(new View.OnLongClickListener() { + mWebView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { return true; @@ -49,17 +52,17 @@ public class AboutActivity extends AppCompatActivity { }); if (Locale.getDefault().getLanguage().equals("zh")) { - view.loadUrl("file:///android_asset/about_html/index_zh.html"); + mWebView.loadUrl("file:///android_asset/about_html/index_zh.html"); } else { - view.loadUrl("file:///android_asset/about_html/index.html"); + mWebView.loadUrl("file:///android_asset/about_html/index.html"); } - view.setWebViewClient(new WebViewClient() { + mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); try { - view.loadUrl("javascript:changeVersionInfo('" + getPackageManager().getPackageInfo(getPackageName(), 0).versionName + "', '" + BuildConfig.BUILD_TIME + "', '" + BuildConfig.GIT_COMMIT + "')"); + mWebView.loadUrl("javascript:changeVersionInfo('" + getPackageManager().getPackageInfo(getPackageName(), 0).versionName + "', '" + BuildConfig.BUILD_TIME + "', '" + BuildConfig.GIT_COMMIT + "')"); } catch (Exception e) { Log.e("DAboutActivity", e.toString()); } @@ -67,6 +70,23 @@ public class AboutActivity extends AppCompatActivity { }); } + @Override + public void onDestroy() { + super.onDestroy(); + + if (mWebView != null) { + Log.d("DAboutActivity", "onDestroy"); + + mWebView.removeAllViews(); + mWebView.setWebViewClient(null); + ((ViewGroup) mWebView.getParent()).removeView(mWebView); + mWebView.setTag(null); + mWebView.clearHistory(); + mWebView.destroy(); + mWebView = null; + } + } + @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. diff --git a/app/src/main/java/org/itxtech/daedalus/activity/MainActivity.java b/app/src/main/java/org/itxtech/daedalus/activity/MainActivity.java index d07e26b..5c22483 100644 --- a/app/src/main/java/org/itxtech/daedalus/activity/MainActivity.java +++ b/app/src/main/java/org/itxtech/daedalus/activity/MainActivity.java @@ -6,12 +6,19 @@ import android.content.Intent; import android.net.VpnService; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; +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.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; +import android.widget.TextView; +import org.itxtech.daedalus.BuildConfig; import org.itxtech.daedalus.Daedalus; import org.itxtech.daedalus.R; import org.itxtech.daedalus.service.DaedalusVpnService; @@ -29,7 +36,7 @@ import java.util.List; * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3. */ -public class MainActivity extends AppCompatActivity { +public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { public static final String LAUNCH_ACTION = "org.itxtech.daedalus.activity.MainActivity.LAUNCH_ACTION"; public static final int LAUNCH_ACTION_NONE = 0; public static final int LAUNCH_ACTION_ACTIVATE = 1; @@ -48,18 +55,26 @@ public class MainActivity extends AppCompatActivity { instance = this; setContentView(R.layout.activity_main); - /*Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); - setSupportActionBar(toolbar);*/ + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Intent intent = new Intent(v.getContext(), ServerTestActivity.class); - startActivity(intent); + startActivity(new Intent(v.getContext(), ServerTestActivity.class)); } }); + DrawerLayout drawer = (DrawerLayout) findViewById(R.id.main_drawer_layout); + ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( + this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); + drawer.addDrawerListener(toggle); + toggle.syncState(); + + NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); + navigationView.setNavigationItemSelectedListener(this); + final Button but = (Button) findViewById(R.id.button_activate); if (isServiceActivated()) { but.setText(R.string.button_text_deactivate); @@ -77,6 +92,9 @@ public class MainActivity extends AppCompatActivity { } }); + ((TextView) navigationView.getHeaderView(0).findViewById(R.id.textView_nav_version)).setText(getString(R.string.nav_version) + " " + BuildConfig.VERSION_NAME); + ((TextView) navigationView.getHeaderView(0).findViewById(R.id.textView_nav_git_commit)).setText(getString(R.string.nav_git_commit) + " " + BuildConfig.GIT_COMMIT); + updateUserInterface(getIntent()); } @@ -98,13 +116,13 @@ public class MainActivity extends AppCompatActivity { Log.d("MainActivity", "Updating user interface"); int launchAction = intent.getIntExtra(LAUNCH_ACTION, LAUNCH_ACTION_NONE); if (launchAction == LAUNCH_ACTION_ACTIVATE) { - Daedalus.updateShortcut(this); + Daedalus.updateShortcut(this.getApplicationContext()); activateService(); } else if (launchAction == LAUNCH_ACTION_DEACTIVATE) { deactivateService(); } else { updateUserInterface(); - Daedalus.updateShortcut(this); + Daedalus.updateShortcut(this.getApplicationContext()); } } @@ -215,4 +233,24 @@ public class MainActivity extends AppCompatActivity { return super.onOptionsItemSelected(item); } + + @Override + public boolean onNavigationItemSelected(MenuItem item) { + // Handle navigation view item clicks here. + int id = item.getItemId(); + + if (id == R.id.action_settings) { + startActivity(new Intent(this, SettingsActivity.class)); + return true; + } + + if (id == R.id.action_about) { + startActivity(new Intent(this, AboutActivity.class)); + return true; + } + + DrawerLayout drawer = (DrawerLayout) findViewById(R.id.main_drawer_layout); + drawer.closeDrawer(GravityCompat.START); + return true; + } } diff --git a/app/src/main/java/org/itxtech/daedalus/service/DaedalusVpnService.java b/app/src/main/java/org/itxtech/daedalus/service/DaedalusVpnService.java index 9fe3db8..a01592d 100644 --- a/app/src/main/java/org/itxtech/daedalus/service/DaedalusVpnService.java +++ b/app/src/main/java/org/itxtech/daedalus/service/DaedalusVpnService.java @@ -123,7 +123,7 @@ public class DaedalusVpnService extends VpnService implements Runnable { this.running = true; this.mThread.start(); } - Daedalus.updateShortcut(this); + Daedalus.updateShortcut(this.getApplicationContext()); return START_STICKY; case ACTION_DEACTIVATE: stopThread(); @@ -171,7 +171,7 @@ public class DaedalusVpnService extends VpnService implements Runnable { if (shouldRefresh && MainActivity.getInstance() != null && MainActivity.getInstance().isAppOnForeground()) { startActivity(new Intent(this, MainActivity.class).putExtra(MainActivity.LAUNCH_ACTION, MainActivity.LAUNCH_ACTION_NONE)); } else if (shouldRefresh) { - Daedalus.updateShortcut(this); + Daedalus.updateShortcut(this.getApplicationContext()); } } diff --git a/app/src/main/res/drawable/side_nav_bar.xml b/app/src/main/res/drawable/side_nav_bar.xml new file mode 100644 index 0000000..9130523 --- /dev/null +++ b/app/src/main/res/drawable/side_nav_bar.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 98bbc85..aeac499 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -8,19 +8,11 @@ - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index c40a19c..0db995e 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,20 +1,26 @@ - + android:id="@+id/main_drawer_layout" + tools:openDrawer="start"> - + + - + android:layout_height="match_parent" + android:layout_gravity="start" + android:fitsSystemWindows="true" + app:headerLayout="@layout/nav_header_main" + app:menu="@menu/activity_main_drawer"/> - + diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml new file mode 100644 index 0000000..4321e69 --- /dev/null +++ b/app/src/main/res/layout/app_bar_main.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/nav_header_main.xml b/app/src/main/res/layout/nav_header_main.xml new file mode 100644 index 0000000..bd72898 --- /dev/null +++ b/app/src/main/res/layout/nav_header_main.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml new file mode 100644 index 0000000..55efb22 --- /dev/null +++ b/app/src/main/res/menu/activity_main_drawer.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 6df0e02..5539553 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -38,4 +38,9 @@ 提交反馈 前往 GitHub 提交问题反馈。 DNS 测试服务器 + 关闭导航栏 + 开启导航栏 + 主页 + 版本: + Git commit: \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 812cb7b..314656c 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -3,4 +3,7 @@ 16dp 16dp 16dp + + 16dp + 180dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e4bb276..3536222 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -38,4 +38,9 @@ Issue tracker Submit an issue in GitHub Issues page. DNS test servers + Open navigation drawer + Close navigation drawer + Home + Version: + Git commit: diff --git a/app/src/main/res/xml/shortcuts.xml b/app/src/main/res/xml/shortcuts.xml index ac28bfc..dd8dd8f 100644 --- a/app/src/main/res/xml/shortcuts.xml +++ b/app/src/main/res/xml/shortcuts.xml @@ -2,7 +2,7 @@