[tor-commits] [orbot/master] more UI updates and small improvements

n8fr8 at torproject.org n8fr8 at torproject.org
Wed Dec 13 20:20:19 UTC 2017


commit e6bd23a1e253824989d5b643543700d3cc8f1c26
Author: n8fr8 <nathan at freitas.net>
Date:   Mon Dec 11 15:02:05 2017 -0500

    more UI updates and small improvements
---
 .../org/torproject/android/OrbotMainActivity.java  | 267 ++++++++++++---------
 .../torproject/android/ui/AppManagerActivity.java  |  29 ++-
 .../torproject/android/ui/PromoAppsActivity.java   | 216 -----------------
 .../main/res/drawable-xhdpi/ic_action_settings.png | Bin 716 -> 0 bytes
 .../res/drawable-xhdpi/ic_autorenew_black_36dp.png | Bin 682 -> 0 bytes
 .../drawable-xhdpi/ic_filter_none_black_36dp.png   | Bin 252 -> 0 bytes
 app/src/main/res/drawable-xhdpi/ic_launcher.png    | Bin 5964 -> 0 bytes
 .../ic_playlist_add_check_black_36dp.png           | Bin 236 -> 0 bytes
 .../main/res/drawable-xhdpi/ic_stat_notifyerr.png  | Bin 1796 -> 0 bytes
 app/src/main/res/drawable-xhdpi/ic_stat_tor.png    | Bin 1161 -> 0 bytes
 .../main/res/drawable-xhdpi/ic_stat_tor_xfer.png   | Bin 1378 -> 0 bytes
 app/src/main/res/drawable-xxxhdpi/inverse.png      | Bin 1027 -> 0 bytes
 app/src/main/res/drawable/classyfabric.png         | Bin 8856 -> 0 bytes
 .../ic_autorenew_black_36dp.png                    | Bin
 app/src/main/res/drawable/ic_chatsecure.png        | Bin 4013 -> 0 bytes
 app/src/main/res/drawable/ic_duckduckgo.png        | Bin 5042 -> 0 bytes
 app/src/main/res/drawable/ic_twitter.png           | Bin 2797 -> 0 bytes
 app/src/main/res/drawable/icon_martus.png          | Bin 6763 -> 0 bytes
 app/src/main/res/drawable/icon_orfox.png           | Bin 7617 -> 0 bytes
 app/src/main/res/drawable/icon_story_maker.png     | Bin 4290 -> 0 bytes
 app/src/main/res/drawable/tilebg.xml               |   4 -
 .../layout-v21/layout_notification_expanded.xml    | 124 ----------
 app/src/main/res/layout/layout_main.xml            |  52 +++-
 .../res/layout/layout_notification_expanded.xml    |  40 +--
 app/src/main/res/layout/layout_promo_apps.xml      | 115 ---------
 app/src/main/res/menu/orbot_apps.xml               |  30 +++
 app/src/main/res/values/strings.xml                |   5 +-
 .../org/torproject/android/service/TorService.java |  12 +-
 .../org/torproject/android/service/util/Prefs.java |   2 +-
 .../res/drawable-hdpi/ic_autorenew_black_36dp.png  | Bin 0 -> 546 bytes
 .../drawable-mdpi/ic_action_settings.png           | Bin
 .../drawable-mdpi/ic_autorenew_black_36dp.png      | Bin
 .../drawable-mdpi/ic_filter_none_black_36dp.png    | Bin
 .../drawable-mdpi}/drawable-mdpi/ic_launcher.png   | Bin
 .../ic_playlist_add_check_black_36dp.png           | Bin
 .../drawable-mdpi/ic_stat_notifyerr.png            | Bin
 .../drawable-mdpi}/drawable-mdpi/ic_stat_tor.png   | Bin
 .../drawable-mdpi/ic_stat_tor_xfer.png             | Bin
 .../res/drawable-mdpi}/drawable-mdpi/inverse.png   | Bin
 .../drawable-xxhdpi/ic_autorenew_black_36dp.png    | Bin
 .../drawable-xxhdpi/ic_filter_none_black_36dp.png  | Bin
 .../drawable-xxhdpi/ic_launcher.png                | Bin
 .../ic_playlist_add_check_black_36dp.png           | Bin
 .../drawable-xxhdpi/ic_stat_tor.png                | Bin
 .../drawable-xxhdpi/ic_stat_tor_xfer.png           | Bin
 .../drawable-xxhdpi/drawable-xxhdpi}/inverse.png   | Bin
 .../drawable-xxxhdpi/ic_autorenew_black_36dp.png   | Bin
 .../drawable-xxxhdpi/ic_filter_none_black_36dp.png | Bin
 .../drawable-xxxhdpi/ic_launcher.png               | Bin
 .../ic_playlist_add_check_black_36dp.png           | Bin
 .../drawable-xxxhdpi/ic_stat_tor.png               | Bin
 .../drawable-xxxhdpi/ic_stat_tor_xfer.png          | Bin
 .../drawable-xxxhdpi/drawable-xxxhdpi}/inverse.png | Bin
 .../res/layout/layout_notification_expanded.xml    |  28 +--
 54 files changed, 283 insertions(+), 641 deletions(-)

diff --git a/app/src/main/java/org/torproject/android/OrbotMainActivity.java b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
index 1b006ae6..de9b4285 100644
--- a/app/src/main/java/org/torproject/android/OrbotMainActivity.java
+++ b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
@@ -23,8 +23,6 @@ import org.torproject.android.service.TorServiceConstants;
 import org.torproject.android.service.util.TorServiceUtils;
 import org.torproject.android.settings.SettingsPreferences;
 import org.torproject.android.ui.AppManagerActivity;
-import org.torproject.android.ui.ImageProgressView;
-import org.torproject.android.ui.PromoAppsActivity;
 import org.torproject.android.ui.Rotate3dAnimation;
 import org.torproject.android.ui.hiddenservices.ClientCookiesActivity;
 import org.torproject.android.ui.hiddenservices.HiddenServicesActivity;
@@ -34,6 +32,7 @@ import org.torproject.android.ui.hiddenservices.providers.HSContentProvider;
 import org.torproject.android.vpn.VPNEnableActivity;
 
 import android.annotation.SuppressLint;
+import android.app.ActionBar;
 import android.app.ActivityManager;
 import android.app.ActivityManager.RunningServiceInfo;
 import android.app.AlertDialog;
@@ -57,10 +56,8 @@ import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.os.RemoteException;
-import android.support.design.widget.Snackbar;
 import android.support.v4.content.LocalBroadcastManager;
 import android.support.v4.widget.DrawerLayout;
-import android.support.v7.app.ActionBarDrawerToggle;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.SwitchCompat;
 import android.support.v7.widget.Toolbar;
@@ -85,6 +82,8 @@ import android.widget.AdapterView.OnItemSelectedListener;
 import android.widget.ArrayAdapter;
 import android.widget.Button;
 import android.widget.CompoundButton;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
 import android.widget.Spinner;
 import android.widget.TextView;
 import android.widget.Toast;
@@ -102,7 +101,7 @@ public class OrbotMainActivity extends AppCompatActivity
 
     /* Useful UI bits */
     private TextView lblStatus = null; //the main text display widget
-    private ImageProgressView imgStatus = null; //the main touchable image for activating Orbot
+    private ImageView imgStatus = null; //the main touchable image for activating Orbot
 
     private TextView downloadText = null;
     private TextView uploadText = null;
@@ -116,8 +115,7 @@ public class OrbotMainActivity extends AppCompatActivity
     private Spinner spnCountries = null;
 
 	private DrawerLayout mDrawer;
-	private ActionBarDrawerToggle mDrawerToggle;
-	
+
     /* Some tracking bits */
     private String torStatus = null; //latest status reported from the tor service
     private Intent lastStatusIntent;  // the last ACTION_STATUS Intent received
