From e603b4f60ec3297eac81c725c6552f941f1aabab Mon Sep 17 00:00:00 2001
From: Torsten Grote <t@grobox.de>
Date: Mon, 4 Jan 2016 17:08:59 -0200
Subject: [PATCH] Implemented Sign Out as a first PanicKit Response

This closes #204
---
 briar-android/AndroidManifest.xml             |  20 +++++++++
 briar-android/build.gradle                    |  21 +++++++++
 .../res/layout/activity_panic_preferences.xml |  13 ++++++
 briar-android/res/values-v14/styles.xml       |   6 +++
 briar-android/res/values/color.xml            |   4 ++
 briar-android/res/values/strings.xml          |  15 ++++++-
 briar-android/res/values/styles.xml           |  19 +++++++--
 briar-android/res/xml/panic_preferences.xml   |  11 +++++
 .../briarproject/android/BriarActivity.java   |  21 +++++++--
 .../android/SettingsActivity.java             |  28 ++++++++++++
 .../android/SplashScreenActivity.java         |   4 ++
 .../android/panic/ExitActivity.java           |  40 ++++++++++++++++++
 .../panic/PanicPreferencesActivity.java       |  33 +++++++++++++++
 .../panic/PanicPreferencesFragment.java       |  14 ++++++
 .../android/panic/PanicResponderActivity.java |  37 ++++++++++++++++
 briar-core/libs/gradle-witness.jar            | Bin 0 -> 20436 bytes
 build.gradle                                  |   3 +-
 17 files changed, 281 insertions(+), 8 deletions(-)
 create mode 100644 briar-android/res/layout/activity_panic_preferences.xml
 create mode 100644 briar-android/res/xml/panic_preferences.xml
 create mode 100644 briar-android/src/org/briarproject/android/panic/ExitActivity.java
 create mode 100644 briar-android/src/org/briarproject/android/panic/PanicPreferencesActivity.java
 create mode 100644 briar-android/src/org/briarproject/android/panic/PanicPreferencesFragment.java
 create mode 100644 briar-android/src/org/briarproject/android/panic/PanicResponderActivity.java
 create mode 100644 briar-core/libs/gradle-witness.jar

diff --git a/briar-android/AndroidManifest.xml b/briar-android/AndroidManifest.xml
index 476229541d..ac262a3c20 100644
--- a/briar-android/AndroidManifest.xml
+++ b/briar-android/AndroidManifest.xml
@@ -7,6 +7,9 @@
 	<uses-sdk
 		android:minSdkVersion="9"
 		android:targetSdkVersion="22"
+
+		xmlns:tools="http://schemas.android.com/tools"
+		tools:overrideLibrary="android.support.v14.preference"
 	/>
 
 	<uses-feature android:name="android.hardware.bluetooth" />
@@ -188,5 +191,22 @@
 			android:name=".android.StartupFailureActivity"
 			android:label="@string/startup_failed_activity_title" >
 		</activity>
+		<activity
+			android:name=".android.panic.PanicPreferencesActivity"
+			android:label="@string/panic_setting" >
+		</activity>
+		<activity
+			android:name=".android.panic.PanicResponderActivity"
+			android:noHistory="true"
+			android:theme="@android:style/Theme.NoDisplay">
+			<!-- this can never have launchMode singleTask or singleInstance! -->
+			<intent-filter>
+				<action android:name="info.guardianproject.panic.action.TRIGGER" />
+				<category android:name="android.intent.category.DEFAULT" />
+			</intent-filter>
+		</activity>
+		<activity
+			android:name=".android.panic.ExitActivity"
+			android:theme="@android:style/Theme.NoDisplay" />
 	</application>
 </manifest>
diff --git a/briar-android/build.gradle b/briar-android/build.gradle
index 756b2da587..4c3835102e 100644
--- a/briar-android/build.gradle
+++ b/briar-android/build.gradle
@@ -1,4 +1,9 @@
 apply plugin: 'com.android.application'
