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