Add dialog to accept privacy policy before sending crash report

Add link to privacy policy in about fragment
Replace some onClickListeners with Lamdas
This commit is contained in:
TobiGr 2018-05-24 17:10:28 +02:00 committed by Christian Schabesberger
parent 73a71e0f5c
commit c78cc6f2fd
6 changed files with 72 additions and 36 deletions

View File

@ -20,6 +20,9 @@
package org.schabi.newpipe; package org.schabi.newpipe;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;

View File

@ -128,47 +128,31 @@ public class AboutActivity extends AppCompatActivity {
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_about, container, false); View rootView = inflater.inflate(R.layout.fragment_about, container, false);
Context context = this.getContext();
TextView version = rootView.findViewById(R.id.app_version); TextView version = rootView.findViewById(R.id.app_version);
version.setText(BuildConfig.VERSION_NAME); version.setText(BuildConfig.VERSION_NAME);
View githubLink = rootView.findViewById(R.id.github_link); View githubLink = rootView.findViewById(R.id.github_link);
githubLink.setOnClickListener(new OnGithubLinkClickListener()); githubLink.setOnClickListener(nv -> openWebsite(context.getString(R.string.github_url), context));
View donationLink = rootView.findViewById(R.id.donation_link); View donationLink = rootView.findViewById(R.id.donation_link);
donationLink.setOnClickListener(new OnDonationLinkClickListener()); donationLink.setOnClickListener(v -> openWebsite(context.getString(R.string.donation_url), context));
View websiteLink = rootView.findViewById(R.id.website_link); View websiteLink = rootView.findViewById(R.id.website_link);
websiteLink.setOnClickListener(new OnWebsiteLinkClickListener()); websiteLink.setOnClickListener(nv -> openWebsite(context.getString(R.string.website_url), context));
View privacyPolicyLink = rootView.findViewById(R.id.privacy_policy_link);
privacyPolicyLink.setOnClickListener(v -> openWebsite(context.getString(R.string.privacy_policy_url), context));
return rootView; return rootView;
} }
private static class OnGithubLinkClickListener implements View.OnClickListener { private void openWebsite(String url, Context context) {
@Override Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
public void onClick(final View view) { context.startActivity(intent);
final Context context = view.getContext();
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(context.getString(R.string.github_url)));
context.startActivity(intent);
}
} }
private static class OnDonationLinkClickListener implements View.OnClickListener {
@Override
public void onClick(final View view) {
final Context context = view.getContext();
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(context.getString(R.string.donation_url)));
context.startActivity(intent);
}
}
private static class OnWebsiteLinkClickListener implements View.OnClickListener {
@Override
public void onClick(final View view) {
final Context context = view.getContext();
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(context.getString(R.string.website_url)));
context.startActivity(intent);
}
}
} }

View File