@@ -265,20 +263,7 @@ public class OrbotMainActivity extends AppCompatActivity
         setSupportActionBar(toolbar);
         
         mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
-        /**
-          mDrawerToggle = new ActionBarDrawerToggle(
-              this,  mDrawer,        
-              toolbar,
-              R.string.btn_okay, R.string.btn_cancel
-          );**/
-
-
-      //getSupportActionBar().setDisplayHomeAsUpEnabled(true);
-      //getSupportActionBar().setHomeButtonEnabled(true);
-      
-      //mDrawer.setDrawerListener(mDrawerToggle);
-      //mDrawerToggle.syncState();
-        
+
         mTxtOrbotLog = (TextView)findViewById(R.id.orbotLog);
         
         lblStatus = (TextView)findViewById(R.id.lblStatus);
@@ -289,7 +274,7 @@ public class OrbotMainActivity extends AppCompatActivity
             }
         });
 
-        imgStatus = (ImageProgressView)findViewById(R.id.imgStatus);
+        imgStatus = (ImageView)findViewById(R.id.imgStatus);
         imgStatus.setOnLongClickListener(this);
         imgStatus.setOnTouchListener(this);
         
@@ -352,21 +337,7 @@ public class OrbotMainActivity extends AppCompatActivity
                 }
             });
 
-			if (PermissionManager.isLollipopOrHigher()) {
-
-                findViewById(R.id.btnApps).setOnClickListener(new View.OnClickListener() {
-                    @Override
-                    public void onClick(View v) {
-
-                        startActivityForResult(new Intent(OrbotMainActivity.this, AppManagerActivity.class), REQUEST_VPN_APPS_SELECT);
 
-                    }
-                });
-            }
-            else
-            {
-                findViewById(R.id.btnApps).setVisibility(View.GONE);
-            }
 		}
 		
 		
@@ -483,18 +454,11 @@ public class OrbotMainActivity extends AppCompatActivity
              Intent intent = new Intent(OrbotMainActivity.this, SettingsPreferences.class);
              startActivityForResult(intent, REQUEST_SETTINGS);
          }
-         /**
-         else if (item.getItemId() == R.id.menu_promo_apps)
-         {
-             startActivity(new Intent(OrbotMainActivity.this, PromoAppsActivity.class));
-
-         }*/
          else if (item.getItemId() == R.id.menu_exit)
          {
                  //exit app
                  doExit();
                  
-                 
          }
          else if (item.getItemId() == R.id.menu_about)
          {
@@ -611,14 +575,6 @@ public class OrbotMainActivity extends AppCompatActivity
 		}
 	}
 
-	private void doTorCheck ()
-	{
-		
-		openBrowser(URL_TOR_CHECK,false);
-		
-
-	}
-
 	private void refreshVPNApps ()
     {
         stopVpnService();
@@ -854,11 +810,28 @@ public class OrbotMainActivity extends AppCompatActivity
 	/*
 	 * Launch the system activity for Uri viewing with the provided url
 	 */
-	private void openBrowser(final String browserLaunchUrl,boolean forceExternal)
+	private void openBrowser(final String browserLaunchUrl,boolean forceExternal, String pkgId)
 	{
-		boolean isBrowserInstalled = appInstalledOrNot(TorServiceConstants.BROWSER_APP_USERNAME);
+        boolean isBrowserInstalled = appInstalledOrNot(TorServiceConstants.BROWSER_APP_USERNAME);
 
-        if (isBrowserInstalled)
+		if (pkgId != null)
+        {
+            if (pkgId.equals(TorServiceConstants.BROWSER_APP_USERNAME))
+                startIntent(pkgId,Intent.ACTION_VIEW,Uri.parse(browserLaunchUrl));
+            else
+            {
+                if (!Prefs.useVpn())
+                {
+                    Toast.makeText(this, R.string.please_enable_vpn, Toast.LENGTH_LONG).show();
+
+                }
+                else
+                {
+                    startIntent(pkgId,Intent.ACTION_VIEW,Uri.parse(browserLaunchUrl));
+                }
+            }
+        }
+        else if (isBrowserInstalled)
         {
             startIntent(TorServiceConstants.BROWSER_APP_USERNAME,Intent.ACTION_VIEW,Uri.parse(browserLaunchUrl));
         }
@@ -867,53 +840,37 @@ public class OrbotMainActivity extends AppCompatActivity
 			//use the system browser since VPN is on
 			startIntent(null,Intent.ACTION_VIEW, Uri.parse(browserLaunchUrl));
 		}
-		else
-		{
-			AlertDialog aDialog = new AlertDialog.Builder(OrbotMainActivity.this)
-		      .setTitle(R.string.install_apps_)
-		      .setMessage(R.string.it_doesn_t_seem_like_you_have_orweb_installed_want_help_with_that_or_should_we_just_open_the_browser_)
-		      .setPositiveButton(R.string.install_orweb, new Dialog.OnClickListener ()
-		      {
+		
+	}
 
-				@Override
-				public void onClick(DialogInterface dialog, int which) {
+	private void promptInstallOrfox ()
+    {
+        AlertDialog aDialog = new AlertDialog.Builder(OrbotMainActivity.this)
+                .setTitle(R.string.install_apps_)
+                .setMessage(R.string.it_doesn_t_seem_like_you_have_orweb_installed_want_help_with_that_or_should_we_just_open_the_browser_)
+                .setPositiveButton(R.string.install_orweb, new Dialog.OnClickListener ()
+                {
 
-					//prompt to install Orweb
-					//Intent intent = new Intent(OrbotMainActivity.this,PromoAppsActivity.class);
-					//startActivity(intent);
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
 
-                    startActivity(PromoAppsActivity.getInstallIntent(TorServiceConstants.BROWSER_APP_USERNAME,OrbotMainActivity.this));
+                     //   startActivity(PromoAppsActivity.getInstallIntent(TorServiceConstants.BROWSER_APP_USERNAME,OrbotMainActivity.this));
 
 
-                }
-		    	  
-		      })
-                    .setNeutralButton(R.string.apps_mode, new DialogInterface.OnClickListener() {
-                        @Override
-                        public void onClick(DialogInterface dialog, int which) {
-                         //   enableVPN(true);
-                            mBtnVPN.setChecked(true);
-                        }
-                    })
-		      .setNegativeButton(R.string.standard_browser, new Dialog.OnClickListener ()
-		      {
+                    }
 
-				@Override
-				public void onClick(DialogInterface dialog, int which) {
-					startIntent(null,Intent.ACTION_VIEW, Uri.parse(browserLaunchUrl));
-					
-				}
-		    	  
-		      })
-		      .show();
-			  
-		}
-		
-	}
-	
-	
-	
-    
+                })
+                .setNegativeButton(R.string.btn_cancel, new Dialog.OnClickListener ()
+                {
+
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
+                            dialog.cancel();
+                    }
+
+                })
+                .show();
+    }
 
     private void startIntent (String pkg, String action, Uri data)
     {
@@ -963,7 +920,6 @@ public class OrbotMainActivity extends AppCompatActivity
         if (request == REQUEST_SETTINGS && response == RESULT_OK)
         {
             OrbotApp.forceChangeLanguage(this);
-
         }
         else if (request == REQUEST_VPN)
         {
@@ -973,12 +929,12 @@ public class OrbotMainActivity extends AppCompatActivity
 			else
 			{
 				Prefs.putUseVpn(false);
-
 			}
         }
         else if (request == REQUEST_VPN_APPS_SELECT)
         {
-            if (response == RESULT_OK)
+            if (response == RESULT_OK &&
+                    torStatus == TorServiceConstants.STATUS_ON)
                 refreshVPNApps();
 
         }
@@ -1123,7 +1079,7 @@ public class OrbotMainActivity extends AppCompatActivity
 			@Override
 			public void onClick(DialogInterface dialog, int which) {
 				
-				openBrowser(URL_TOR_BRIDGES + type,true);
+				openBrowser(URL_TOR_BRIDGES + type,true, null);
 
 			}
 
@@ -1195,8 +1151,9 @@ public class OrbotMainActivity extends AppCompatActivity
            Prefs.disableTransparentProxying();
        }
 
