[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [orbot/master] implement app configuration screens
commit 285d77e9e337e2ea5a53421411b5f989a3768fda
Author: n8fr8 <nathan@xxxxxxxxxxxxxxxxxxxx>
Date: Wed Sep 4 11:45:39 2019 -0400
implement app configuration screens
---
app-mini/build.gradle | 6 +-
app-mini/src/main/AndroidManifest.xml | 92 +++++++++--------
.../torproject/android/mini/MiniMainActivity.java | 64 +++++++-----
.../android/mini/ui/AppConfigActivity.java | 102 +++++++++++++++++++
.../android/mini/ui/AppManagerActivity.java | 21 +---
.../mini/ui/onboarding/OnboardingActivity.java | 8 +-
.../src/main/res/layout/activity_app_config.xml | 26 +++++
.../src/main/res/layout/content_app_config.xml | 111 +++++++++++++++++++++
app-mini/src/main/res/menu/app_config.xml | 32 ++++++
app-mini/src/main/res/values/strings.xml | 15 ++-
app-mini/src/main/res/values/styles.xml | 5 +
11 files changed, 380 insertions(+), 102 deletions(-)
diff --git a/app-mini/build.gradle b/app-mini/build.gradle
index 0ffb405d..ea8a8d22 100644
--- a/app-mini/build.gradle
+++ b/app-mini/build.gradle
@@ -11,7 +11,7 @@ def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {
- signingConfigs {
+ signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
@@ -100,11 +100,12 @@ dependencies {
implementation 'com.github.apl-devs:appintro:v4.2.2'
implementation 'com.android.support:palette-v7:28.0.0'
implementation 'com.github.javiersantos:AppUpdater:2.7'
+ implementation 'com.android.support.constraint:constraint-layout:1.1.3'
androidTestImplementation "tools.fastlane:screengrab:1.2.0"
}
// Map for the version code that gives each ABI a value.
-ext.abiCodes = ['armeabi-v7a':'1', 'arm64-v8a':'2', 'mips':'3', 'x86':'4', 'x86_64':'5']
+ext.abiCodes = ['armeabi-v7a': '1', 'arm64-v8a': '2', 'mips': '3', 'x86': '4', 'x86_64': '5']
import com.android.build.OutputFile
@@ -119,4 +120,3 @@ android.applicationVariants.all { variant ->
}
}
}
-
diff --git a/app-mini/src/main/AndroidManifest.xml b/app-mini/src/main/AndroidManifest.xml
index 18b8a6f2..23db19d7 100644
--- a/app-mini/src/main/AndroidManifest.xml
+++ b/app-mini/src/main/AndroidManifest.xml
@@ -4,16 +4,6 @@
package="org.torproject.android.mini"
android:installLocation="internalOnly">
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
- <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
- <!-- Some Chromebooks don't support touch. Although not essential,
- it's a good idea to explicitly include this declaration. -->
- <uses-feature android:name="android.hardware.touchscreen"
- android:required="false" />
-
<application
android:name=".OrbotMiniApp"
android:allowBackup="false"
@@ -24,8 +14,10 @@
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/DefaultTheme"
- tools:replace="android:allowBackup"
- >
+ tools:replace="android:allowBackup">
+ <activity
+ android:name=".ui.AppConfigActivity"
+ android:label="@string/title_activity_app_config"></activity>
<activity
android:name=".MiniMainActivity"
android:excludeFromRecents="false"
@@ -43,11 +35,10 @@
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="bridge" />
- </intent-filter>-->
-
- </activity>
+ </intent-filter>
+ -->
- <!-- This is for ensuring the background service still runs when/if the app is swiped away -->
+ </activity> <!-- This is for ensuring the background service still runs when/if the app is swiped away -->
<activity
android:name="org.torproject.android.service.util.DummyActivity"
android:allowTaskReparenting="true"
@@ -71,20 +62,18 @@
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light" />
- <service
- android:name="org.torproject.android.service.TorService"
- android:enabled="true"
- android:permission="android.permission.BIND_VPN_SERVICE"
- android:stopWithTask="false"></service>
- <service
- android:name="org.torproject.android.service.vpn.TorVpnService"
- android:enabled="true"
- android:permission="android.permission.BIND_VPN_SERVICE">
- <intent-filter>
- <action android:name="android.net.VpnService" />
- </intent-filter>
- </service>
+ <activity android:name=".ui.onboarding.OnboardingActivity" />
+ <activity android:name=".ui.onboarding.BridgeWizardActivity" />
+ <provider
+ android:name="android.support.v4.content.FileProvider"
+ android:authorities="org.torproject.android.mini.ui.hiddenservices.storage"
+ android:exported="false"
+ android:grantUriPermissions="true">
+ <meta-data
+ android:name="android.support.FILE_PROVIDER_PATHS"
+ android:resource="@xml/hidden_services_paths" />
+ </provider>
<receiver
android:name="org.torproject.android.service.StartTorReceiver"
android:exported="true">
@@ -92,6 +81,7 @@
<action android:name="org.torproject.android.intent.action.START" />
</intent-filter>
</receiver>
+
<receiver
android:name=".OnBootReceiver"
android:enabled="true"
@@ -113,25 +103,33 @@
</intent-filter>
</receiver>
+ <service
+ android:name="org.torproject.android.service.TorService"
+ android:enabled="true"
+ android:permission="android.permission.BIND_VPN_SERVICE"
+ android:stopWithTask="false" />
+ <service
+ android:name="org.torproject.android.service.vpn.TorVpnService"
+ android:enabled="true"
+ android:permission="android.permission.BIND_VPN_SERVICE">
+ <intent-filter>
+ <action android:name="android.net.VpnService" />
+ </intent-filter>
+ </service>
+ </application>
+ <uses-feature
+ android:name="android.hardware.touchscreen"
+ android:required="false" />
+ <!--
+ Some Chromebooks don't support touch. Although not essential,
+ it's a good idea to explicitly include this declaration.
+ -->
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+ <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
+ <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
+ <uses-permission android:name="android.permission.INTERNET" />
-
- <provider
- android:name="android.support.v4.content.FileProvider"
- android:authorities="org.torproject.android.mini.ui.hiddenservices.storage"
- android:exported="false"
- android:grantUriPermissions="true">
- <meta-data
- android:name="android.support.FILE_PROVIDER_PATHS"
- android:resource="@xml/hidden_services_paths" />
- </provider>
-
-
-
- <activity android:name=".ui.onboarding.OnboardingActivity"/>
- <activity android:name=".ui.onboarding.BridgeWizardActivity"/>
-
-
- </application>
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
</manifest>
\ No newline at end of file
diff --git a/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java b/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java
index c495a6a5..e6f33ba0 100644
--- a/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java
+++ b/app-mini/src/main/java/org/torproject/android/mini/MiniMainActivity.java
@@ -60,6 +60,7 @@ import org.json.JSONArray;
import org.torproject.android.mini.settings.Languages;
import org.torproject.android.mini.settings.LocaleHelper;
import org.torproject.android.mini.settings.SettingsPreferences;
+import org.torproject.android.mini.ui.AppConfigActivity;
import org.torproject.android.mini.ui.AppManagerActivity;
import org.torproject.android.mini.ui.Rotate3dAnimation;
import org.torproject.android.mini.ui.onboarding.OnboardingActivity;
@@ -631,7 +632,7 @@ public class MiniMainActivity extends AppCompatActivity
torStatus == TorServiceConstants.STATUS_ON) {
refreshVPNApps();
- String newPkgId = data.getStringExtra("package");
+ String newPkgId = data.getStringExtra(Intent.EXTRA_PACKAGE_NAME);
//add new entry
}
@@ -1070,12 +1071,12 @@ public class MiniMainActivity extends AppCompatActivity
if (i < getItemCount()-1) {
- String pkgId = pkgIds.get(i);
+ final String pkgId = pkgIds.get(i);
ApplicationInfo aInfo = null;
try {
aInfo = getPackageManager().getApplicationInfo(pkgId, 0);
- TorifiedApp app = getApp(aInfo);
+ TorifiedApp app = getApp(MiniMainActivity.this, aInfo);
avh.tv.setText(app.getName());
avh.iv.setImageDrawable(app.getIcon());
@@ -1096,6 +1097,7 @@ public class MiniMainActivity extends AppCompatActivity
@Override
public void onClick(View v) {
+ showAppConfig(pkgId);
}
});
@@ -1118,49 +1120,57 @@ public class MiniMainActivity extends AppCompatActivity
}
}
- private TorifiedApp getApp (ApplicationInfo aInfo)
- {
- TorifiedApp app = new TorifiedApp();
+ }
+ public static TorifiedApp getApp (Context context, ApplicationInfo aInfo)
+ {
+ TorifiedApp app = new TorifiedApp();
+ PackageManager pMgr = context.getPackageManager();
- try
- {
- app.setName(getPackageManager().getApplicationLabel(aInfo).toString());
- }
- catch (Exception e)
- {
- return null;
- }
+ try
+ {
+ app.setName(pMgr.getApplicationLabel(aInfo).toString());
+ }
+ catch (Exception e)
+ {
+ return null;
+ }
- app.setEnabled(aInfo.enabled);
- app.setUid(aInfo.uid);
- app.setUsername(getPackageManager().getNameForUid(app.getUid()));
- app.setProcname(aInfo.processName);
- app.setPackageName(aInfo.packageName);
- app.setTorified(true);
+ app.setEnabled(aInfo.enabled);
+ app.setUid(aInfo.uid);
+ app.setUsername(pMgr.getNameForUid(app.getUid()));
+ app.setProcname(aInfo.processName);
+ app.setPackageName(aInfo.packageName);
- try {
- app.setIcon(getPackageManager().getApplicationIcon(app.getPackageName()));
+ app.setTorified(true);
+ try {
+ app.setIcon(pMgr.getApplicationIcon(app.getPackageName()));
- } catch (NameNotFoundException e) {
- e.printStackTrace();
- }
- return app;
- }
+ } catch (NameNotFoundException e) {
+ e.printStackTrace();
+ }
+ return app;
}
+
public void showAppPicker ()
{
startActivityForResult(new Intent(MiniMainActivity.this, AppManagerActivity.class), REQUEST_VPN_APPS_SELECT);
}
+ public void showAppConfig (String pkgId)
+ {
+ Intent data = new Intent(this, AppConfigActivity.class);
+ data.putExtra(Intent.EXTRA_PACKAGE_NAME,pkgId);
+ startActivity(data);
+ }
public static Bitmap drawableToBitmap (Drawable drawable) {
diff --git a/app-mini/src/main/java/org/torproject/android/mini/ui/AppConfigActivity.java b/app-mini/src/main/java/org/torproject/android/mini/ui/AppConfigActivity.java
new file mode 100644
index 00000000..f4dcc6c6
--- /dev/null
+++ b/app-mini/src/main/java/org/torproject/android/mini/ui/AppConfigActivity.java
@@ -0,0 +1,102 @@
+package org.torproject.android.mini.ui;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.pm.ApplicationInfo;
+import android.os.Bundle;
+import android.support.design.widget.FloatingActionButton;
+import android.support.design.widget.Snackbar;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+
+import org.torproject.android.mini.MiniMainActivity;
+import org.torproject.android.mini.R;
+import org.torproject.android.service.util.TorServiceUtils;
+import org.torproject.android.service.vpn.TorifiedApp;
+
+import static org.torproject.android.mini.MiniMainActivity.getApp;
+import static org.torproject.android.service.vpn.VpnPrefs.PREFS_KEY_TORIFIED;
+
+public class AppConfigActivity extends AppCompatActivity {
+
+ TorifiedApp mApp;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_app_config);
+ Toolbar toolbar = findViewById(R.id.toolbar);
+ setSupportActionBar(toolbar);
+
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+
+ String pkgId = getIntent().getStringExtra(Intent.EXTRA_PACKAGE_NAME);
+
+ ApplicationInfo aInfo = null;
+ try {
+ aInfo = getPackageManager().getApplicationInfo(pkgId, 0);
+ mApp = getApp(this, aInfo);
+
+ getSupportActionBar().setIcon(mApp.getIcon());
+
+ setTitle(mApp.getName());
+ }
+ catch (Exception e){}
+
+ }
+
+
+ private void removeApp ()
+ {
+ mApp.setTorified(false);
+
+ SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
+
+ String tordAppString = prefs.getString(PREFS_KEY_TORIFIED, "");
+
+ tordAppString = tordAppString.replace(mApp.getPackageName()+"|","");
+
+ SharedPreferences.Editor edit = prefs.edit();
+ edit.putString(PREFS_KEY_TORIFIED, tordAppString);
+ edit.commit();
+
+ Intent response = new Intent();
+ setResult(RESULT_OK,response);
+
+ finish();
+ }
+
+ /*
+ * 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.app_config, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ if (item.getItemId() == android.R.id.home) {
+ finish();
+ return true;
+ }
+ else if (item.getItemId() == R.id.menu_remove_app) {
+ removeApp();
+ }
+
+ return super.onOptionsItemSelected(item);
+ }
+
+
+
+
+}
diff --git a/app-mini/src/main/java/org/torproject/android/mini/ui/AppManagerActivity.java b/app-mini/src/main/java/org/torproject/android/mini/ui/AppManagerActivity.java
index 30a43779..ea66d7f2 100644
--- a/app-mini/src/main/java/org/torproject/android/mini/ui/AppManagerActivity.java
+++ b/app-mini/src/main/java/org/torproject/android/mini/ui/AppManagerActivity.java
@@ -126,15 +126,6 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
if (mApps == null)
mApps = getApps(prefs);
- /**
- Collections.sort(mApps,new Comparator<TorifiedApp>() {
- public int compare(TorifiedApp o1, TorifiedApp o2) {
- if (o1.isTorified() == o2.isTorified())
- return o1.getName().compareToIgnoreCase(o2.getName());
- if (o1.isTorified()) return -1;
- return 1;
- }
- });**/
final LayoutInflater inflater = getLayoutInflater();
@@ -177,16 +168,6 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
entry.text.setText(app.getName());
}
- if (app.isTorified())
- {
- convertView.setBackgroundColor(getResources().getColor(R.color.dark_purple));
-
- }
- else
- {
- convertView.setBackgroundColor(getResources().getColor(android.R.color.transparent));
-
- }
return convertView;
}
@@ -327,7 +308,7 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
Intent data = new Intent();
- data.putExtra("package",app.getPackageName());
+ data.putExtra(Intent.EXTRA_PACKAGE_NAME,app.getPackageName());
setResult(RESULT_OK,data);
saveAppSettings();
diff --git a/app-mini/src/main/java/org/torproject/android/mini/ui/onboarding/OnboardingActivity.java b/app-mini/src/main/java/org/torproject/android/mini/ui/onboarding/OnboardingActivity.java
index 1c1b9927..f6531a7d 100644
--- a/app-mini/src/main/java/org/torproject/android/mini/ui/onboarding/OnboardingActivity.java
+++ b/app-mini/src/main/java/org/torproject/android/mini/ui/onboarding/OnboardingActivity.java
@@ -19,13 +19,13 @@ public class OnboardingActivity extends AppIntro {
// Instead of fragments, you can also use our default slide
// Just set a title, description, background and image. AppIntro will do the rest.
CustomSlideBigText welcome = CustomSlideBigText.newInstance(R.layout.custom_slide_big_text);
- welcome.setTitle("The power of tor made simple for your life");
- welcome.setSubTitle("orbot mini");
+ welcome.setTitle(getString(R.string.mini_onboarding_1));
+ welcome.setSubTitle(getString(R.string.app_name));
addSlide(welcome);
CustomSlideBigText intro2 = CustomSlideBigText.newInstance(R.layout.custom_slide_big_text);
- intro2.setTitle("unblock any app with a few taps");
- intro2.setSubTitle("so easy");
+ intro2.setTitle(getString(R.string.mini_onboarding_2));
+ intro2.setSubTitle(getString(R.string.mini_onboarding_2_title));
addSlide(intro2);
// OPTIONAL METHODS
diff --git a/app-mini/src/main/res/layout/activity_app_config.xml b/app-mini/src/main/res/layout/activity_app_config.xml
new file mode 100644
index 00000000..accb290b
--- /dev/null
+++ b/app-mini/src/main/res/layout/activity_app_config.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context=".ui.AppConfigActivity">
+
+ <android.support.design.widget.AppBarLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:theme="@style/DefaultTheme.AppBarOverlay">
+
+ <android.support.v7.widget.Toolbar
+ android:id="@+id/toolbar"
+ android:layout_width="match_parent"
+ android:layout_height="?attr/actionBarSize"
+ android:background="@color/dark_green"
+ app:popupTheme="@style/DefaultTheme.PopupOverlay" />
+
+ </android.support.design.widget.AppBarLayout>
+
+
+ <include layout="@layout/content_app_config" />
+
+</android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app-mini/src/main/res/layout/content_app_config.xml b/app-mini/src/main/res/layout/content_app_config.xml
new file mode 100644
index 00000000..8e7b727e
--- /dev/null
+++ b/app-mini/src/main/res/layout/content_app_config.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ app:layout_behavior="@string/appbar_scrolling_view_behavior"
+ tools:context=".ui.AppConfigActivity"
+ android:orientation="vertical"
+ tools:showIn="@layout/activity_app_config"
+ android:padding="20dp"
+ >
+
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/title_boost_your_privacy"
+ android:textStyle="bold"
+ android:textSize="20dp"
+ android:id="@+id/privacy_title"
+ />
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/send_your_app_traffic_over_tor"
+ android:textSize="16dp"
+ android:layout_below="@+id/privacy_title"
+ />
+
+ <Switch
+ android:layout_alignParentEnd="true"
+ android:layout_alignParentRight="true"
+
+ android:layout_toRightOf="@+id/privacy_title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
+
+ </RelativeLayout>
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="20dp"
+ >
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/turn_off_apps"
+ android:textStyle="bold"
+ android:textSize="20dp"
+ android:id="@+id/off_apps_title"
+ />
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/stop_apps_from_using_the_network"
+ android:textSize="16dp"
+ android:layout_below="@+id/off_apps_title"
+ />
+ <Switch
+ android:layout_alignParentEnd="true"
+ android:layout_alignParentRight="true"
+
+ android:layout_toRightOf="@+id/off_apps_title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
+
+ </RelativeLayout>
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="20dp"
+ >
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/wifi_only"
+ android:textStyle="bold"
+ android:textSize="20dp"
+ android:id="@+id/wifi_title"
+ />
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/keep_your_apps_from_using_mobile_data"
+ android:textSize="16dp"
+ android:layout_below="@+id/wifi_title"
+ />
+
+ <Switch
+ android:layout_alignParentEnd="true"
+ android:layout_alignParentRight="true"
+
+ android:layout_toRightOf="@+id/wifi_title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
+
+
+ </RelativeLayout>
+
+
+
+</LinearLayout>
\ No newline at end of file
diff --git a/app-mini/src/main/res/menu/app_config.xml b/app-mini/src/main/res/menu/app_config.xml
new file mode 100644
index 00000000..d0a75569
--- /dev/null
+++ b/app-mini/src/main/res/menu/app_config.xml
@@ -0,0 +1,32 @@
+<?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_remove_app"
+ android:title="@string/remove"
+ yourapp:showAsAction="never"
+ />
+
+
+
+</menu>
diff --git a/app-mini/src/main/res/values/strings.xml b/app-mini/src/main/res/values/strings.xml
index 42bc1674..c7ae3edd 100644
--- a/app-mini/src/main/res/values/strings.xml
+++ b/app-mini/src/main/res/values/strings.xml
@@ -124,7 +124,7 @@
<string name="newnym">You\'ve switched to a new Tor identity!</string>
<string name="pref_open_proxy_on_all_interfaces_title">Open Proxy on All Interfaces</string>
- <string name="pref_open_proxy_on_all_interfaces_summary">Allow Wi-Fi peers, tethered devices and anyone else who can connect to your IP, to access Tor</string>
+ <string name="pref_open_proxy_on_all_interfaces_summary">Allow Wi-Fi peers, tethered devices and anyone else who can connect to your IP, to access Tor</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>
@@ -255,4 +255,17 @@
<string name="app_services">App services</string>
<string name="default_socks_http">SOCKS: - HTTP: -</string>
<string name="refresh_apps">Refresh Apps</string>
+
+ <!-- Orbot Mini Strings -->
+ <string name="mini_onboarding_1">The power of tor made mini to fit your life</string>
+ <string name="mini_onboarding_2">unblock any app with a few taps</string>
+ <string name="mini_onboarding_2_title">so easy!</string>
+ <string name="title_activity_app_config">AppConfigActivity</string>
+ <string name="title_boost_your_privacy">Boost Your Privacy</string>
+ <string name="send_your_app_traffic_over_tor">Send app data over Tor</string>
+ <string name="turn_off_apps">Turn off app data</string>
+ <string name="stop_apps_from_using_the_network">Stop app from using the network</string>
+ <string name="wifi_only">Wifi only</string>
+ <string name="keep_your_apps_from_using_mobile_data">Only allow connection over wifi</string>
+ <string name="remove">Remove</string>
</resources>
diff --git a/app-mini/src/main/res/values/styles.xml b/app-mini/src/main/res/values/styles.xml
index b2e69a53..428c097c 100644
--- a/app-mini/src/main/res/values/styles.xml
+++ b/app-mini/src/main/res/values/styles.xml
@@ -4,4 +4,9 @@
<style name="DefaultTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="DefaultTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
+
+ <style name="DefaultTheme.NoActionBar">
+ <item name="windowActionBar">false</item>
+ <item name="windowNoTitle">true</item>
+ </style>
</resources>
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits