be.blinkt.openvpn.activities.VPNPreferences.java Source code

Java tutorial

Introduction

Here is the source code for be.blinkt.openvpn.activities.VPNPreferences.java

Source

/*
 * Copyright (c) 2012-2016 Arne Schwabe
 * Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
 */

package be.blinkt.openvpn.activities;

import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.support.v4n.view.ViewPager;
import android.view.Menu;
import android.view.MenuItem;

import be.blinkt.openvpn.R;
import be.blinkt.openvpn.VpnProfile;
import be.blinkt.openvpn.core.ProfileManager;
import be.blinkt.openvpn.fragments.Settings_Allowed_Apps;
import be.blinkt.openvpn.fragments.Settings_Authentication;
import be.blinkt.openvpn.fragments.Settings_Basic;
import be.blinkt.openvpn.fragments.Settings_Connections;
import be.blinkt.openvpn.fragments.Settings_IP;
import be.blinkt.openvpn.fragments.Settings_Obscure;
import be.blinkt.openvpn.fragments.Settings_Routing;
import be.blinkt.openvpn.fragments.Settings_UserEditable;
import be.blinkt.openvpn.fragments.ShowConfigFragment;
import be.blinkt.openvpn.fragments.VPNProfileList;
import be.blinkt.openvpn.views.ScreenSlidePagerAdapter;
import be.blinkt.openvpn.views.TabBarView;

public class VPNPreferences extends BaseActivity {

    static final Class validFragments[] = new Class[] { Settings_Authentication.class, Settings_Basic.class,
            Settings_IP.class, Settings_Obscure.class, Settings_Routing.class, ShowConfigFragment.class,
            Settings_Connections.class, Settings_Allowed_Apps.class };

    private String mProfileUUID;
    private VpnProfile mProfile;
    private ViewPager mPager;
    private ScreenSlidePagerAdapter mPagerAdapter;

    public VPNPreferences() {
        super();
    }

    @TargetApi(Build.VERSION_CODES.KITKAT)
    protected boolean isValidFragment(String fragmentName) {
        for (Class c : validFragments)
            if (c.getName().equals(fragmentName))
                return true;
        return false;

    }

    @Override
    protected void onStop() {
        super.onStop();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        outState.putString(getIntent().getStringExtra(getPackageName() + ".profileUUID"), mProfileUUID);
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onResume() {
        super.onResume();
        getProfile();
        // When a profile is deleted from a category fragment in hadset mod we need to finish
        // this activity as well when returning
        if (mProfile == null || mProfile.profileDeleted) {
            setResult(VPNProfileList.RESULT_VPN_DELETED);
            finish();
        }
    }

    private void getProfile() {
        Intent intent = getIntent();

        if (intent != null) {
            String profileUUID = intent.getStringExtra(getPackageName() + ".profileUUID");
            if (profileUUID == null) {
                Bundle initialArguments = getIntent()
                        .getBundleExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS);
                profileUUID = initialArguments.getString(getPackageName() + ".profileUUID");
            }
            if (profileUUID != null) {

                mProfileUUID = profileUUID;
                mProfile = ProfileManager.get(this, mProfileUUID);

            }
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        mProfileUUID = getIntent().getStringExtra(getPackageName() + ".profileUUID");
        if (savedInstanceState != null) {
            String savedUUID = savedInstanceState.getString(getPackageName() + ".profileUUID");
            if (savedUUID != null)
                mProfileUUID = savedUUID;
        }

        mProfile = ProfileManager.get(this, mProfileUUID);
        if (mProfile != null) {
            setTitle(getString(R.string.edit_profile_title, mProfile.getName()));
        }
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main_activity);

        /* Toolbar and slider should have the same elevation */
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            disableToolbarElevation();
        }

        // Instantiate a ViewPager and a PagerAdapter.
        mPager = (ViewPager) findViewById(R.id.pager);
        mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager(), this);

        Bundle fragmentArguments = new Bundle();
        fragmentArguments.putString(getPackageName() + ".profileUUID", mProfileUUID);
        mPagerAdapter.setFragmentArgs(fragmentArguments);

        if (mProfile.mUserEditable) {
            mPagerAdapter.addTab(R.string.basic, Settings_Basic.class);
            mPagerAdapter.addTab(R.string.server_list, Settings_Connections.class);
            mPagerAdapter.addTab(R.string.ipdns, Settings_IP.class);
            mPagerAdapter.addTab(R.string.routing, Settings_Routing.class);
            mPagerAdapter.addTab(R.string.settings_auth, Settings_Authentication.class);

            mPagerAdapter.addTab(R.string.advanced, Settings_Obscure.class);
        } else {
            mPagerAdapter.addTab(R.string.basic, Settings_UserEditable.class);
        }
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
            mPagerAdapter.addTab(R.string.vpn_allowed_apps, Settings_Allowed_Apps.class);

        mPagerAdapter.addTab(R.string.generated_config, ShowConfigFragment.class);

        mPager.setAdapter(mPagerAdapter);

        TabBarView tabs = (TabBarView) findViewById(R.id.sliding_tabs);
        tabs.setViewPager(mPager);

    }

    /*
       @Override
       public void onBuildHeaders(List<Header> target) {
          loadHeadersFromResource(R.xml.vpn_headers, target);
    Header headerToRemove=null;
    for (Header header : target) {
     if(header.fragmentArguments==null)
        header.fragmentArguments = new Bundle();
     header.fragmentArguments.putString(getPackageName() + ".profileUUID",mProfileUUID);
        if (header.id == R.id.allowed_apps_header && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
            headerToRemove = header;
          }
    if (headerToRemove != null)
        target.remove(headerToRemove);
       }*/

    @Override
    public void onBackPressed() {
        setResult(RESULT_OK, getIntent());
        super.onBackPressed();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.remove_vpn)
            askProfileRemoval();
        if (item.getItemId() == R.id.duplicate_vpn) {
            Intent data = new Intent();
            data.putExtra(VpnProfile.EXTRA_PROFILEUUID, mProfileUUID);
            setResult(VPNProfileList.RESULT_VPN_DUPLICATE, data);
            finish();
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.vpnpreferences_menu, menu);

        return super.onCreateOptionsMenu(menu);
    }

    private void askProfileRemoval() {
        AlertDialog.Builder dialog = new AlertDialog.Builder(this);
        dialog.setTitle("Confirm deletion");
        dialog.setMessage(getString(R.string.remove_vpn_query, mProfile.mName));

        dialog.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                removeProfile(mProfile);
            }

        });
        dialog.setNegativeButton(android.R.string.no, null);
        dialog.create().show();
    }

    protected void removeProfile(VpnProfile profile) {
        ProfileManager.getInstance(this).removeProfile(this, profile);
        setResult(VPNProfileList.RESULT_VPN_DELETED);
        finish();

    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    private void disableToolbarElevation() {
        ActionBar toolbar = getActionBar();
        toolbar.setElevation(0);
    }

}