-		
-    }
+           addAppShortcuts();
+
+       }
 
     AlertDialog aDialog = null;
     
@@ -1276,17 +1233,7 @@ public class OrbotMainActivity extends AppCompatActivity
                 showAlert(getString(R.string.status_activated),
                         getString(R.string.connect_first_time), true);
             }
-            else
-            {
-                Snackbar sb = Snackbar.make(findViewById(R.id.frameMain),getString(R.string.status_activated),Snackbar.LENGTH_LONG);
-                sb.setAction(R.string.menu_browse, new View.OnClickListener() {
-                    @Override
-                    public void onClick(View v) {
-                        doTorCheck();
-                    }
-                });
-                sb.show();
-            }
+            
 
             if (autoStartFromIntent)
             {
@@ -1515,6 +1462,100 @@ public class OrbotMainActivity extends AppCompatActivity
                 return false;
             }
     }
-    
+
+    private void addAppShortcuts ()
+    {
+        LinearLayout llBoxShortcuts = (LinearLayout)findViewById(R.id.boxAppShortcuts);
+
+        findViewById(R.id.row_apps).setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                startActivityForResult(new Intent(OrbotMainActivity.this, AppManagerActivity.class), REQUEST_VPN_APPS_SELECT);
+            }
+        });
+
+        if (!PermissionManager.isLollipopOrHigher()) {
+            llBoxShortcuts.setVisibility(View.GONE);
+        }
+        else
+        {
+            PackageManager pMgr = getPackageManager();
+
+            ArrayList<String> pkgIds = new ArrayList<>();
+
+            String tordAppString = mPrefs.getString(PREFS_KEY_TORIFIED, "");
+            StringTokenizer st = new StringTokenizer(tordAppString,"|");
+            while (st.hasMoreTokens())
+                pkgIds.add(st.nextToken());
+
+            llBoxShortcuts.removeAllViews();
+
+            //first add Orfox shortcut
+            try {
+                String pkgId = "info.guardianproject.orfox";
+
+                ImageView iv = new ImageView(this);
+                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
+                params.setMargins(3, 3, 3, 3);
+                iv.setLayoutParams(params);
+                iv.setImageDrawable(pMgr.getApplicationIcon(pkgId));
+                llBoxShortcuts.addView(iv);
+                iv.setOnClickListener(new View.OnClickListener() {
+                    @Override
+                    public void onClick(View v) {
+                        if (!appInstalledOrNot(TorServiceConstants.BROWSER_APP_USERNAME))
+                            promptInstallOrfox();
+                        else
+                            openBrowser(URL_TOR_CHECK,false, TorServiceConstants.BROWSER_APP_USERNAME);
+
+                    }
+                });
+            }
+            catch (Exception e)
+            {
+                //package not installed?
+            }
+
+            for (final String pkgId : pkgIds)
+            {
+                try {
+                    ImageView iv = new ImageView(this);
+                    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
+                    params.setMargins(3, 3, 3, 3);
+                    iv.setLayoutParams(params);
+                    iv.setImageDrawable(pMgr.getApplicationIcon(pkgId));
+                    llBoxShortcuts.addView(iv);
+                    iv.setOnClickListener(new View.OnClickListener() {
+                        @Override
+                        public void onClick(View v) {
+                            openBrowser(URL_TOR_CHECK,false, pkgId);
+
+                        }
+                    });
+                }
+                catch (Exception e)
+                {
+                    //package not installed?
+                }
+            }
+
+            //now add app edit/add shortcut
+            ImageView iv = new ImageView(this);
+            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
+            params.setMargins(3, 3, 3, 3);
+            iv.setLayoutParams(params);
+            iv.setImageDrawable(getResources().getDrawable(android.R.drawable.ic_input_add));
+            llBoxShortcuts.addView(iv);
+            iv.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    startActivityForResult(new Intent(OrbotMainActivity.this, AppManagerActivity.class), REQUEST_VPN_APPS_SELECT);
+
+
+                }
+            });
+        }
+
+    }
 
 }
diff --git a/app/src/main/java/org/torproject/android/ui/AppManagerActivity.java b/app/src/main/java/org/torproject/android/ui/AppManagerActivity.java
index 0acef3e7..62971fbf 100644
--- a/app/src/main/java/org/torproject/android/ui/AppManagerActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/AppManagerActivity.java
@@ -11,6 +11,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.StringTokenizer;
 
+import org.torproject.android.BuildConfig;
 import org.torproject.android.service.OrbotConstants;
 import org.torproject.android.R;
 import org.torproject.android.service.util.TorServiceUtils;
@@ -29,6 +30,7 @@ import android.os.Bundle;
 import android.support.v7.app.AppCompatActivity;
 import android.view.LayoutInflater;
 import android.view.Menu;
+import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -60,6 +62,20 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
 
     }
 
+    /*
+   * Create the UI Options Menu (non-Javadoc)
+   * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
+   */
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        super.onCreateOptionsMenu(menu);
+        MenuInflater inflater = getMenuInflater();
+        inflater.inflate(R.menu.orbot_apps, menu);
+
+        return true;
+    }
+
+
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         if (item.getItemId() == android.R.id.home)
@@ -67,6 +83,12 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
             finish();
             return true;
         }
+        else if (item.getItemId() == R.id.menu_apps_refresh)
+        {
+            mApps = null;
+            reloadApps();
+            return true;
+        }
 
         return super.onOptionsItemSelected(item);
     }
@@ -76,7 +98,10 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
         super.onResume();
         listApps = (GridView) findViewById(R.id.applistview);
         mPrefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
+        reloadApps();
+    }
 
