summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/build.gradle4
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/MainActivity.java57
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/StartActivity.java2
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/drawer/NavigationDrawerFragment.java (renamed from app/src/main/java/se/leap/bitmaskclient/NavigationDrawerFragment.java)137
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/fragments/LogFragment.java2
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/userstatus/SessionDialog.java7
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/userstatus/UserStatusFragment.java4
-rw-r--r--app/src/main/res/layout/activity_main.xml2
-rw-r--r--app/src/main/res/layout/drawer_main.xml18
-rw-r--r--app/src/production/java/se/leap/bitmaskclient/ProviderAPI.java2
10 files changed, 128 insertions, 107 deletions
diff --git a/app/build.gradle b/app/build.gradle
index f510b098..e90f5be7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -5,7 +5,7 @@ apply plugin: 'com.android.application'
android {
compileSdkVersion 26
- buildToolsVersion '26.0.0'
+ buildToolsVersion '26.0.2'
defaultConfig {
applicationId "se.leap.bitmaskclient"
@@ -77,7 +77,7 @@ dependencies {
compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'mbanje.kurt:fabbutton:1.1.4'
compile "com.android.support:support-core-utils:26.1.0"
- compile 'com.android.support:support-annotations:27.0.1'
+ compile 'com.android.support:support-annotations:27.0.2'
compile 'com.android.support:support-v4:26.1.0'
compile 'com.android.support:appcompat-v7:26.1.0'
compile 'com.android.support:design:26.1.0'
diff --git a/app/src/main/java/se/leap/bitmaskclient/MainActivity.java b/app/src/main/java/se/leap/bitmaskclient/MainActivity.java
index 2f07f162..82a193e7 100644
--- a/app/src/main/java/se/leap/bitmaskclient/MainActivity.java
+++ b/app/src/main/java/se/leap/bitmaskclient/MainActivity.java
@@ -11,17 +11,20 @@ import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.support.v4.widget.DrawerLayout;
+import se.leap.bitmaskclient.drawer.NavigationDrawerFragment;
import se.leap.bitmaskclient.fragments.LogFragment;
import se.leap.bitmaskclient.userstatus.SessionDialog;
+import se.leap.bitmaskclient.userstatus.User;
+import se.leap.bitmaskclient.userstatus.UserStatusFragment;
-public class MainActivity extends AppCompatActivity
- implements NavigationDrawerFragment.NavigationDrawerCallbacks {
+public class MainActivity extends AppCompatActivity {
private static Provider provider = new Provider();
private static FragmentManagerEnhanced fragmentManager;
@@ -58,56 +61,6 @@ public class MainActivity extends AppCompatActivity
}
- @Override
- public void onNavigationDrawerItemSelected(int position) {
- // update the main content by replacing fragments
- FragmentManager fragmentManager = getSupportFragmentManager();
- Fragment fragment = null;
- switch (position) {
- case 1:
- // TODO STOP VPN
- // if (provider.hasEIP()) eip_fragment.stopEipIfPossible();
- preferences.edit().clear().apply();
- startActivityForResult(new Intent(this, ConfigurationWizard.class), Constants.REQUEST_CODE_SWITCH_PROVIDER);
- break;
- case 2:
- fragment = new LogFragment();
- break;
- default:
- fragment = new VpnFragment();
- break;
- }
- if (fragment != null) {
- fragmentManager.beginTransaction()
- .replace(R.id.container, fragment)
- .commit();
- }
- onSectionAttached(position);
- }
-
- public void onSectionAttached(int number) {
- switch (number) {
- case 1:
- mTitle = getString(R.string.switch_provider_menu_option);
- break;
- case 2:
- mTitle = getString(R.string.log_fragment_title);
- break;
- default:
- mTitle = getString(R.string.vpn_fragment_title);
- break;
- }
- restoreActionBar();
- }
-
- public void restoreActionBar() {
- ActionBar actionBar = getSupportActionBar();
- if (actionBar != null) {
- actionBar.setDisplayShowTitleEnabled(true);
- actionBar.setSubtitle(mTitle);
- }
- }
-
/**
* A placeholder fragment containing a simple view.
*/
diff --git a/app/src/main/java/se/leap/bitmaskclient/StartActivity.java b/app/src/main/java/se/leap/bitmaskclient/StartActivity.java
index 1bf81aea..55760cb3 100644
--- a/app/src/main/java/se/leap/bitmaskclient/StartActivity.java
+++ b/app/src/main/java/se/leap/bitmaskclient/StartActivity.java
@@ -48,7 +48,7 @@ public class StartActivity extends Activity {
break;
case FIRST:
- // TODO start ProfileCreation & replace below code
+ // (new Intent(getActivity(), ConfigurationWizard.class), Constants.REQUEST_CODE_SWITCH_PROVIDER);
break;
case UPGRADE:
diff --git a/app/src/main/java/se/leap/bitmaskclient/NavigationDrawerFragment.java b/app/src/main/java/se/leap/bitmaskclient/drawer/NavigationDrawerFragment.java
index b8a9e5b1..60c38fbc 100644
--- a/app/src/main/java/se/leap/bitmaskclient/NavigationDrawerFragment.java
+++ b/app/src/main/java/se/leap/bitmaskclient/drawer/NavigationDrawerFragment.java
@@ -1,7 +1,9 @@
-package se.leap.bitmaskclient;
+package se.leap.bitmaskclient.drawer;
import android.content.Context;
+import android.content.Intent;
+import android.support.v4.app.FragmentManager;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v4.app.Fragment;
import android.support.v4.view.GravityCompat;
@@ -13,6 +15,7 @@ import android.preference.PreferenceManager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -24,6 +27,15 @@ import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
+import se.leap.bitmaskclient.ConfigurationWizard;
+import se.leap.bitmaskclient.Constants;
+import se.leap.bitmaskclient.Provider;
+import se.leap.bitmaskclient.R;
+import se.leap.bitmaskclient.VpnFragment;
+import se.leap.bitmaskclient.fragments.LogFragment;
+import se.leap.bitmaskclient.userstatus.User;
+import se.leap.bitmaskclient.userstatus.UserStatusFragment;
+
/**
* Fragment used for managing interactions for and presentation of a navigation drawer.
* See the <a href="https://developer.android.com/design/patterns/navigation-drawer.html#Interaction">
@@ -43,24 +55,24 @@ public class NavigationDrawerFragment extends Fragment {
private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned";
/**
- * A pointer to the current callbacks instance (the Activity).
- */
- private NavigationDrawerCallbacks mCallbacks;
-
- /**
* Helper component that ties the action bar to the navigation drawer.
*/
private ActionBarDrawerToggle mDrawerToggle;
private DrawerLayout mDrawerLayout;
private View mDrawerView;
- private ListView mDrawerListView;
+ private ListView mDrawerSettingsListView;
+ private ListView mDrawerAccountsListView;
private View mFragmentContainerView;
private int mCurrentSelectedPosition = 0;
private boolean mFromSavedInstanceState;
private boolean mUserLearnedDrawer;
+ private String mTitle;
+
+ private SharedPreferences preferences;
+
public NavigationDrawerFragment() {
}
@@ -73,13 +85,17 @@ public class NavigationDrawerFragment extends Fragment {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false);
+ preferences = getActivity().getSharedPreferences(Constants.SHARED_PREFERENCES, Context.MODE_PRIVATE);
+
if (savedInstanceState != null) {
mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION);
mFromSavedInstanceState = true;
}
// Select either the default item (0) or the last selected item.
- selectItem(mCurrentSelectedPosition);
+ if (mDrawerSettingsListView != null) {
+ selectItem(mDrawerSettingsListView, mCurrentSelectedPosition);
+ }
}
@Override
@@ -108,17 +124,17 @@ public class NavigationDrawerFragment extends Fragment {
*/
public void setUp(int fragmentId, DrawerLayout drawerLayout) {
AppCompatActivity activity = (AppCompatActivity) getActivity();
+ ActionBar actionBar = activity.getSupportActionBar();
- mDrawerListView = mDrawerView.findViewById(R.id.accountList);
- mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ mDrawerSettingsListView = mDrawerView.findViewById(R.id.settingsList);
+ mDrawerSettingsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- selectItem(position);
+ selectItem(parent, position);
}
});
- ActionBar actionBar = activity.getSupportActionBar();
- mDrawerListView.setAdapter(new ArrayAdapter<String>(
+ mDrawerSettingsListView.setAdapter(new ArrayAdapter<String>(
actionBar.getThemedContext(),
android.R.layout.simple_list_item_activated_1,
android.R.id.text1,
@@ -127,7 +143,25 @@ public class NavigationDrawerFragment extends Fragment {
getString(R.string.switch_provider_menu_option),
getString(R.string.log_fragment_title),
}));
- mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
+ mDrawerSettingsListView.setItemChecked(mCurrentSelectedPosition, true);
+
+ mDrawerAccountsListView = mDrawerView.findViewById(R.id.accountList);
+ mDrawerAccountsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ selectItem(parent, position);
+ }
+ });
+
+ mDrawerAccountsListView.setAdapter(new ArrayAdapter<String>(
+ actionBar.getThemedContext(),
+ android.R.layout.simple_list_item_activated_1,
+ android.R.id.text1,
+ new String[]{
+ User.userName(),
+ }));
+ mDrawerAccountsListView.setItemChecked(mCurrentSelectedPosition, true);
+
mFragmentContainerView = activity.findViewById(fragmentId);
mDrawerLayout = drawerLayout;
@@ -188,37 +222,30 @@ public class NavigationDrawerFragment extends Fragment {
mDrawerToggle.syncState();
}
});
-
mDrawerLayout.addDrawerListener(mDrawerToggle);
+
+ selectItem(mDrawerSettingsListView, 0);
}
- private void selectItem(int position) {
+ private void selectItem(AdapterView<?> list, int position) {
mCurrentSelectedPosition = position;
- if (mDrawerListView != null) {
- mDrawerListView.setItemChecked(position, true);
+ if (list != null) {
+ ((ListView) list).setItemChecked(position, true);
}
if (mDrawerLayout != null) {
mDrawerLayout.closeDrawer(mFragmentContainerView);
}
- if (mCallbacks != null) {
- mCallbacks.onNavigationDrawerItemSelected(position);
- }
+ onNavigationDrawerItemSelected(list, position);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
- try {
- mCallbacks = (NavigationDrawerCallbacks) context;
- } catch (ClassCastException e) {
- throw new ClassCastException("Activity must implement NavigationDrawerCallbacks.");
- }
}
@Override
public void onDetach() {
super.onDetach();
- mCallbacks = null;
}
@Override
@@ -270,13 +297,53 @@ public class NavigationDrawerFragment extends Fragment {
return ((AppCompatActivity) getActivity()).getSupportActionBar();
}
- /**
- * Callbacks interface that all activities using this fragment must implement.
- */
- public interface NavigationDrawerCallbacks {
- /**
- * Called when an item in the navigation drawer is selected.
- */
- void onNavigationDrawerItemSelected(int position);
+ public void onNavigationDrawerItemSelected(AdapterView<?> parent, int position) {
+ // update the main content by replacing fragments
+ FragmentManager fragmentManager = getFragmentManager();
+ Fragment fragment = null;
+
+ if (parent == mDrawerAccountsListView) {
+ mTitle = User.userName();
+ fragment = new UserStatusFragment();
+ Bundle bundle = new Bundle();
+ bundle.putBoolean(Provider.ALLOW_REGISTRATION, new Provider().allowsRegistration());
+ fragment.setArguments(bundle);
+ } else {
+ Log.d("Drawer", String.format("Selected position %d", position));
+ switch (position) {
+ case 1:
+ // TODO STOP VPN
+ // if (provider.hasEIP()) eip_fragment.stopEipIfPossible();
+ preferences.edit().clear().apply();
+ startActivityForResult(new Intent(getActivity(), ConfigurationWizard.class), Constants.REQUEST_CODE_SWITCH_PROVIDER);
+ break;
+ case 2:
+ mTitle = getString(R.string.log_fragment_title);
+ fragment = new LogFragment();
+ break;
+ default:
+ mTitle = getString(R.string.vpn_fragment_title);
+ fragment = new VpnFragment();
+ break;
+ }
+ }
+
+ if (fragment != null) {
+ fragmentManager.beginTransaction()
+ .replace(R.id.container, fragment)
+ .commit();
+ }
+
+ restoreActionBar();
}
+
+ public void restoreActionBar() {
+ ActionBar actionBar = getActionBar();
+ if (actionBar != null) {
+ actionBar.setDisplayShowTitleEnabled(true);
+ actionBar.setSubtitle(mTitle);
+ }
+ }
+
+
}
diff --git a/app/src/main/java/se/leap/bitmaskclient/fragments/LogFragment.java b/app/src/main/java/se/leap/bitmaskclient/fragments/LogFragment.java
index b72e53d5..3917683d 100644
--- a/app/src/main/java/se/leap/bitmaskclient/fragments/LogFragment.java
+++ b/app/src/main/java/se/leap/bitmaskclient/fragments/LogFragment.java
@@ -25,7 +25,6 @@ import android.os.Message;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.support.v4.app.ListFragment;
-import android.support.v7.app.AppCompatActivity;
import android.text.SpannableString;
import android.text.format.DateFormat;
import android.text.style.ImageSpan;
@@ -65,7 +64,6 @@ import de.blinkt.openvpn.core.VpnStatus;
import de.blinkt.openvpn.core.VpnStatus.LogListener;
import de.blinkt.openvpn.core.VpnStatus.StateListener;
import se.leap.bitmaskclient.Dashboard;
-import se.leap.bitmaskclient.NavigationDrawerFragment;
import se.leap.bitmaskclient.R;
import static de.blinkt.openvpn.core.OpenVPNService.humanReadableByteCount;
diff --git a/app/src/main/java/se/leap/bitmaskclient/userstatus/SessionDialog.java b/app/src/main/java/se/leap/bitmaskclient/userstatus/SessionDialog.java
index 440b02fa..1256c619 100644
--- a/app/src/main/java/se/leap/bitmaskclient/userstatus/SessionDialog.java
+++ b/app/src/main/java/se/leap/bitmaskclient/userstatus/SessionDialog.java
@@ -16,11 +16,12 @@
*/
package se.leap.bitmaskclient.userstatus;
-import android.app.Activity;
import android.app.AlertDialog;
+import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
+import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
@@ -164,11 +165,11 @@ public class SessionDialog extends DialogFragment {
SessionDialogInterface interface_with_Dashboard;
@Override
- public void onAttach(Activity activity) {
+ public void onAttach(Context activity) {
super.onAttach(activity);
try {
- interface_with_Dashboard = (SessionDialogInterface) activity.getFragmentManager().findFragmentById(R.id.user_status_fragment);;
+ interface_with_Dashboard = (SessionDialogInterface) ((AppCompatActivity) activity).getSupportFragmentManager().getFragments().get(0);
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement LogInDialogListener");
diff --git a/app/src/main/java/se/leap/bitmaskclient/userstatus/UserStatusFragment.java b/app/src/main/java/se/leap/bitmaskclient/userstatus/UserStatusFragment.java
index a991e88e..a6439a16 100644
--- a/app/src/main/java/se/leap/bitmaskclient/userstatus/UserStatusFragment.java
+++ b/app/src/main/java/se/leap/bitmaskclient/userstatus/UserStatusFragment.java
@@ -1,6 +1,6 @@
package se.leap.bitmaskclient.userstatus;
-import android.app.Activity;
+import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
@@ -72,7 +72,7 @@ public class UserStatusFragment extends Fragment implements Observer, SessionDia
}
@Override
- public void onAttach(Activity activity) {
+ public void onAttach(Context activity) {
super.onAttach(activity);
providerAPI_result_receiver = new ProviderAPIResultReceiver(new Handler(), Dashboard.dashboardReceiver);
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 28c23503..de06efc7 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -33,7 +33,7 @@
the container. -->
<fragment
android:id="@+id/navigation_drawer"
- android:name="se.leap.bitmaskclient.NavigationDrawerFragment"
+ android:name="se.leap.bitmaskclient.drawer.NavigationDrawerFragment"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
diff --git a/app/src/main/res/layout/drawer_main.xml b/app/src/main/res/layout/drawer_main.xml
index a2bda8b6..20d826b3 100644
--- a/app/src/main/res/layout/drawer_main.xml
+++ b/app/src/main/res/layout/drawer_main.xml
@@ -5,7 +5,7 @@
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/colorBackground"
- tools:context="se.leap.bitmaskclient.NavigationDrawerFragment">
+ tools:context="se.leap.bitmaskclient.drawer.NavigationDrawerFragment">
<FrameLayout
android:layout_width="match_parent"
@@ -32,21 +32,23 @@
</FrameLayout>
- <LinearLayout
+ <RelativeLayout
android:layout_width="match_parent"
- android:layout_height="wrap_content"
+ android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/accountList"
android:layout_width="match_parent"
- android:layout_height="match_parent" />
+ android:layout_height="wrap_content" />
- <FrameLayout
- android:id="@+id/appActionFrame"
+ <ListView
+ android:id="@+id/settingsList"
android:layout_width="match_parent"
- android:layout_height="wrap_content" />
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom"
+ android:layout_alignParentBottom="true" />
- </LinearLayout>
+ </RelativeLayout>
</LinearLayout> \ No newline at end of file
diff --git a/app/src/production/java/se/leap/bitmaskclient/ProviderAPI.java b/app/src/production/java/se/leap/bitmaskclient/ProviderAPI.java
index a818e508..df9697fb 100644
--- a/app/src/production/java/se/leap/bitmaskclient/ProviderAPI.java
+++ b/app/src/production/java/se/leap/bitmaskclient/ProviderAPI.java
@@ -53,7 +53,7 @@ public class ProviderAPI extends ProviderApiBase {
/**
* Downloads a provider.json from a given URL, adding a new provider using the given name.
- */
+ *
* @param task containing a boolean meaning if the provider is custom or not, another boolean meaning if the user completely trusts this provider, the provider name and its provider.json url.
* @return a bundle with a boolean value mapped to a key named RESULT_KEY, and which is true if the update was successful.
*/