diff options
author | Andrew Comminos <andrew@comminos.com> | 2016-01-13 08:49:49 +0300 |
---|---|---|
committer | Andrew Comminos <andrew@comminos.com> | 2016-01-13 08:49:49 +0300 |
commit | 2f909a3eaf5afae8aec345452ecbcfcd0efda7d8 (patch) | |
tree | a978d4711a3b64762c8b8feba6decc26262d5329 | |
parent | b9733194863ec55f70d4260783dc3b914014ee26 (diff) |
Work on certificate generation.issue-128/certificate-database
7 files changed, 104 insertions, 25 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 973f381..215f1ec 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -104,6 +104,7 @@ <activity android:name=".preference.CertificateSelectActivity" /> <activity android:name=".preference.CertificateImportActivity" /> <activity android:name=".preference.CertificateExportActivity" /> + <activity android:name=".preference.CertificateGenerateActivity" /> </application> </manifest> diff --git a/app/src/main/java/com/morlunk/mumbleclient/app/PlumbleActivity.java b/app/src/main/java/com/morlunk/mumbleclient/app/PlumbleActivity.java index ac120ea..938bd4f 100644 --- a/app/src/main/java/com/morlunk/mumbleclient/app/PlumbleActivity.java +++ b/app/src/main/java/com/morlunk/mumbleclient/app/PlumbleActivity.java @@ -61,6 +61,7 @@ import com.morlunk.mumbleclient.Settings; import com.morlunk.mumbleclient.channel.AccessTokenFragment; import com.morlunk.mumbleclient.channel.ChannelFragment; import com.morlunk.mumbleclient.channel.ServerInfoFragment; +import com.morlunk.mumbleclient.db.DatabaseCertificate; import com.morlunk.mumbleclient.db.DatabaseProvider; import com.morlunk.mumbleclient.db.PlumbleDatabase; import com.morlunk.mumbleclient.db.PlumbleSQLiteDatabase; @@ -449,25 +450,22 @@ public class PlumbleActivity extends ActionBarActivity implements ListView.OnIte * Will do nothing if it isn't the first launch. */ private void showSetupWizard() { - // Prompt the user to generate a certificate, FIXME - // FIXME(acomminos) -// if(mSettings.isUsingCertificate()) return; + // Prompt the user to generate a certificate. + if(mSettings.isUsingCertificate()) return; AlertDialog.Builder adb = new AlertDialog.Builder(this); adb.setTitle(R.string.first_run_generate_certificate_title); adb.setMessage(R.string.first_run_generate_certificate); adb.setPositiveButton(R.string.generate, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - /* PlumbleCertificateGenerateTask generateTask = new PlumbleCertificateGenerateTask(PlumbleActivity.this) { @Override - protected void onPostExecute(File result) { + protected void onPostExecute(DatabaseCertificate result) { super.onPostExecute(result); - if(result != null) mSettings.setCertificatePath(result.getAbsolutePath()); + if(result != null) mSettings.setDefaultCertificateId(result.getId()); } }; generateTask.execute(); - */ } }); adb.show(); diff --git a/app/src/main/java/com/morlunk/mumbleclient/preference/CertificateGenerateActivity.java b/app/src/main/java/com/morlunk/mumbleclient/preference/CertificateGenerateActivity.java new file mode 100644 index 0000000..30d15a0 --- /dev/null +++ b/app/src/main/java/com/morlunk/mumbleclient/preference/CertificateGenerateActivity.java @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2016 Andrew Comminos <andrew@comminos.com> + * + * This program is free software: you can redistribute it 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package com.morlunk.mumbleclient.preference; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.os.Bundle; + +import com.morlunk.mumbleclient.R; +import com.morlunk.mumbleclient.Settings; +import com.morlunk.mumbleclient.db.DatabaseCertificate; + +/** + * Created by andrew on 12/01/16. + */ +public class CertificateGenerateActivity extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + PlumbleCertificateGenerateTask task = new PlumbleCertificateGenerateTask(this) { + @Override + protected void onPostExecute(DatabaseCertificate result) { + super.onPostExecute(result); + if (result == null) { + finish(); + return; + } + + Settings settings = Settings.getInstance(CertificateGenerateActivity.this); + settings.setDefaultCertificateId(result.getId()); + showCompletionDialog(result); + } + }; + task.execute(); + } + + private void showCompletionDialog(DatabaseCertificate result) { + AlertDialog.Builder adb = new AlertDialog.Builder(this); + adb.setMessage(getString(R.string.generateCertSuccess, result.getName())); + adb.setPositiveButton(android.R.string.ok, null); + adb.show().setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialog) { + finish(); + } + }); + } + +} diff --git a/app/src/main/java/com/morlunk/mumbleclient/preference/PlumbleCertificateGenerateTask.java b/app/src/main/java/com/morlunk/mumbleclient/preference/PlumbleCertificateGenerateTask.java index 2a844c5..131d434 100644 --- a/app/src/main/java/com/morlunk/mumbleclient/preference/PlumbleCertificateGenerateTask.java +++ b/app/src/main/java/com/morlunk/mumbleclient/preference/PlumbleCertificateGenerateTask.java @@ -19,17 +19,21 @@ package com.morlunk.mumbleclient.preference; import android.app.ProgressDialog; import android.content.Context; -import android.content.DialogInterface; -import android.content.DialogInterface.OnCancelListener; import android.os.AsyncTask; import android.widget.Toast; import com.morlunk.mumbleclient.R; +import com.morlunk.mumbleclient.db.DatabaseCertificate; +import com.morlunk.mumbleclient.db.PlumbleDatabase; +import com.morlunk.mumbleclient.db.PlumbleSQLiteDatabase; -import java.io.File; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +public class PlumbleCertificateGenerateTask extends AsyncTask<Void, Void, DatabaseCertificate> { + private static final String DATE_FORMAT = "yyyy-MM-dd-HH-mm-ss"; -public class PlumbleCertificateGenerateTask extends AsyncTask<Void, Void, byte[]> { - private Context context; private ProgressDialog loadingDialog; @@ -44,20 +48,23 @@ public class PlumbleCertificateGenerateTask extends AsyncTask<Void, Void, byte[] loadingDialog = new ProgressDialog(context); loadingDialog.setIndeterminate(true); loadingDialog.setMessage(context.getString(R.string.generateCertProgress)); - loadingDialog.setOnCancelListener(new OnCancelListener() { - - @Override - public void onCancel(DialogInterface arg0) { - cancel(true); - - } - }); + loadingDialog.setCancelable(false); loadingDialog.show(); } @Override - protected byte[] doInBackground(Void... params) { + protected DatabaseCertificate doInBackground(Void... params) { try { - return PlumbleCertificateManager.generateCertificate(); + byte[] certificate = PlumbleCertificateManager.generateCertificate(); + if (certificate == null) + return null; + + SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.getDefault()); + String fileName = context.getString(R.string.certificate_export_format, dateFormat.format(new Date())); + + PlumbleDatabase database = new PlumbleSQLiteDatabase(context); + DatabaseCertificate dc = database.addCertificate(fileName, certificate); + database.close(); + return dc; } catch (Exception e) { e.printStackTrace(); return null; @@ -65,7 +72,7 @@ public class PlumbleCertificateGenerateTask extends AsyncTask<Void, Void, byte[] } @Override - protected void onPostExecute(byte[] result) { + protected void onPostExecute(DatabaseCertificate result) { super.onPostExecute(result); if(result == null) { Toast.makeText(context, R.string.generateCertFailure, Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/java/com/morlunk/mumbleclient/wizard/WizardCertificateFragment.java b/app/src/main/java/com/morlunk/mumbleclient/wizard/WizardCertificateFragment.java index e2b8c4a..48a6f83 100644 --- a/app/src/main/java/com/morlunk/mumbleclient/wizard/WizardCertificateFragment.java +++ b/app/src/main/java/com/morlunk/mumbleclient/wizard/WizardCertificateFragment.java @@ -27,6 +27,7 @@ import android.widget.Button; import com.morlunk.mumbleclient.R; import com.morlunk.mumbleclient.Settings; +import com.morlunk.mumbleclient.db.DatabaseCertificate; import com.morlunk.mumbleclient.preference.PlumbleCertificateGenerateTask; import java.io.File; @@ -66,7 +67,7 @@ public class WizardCertificateFragment extends Fragment { final Settings settings = Settings.getInstance(getActivity()); PlumbleCertificateGenerateTask task = new PlumbleCertificateGenerateTask(getActivity()) { @Override - protected void onPostExecute(byte[] result) { + protected void onPostExecute(DatabaseCertificate result) { super.onPostExecute(result); // FIXME(acomminos) // settings.setCertificatePath(result.getAbsolutePath()); diff --git a/app/src/main/res/values/strings_notranslate.xml b/app/src/main/res/values/strings_notranslate.xml index 4399627..9e13652 100644 --- a/app/src/main/res/values/strings_notranslate.xml +++ b/app/src/main/res/values/strings_notranslate.xml @@ -21,4 +21,5 @@ <string name="app_name">Plumble</string> <string name="default_server_port">64738</string> <string name="notification_message">%1$s: %2$s</string> + <string name="certificate_export_format">plumble_%s.p12</string> </resources>
\ No newline at end of file diff --git a/app/src/main/res/xml/settings_authentication.xml b/app/src/main/res/xml/settings_authentication.xml index 538887e..0efdf8d 100644 --- a/app/src/main/res/xml/settings_authentication.xml +++ b/app/src/main/res/xml/settings_authentication.xml @@ -21,7 +21,11 @@ <Preference android:key="certificateGenerate" android:summary="@string/certificateGenerateSum" - android:title="@string/certificateGenerate" /> + android:title="@string/certificateGenerate"> + <intent + android:targetPackage="com.morlunk.mumbleclient" + android:targetClass="com.morlunk.mumbleclient.preference.CertificateGenerateActivity"/> + </Preference> <Preference android:summary="@string/pref_certificate_summary" |