+apply plugin: 'witness'
+
+repositories {
+    jcenter()
+}
 
 dependencies {
     compile fileTree(dir: '../briar-api/libs', include: '*.jar')
@@ -8,7 +13,23 @@ dependencies {
     compile fileTree(dir: 'libs', include: '*.jar')
     compile "com.android.support:support-v4:23.1.1"
     compile "com.android.support:appcompat-v7:23.1.1"
+    compile "com.android.support:preference-v7:23.1.1"
+    compile "com.android.support:preference-v14:23.1.1"
     compile "com.android.support:design:23.1.1"
+    compile "info.guardianproject.panic:panic:0.5"
+}
+
+dependencyVerification {
+    verify = [
+            'com.android.support:support-v4:5c7dceb6c824089fe80f502e5206264048ef8bffa4e8ddeab180b81723e79b7f',
+            'com.android.support:appcompat-v7:0a8762214382b7e8d4b989b4ac10b5c846b957d767ccb7bccbc6be5afa885a82',
+            'com.android.support:preference-v7:4b6dabaa4400cbed885c7edc885aa6372468f48d628cc0d4a04b9ccd128ed324',
+            'com.android.support:preference-v14:a69906c2b29b315ac3c1fdf01537a7557660a65b8ea1cf891baa8665e1197459',
+            'com.android.support:design:41a9cd75ca78f25df5f573db7cedf8bb66beae00c330943923ba9f3e2051736d',
+            'com.android.support:support-annotations:f347a35b9748a4103b39a6714a77e2100f488d623fd6268e259c177b200e9d82',
+            'com.android.support:recyclerview-v7:7606373da0931a1e62588335465a0e390cd676c98117edab29220317495faefd',
+            'info.guardianproject.panic:panic:a7ed9439826db2e9901649892cf9afbe76f00991b768d8f4c26332d7c9406cb2',
+    ]
 }
 
 android {
diff --git a/briar-android/res/layout/activity_panic_preferences.xml b/briar-android/res/layout/activity_panic_preferences.xml
new file mode 100644
index 0000000000..78aaeb88da
--- /dev/null
+++ b/briar-android/res/layout/activity_panic_preferences.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout
+	xmlns:android="http://schemas.android.com/apk/res/android"
+	android:orientation="vertical"
+	android:layout_width="match_parent"
+	android:layout_height="match_parent">
+
+	<fragment
+		android:id="@+id/fragment"
+		android:layout_width="match_parent"
+		android:layout_height="match_parent"
+		android:name="org.briarproject.android.panic.PanicPreferencesFragment"/>
+</FrameLayout>
\ No newline at end of file
diff --git a/briar-android/res/values-v14/styles.xml b/briar-android/res/values-v14/styles.xml
index 898a9e4e00..ff39392ac4 100644
--- a/briar-android/res/values-v14/styles.xml
+++ b/briar-android/res/values-v14/styles.xml
@@ -1,5 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
+
+    <style name="BriarTheme" parent="BriarBaseTheme">
+        <!-- This fixes a UI bug in the support preference library -->
+        <item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
+    </style>
+
     <style name="BriarButton.Default">
         <item name="android:textAllCaps">true</item>
     </style>
diff --git a/briar-android/res/values/color.xml b/briar-android/res/values/color.xml
index 28cddbd4f2..fc0ea39777 100644
--- a/briar-android/res/values/color.xml
+++ b/briar-android/res/values/color.xml
@@ -16,10 +16,14 @@
 
     <color name="briar_primary">#2D3E50</color>
     <color name="briar_primary_dark">#0f1720</color>
+    <color name="briar_accent">#2D3E50</color>
 
     <color name="briar_text_link">#75ab0d</color>
     <color name="briar_green_light">#95d220</color>
     <color name="briar_green_dark">#75ab0d</color>
     <color name="briar_text_primary">#333333</color>
     <color name="briar_text_primary_inverse">#ffffff</color>
+
+    <!-- this is needed as preference_category_material layout uses this color as the text color -->
+    <color name="preference_fallback_accent_color">@color/briar_accent</color>
 </resources>
\ No newline at end of file
diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml
index 4934dceabe..25aa173bc4 100644
--- a/briar-android/res/values/strings.xml
+++ b/briar-android/res/values/strings.xml
@@ -106,6 +106,9 @@
     <string name="tor_wifi_setting">Connect via Tor</string>
     <string name="tor_wifi_setting_enabled">Only when using Wi-Fi</string>
     <string name="tor_wifi_setting_disabled">When using Wi-Fi or mobile data</string>
+    <string name="panic_setting">Panic Button Setup</string>
+    <string name="panic_setting_title">Panic Button</string>
+    <string name="panic_setting_hint">Configure how Briar will react when you use a Panic Button app</string>
     <string name="notification_settings_title">NOTIFICATIONS</string>
     <string name="notify_private_messages_setting">Show alerts for private messages</string>
     <string name="notify_forum_posts_setting">Show alerts for forum posts</string>
@@ -114,6 +117,13 @@
     <string name="notify_sound_setting_default">Default ringtone</string>
     <string name="notify_sound_setting_disabled">None</string>
     <string name="choose_ringtone_title">Choose ringtone</string>
+    <string name="panic_app_setting_title">Accept from App</string>
+    <string name="panic_app_setting_summary">No app set, don\'t do destructive actions</string>
+    <string name="panic_app_setting_none">None</string>
+    <string name="lock_setting_title">Lock Briar</string>
+    <string name="lock_setting_summary">Signs you out and require password to access data</string>
+    <string name="purge_setting_title">Delete Data</string>
+    <string name="purge_setting_summary">Caution: This irrevocably deletes your contacts and all other data</string>
     <string name="step">Step %1$d/%2$d</string>
     <string name="online">Online</string>
     <string name="offline">Offline</string>
@@ -122,11 +132,14 @@
     <string name="transport_tor">Internet</string>
     <string name="transport_bt">Bluetooth</string>
     <string name="transport_lan">Wi-Fi</string>
+    <string name="no_data">No data</string>
+    <string name="unknown_app">an unknown App</string>
 
     <!-- Dialogs -->
     <string name="dialog_title_lost_password">Lost password</string>
     <string name="dialog_message_lost_password">Password recovery is not possible. Do you wish to delete your user, all contacts, and re-register ?</string>
     <string name="dialog_title_delete_contact">Confirm Contact Deletion</string>
     <string name="dialog_message_delete_contact">Are you sure that you want to remove this contact and all messages exchanged with this contact?</string>
-    <string name="no_data">No data</string>
+    <string name="dialog_title_connect_panic_app">Confirm Panic App</string>
+    <string name="dialog_message_connect_panic_app">Are you sure that you want to allow %1$s to trigger destructive panic actions?</string>
 </resources>
diff --git a/briar-android/res/values/styles.xml b/briar-android/res/values/styles.xml
index 8a706c0a22..7a869c9051 100644
--- a/briar-android/res/values/styles.xml
+++ b/briar-android/res/values/styles.xml
@@ -1,17 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <style name="BriarTheme" parent="Theme.AppCompat.Light.DarkActionBar">
+    <style name="BriarBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
         <item name="actionBarStyle">@style/BriarActionBar</item>
         <item name="colorPrimary">@color/briar_primary</item>
         <item name="colorPrimaryDark">@color/briar_primary_dark</item>
-        <item name="colorAccent">@color/briar_primary</item>
+        <item name="colorAccent">@color/briar_accent</item>
         <item name="android:textColorPrimary">@color/briar_text_primary</item>
         <item name="android:textColorPrimaryInverse">@color/briar_text_primary_inverse</item>
         <item name="android:textColorSecondary">@color/briar_text_primary</item>
         <item name="android:textColorLink">@color/briar_text_link</item>
+    </style>
 
-        <!-- The rest of your attributes -->
+    <style name="BriarTheme" parent="BriarBaseTheme">
+        <item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
+        <item name="android:listSeparatorTextViewStyle">@style/BriarTheme.ListSeparatorTextView</item>
     </style>
 
     <style name="BriarActionBar" parent="Base.Widget.AppCompat.Light.ActionBar.Solid">
@@ -43,4 +46,14 @@
         <item name="android:layout_width">match_parent</item>
         <item name="android:layout_height">1px</item>
     </style>
+
+    <!-- This fixes a UI bug in the support preference library -->
+    <style name="BriarTheme.ListSeparatorTextView">
+        <item name="android:textSize">14sp</item>
+        <item name="android:textStyle">bold</item>
+        <item name="android:textColor">@color/briar_accent</item>
+        <item name="android:paddingTop">16dp</item>
+        <item name="android:layout_marginBottom">16dp</item>
+    </style>
+
 </resources>
\ No newline at end of file
diff --git a/briar-android/res/xml/panic_preferences.xml b/briar-android/res/xml/panic_preferences.xml
new file mode 100644
index 0000000000..3b40f0e3df
--- /dev/null
+++ b/briar-android/res/xml/panic_preferences.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<PreferenceScreen
+	xmlns:android="http://schemas.android.com/apk/res/android">
+
+	<CheckBoxPreference
+		android:key="pref_key_lock"
+		android:title="@string/lock_setting_title"
+		android:summary="@string/lock_setting_summary"
+		android:defaultValue="true"/>
+
+</PreferenceScreen>
\ No newline at end of file
diff --git a/briar-android/src/org/briarproject/android/BriarActivity.java b/briar-android/src/org/briarproject/android/BriarActivity.java
index 5442839acb..fcc4ab604d 100644
--- a/briar-android/src/org/briarproject/android/BriarActivity.java
+++ b/briar-android/src/org/briarproject/android/BriarActivity.java
@@ -2,11 +2,13 @@ package org.briarproject.android;
 
 import android.annotation.SuppressLint;
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.IBinder;
 
 import org.briarproject.android.BriarService.BriarBinder;
 import org.briarproject.android.BriarService.BriarServiceConnection;
+import org.briarproject.android.panic.ExitActivity;
 import org.briarproject.api.db.DatabaseConfig;
 import org.briarproject.api.db.DatabaseExecutor;
 import org.briarproject.api.lifecycle.LifecycleManager;
@@ -78,7 +80,7 @@ public class BriarActivity extends BaseActivity {
 		if (bound) unbindService(serviceConnection);
 	}
 
-	protected void signOut() {
+	protected void signOut(final boolean removeFromRecentApps) {
 		new Thread() {
 			@Override
 			public void run() {
@@ -95,15 +97,28 @@ public class BriarActivity extends BaseActivity {
 					LOG.warning("Interrupted while waiting for service");
 					Thread.currentThread().interrupt();
 				}
-				finishAndExit();
+
+				if(removeFromRecentApps){
+					ExitActivity.exitAndRemoveFromRecentApps(BriarActivity.this);
+				} else {
+					finishAndExit();
+				}
 			}
 		}.start();
 	}
 
+	protected void signOut() {
+		signOut(false);
+	}
+
 	private void finishAndExit() {
 		runOnUiThread(new Runnable() {
 			public void run() {
-				finish();
+				if (Build.VERSION.SDK_INT >= 21) {
+					finishAndRemoveTask();
+				} else {
+					finish();
+				}
 				LOG.info("Exiting");
 				System.exit(0);
 			}
diff --git a/briar-android/src/org/briarproject/android/SettingsActivity.java b/briar-android/src/org/briarproject/android/SettingsActivity.java
index e2f2d233a0..7c48355a99 100644
--- a/briar-android/src/org/briarproject/android/SettingsActivity.java
+++ b/briar-android/src/org/briarproject/android/SettingsActivity.java
@@ -16,6 +16,7 @@ import android.widget.ScrollView;
 import android.widget.TextView;
 
 import org.briarproject.R;
+import org.briarproject.android.panic.PanicPreferencesActivity;
 import org.briarproject.android.util.FixedVerticalSpace;
 import org.briarproject.android.util.HorizontalBorder;
 import org.briarproject.android.util.LayoutUtils;
@@ -68,6 +69,7 @@ OnClickListener {
 	private CheckBox notifyPrivateMessages = null, notifyForumPosts = null;
 	private CheckBox notifyVibration = null;
 	private TextView torOverWifi = null, torOverWifiHint = null;
+	private TextView panicSettings = null, panicSettingsHint = null;
 	private TextView notifySound = null, notifySoundHint = null;
 	private ListLoadingProgressBar progress = null;
 	private ImageButton testingButton = null;
@@ -141,6 +143,30 @@ OnClickListener {
 		torOverWifiHint.setOnClickListener(this);
 		settings.addView(torOverWifiHint);
 
+		TextView panicTitle = new TextView(this);
+		panicTitle.setPadding(pad, 0, pad, 0);
+		panicTitle.setTypeface(DEFAULT_BOLD);
+		panicTitle.setTextColor(titleText);
+		panicTitle.setText(R.string.panic_setting_title);
+		settings.addView(panicTitle);
+
+		underline = new HorizontalBorder(this);
+		underline.setBackgroundColor(titleUnderline);
+		settings.addView(underline);
+
+		panicSettings = new TextView(this);
+		panicSettings.setPadding(pad, pad, pad, 0);
+		panicSettings.setTextSize(18);
+		panicSettings.setText(R.string.panic_setting);
+		panicSettings.setOnClickListener(this);
+		settings.addView(panicSettings);
+
+		panicSettingsHint = new TextView(this);
+		panicSettingsHint.setText(R.string.panic_setting_hint);
+		panicSettingsHint.setPadding(pad, 0, pad, pad);
+		panicSettingsHint.setOnClickListener(this);
+		settings.addView(panicSettingsHint);
+
 		TextView notificationsTitle = new TextView(this);
 		notificationsTitle.setPadding(pad, 0, pad, 0);
 		notificationsTitle.setTypeface(DEFAULT_BOLD);
@@ -317,6 +343,8 @@ OnClickListener {
 			s.putBoolean("notifyPrivateMessages",
 					notifyPrivateMessages.isChecked());
 			storeSettings(s);
+		} else if (view == panicSettings || view == panicSettingsHint) {
+			startActivity(new Intent(this, PanicPreferencesActivity.class));
 		} else if (view == notifyForumPosts) {
 			Settings s = new Settings();
 			s.putBoolean("notifyForumPosts", notifyForumPosts.isChecked());
diff --git a/briar-android/src/org/briarproject/android/SplashScreenActivity.java b/briar-android/src/org/briarproject/android/SplashScreenActivity.java
index 60712a5839..e74056341b 100644
--- a/briar-android/src/org/briarproject/android/SplashScreenActivity.java
+++ b/briar-android/src/org/briarproject/android/SplashScreenActivity.java
@@ -7,6 +7,7 @@ import android.os.Bundle;
 import android.os.StrictMode;
 import android.os.StrictMode.ThreadPolicy;
 import android.os.StrictMode.VmPolicy;
+import android.support.v7.preference.PreferenceManager;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 
@@ -64,6 +65,9 @@ public class SplashScreenActivity extends RoboSplashActivity {
 		logo.setImageResource(R.drawable.briar_logo_large);
 		layout.addView(logo);
 
+		PreferenceManager
+				.setDefaultValues(this, R.xml.panic_preferences, false);
+
 		setContentView(layout);
 	}
 
diff --git a/briar-android/src/org/briarproject/android/panic/ExitActivity.java b/briar-android/src/org/briarproject/android/panic/ExitActivity.java
new file mode 100644
index 0000000000..68bef09ec2
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/panic/ExitActivity.java
@@ -0,0 +1,40 @@
+package org.briarproject.android.panic;
+
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+
+import org.briarproject.android.BaseActivity;
+
+public class ExitActivity extends BaseActivity {
+
+	@Override
+	public void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+
+		if (Build.VERSION.SDK_INT >= 21) {
+			finishAndRemoveTask();
+		} else {
+			finish();
+		}
+
+		System.exit(0);
+	}
+
+	public static void exitAndRemoveFromRecentApps(final BaseActivity activity) {
+		activity.runOnUiThread(new Runnable() {
+			@Override
+			public void run() {
+				Intent intent = new Intent(activity, ExitActivity.class);
+
+				intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+						| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
+						| Intent.FLAG_ACTIVITY_CLEAR_TASK
+						| Intent.FLAG_ACTIVITY_NO_ANIMATION);
+
+				activity.startActivity(intent);
+			}
+		});
+
+	}
+}
\ No newline at end of file
diff --git a/briar-android/src/org/briarproject/android/panic/PanicPreferencesActivity.java b/briar-android/src/org/briarproject/android/panic/PanicPreferencesActivity.java
new file mode 100644
index 0000000000..13556f838d
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/panic/PanicPreferencesActivity.java
@@ -0,0 +1,33 @@
+package org.briarproject.android.panic;
+
+import android.os.Bundle;
+import android.support.v7.app.ActionBar;
+import android.view.MenuItem;
+
+import org.briarproject.R;
+import org.briarproject.android.BriarActivity;
+
+public class PanicPreferencesActivity extends BriarActivity {
+
+	@Override
+	public void onCreate(Bundle bundle) {
+		super.onCreate(bundle);
+
+		ActionBar actionBar = getSupportActionBar();
+		if (actionBar != null) {
+			actionBar.setHomeButtonEnabled(true);
+			actionBar.setDisplayHomeAsUpEnabled(true);
+		}
+
+		setContentView(R.layout.activity_panic_preferences);
+	}
+
+	public boolean onOptionsItemSelected(MenuItem item) {
+		if (item.getItemId() == android.R.id.home) {
+			onBackPressed();
+			return true;
+		}
+		return false;
+	}
+
+}
diff --git a/briar-android/src/org/briarproject/android/panic/PanicPreferencesFragment.java b/briar-android/src/org/briarproject/android/panic/PanicPreferencesFragment.java
new file mode 100644
index 0000000000..7fd096213c
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/panic/PanicPreferencesFragment.java
@@ -0,0 +1,14 @@
+package org.briarproject.android.panic;
+
+import android.os.Bundle;
+import android.support.v7.preference.PreferenceFragmentCompat;
+
+import org.briarproject.R;
+
+public class PanicPreferencesFragment extends PreferenceFragmentCompat {
+
+	@Override
+	public void onCreatePreferences(Bundle bundle, String s) {
+		addPreferencesFromResource(R.xml.panic_preferences);
+	}
+}
diff --git a/briar-android/src/org/briarproject/android/panic/PanicResponderActivity.java b/briar-android/src/org/briarproject/android/panic/PanicResponderActivity.java
new file mode 100644
index 0000000000..df758e295e
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/panic/PanicResponderActivity.java
@@ -0,0 +1,37 @@
+package org.briarproject.android.panic;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Build;
+import android.os.Bundle;
+import android.support.v7.preference.PreferenceManager;
+
+import org.briarproject.android.BriarActivity;
+
+import java.util.logging.Logger;
+
+public class PanicResponderActivity extends BriarActivity {
+
+	private static final Logger LOG =
+			Logger.getLogger(PanicResponderActivity.class.getName());
+
+	@Override
+	public void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+
+		SharedPreferences sharedPref = PreferenceManager
+				.getDefaultSharedPreferences(this);
+
+		Intent intent = getIntent();
+		if (intent != null && sharedPref.getBoolean("pref_key_lock", true)) {
+			LOG.info("Signing out...");
+			signOut(true);
+		}
+
+		if (Build.VERSION.SDK_INT >= 21) {
+			finishAndRemoveTask();
+		} else {
+			finish();
+		}
+	}
+}
\ No newline at end of file
diff --git a/briar-core/libs/gradle-witness.jar b/briar-core/libs/gradle-witness.jar
new file mode 100644
index 0000000000000000000000000000000000000000..561041d3661895d48bd396b342d9c043ecd741ae
GIT binary patch
literal 20436
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
OSn7eTVFr-R!tx*AKLw-!

literal 0
HcmV?d00001

diff --git a/build.gradle b/build.gradle
index ec8b633f83..98a1101ba9 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,5 +5,6 @@ buildscript {
     }
     dependencies {
         classpath 'com.android.tools.build:gradle:1.5.0'
+        classpath files('briar-core/libs/gradle-witness.jar')
     }
-}
+}
\ No newline at end of file
-- 
GitLab