Implemented more fragments

This commit is contained in:
PeratX 2017-04-23 16:58:02 +08:00
parent 604e90314e
commit 99375b8700
9 changed files with 121 additions and 96 deletions

View File

@ -53,11 +53,6 @@
android:name="android.app.shortcuts"
android:resource="@xml/shortcuts"/>
</activity>
<activity
android:name=".activity.SettingsActivity"
android:launchMode="singleTask"
android:label="@string/action_settings">
</activity>
<activity
android:name=".activity.AboutActivity"
android:launchMode="singleTask"

View File

@ -12,6 +12,7 @@ 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.widget.TextView;
import org.itxtech.daedalus.BuildConfig;
@ -19,6 +20,7 @@ import org.itxtech.daedalus.Daedalus;
import org.itxtech.daedalus.R;
import org.itxtech.daedalus.fragment.DNSTestFragment;
import org.itxtech.daedalus.fragment.MainFragment;
import org.itxtech.daedalus.fragment.SettingsFragment;
/**
* Daedalus Project
@ -35,16 +37,21 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
public static final int LAUNCH_ACTION_NONE = 0;
public static final int LAUNCH_ACTION_ACTIVATE = 1;
public static final int LAUNCH_ACTION_DEACTIVATE = 2;
public static final String LAUNCH_FRAGMENT = "org.itxtech.daedalus.activity.MainActivity.LAUNCH_FRAGMENT";
private static final int FRAGMENT_MAIN = 0;
private static final int FRAGMENT_DNS_TEST = 1;
private static final String TAG = "DMainActivity";
private static int currentFragment = FRAGMENT_MAIN;
public static final int FRAGMENT_NONE = -1;
public static final int FRAGMENT_MAIN = 0;
public static final int FRAGMENT_DNS_TEST = 1;
public static final int FRAGMENT_SETTINGS = 2;
private static MainActivity instance = null;
private MainFragment mMain;
private DNSTestFragment mDnsTest;
private SettingsFragment mSettings;
private int currentFragment = FRAGMENT_NONE;
public static MainActivity getInstance() {
return instance;
@ -72,19 +79,89 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
((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);
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
if (currentFragment == FRAGMENT_MAIN) {
mMain = new MainFragment();
transaction.replace(R.id.id_content, mMain);
if (getIntent().getIntExtra(LAUNCH_FRAGMENT, FRAGMENT_NONE) == FRAGMENT_NONE) {
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
if (mMain == null) {
mMain = new MainFragment();
}
transaction.replace(R.id.id_content, mMain).commit();
currentFragment = FRAGMENT_MAIN;
}
if (currentFragment == FRAGMENT_DNS_TEST) {
mDnsTest = new DNSTestFragment();
transaction.replace(R.id.id_content, mDnsTest);
}
transaction.commit();
updateUserInterface(getIntent());
Log.d(TAG, "onCreate");
}
@Override
public void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
updateTitle();
updateNavigationMenu();
}
private void updateNavigationMenu() {
Menu menu = ((NavigationView) findViewById(R.id.nav_view)).getMenu();
switch (currentFragment) {
case FRAGMENT_MAIN:
menu.findItem(R.id.nav_home).setChecked(true);
break;
case FRAGMENT_DNS_TEST:
menu.findItem(R.id.nav_dns_test).setChecked(true);
break;
case FRAGMENT_SETTINGS:
menu.findItem(R.id.nav_settings).setChecked(true);
break;
}
}
private void updateTitle() {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
switch (currentFragment) {
case FRAGMENT_MAIN:
toolbar.setTitle(R.string.action_home);
break;
case FRAGMENT_DNS_TEST:
toolbar.setTitle(R.string.action_dns_test);
break;
case FRAGMENT_SETTINGS:
toolbar.setTitle(R.string.action_settings);
break;
}
}
private void changeFragment(int fragment) {
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
switch (fragment) {
case FRAGMENT_MAIN:
if (mMain == null) {
mMain = new MainFragment();
}
transaction.replace(R.id.id_content, mMain);
toolbar.setTitle(R.string.action_home);
currentFragment = FRAGMENT_MAIN;
break;
case FRAGMENT_DNS_TEST:
if (mDnsTest == null) {
mDnsTest = new DNSTestFragment();
}
transaction.replace(R.id.id_content, mDnsTest);
toolbar.setTitle(R.string.action_dns_test);
currentFragment = FRAGMENT_DNS_TEST;
break;
case FRAGMENT_SETTINGS:
if (mSettings == null) {
mSettings = new SettingsFragment();
}
transaction.replace(R.id.id_content, mSettings);
toolbar.setTitle(R.string.action_settings);
currentFragment = FRAGMENT_SETTINGS;
break;
}
transaction.commit();
}
@Override
@ -92,6 +169,8 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.main_drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else if (currentFragment != FRAGMENT_MAIN) {
changeFragment(FRAGMENT_MAIN);
} else {
super.onBackPressed();
}
@ -101,9 +180,10 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
protected void onDestroy() {
super.onDestroy();
Log.d("DMainActivity", "onDestroy");
Log.d(TAG, "onDestroy");
mMain = null;
mDnsTest = null;
mSettings = null;
instance = null;
System.gc();
}
@ -115,8 +195,13 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
updateUserInterface(intent);
}
@Override
protected void onPostResume() {
super.onPostResume();
}
private void updateUserInterface(Intent intent) {
Log.d("MainActivity", "Updating user interface");
Log.d(TAG, "Updating user interface");
int launchAction = intent.getIntExtra(LAUNCH_ACTION, LAUNCH_ACTION_NONE);
if (launchAction == LAUNCH_ACTION_ACTIVATE) {
Daedalus.updateShortcut(this.getApplicationContext());
@ -126,6 +211,11 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
} else {
Daedalus.updateShortcut(this.getApplicationContext());
}
int fragment = intent.getIntExtra(LAUNCH_FRAGMENT, FRAGMENT_NONE);
if (fragment != FRAGMENT_NONE) {
changeFragment(fragment);
}
}
@Override
@ -134,39 +224,20 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
int id = item.getItemId();
if (id == R.id.nav_settings) {
startActivity(new Intent(this, SettingsActivity.class));
changeFragment(FRAGMENT_SETTINGS);
}
if (id == R.id.nav_about) {
startActivity(new Intent(this, AboutActivity.class));
item.setChecked(false);
}
if (id == R.id.nav_dns_test) {
if (mDnsTest == null) {
mDnsTest = new DNSTestFragment();
}
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
transaction.replace(R.id.id_content, mDnsTest);
transaction.commit();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(R.string.action_dns_test);
currentFragment = FRAGMENT_DNS_TEST;
item.setChecked(true);
changeFragment(FRAGMENT_DNS_TEST);
}
if (id == R.id.nav_home) {
if (mMain == null) {
mMain = new MainFragment();
}
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
transaction.replace(R.id.id_content, mMain);
transaction.commit();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(R.string.app_name);
currentFragment = FRAGMENT_MAIN;
item.setChecked(true);
changeFragment(FRAGMENT_MAIN);
}
if (id == R.id.nav_check_update) {

View File

@ -1,29 +0,0 @@
package org.itxtech.daedalus.activity;
import android.app.FragmentManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import org.itxtech.daedalus.R;
import org.itxtech.daedalus.fragment.SettingsFragment;
/**
* Daedalus Project
*
* @author iTXTech
* @link https://itxtech.org
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3.
*/
public class SettingsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
SettingsFragment settingsFragment = new SettingsFragment();
FragmentManager manager = getFragmentManager();
manager.beginTransaction().replace(R.id.activity_settings, settingsFragment).commit();
}
}

View File

@ -7,7 +7,6 @@ import android.util.Log;
import android.widget.Button;
import org.itxtech.daedalus.R;
import org.itxtech.daedalus.activity.MainActivity;
import org.itxtech.daedalus.activity.SettingsActivity;
import org.itxtech.daedalus.service.DaedalusVpnService;
import java.lang.reflect.Method;
@ -37,7 +36,7 @@ public class StatusBarBroadcastReceiver extends BroadcastReceiver {
}
}
if (intent.getAction().equals(STATUS_BAR_BTN_SETTINGS_CLICK_ACTION)) {
Intent settingsIntent = new Intent(context, SettingsActivity.class);
Intent settingsIntent = new Intent(context, MainActivity.class).putExtra(MainActivity.LAUNCH_FRAGMENT, MainActivity.FRAGMENT_SETTINGS);
settingsIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(settingsIntent);
try {

View File

@ -21,7 +21,6 @@ import de.measite.minidns.util.InetAddressUtil;
import org.itxtech.daedalus.Daedalus;
import org.itxtech.daedalus.R;
import org.itxtech.daedalus.activity.MainActivity;
import org.itxtech.daedalus.activity.SettingsActivity;
import org.itxtech.daedalus.receiver.StatusBarBroadcastReceiver;
import org.pcap4j.packet.*;
import org.pcap4j.packet.factory.PacketFactoryPropertiesLoader;
@ -215,7 +214,7 @@ public class DaedalusVpnService extends VpnService implements Runnable {
.setBlocking(true);
}
this.descriptor = builder.setSession("Daedalus").setConfigureIntent(PendingIntent.getActivity(this, 0, new Intent(this, SettingsActivity.class), PendingIntent.FLAG_ONE_SHOT)).establish();
this.descriptor = builder.setSession("Daedalus").setConfigureIntent(PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class).putExtra(MainActivity.LAUNCH_FRAGMENT, MainActivity.FRAGMENT_SETTINGS), PendingIntent.FLAG_ONE_SHOT)).establish();
if (statisticQuery) {
Log.d(TAG, "Starting count queries");

View File

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_settings"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="org.itxtech.daedalus.activity.SettingsActivity">
</RelativeLayout>

View File

@ -11,12 +11,12 @@
android:title="@string/action_dns_test"
android:checked="false"
android:icon="@mipmap/ic_verified_user_white_36dp"/>
</group>
<group android:id="@+id/nav_group_more">
<item android:id="@+id/nav_settings"
android:title="@string/action_settings"
android:icon="@mipmap/ic_settings_grey600_36dp"/>
</group>
<group android:id="@+id/nav_group_more">
<item android:id="@+id/nav_about"
android:title="@string/action_about"
android:icon="@mipmap/ic_info_grey600_36dp"/>

View File

@ -2,7 +2,7 @@
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<dimen name="fragment_vertical_margin">48dp</dimen>
<dimen name="fragment_vertical_margin">64dp</dimen>
<dimen name="fab_margin">16dp</dimen>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="nav_header_vertical_spacing">16dp</dimen>

View File

@ -9,7 +9,11 @@
android:shortcutShortLabel="@string/action_settings">
<intent
android:action="android.intent.action.VIEW"
android:targetClass="org.itxtech.daedalus.activity.SettingsActivity"
android:targetPackage="org.itxtech.daedalus"/>
android:targetClass="org.itxtech.daedalus.activity.MainActivity"
android:targetPackage="org.itxtech.daedalus">
<extra
android:name="org.itxtech.daedalus.activity.MainActivity.LAUNCH_FRAGMENT"
android:value="2"/>
</intent>
</shortcut>
</shortcuts>