@ -42,7 +42,7 @@ public class LicenseFragmentHelper extends AsyncTask<Object, Void, Integer> {
} }
@Override @Override
protected void onPostExecute(Integer result){ protected void onPostExecute(Integer result) {
Activity activity = getActivity(); Activity activity = getActivity();
if (activity == null) { if (activity == null) {
return; return;

View File

@ -1,7 +1,9 @@
package org.schabi.newpipe.report; package org.schabi.newpipe.report;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.graphics.Color; import android.graphics.Color;
import android.net.Uri; import android.net.Uri;
@ -33,10 +35,8 @@ import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import org.schabi.newpipe.ActivityCommunicator; import org.schabi.newpipe.ActivityCommunicator;
import org.schabi.newpipe.BuildConfig; import org.schabi.newpipe.BuildConfig;
import org.schabi.newpipe.Downloader;
import org.schabi.newpipe.MainActivity; import org.schabi.newpipe.MainActivity;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.utils.Parser;
import org.schabi.newpipe.util.ThemeHelper; import org.schabi.newpipe.util.ThemeHelper;
import java.io.PrintWriter; import java.io.PrintWriter;
@ -44,9 +44,9 @@ import java.io.StringWriter;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.Vector; import java.util.Vector;
import java.util.concurrent.atomic.AtomicBoolean;
/* /*
* Created by Christian Schabesberger on 24.10.15. * Created by Christian Schabesberger on 24.10.15.
@ -210,12 +210,31 @@ public class ErrorActivity extends AppCompatActivity {
currentTimeStamp = getCurrentTimeStamp(); currentTimeStamp = getCurrentTimeStamp();
reportButton.setOnClickListener((View v) -> { reportButton.setOnClickListener((View v) -> {
Intent i = new Intent(Intent.ACTION_SENDTO); Context context = this;
i.setData(Uri.parse("mailto:" + ERROR_EMAIL_ADDRESS)) new AlertDialog.Builder(context)
.putExtra(Intent.EXTRA_SUBJECT, ERROR_EMAIL_SUBJECT) .setIcon(android.R.drawable.ic_dialog_alert)
.putExtra(Intent.EXTRA_TEXT, buildJson()); .setTitle(R.string.privacy_policy_title)
.setMessage(R.string.start_accept_privacy_policy)
.setCancelable(false)
.setNeutralButton(R.string.read_privacy_policy, (dialog, which) -> {
Intent webIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse(context.getString(R.string.privacy_policy_url))
);
context.startActivity(webIntent);
})
.setPositiveButton(R.string.accept, (dialog, which) -> {
Intent i = new Intent(Intent.ACTION_SENDTO);
i.setData(Uri.parse("mailto:" + ERROR_EMAIL_ADDRESS))
.putExtra(Intent.EXTRA_SUBJECT, ERROR_EMAIL_SUBJECT)
.putExtra(Intent.EXTRA_TEXT, buildJson());
startActivity(Intent.createChooser(i, "Send Email"));
})
.setNegativeButton(R.string.decline, (dialog, which) -> {
// do nothing
})
.show();
startActivity(Intent.createChooser(i, "Send Email"));
}); });
// normal bugreport // normal bugreport

View File

@ -111,5 +111,26 @@
android:layout_gravity="end" android:layout_gravity="end"
android:text="@string/open_in_browser" /> android:text="@string/open_in_browser" />
<TextView
android:id="@+id/title_privacy_policy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:text="@string/privacy_policy_title"
android:textAppearance="@android:style/TextAppearance.Medium" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/privacy_policy_encouragement" />
<Button
android:id="@+id/privacy_policy_link"
style="@style/Base.Widget.AppCompat.Button.Borderless"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:text="@string/read_privacy_policy" />
</LinearLayout> </LinearLayout>
</android.support.v4.widget.NestedScrollView> </android.support.v4.widget.NestedScrollView>

View File

@ -328,6 +328,10 @@
<string name="website_title">Website</string> <string name="website_title">Website</string>
<string name="website_encouragement">Visit the NewPipe Website for more info and news.</string> <string name="website_encouragement">Visit the NewPipe Website for more info and news.</string>
<string name="website_url" translatable="false">https://newpipe.schabi.org/</string> <string name="website_url" translatable="false">https://newpipe.schabi.org/</string>
<string name="privacy_policy_title">NewPipe\'s Privacy Policy</string>
<string name="privacy_policy_encouragement">The NewPipe project takes your privacy very seriously. Therefore, the app does not collect any data without your consent.\nNewPipe\'s privacy policy explains in detail what data is sent and stored when you send a crash report.</string>
<string name="privacy_policy_url" translatable="false">https://newpipe.schabi.org/legal/privacy/</string>
<string name="read_privacy_policy">Read privacy policy</string>
<string name="app_license_title">NewPipe\'s License</string> <string name="app_license_title">NewPipe\'s License</string>
<string name="app_license">NewPipe is copyleft libre software: You can use, study share and improve it at your will. Specifically you can redistribute and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.</string> <string name="app_license">NewPipe is copyleft libre software: You can use, study share and improve it at your will. Specifically you can redistribute and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.</string>
<string name="read_full_license">Read license</string> <string name="read_full_license">Read license</string>
@ -478,4 +482,9 @@
<string name="unhook_checkbox">Unhook (may cause distortion)</string> <string name="unhook_checkbox">Unhook (may cause distortion)</string>
<string name="playback_nightcore">Nightcore</string> <string name="playback_nightcore">Nightcore</string>
<string name="playback_default">Default</string> <string name="playback_default">Default</string>
<!-- Start dialogs -->
<string name="start_accept_privacy_policy">In order to comply with the European General Data Protection Regulation (GDPR), we herby draw your attention to NewPipe\'s privacy policy. Please read it carefully.\nYou must accept it to send us the bug report.</string>
<string name="accept">Accept</string>
<string name="decline">Decline</string>
</resources> </resources>