+    private void reloadApps () {
 
         new AsyncTask<Void, Void, Void>() {
             private ProgressDialog dialog;
@@ -105,7 +130,9 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
     private void loadApps (SharedPreferences prefs)
     {
 
-        mApps = getApps(getApplicationContext(), prefs);
+        if (mApps == null)
+            mApps = getApps(getApplicationContext(), prefs);
+
         Collections.sort(mApps,new Comparator<TorifiedApp>() {
             public int compare(TorifiedApp o1, TorifiedApp o2) {
                 if (o1.isTorified() == o2.isTorified()) return o1.getName().compareTo(o2.getName());
diff --git a/app/src/main/java/org/torproject/android/ui/PromoAppsActivity.java b/app/src/main/java/org/torproject/android/ui/PromoAppsActivity.java
deleted file mode 100644
index 2fdf2df2..00000000
--- a/app/src/main/java/org/torproject/android/ui/PromoAppsActivity.java
+++ /dev/null
@@ -1,216 +0,0 @@
-package org.torproject.android.ui;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.pm.ResolveInfo;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.Button;
-
-import org.torproject.android.service.OrbotConstants;
-import org.torproject.android.R;
-import org.torproject.android.service.TorServiceConstants;
-
-import java.util.List;
-
-public class PromoAppsActivity extends Activity implements OrbotConstants {
-
-    final static String MARKET_URI = "market://details?id=";
-    final static String FDROID_APP_URI = "https://f-droid.org/repository/browse/?fdid=";
-    final static String PLAY_APP_URI = "https://play.google.com/store/apps/details?id=";
-    final static String FDROID_URI = "https://f-droid.org/repository/browse/?fdfilter=info.guardianproject";
-    final static String PLAY_URI = "https://play.google.com/store/apps/developer?id=The+Guardian+Project";
-
-    private final static String FDROID_PACKAGE_NAME = "org.fdroid.fdroid";
-    private final static String PLAY_PACKAGE_NAME = "com.android.vending";
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState)
-    {
-        super.onCreate(savedInstanceState);
-
-    }
-
-    @Override
-    protected void onStart() {
-
-        super.onStart();
-        setContentView(R.layout.layout_promo_apps);
-
-        stepFive();
-
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-
-
-    }
-
-    void stepFive(){
-
-
-        String title = getString(R.string.wizard_tips_title);
-
-        setTitle(title);
-
-        Button btnLink = (Button)findViewById(R.id.WizardRootButtonInstallGibberbot);
-
-        btnLink.setOnClickListener(new OnClickListener() {
-
-            @Override
-            public void onClick(View view) {
-                finish();
-                startActivity(getInstallIntent("info.guardianproject.otr.app.im",PromoAppsActivity.this));
-
-            }
-        });
-
-        btnLink = (Button)findViewById(R.id.WizardRootButtonInstallOrweb);
-
-        btnLink.setOnClickListener(new OnClickListener() {
-
-            @Override
-            public void onClick(View view) {
-                finish();
-                startActivity(getInstallIntent(TorServiceConstants.BROWSER_APP_USERNAME,PromoAppsActivity.this));
-
-            }
-        });
-
-        btnLink = (Button)findViewById(R.id.WizardRootButtonInstallDuckgo);
-
-        btnLink.setOnClickListener(new OnClickListener() {
-
-            @Override
-            public void onClick(View view) {
-
-                finish();
-                startActivity(getInstallIntent("com.duckduckgo.mobile.android",PromoAppsActivity.this));
-
-            }
-        });
-
-        btnLink = (Button)findViewById(R.id.WizardRootButtonInstallTwitter);
-
-        btnLink.setOnClickListener(new OnClickListener() {
-
-            @Override
-            public void onClick(View view) {
-
-                String url = getString(R.string.twitter_setup_url);
-                finish();
-                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
-
-            }
-        });
-
-        btnLink = (Button)findViewById(R.id.WizardRootButtonInstallStoryMaker);
-
-        btnLink.setOnClickListener(new OnClickListener() {
-
-            @Override
-            public void onClick(View view) {
-                finish();
-                startActivity(getInstallIntent("info.guardianproject.mrapp",PromoAppsActivity.this));
-
-            }
-        });
-
-        btnLink = (Button)findViewById(R.id.WizardRootButtonInstallMartus);
-
-        btnLink.setOnClickListener(new OnClickListener() {
-
-            @Override
-            public void onClick(View view) {
-                finish();
-                startActivity(getInstallIntent("org.martus.android",PromoAppsActivity.this));
-
-            }
-        });
-
-        btnLink = (Button)findViewById(R.id.WizardRootButtonGooglePlay);
-        PackageManager pm = getPackageManager();
-        final Intent intent = new Intent(Intent.ACTION_VIEW);
-        // change text and icon based on which app store is installed (or not)
-        try {
-            if (isAppInstalled(pm, FDROID_PACKAGE_NAME)) {
-                Drawable icon = pm.getApplicationIcon(FDROID_PACKAGE_NAME);
-                btnLink.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
-                btnLink.setText(R.string.wizard_tips_fdroid);
-                intent.setPackage(FDROID_PACKAGE_NAME);
-                intent.setData(Uri.parse(FDROID_URI));
-            } else if (isAppInstalled(pm, PLAY_PACKAGE_NAME)) {
-                Drawable icon = pm.getApplicationIcon(PLAY_PACKAGE_NAME);
-                btnLink.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
-                btnLink.setText(R.string.wizard_tips_play);
-                intent.setPackage(PLAY_PACKAGE_NAME);
-                intent.setData(Uri.parse(PLAY_URI));
-            }
-        } catch (NameNotFoundException e) {
-            e.printStackTrace();
-            btnLink.setText(R.string.wizard_tips_fdroid_org);
-            intent.setData(Uri.parse(FDROID_URI));
-        }
-
-        btnLink.setOnClickListener(new OnClickListener() {
-
-            @Override
-            public void onClick(View view) {
-                startActivity(intent);
-            }
-        });
-
-        Button next = ((Button)findViewById(R.id.btnWizard2));
-    	next.setOnClickListener(new View.OnClickListener() {
-			
-			public void onClick(View v) {
-				finish();
-			}
-		});
-
-	}
-
-    public static boolean isAppInstalled(PackageManager pm, String packageName) {
-        try {
-            pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
-            return true;
-        } catch (PackageManager.NameNotFoundException e) {
-            return false;
-        }
-    }
-
-    public static Intent getInstallIntent(String packageName, Context context) {
-        final Intent intent = new Intent(Intent.ACTION_VIEW);
-        intent.setData(Uri.parse(MARKET_URI + packageName));
-
-        PackageManager pm = context.getPackageManager();
-        List<ResolveInfo> resInfos = pm.queryIntentActivities(intent, 0);
-
-        String foundPackageName = null;
-        for (ResolveInfo r : resInfos) {
-            Log.i(TAG, "market: " + r.activityInfo.packageName);
-            if (TextUtils.equals(r.activityInfo.packageName, FDROID_PACKAGE_NAME)
-                    || TextUtils.equals(r.activityInfo.packageName, PLAY_PACKAGE_NAME)) {
-                foundPackageName = r.activityInfo.packageName;
-                break;
-            }
-        }
-
-        if (foundPackageName == null) {
-            intent.setData(Uri.parse(FDROID_APP_URI + packageName));
-        } else {
-            intent.setPackage(foundPackageName);
-        }
-        return intent;
-    }
-}
diff --git a/app/src/main/res/drawable-xhdpi/ic_action_settings.png b/app/src/main/res/drawable-xhdpi/ic_action_settings.png
deleted file mode 100644
index f2572c84..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_action_settings.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_autorenew_black_36dp.png b/app/src/main/res/drawable-xhdpi/ic_autorenew_black_36dp.png
deleted file mode 100644
index 910746ec..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_autorenew_black_36dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_filter_none_black_36dp.png b/app/src/main/res/drawable-xhdpi/ic_filter_none_black_36dp.png
deleted file mode 100644
index 4c6e5007..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_filter_none_black_36dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_launcher.png b/app/src/main/res/drawable-xhdpi/ic_launcher.png
deleted file mode 100644
index 13ee02bc..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_playlist_add_check_black_36dp.png b/app/src/main/res/drawable-xhdpi/ic_playlist_add_check_black_36dp.png
deleted file mode 100644
index ac03e19a..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_playlist_add_check_black_36dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_stat_notifyerr.png b/app/src/main/res/drawable-xhdpi/ic_stat_notifyerr.png
deleted file mode 100644
index f48e8e83..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_stat_notifyerr.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_stat_tor.png b/app/src/main/res/drawable-xhdpi/ic_stat_tor.png
deleted file mode 100644
index 11254d2b..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_stat_tor.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_stat_tor_xfer.png b/app/src/main/res/drawable-xhdpi/ic_stat_tor_xfer.png
deleted file mode 100644
index 522d6530..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_stat_tor_xfer.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/inverse.png b/app/src/main/res/drawable-xxxhdpi/inverse.png
deleted file mode 100644
index 65eff2c7..00000000
Binary files a/app/src/main/res/drawable-xxxhdpi/inverse.png and /dev/null differ
diff --git a/app/src/main/res/drawable/classyfabric.png b/app/src/main/res/drawable/classyfabric.png
deleted file mode 100644
index ca3d2679..00000000
Binary files a/app/src/main/res/drawable/classyfabric.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_autorenew_black_36dp.png b/app/src/main/res/drawable/ic_autorenew_black_36dp.png
similarity index 100%
rename from app/src/main/res/drawable-hdpi/ic_autorenew_black_36dp.png
rename to app/src/main/res/drawable/ic_autorenew_black_36dp.png
diff --git a/app/src/main/res/drawable/ic_chatsecure.png b/app/src/main/res/drawable/ic_chatsecure.png
deleted file mode 100644
index aaddd883..00000000
Binary files a/app/src/main/res/drawable/ic_chatsecure.png and /dev/null differ
diff --git a/app/src/main/res/drawable/ic_duckduckgo.png b/app/src/main/res/drawable/ic_duckduckgo.png
deleted file mode 100644
index 696dcd6e..00000000
Binary files a/app/src/main/res/drawable/ic_duckduckgo.png and /dev/null differ
diff --git a/app/src/main/res/drawable/ic_twitter.png b/app/src/main/res/drawable/ic_twitter.png
deleted file mode 100644
index 1e61c0a2..00000000
Binary files a/app/src/main/res/drawable/ic_twitter.png and /dev/null differ
diff --git a/app/src/main/res/drawable/icon_martus.png b/app/src/main/res/drawable/icon_martus.png
deleted file mode 100644
index e72db19c..00000000
Binary files a/app/src/main/res/drawable/icon_martus.png and /dev/null differ
diff --git a/app/src/main/res/drawable/icon_orfox.png b/app/src/main/res/drawable/icon_orfox.png
deleted file mode 100644
index 57ed1f0f..00000000
Binary files a/app/src/main/res/drawable/icon_orfox.png and /dev/null differ
diff --git a/app/src/main/res/drawable/icon_story_maker.png b/app/src/main/res/drawable/icon_story_maker.png
deleted file mode 100644
index 9c54ca56..00000000
Binary files a/app/src/main/res/drawable/icon_story_maker.png and /dev/null differ
diff --git a/app/src/main/res/drawable/tilebg.xml b/app/src/main/res/drawable/tilebg.xml
deleted file mode 100644
index 6f0d2a3d..00000000
--- a/app/src/main/res/drawable/tilebg.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-    android:src="@drawable/classyfabric"
-    android:tileMode="repeat" />
\ No newline at end of file
diff --git a/app/src/main/res/layout-v21/layout_notification_expanded.xml b/app/src/main/res/layout-v21/layout_notification_expanded.xml
deleted file mode 100644
index 71770d02..00000000
--- a/app/src/main/res/layout-v21/layout_notification_expanded.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:internal="http://schemas.android.com/apk/prv/res/android"
-    android:id="@+id/status_bar_latest_event_content"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:background="#545454"
-    >
-    <ImageView android:id="@+id/icon"
-        android:layout_width="@dimen/notification_large_icon_width"
-        android:layout_height="@dimen/notification_large_icon_height"
-        android:scaleType="center"
-        />
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="fill_vertical"
-        android:layout_marginStart="@dimen/notification_large_icon_width"
-        android:minHeight="@dimen/notification_large_icon_height"
-        android:orientation="vertical"
-        android:paddingEnd="8dp"
-        android:paddingTop="2dp"
-        android:paddingBottom="2dp"
-        android:gravity="top"
-        >
-        <LinearLayout
-            android:id="@+id/line1"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:paddingTop="6dp"
-            android:layout_marginStart="8dp"
-            android:orientation="horizontal"
-            >
-            <TextView android:id="@+id/title"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:singleLine="true"
-                android:ellipsize="marquee"
-                android:fadingEdge="horizontal"
-                android:layout_weight="1"
-                android:textStyle="bold"
- 				android:textAppearance="@style/NotificationTitle"
-                 />
-            
-        </LinearLayout>
-        <LinearLayout
-            android:id="@+id/line3"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"       
-            android:layout_marginStart="8dp"                
-            >
-            <TextView android:id="@+id/text"
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:layout_gravity="center"
-                android:singleLine="true"
-                android:ellipsize="marquee"
-                android:fadingEdge="horizontal"
-				android:textAppearance="@style/NotificationTitle"
-                />
-            <TextView android:id="@+id/info"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:layout_weight="0"
-                android:singleLine="true"
-                android:gravity="center"
-                android:paddingStart="8dp"
-				android:textAppearance="@style/NotificationTitle"
-                />
-            <ImageView android:id="@+id/right_icon"
-                android:layout_width="16dp"
-                android:layout_height="16dp"
-                android:layout_gravity="center"
-                android:layout_weight="0"
-                android:layout_marginStart="8dp"
-                android:scaleType="centerInside"
-                android:visibility="gone"
-                />
-            <!-- 
-            <ImageButton
-		    android:id="@+id/_tor_notificationBT"
-		    android:layout_width="24dp"
-		    android:layout_height="24dp"		   
-		    android:src="@drawable/nav_refresh" />
-		     -->
-        </LinearLayout>
-         <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:orientation="horizontal"       
-          	android:background="#999999"         
-          	android:layout_marginTop="3dp"    
-          	android:layout_marginBottom="3dp"    
-          	
-            />
-        <TextView android:id="@+id/text2"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="-2dp"
-            android:layout_marginBottom="-2dp"
-            android:layout_marginStart="8dp"            
-            android:fadingEdge="horizontal"
-            android:textColor="#cdcdcd"
-            />
-    </LinearLayout>
-</FrameLayout>
diff --git a/app/src/main/res/layout/layout_main.xml b/app/src/main/res/layout/layout_main.xml
index 535efa7a..97fb8196 100644
--- a/app/src/main/res/layout/layout_main.xml
+++ b/app/src/main/res/layout/layout_main.xml
@@ -19,12 +19,13 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     >
-    
+        <ScrollView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content">
 <RelativeLayout
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:id="@+id/content_frame"
-
     >
 
 	<FrameLayout
@@ -42,19 +43,19 @@
             android:id="@+id/pulsator"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
+            android:paddingTop="20dp"
             app:pulse_count="4"
             app:pulse_duration="2000"
             app:pulse_repeat="0"
             app:pulse_color="@color/dark_green"
             app:pulse_startFromScratch="false"
             app:pulse_interpolator="Linear">
-		       <org.torproject.android.ui.ImageProgressView
+		       <ImageView
 				android:id="@+id/imgStatus"
 				android:layout_width="match_parent"
 				android:layout_height="225dp"
 				   android:padding="0dp"
 				android:layout_margin="0dp"
-                   android:layout_marginTop="20dp"
 				android:src="@drawable/toroff" />
 
         </pl.bclogic.pulsator4droid.library.PulsatorLayout>
@@ -65,6 +66,7 @@
             android:text="@string/menu_start"
             android:layout_gravity="center"
             android:background="@android:color/transparent"
+            android:layout_marginTop="10dp"
             />
     </FrameLayout>
 
@@ -98,18 +100,19 @@
         android:layout_gravity="center"
         android:orientation="vertical"
         android:layout_width="170dp"
-        android:layout_height="100dp"
+        android:layout_height="50dp"
         android:background="#11CCCCCC"
         android:layout_margin="3dp"
         android:layout_weight="1"
         >
+        <!--
 <TextView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="Select Region"
     android:layout_margin="12dp"
 
-    />
+    />-->
     <Spinner
         android:id="@+id/spinnerCountry"
         android:layout_width="165dp"
@@ -126,7 +129,7 @@
         android:layout_gravity="center"
         android:orientation="vertical"
         android:layout_width="170dp"
-        android:layout_height="100dp"
+        android:layout_height="50dp"
         android:background="#11CCCCCC"
         android:layout_margin="3dp"
         android:layout_weight="1"
@@ -142,6 +145,7 @@
             app:switchPadding="9dp"
 
             />
+        <!--
         <Button
             android:id="@+id/btnApps"
             android:layout_width="wrap_content"
@@ -151,7 +155,7 @@
             android:maxLines="1"
             android:layout_gravity="center"
 
-            />
+            />-->
     </LinearLayout>
 
 </LinearLayout>
@@ -269,11 +273,41 @@
             android:gravity="center_vertical"
             />
     </LinearLayout>
+    <LinearLayout
+        android:id="@+id/row_apps"
+        android:gravity="center_horizontal"
+        android:orientation="vertical"
+        android:layout_width="match_parent"
+        android:layout_height="80dp"
+        android:background="#55CCCCCC"
+        android:layout_margin="3dp"
+        android:layout_weight="1"
+        android:layout_below="@+id/row_bridges"
+        >
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:gravity="center_vertical"
+            android:fontFamily="sans-serif-light"
+            android:text="App Shortcuts"
+            android:layout_margin="3dp"
+            android:lines="1"
+            />
 
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:id="@+id/boxAppShortcuts"
+            android:gravity="center"
+            android:padding="3dp"
+            >
+        </LinearLayout>
+    </LinearLayout>
 
 
 </RelativeLayout>
-
+        </ScrollView>
 
 	    
 	 <LinearLayout
diff --git a/app/src/main/res/layout/layout_notification_expanded.xml b/app/src/main/res/layout/layout_notification_expanded.xml
index 9f72beb1..aab1d6de 100644
--- a/app/src/main/res/layout/layout_notification_expanded.xml
+++ b/app/src/main/res/layout/layout_notification_expanded.xml
@@ -29,10 +29,13 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_gravity="fill_vertical"
+        android:layout_marginStart="@dimen/notification_large_icon_width"
         android:layout_marginLeft="@dimen/notification_large_icon_width"
+
         android:minHeight="@dimen/notification_large_icon_height"
         android:orientation="vertical"
-        android:paddingLeft="8dp"
+        android:paddingEnd="8dp"
+        android:paddingRight="8dp"
         android:paddingTop="2dp"
         android:paddingBottom="2dp"
         android:gravity="top"
@@ -42,6 +45,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:paddingTop="6dp"
+            android:layout_marginStart="8dp"
             android:layout_marginLeft="8dp"
             android:orientation="horizontal"
             >
@@ -53,7 +57,6 @@
                 android:fadingEdge="horizontal"
                 android:layout_weight="1"
                 android:textStyle="bold"
- 				android:textAppearance="@style/NotificationTitle"
                  />
             
         </LinearLayout>
@@ -62,6 +65,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:orientation="horizontal"       
+            android:layout_marginStart="8dp"
             android:layout_marginLeft="8dp"
             >
             <TextView android:id="@+id/text"
@@ -72,7 +76,6 @@
                 android:singleLine="true"
                 android:ellipsize="marquee"
                 android:fadingEdge="horizontal"
-				android:textAppearance="@style/NotificationText"                
                 />
             <TextView android:id="@+id/info"
                 android:layout_width="wrap_content"
@@ -81,40 +84,21 @@
                 android:layout_weight="0"
                 android:singleLine="true"
                 android:gravity="center"
+                android:paddingStart="8dp"
                 android:paddingLeft="8dp"
-				android:textAppearance="@style/NotificationText"
-                />
-            <ImageView android:id="@+id/right_icon"
-                android:layout_width="16dp"
-                android:layout_height="16dp"
-                android:layout_gravity="center"
-                android:layout_weight="0"
-                android:layout_marginLeft="8dp"
-                android:scaleType="centerInside"
-                android:visibility="gone"
                 />
-            <!-- 
             <ImageButton
-		    android:id="@+id/_tor_notificationBT"
-		    android:layout_width="24dp"
-		    android:layout_height="24dp"		   
-		    android:src="@drawable/nav_refresh" />
-		     -->
+                android:id="@+id/action_refresh"
+                android:layout_width="24dp"
+                android:layout_height="24dp"
+                android:src="@drawable/ic_autorenew_black_36dp" />
         </LinearLayout>
-         <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:orientation="horizontal"       
-          	android:background="#999999"         
-          	android:layout_marginTop="3dp"    
-          	android:layout_marginBottom="3dp"    
-          	
-            />
         <TextView android:id="@+id/text2"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_marginTop="-2dp"
             android:layout_marginBottom="-2dp"
+            android:layout_marginStart="8dp"
             android:layout_marginLeft="8dp"
             android:fadingEdge="horizontal"        
             />
diff --git a/app/src/main/res/layout/layout_promo_apps.xml b/app/src/main/res/layout/layout_promo_apps.xml
deleted file mode 100644
index 00c1f6fe..00000000
--- a/app/src/main/res/layout/layout_promo_apps.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent">
-            
-   
-<TableLayout  android:id="@+id/TableLayout01" android:stretchColumns="*" android:layout_height="fill_parent" android:layout_width="wrap_content">
-
-<TableRow android:layout_margin="10dip"   android:id="@+id/TableRow01" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="fill_parent">
-
-
-	<ScrollView android:id="@+id/helpscrollview" 
-		android:orientation="vertical"
-		android:layout_width="fill_parent" 
-		android:layout_height="fill_parent"
-		 android:layout_span="3">    
-
-<LinearLayout
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    android:background="#575757"
-    android:orientation="vertical"
-    android:paddingRight="20dip" >
-
-    <TextView
-        android:id="@+id/WizardTextBody1"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_weight="0.31"
-        android:padding="20dip"
-        android:text="@string/wizard_tips_msg"
-        android:textColor="#ffffff"
-        android:textSize="8pt" >
-    </TextView>
-    
-    <Button
-        android:id="@+id/WizardRootButtonInstallOrweb"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="left"
-        android:layout_marginTop="10px"
-        android:drawableLeft="@drawable/icon_orfox"
-        android:text="@string/wizard_tips_orweb" />
-
-    <Button
-        android:id="@+id/WizardRootButtonInstallGibberbot"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="left"
-        android:layout_marginTop="10px"
-        android:drawableLeft="@drawable/ic_chatsecure"
-        android:text="@string/wizard_tips_gibberbot" />
-
-    
-    <Button
-        android:id="@+id/WizardRootButtonInstallDuckgo"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="left"
-        android:layout_marginTop="10px"
-        android:drawableLeft="@drawable/ic_duckduckgo"
-        android:text="@string/wizard_tips_duckgo" />
-    
-    <Button
-        android:id="@+id/WizardRootButtonInstallTwitter"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="left"
-        android:layout_marginTop="10px"
-        android:drawableLeft="@drawable/ic_twitter"
-        android:text="@string/wizard_tips_twitter" />
-    
-    <Button
-        android:id="@+id/WizardRootButtonInstallStoryMaker"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="left"
-        android:layout_marginTop="10px"
-        android:drawableLeft="@drawable/icon_story_maker"
-        android:text="@string/wizard_tips_story_maker" />
-    
-         <Button
-        android:id="@+id/WizardRootButtonInstallMartus"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="left"
-        android:layout_marginTop="10px"
-        android:drawableLeft="@drawable/icon_martus"
-        android:text="@string/wizard_tips_martus" />
-         
-     <Button
-        android:id="@+id/WizardRootButtonGooglePlay"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="left"
-        android:layout_marginTop="10px"
-        android:drawableLeft="@drawable/ic_play"
-        android:text="@string/wizard_tips_fdroid_org" />
-    
-
-</LinearLayout>
-
-		</ScrollView>
-		
-</TableRow>
-<TableRow android:background="#000000" android:layout_marginTop="10dip" android:paddingTop="10dip" android:id="@+id/TableRow02" android:textColor="#00ff00" android:layout_width="fill_parent" android:layout_height="30px">
-	   <!-- 	<Button android:text="@string/btn_back" android:id="@+id/btnWizard1" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> -->
-    	<Button android:text="@string/btn_okay" android:id="@+id/btnWizard2"  android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>	    
-</TableRow>			
-</TableLayout>
-</LinearLayout>
-
-
diff --git a/app/src/main/res/menu/orbot_apps.xml b/app/src/main/res/menu/orbot_apps.xml
new file mode 100644
index 00000000..12bcbc3c
--- /dev/null
+++ b/app/src/main/res/menu/orbot_apps.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright (C) 2008 Esmertec AG.
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:yourapp="http://schemas.android.com/apk/res-auto"
+    >
+
+ <item android:id="@+id/menu_apps_refresh"
+        android:title=""
+         android:icon="@drawable/ic_autorenew_black_36dp"
+         yourapp:showAsAction="always"
+         />
+
+</menu>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 94b9a303..68ceadeb 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -256,8 +256,8 @@
 
     <string name="permission_manage_tor_label">Manage Tor</string>
     <string name="permission_manage_tor_description">Enable this app to control the Tor service</string>
-    <string name="it_doesn_t_seem_like_you_have_orweb_installed_want_help_with_that_or_should_we_just_open_the_browser_">It doesn\'t seem like you have Orfox installed. Want help with that, or should we just open the browser?</string>
-    <string name="install_apps_">Install apps?</string>
+    <string name="it_doesn_t_seem_like_you_have_orweb_installed_want_help_with_that_or_should_we_just_open_the_browser_">Orbot works best with Orfox Browser. Install now?</string>
+    <string name="install_apps_">Install browser?</string>
     <string name="no_network_connectivity_putting_tor_to_sleep_">No network connectivity. Putting Tor to sleep…</string>
     <string name="network_connectivity_is_good_waking_tor_up_">Network connectivity is good. Waking Tor up…</string>
     <string name="updating_settings_in_tor_service">updating settings in Tor service</string>
@@ -388,4 +388,5 @@
   <string name="pref_connection_padding_summary">Always enables connection padding to defend against some forms of traffic analysis. Default: auto</string>
   <string name="pref_reduced_connection_padding">Reduced connection padding</string>
   <string name="pref_reduced_connection_padding_summary">Closes relay connections sooner and sends less padding packets to reduce data and battery usage</string>
+    <string name="please_enable_vpn">Please activate the VPN mode to enable apps to use Tor</string>
 </resources>
diff --git a/orbotservice/src/main/java/org/torproject/android/service/TorService.java b/orbotservice/src/main/java/org/torproject/android/service/TorService.java
index 077cc702..4898b006 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/TorService.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/TorService.java
@@ -268,15 +268,13 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
                 yesReceive.setAction("Restart");
                 PendingIntent pendingIntentYes = PendingIntent.getBroadcast(this, 12345, yesReceive, PendingIntent.FLAG_UPDATE_CURRENT);
                 mNotifyBuilder.addAction(R.drawable.ic_stat_tor_off, "Restart", pendingIntentYes);
-
-
                 //Maybe intent
+                **/
+
                 Intent maybeReceive = new Intent();
                 maybeReceive.setAction("Identity");
                 PendingIntent pendingIntentMaybe = PendingIntent.getBroadcast(this, 12345, maybeReceive, PendingIntent.FLAG_UPDATE_CURRENT);
                 mNotifyBuilder.addAction(R.drawable.ic_stat_tor_xfer, "New Identity", pendingIntentMaybe);
-                **/
-
             }        
                                 
         }
@@ -344,6 +342,12 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
              expandedView.setTextViewText(R.id.title, getString(R.string.app_name)); 
              
              expandedView.setImageViewResource(R.id.icon, icon);
+
+            Intent intentRefresh = new Intent();
+            intentRefresh.setAction("Identity");
+            PendingIntent pendingIntentMaybe = PendingIntent.getBroadcast(this, 12345, intentRefresh, PendingIntent.FLAG_UPDATE_CURRENT);
+            expandedView.setOnClickFillInIntent(R.id.action_refresh,intentRefresh);
+
             mNotification.bigContentView = expandedView;
         }
         
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/Prefs.java b/orbotservice/src/main/java/org/torproject/android/service/util/Prefs.java
index 5bfaf7c4..bd5c3d6f 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/Prefs.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/Prefs.java
@@ -109,7 +109,7 @@ public class Prefs {
     }
 
     public static boolean useVpn() {
-        return prefs.getBoolean(PREF_USE_VPN, false);
+        return prefs.getBoolean(PREF_USE_VPN, true);
     }
 
     public static void putUseVpn(boolean value) {
diff --git a/orbotservice/src/main/res/drawable-hdpi/ic_autorenew_black_36dp.png b/orbotservice/src/main/res/drawable-hdpi/ic_autorenew_black_36dp.png
new file mode 100644
index 00000000..6ae7ac8a
Binary files /dev/null and b/orbotservice/src/main/res/drawable-hdpi/ic_autorenew_black_36dp.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_action_settings.png b/orbotservice/src/main/res/drawable-mdpi/drawable-mdpi/ic_action_settings.png
similarity index 100%
rename from app/src/main/res/drawable-mdpi/ic_action_settings.png
rename to orbotservice/src/main/res/drawable-mdpi/drawable-mdpi/ic_action_settings.png
diff --git a/app/src/main/res/drawable-mdpi/ic_autorenew_black_36dp.png b/orbotservice/src/main/res/drawable-mdpi/drawable-mdpi/ic_autorenew_black_36dp.png
similarity index 100%
rename from app/src/main/res/drawable-mdpi/ic_autorenew_black_36dp.png
rename to orbotservice/src/main/res/drawable-mdpi/drawable-mdpi/ic_autorenew_black_36dp.png
diff --git a/app/src/main/res/drawable-mdpi/ic_filter_none_black_36dp.png b/orbotservice/src/main/res/drawable-mdpi/drawable-mdpi/ic_filter_none_black_36dp.png
similarity index 100%
rename from app/src/main/res/drawable-mdpi/ic_filter_none_black_36dp.png
rename to orbotservice/src/main/res/drawable-mdpi/drawable-mdpi/ic_filter_none_black_36dp.png
diff --git a/app/src/main/res/drawable-mdpi/ic_launcher.png b/orbotservice/src/main/res/drawable-mdpi/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from app/src/main/res/drawable-mdpi/ic_launcher.png
rename to orbotservice/src/main/res/drawable-mdpi/drawable-mdpi/ic_launcher.png
diff --git a/app/src/main/res/drawable-mdpi/ic_playlist_add_check_black_36dp.png b/orbotservice/src/main/res/drawable-mdpi/drawable-mdpi/ic_playlist_add_check_black_36dp.png
similarity index 100%
rename from app/src/main/res/drawable-mdpi/ic_playlist_add_check_black_36dp.png
rename to orbotservice/src/main/res/drawable-mdpi/drawable-mdpi/ic_playlist_add_check_black_36dp.png
diff --git a/app/src/main/res/drawable-mdpi/ic_stat_notifyerr.png b/orbotservice/src/main/res/drawable-mdpi/drawable-mdpi/ic_stat_notifyerr.png
similarity index 100%
rename from app/src/main/res/drawable-mdpi/ic_stat_notifyerr.png
rename to orbotservice/src/main/res/drawable-mdpi/drawable-mdpi/ic_stat_notifyerr.png
diff --git a/app/src/main/res/drawable-mdpi/ic_stat_tor.png b/orbotservice/src/main/res/drawable-mdpi/drawable-mdpi/ic_stat_tor.png
similarity index 100%
rename from app/src/main/res/drawable-mdpi/ic_stat_tor.png
rename to orbotservice/src/main/res/drawable-mdpi/drawable-mdpi/ic_stat_tor.png
diff --git a/app/src/main/res/drawable-mdpi/ic_stat_tor_xfer.png b/orbotservice/src/main/res/drawable-mdpi/drawable-mdpi/ic_stat_tor_xfer.png
similarity index 100%
rename from app/src/main/res/drawable-mdpi/ic_stat_tor_xfer.png
rename to orbotservice/src/main/res/drawable-mdpi/drawable-mdpi/ic_stat_tor_xfer.png
diff --git a/app/src/main/res/drawable-mdpi/inverse.png b/orbotservice/src/main/res/drawable-mdpi/drawable-mdpi/inverse.png
similarity index 100%
rename from app/src/main/res/drawable-mdpi/inverse.png
rename to orbotservice/src/main/res/drawable-mdpi/drawable-mdpi/inverse.png
diff --git a/app/src/main/res/drawable-xxhdpi/ic_autorenew_black_36dp.png b/orbotservice/src/main/res/drawable-xxhdpi/drawable-xxhdpi/ic_autorenew_black_36dp.png
similarity index 100%
rename from app/src/main/res/drawable-xxhdpi/ic_autorenew_black_36dp.png
rename to orbotservice/src/main/res/drawable-xxhdpi/drawable-xxhdpi/ic_autorenew_black_36dp.png
diff --git a/app/src/main/res/drawable-xxhdpi/ic_filter_none_black_36dp.png b/orbotservice/src/main/res/drawable-xxhdpi/drawable-xxhdpi/ic_filter_none_black_36dp.png
similarity index 100%
rename from app/src/main/res/drawable-xxhdpi/ic_filter_none_black_36dp.png
rename to orbotservice/src/main/res/drawable-xxhdpi/drawable-xxhdpi/ic_filter_none_black_36dp.png
diff --git a/app/src/main/res/drawable-xxhdpi/ic_launcher.png b/orbotservice/src/main/res/drawable-xxhdpi/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from app/src/main/res/drawable-xxhdpi/ic_launcher.png
rename to orbotservice/src/main/res/drawable-xxhdpi/drawable-xxhdpi/ic_launcher.png
diff --git a/app/src/main/res/drawable-xxhdpi/ic_playlist_add_check_black_36dp.png b/orbotservice/src/main/res/drawable-xxhdpi/drawable-xxhdpi/ic_playlist_add_check_black_36dp.png
similarity index 100%
rename from app/src/main/res/drawable-xxhdpi/ic_playlist_add_check_black_36dp.png
rename to orbotservice/src/main/res/drawable-xxhdpi/drawable-xxhdpi/ic_playlist_add_check_black_36dp.png
diff --git a/app/src/main/res/drawable-xxhdpi/ic_stat_tor.png b/orbotservice/src/main/res/drawable-xxhdpi/drawable-xxhdpi/ic_stat_tor.png
similarity index 100%
rename from app/src/main/res/drawable-xxhdpi/ic_stat_tor.png
rename to orbotservice/src/main/res/drawable-xxhdpi/drawable-xxhdpi/ic_stat_tor.png
diff --git a/app/src/main/res/drawable-xxhdpi/ic_stat_tor_xfer.png b/orbotservice/src/main/res/drawable-xxhdpi/drawable-xxhdpi/ic_stat_tor_xfer.png
similarity index 100%
rename from app/src/main/res/drawable-xxhdpi/ic_stat_tor_xfer.png
rename to orbotservice/src/main/res/drawable-xxhdpi/drawable-xxhdpi/ic_stat_tor_xfer.png
diff --git a/app/src/main/res/drawable-xhdpi/inverse.png b/orbotservice/src/main/res/drawable-xxhdpi/drawable-xxhdpi/inverse.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/inverse.png
rename to orbotservice/src/main/res/drawable-xxhdpi/drawable-xxhdpi/inverse.png
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_autorenew_black_36dp.png b/orbotservice/src/main/res/drawable-xxxhdpi/drawable-xxxhdpi/ic_autorenew_black_36dp.png
similarity index 100%
rename from app/src/main/res/drawable-xxxhdpi/ic_autorenew_black_36dp.png
rename to orbotservice/src/main/res/drawable-xxxhdpi/drawable-xxxhdpi/ic_autorenew_black_36dp.png
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_filter_none_black_36dp.png b/orbotservice/src/main/res/drawable-xxxhdpi/drawable-xxxhdpi/ic_filter_none_black_36dp.png
similarity index 100%
rename from app/src/main/res/drawable-xxxhdpi/ic_filter_none_black_36dp.png
rename to orbotservice/src/main/res/drawable-xxxhdpi/drawable-xxxhdpi/ic_filter_none_black_36dp.png
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_launcher.png b/orbotservice/src/main/res/drawable-xxxhdpi/drawable-xxxhdpi/ic_launcher.png
similarity index 100%
rename from app/src/main/res/drawable-xxxhdpi/ic_launcher.png
rename to orbotservice/src/main/res/drawable-xxxhdpi/drawable-xxxhdpi/ic_launcher.png
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_playlist_add_check_black_36dp.png b/orbotservice/src/main/res/drawable-xxxhdpi/drawable-xxxhdpi/ic_playlist_add_check_black_36dp.png
similarity index 100%
rename from app/src/main/res/drawable-xxxhdpi/ic_playlist_add_check_black_36dp.png
rename to orbotservice/src/main/res/drawable-xxxhdpi/drawable-xxxhdpi/ic_playlist_add_check_black_36dp.png
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png b/orbotservice/src/main/res/drawable-xxxhdpi/drawable-xxxhdpi/ic_stat_tor.png
similarity index 100%
rename from app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png
rename to orbotservice/src/main/res/drawable-xxxhdpi/drawable-xxxhdpi/ic_stat_tor.png
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_stat_tor_xfer.png b/orbotservice/src/main/res/drawable-xxxhdpi/drawable-xxxhdpi/ic_stat_tor_xfer.png
similarity index 100%
rename from app/src/main/res/drawable-xxxhdpi/ic_stat_tor_xfer.png
rename to orbotservice/src/main/res/drawable-xxxhdpi/drawable-xxxhdpi/ic_stat_tor_xfer.png
diff --git a/app/src/main/res/drawable-xxhdpi/inverse.png b/orbotservice/src/main/res/drawable-xxxhdpi/drawable-xxxhdpi/inverse.png
similarity index 100%
rename from app/src/main/res/drawable-xxhdpi/inverse.png
rename to orbotservice/src/main/res/drawable-xxxhdpi/drawable-xxxhdpi/inverse.png
diff --git a/orbotservice/src/main/res/layout/layout_notification_expanded.xml b/orbotservice/src/main/res/layout/layout_notification_expanded.xml
index 395998b1..aab1d6de 100644
--- a/orbotservice/src/main/res/layout/layout_notification_expanded.xml
+++ b/orbotservice/src/main/res/layout/layout_notification_expanded.xml
@@ -87,32 +87,12 @@
                 android:paddingStart="8dp"
                 android:paddingLeft="8dp"
                 />
-            <ImageView android:id="@+id/right_icon"
-                android:layout_width="16dp"
-                android:layout_height="16dp"
-                android:layout_gravity="center"
-                android:layout_weight="0"
-                android:layout_marginLeft="8dp"
-                android:scaleType="centerInside"
-                android:visibility="gone"
-                />
-            <!-- 
             <ImageButton
-		    android:id="@+id/_tor_notificationBT"
-		    android:layout_width="24dp"
-		    android:layout_height="24dp"		   
-		    android:src="@drawable/nav_refresh" />
-		     -->
+                android:id="@+id/action_refresh"
+                android:layout_width="24dp"
+                android:layout_height="24dp"
+                android:src="@drawable/ic_autorenew_black_36dp" />
         </LinearLayout>
-         <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:orientation="horizontal"       
-          	android:background="#999999"         
-          	android:layout_marginTop="3dp"    
-          	android:layout_marginBottom="3dp"    
-          	
-            />
         <TextView android:id="@+id/text2"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"





More information about the tor-commits mailing list