Merge pull request #1721 from fiaxh/export_logs_storage_permission

Request WRITE_EXTERNAL_STORAGE for ExportLogsPreference in >= M
This commit is contained in:
Daniel Gultsch 2016-02-27 11:25:56 +01:00
commit 3cf21e2d37
3 changed files with 34 additions and 1 deletions

View file

@ -45,9 +45,9 @@ public class ExportLogsService extends Service {
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
running.set(false);
export(); export();
stopForeground(true); stopForeground(true);
running.set(false);
stopSelf(); stopSelf();
} }
}).start(); }).start();

View file

@ -1,7 +1,10 @@
package eu.siacs.conversations.ui; package eu.siacs.conversations.ui;
import android.Manifest;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.preference.Preference; import android.preference.Preference;
import android.util.AttributeSet; import android.util.AttributeSet;
@ -22,6 +25,10 @@ public class ExportLogsPreference extends Preference {
} }
protected void onClick() { protected void onClick() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
&& getContext().checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
return;
}
final Intent startIntent = new Intent(getContext(), ExportLogsService.class); final Intent startIntent = new Intent(getContext(), ExportLogsService.class);
getContext().startService(startIntent); getContext().startService(startIntent);
super.onClick(); super.onClick();

View file

@ -3,8 +3,10 @@ package eu.siacs.conversations.ui;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.FragmentManager; import android.app.FragmentManager;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.pm.PackageManager;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.preference.ListPreference; import android.preference.ListPreference;
@ -25,10 +27,13 @@ import de.duenndns.ssl.MemorizingTrustManager;
import eu.siacs.conversations.Config; import eu.siacs.conversations.Config;
import eu.siacs.conversations.R; import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.services.ExportLogsService;
import eu.siacs.conversations.xmpp.XmppConnection; import eu.siacs.conversations.xmpp.XmppConnection;
public class SettingsActivity extends XmppActivity implements public class SettingsActivity extends XmppActivity implements
OnSharedPreferenceChangeListener { OnSharedPreferenceChangeListener {
public static final int REQUEST_WRITE_LOGS = 0xbf8701;
private SettingsFragment mSettingsFragment; private SettingsFragment mSettingsFragment;
@Override @Override
@ -130,6 +135,15 @@ public class SettingsActivity extends XmppActivity implements
return true; return true;
} }
}); });
final Preference exportLogsPreference = mSettingsFragment.findPreference("export_logs");
exportLogsPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
hasStoragePermission(REQUEST_WRITE_LOGS);
return true;
}
});
} }
@Override @Override
@ -179,6 +193,18 @@ public class SettingsActivity extends XmppActivity implements
} }
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (grantResults.length > 0)
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (requestCode == REQUEST_WRITE_LOGS) {
getApplicationContext().startService(new Intent(getApplicationContext(), ExportLogsService.class));
}
} else {
Toast.makeText(this, R.string.no_storage_permission, Toast.LENGTH_SHORT).show();
}
}
private void displayToast(final String msg) { private void displayToast(final String msg) {
runOnUiThread(new Runnable() { runOnUiThread(new Runnable() {
@Override @Override