Request WRITE_EXTERNAL_STORAGE for ExportLogsPreference in >= M

This commit is contained in:
fiaxh 2016-02-23 23:58:42 +01:00
parent a88c2d48c0
commit e1a2f248af
2 changed files with 33 additions and 0 deletions

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