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() {
@Override
public void run() {
running.set(false);
export();
stopForeground(true);
running.set(false);
stopSelf();
}
}).start();

View File

@ -1,7 +1,10 @@
package eu.siacs.conversations.ui;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.preference.Preference;
import android.util.AttributeSet;
@ -22,6 +25,10 @@ public class ExportLogsPreference extends Preference {
}
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);
getContext().startService(startIntent);
super.onClick();

View File

@ -3,8 +3,10 @@ package eu.siacs.conversations.ui;
import android.app.AlertDialog;
import android.app.FragmentManager;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.preference.ListPreference;
@ -25,10 +27,13 @@ import de.duenndns.ssl.MemorizingTrustManager;
import eu.siacs.conversations.Config;
import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.services.ExportLogsService;
import eu.siacs.conversations.xmpp.XmppConnection;
public class SettingsActivity extends XmppActivity implements
OnSharedPreferenceChangeListener {
public static final int REQUEST_WRITE_LOGS = 0xbf8701;
private SettingsFragment mSettingsFragment;
@Override
@ -130,6 +135,15 @@ public class SettingsActivity extends XmppActivity implements
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
@ -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) {
runOnUiThread(new Runnable() {
@Override