Skip to content
Snippets Groups Projects
Commit 6a13ac0d authored by Alexandre Lision's avatar Alexandre Lision
Browse files

* #40232: Restore security ui.

Custom File Explorer dialog has been dropped, we will delegate this action to
third party app, or to the Storage Application Framework (new in API 19).
parent e24852d9
No related branches found
No related tags found
No related merge requests found
......@@ -31,8 +31,9 @@
package org.sflphone.account;
import org.sflphone.fragments.FileExplorerDFragment;
import org.sflphone.fragments.FileExplorerDFragment.onFileSelectedListener;
import android.app.Fragment;
import android.content.Intent;
import org.sflphone.fragments.NestedSettingsFragment;
import org.sflphone.model.Account;
import android.app.Activity;
......@@ -43,12 +44,13 @@ import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceScreen;
import android.util.Log;
public class TLSManager implements onFileSelectedListener {
public class TLSManager {
PreferenceScreen mScreen;
private Account mAccount;
static Activity mContext;
private Fragment mContext;
private static final String TAG = TLSManager.class.getSimpleName();
public void onCreate(Activity con, PreferenceScreen preferenceScreen, Account acc) {
public void onCreate(NestedSettingsFragment con, PreferenceScreen preferenceScreen, Account acc) {
mContext = con;
mScreen = preferenceScreen;
mAccount = acc;
......@@ -72,12 +74,14 @@ public class TLSManager implements onFileSelectedListener {
@Override
public boolean onPreferenceClick(Preference preference) {
if (preference.getKey().contentEquals(AccountDetailTls.CONFIG_TLS_CA_LIST_FILE)
|| preference.getKey().contentEquals(AccountDetailTls.CONFIG_TLS_PRIVATE_KEY_FILE)
|| preference.getKey().contentEquals(AccountDetailTls.CONFIG_TLS_CERTIFICATE_FILE)) {
FileExplorerDFragment dialog = FileExplorerDFragment.newInstance();
dialog.show(mContext.getFragmentManager(), "explorerdialog");
dialog.setOnFileSelectedListener(TLSManager.this, preference.getKey());
if (preference.getKey().contentEquals(AccountDetailTls.CONFIG_TLS_CA_LIST_FILE)){
performFileSearch(SELECT_CA_LIST_RC);
}
if(preference.getKey().contentEquals(AccountDetailTls.CONFIG_TLS_PRIVATE_KEY_FILE)){
performFileSearch(SELECT_PRIVATE_KEY_RC);
}
if(preference.getKey().contentEquals(AccountDetailTls.CONFIG_TLS_CERTIFICATE_FILE)) {
performFileSearch(SELECT_CERTIFICATE_RC);
}
return false;
......@@ -103,11 +107,37 @@ public class TLSManager implements onFileSelectedListener {
}
};
@Override
public void onFileSelected(String path, String prefKey) {
mScreen.findPreference(prefKey).setSummary(path);
mAccount.getTlsDetails().setDetailString(prefKey, path);
mAccount.notifyObservers();
// @Override
// public void onFileSelected(String path, String prefKey) {
// mScreen.findPreference(prefKey).setSummary(path);
// mAccount.getTlsDetails().setDetailString(prefKey, path);
// mAccount.notifyObservers();
// }
private static final int SELECT_CA_LIST_RC = 42;
private static final int SELECT_PRIVATE_KEY_RC = 43;
private static final int SELECT_CERTIFICATE_RC = 44;
public void performFileSearch(int requestCodeToSet) {
// ACTION_OPEN_DOCUMENT is the intent to choose a file via the system's file
// browser.
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
// Filter to only show results that can be "opened", such as a
// file (as opposed to a list of contacts or timezones)
intent.addCategory(Intent.CATEGORY_OPENABLE);
// Filter to show only images, using the image MIME data type.
// If one wanted to search for ogg vorbis files, the type would be "audio/ogg".
// To search for all documents available via installed storage providers,
// it would be "*/*".
intent.setType("*/*");
mContext.startActivityForResult(intent, requestCodeToSet);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Extract returned filed for intent and populate correct preference
Log.i(TAG, "file selected");
}
}
\ No newline at end of file
......@@ -72,7 +72,6 @@ public class AccountEditionActivity extends Activity implements GeneralAccountFr
AdvancedAccountFragment.Callbacks, SecurityAccountFragment.Callbacks, NestedSettingsFragment.Callbacks {
private static final String TAG = AccountEditionActivity.class.getSimpleName();
public static final String KEY_MODE = "mode";
private boolean mBound = false;
private ISipService service;
private Account acc_selected;
......@@ -205,6 +204,11 @@ public class AccountEditionActivity extends Activity implements GeneralAccountFr
return true;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
private void processAccount() {
try {
service.setCredentials(acc_selected.getAccountID(), acc_selected.getCredentialsHashMapList());
......@@ -215,24 +219,6 @@ public class AccountEditionActivity extends Activity implements GeneralAccountFr
}
public boolean validateAccountCreation(ArrayList<String> missingValue) {
boolean valid = true;
ArrayList<String> requiredFields = new ArrayList<String>();
requiredFields.add(AccountDetailBasic.CONFIG_ACCOUNT_ALIAS);
requiredFields.add(AccountDetailBasic.CONFIG_ACCOUNT_HOSTNAME);
requiredFields.add(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME);
requiredFields.add(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD);
for (String s : requiredFields) {
if (acc_selected.getBasicDetails().getDetailString(s).isEmpty()) {
valid = false;
missingValue.add(s);
}
}
return valid;
}
private AlertDialog createDeleteDialog() {
Activity ownerActivity = this;
AlertDialog.Builder builder = new AlertDialog.Builder(ownerActivity);
......
/*
* Copyright (C) 2004-2014 Savoir-Faire Linux Inc.
*
* Author: Alexandre Lision <alexandre.lision@savoirfairelinux.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, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* Additional permission under GNU GPL version 3 section 7:
*
* If you modify this program, or any covered work, by linking or
* combining it with the OpenSSL project's OpenSSL library (or a
* modified version of that library), containing parts covered by the
* terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
* grants you additional permission to convey the resulting work.
* Corresponding Source for a non-source form of such a combination
* shall include the source code for the parts of OpenSSL used as well
* as that of the covered work.
*/
package org.sflphone.fragments;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import org.sflphone.R;
import android.app.DialogFragment;
import android.os.Bundle;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
public class FileExplorerDFragment extends DialogFragment implements OnItemClickListener {
private String prefKey;
public interface onFileSelectedListener {
public void onFileSelected(String path, String key);
}
public static FileExplorerDFragment newInstance() {
FileExplorerDFragment f = new FileExplorerDFragment();
return f;
}
private List<String> item = null;
private List<String> path = null;
private String root;
private TextView myPath;
public onFileSelectedListener mDelegateListener;
private String currentPath;
Comparator<? super File> comparator;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View rootView = inflater.inflate(R.layout.file_explorer_dfrag, container);
myPath = (TextView) rootView.findViewById(R.id.path);
getDialog().setTitle(getResources().getString(R.string.file_explorer_title));
comparator = filecomparatorByAlphabetically;
root = Environment.getExternalStorageDirectory().getPath();
getDir(root, rootView);
Button btnAlphabetically = (Button) rootView.findViewById(R.id.button_alphabetically);
btnAlphabetically.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
comparator = filecomparatorByAlphabetically;
getDir(currentPath, getView());
}
});
Button btnLastDateModified = (Button) rootView.findViewById(R.id.button_lastDateModified);
btnLastDateModified.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
comparator = filecomparatorByLastModified;
getDir(currentPath, getView());
}
});
return rootView;
}
private void getDir(String dirPath, View parent) {
currentPath = dirPath;
myPath.setText("Location: " + dirPath);
item = new ArrayList<String>();
path = new ArrayList<String>();
File f = new File(dirPath);
File[] files = f.listFiles();
if (!dirPath.equals(root)) {
item.add(root);
path.add(root);
item.add("../");
path.add(f.getParent());
}
Arrays.sort(files, comparator);
for (int i = 0; i < files.length; i++) {
File file = files[i];
if (!file.isHidden() && file.canRead()) {
path.add(file.getPath());
if (file.isDirectory()) {
item.add(file.getName() + "/");
} else {
item.add(file.getName());
}
}
}
ArrayAdapter<String> fileList = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, item);
((ListView) parent.findViewById(android.R.id.list)).setAdapter(fileList);
((ListView) parent.findViewById(android.R.id.list)).setOnItemClickListener(this);
}
Comparator<? super File> filecomparatorByLastModified = new Comparator<File>() {
public int compare(File file1, File file2) {
if (file1.isDirectory()) {
if (file2.isDirectory()) {
return Long.valueOf(file1.lastModified()).compareTo(file2.lastModified());
} else {
return -1;
}
} else {
if (file2.isDirectory()) {
return 1;
} else {
return Long.valueOf(file1.lastModified()).compareTo(file2.lastModified());
}
}
}
};
Comparator<? super File> filecomparatorByAlphabetically = new Comparator<File>() {
public int compare(File file1, File file2) {
if (file1.isDirectory()) {
if (file2.isDirectory()) {
return String.valueOf(file1.getName().toLowerCase(Locale.getDefault())).compareTo(file2.getName().toLowerCase());
} else {
return -1;
}
} else {
if (file2.isDirectory()) {
return 1;
} else {
return String.valueOf(file1.getName().toLowerCase(Locale.getDefault())).compareTo(file2.getName().toLowerCase());
}
}
}
};
public void setOnFileSelectedListener(onFileSelectedListener listener, String key) {
mDelegateListener = listener;
prefKey = key;
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {
File file = new File(path.get(pos));
// if (file.isDirectory()) {
// selectButton.setEnabled(false);
// if (file.canRead()) {
// lastPositions.put(currentPath, position);
// getDir(path.get(position));
// if (canSelectDir) {
// selectedFile = file;
// v.setSelected(true);
// selectButton.setEnabled(true);
// }
// } else {
// new AlertDialog.Builder(this).setIcon(R.drawable.icon)
// .setTitle("[" + file.getName() + "] " + getText(R.string.cant_read_folder))
// .setPositiveButton("OK", new DialogInterface.OnClickListener() {
//
// @Override
// public void onClick(DialogInterface dialog, int which) {
//
// }
// }).show();
// }
// } else {
// selectedFile = file;
// v.setSelected(true);
// selectButton.setEnabled(true);
// }
//
if (mDelegateListener != null) {
mDelegateListener.onFileSelected((String) ((ListView) getView().findViewById(android.R.id.list)).getAdapter().getItem(pos), prefKey);
}
}
}
......@@ -31,6 +31,7 @@
package org.sflphone.fragments;
import android.content.Intent;
import org.sflphone.R;
import org.sflphone.account.CredentialsManager;
import org.sflphone.account.SRTPManager;
......@@ -55,7 +56,6 @@ public class NestedSettingsFragment extends PreferenceFragment {
CredentialsManager mCredsManager;
SRTPManager mSrtpManager;
TLSManager mTlsManager;
private static Callbacks sDummyCallbacks = new Callbacks() {
......@@ -118,7 +118,7 @@ public class NestedSettingsFragment extends PreferenceFragment {
case 2:
addPreferencesFromResource(R.xml.account_tls);
mTlsManager = new TLSManager();
mTlsManager.onCreate(getActivity(), getPreferenceScreen(), mCallbacks.getAccount());
mTlsManager.onCreate(this, getPreferenceScreen(), mCallbacks.getAccount());
mTlsManager.setTLSListener();
break;
}
......@@ -137,6 +137,15 @@ public class NestedSettingsFragment extends PreferenceFragment {
return view;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(mTlsManager != null){
mTlsManager.onActivityResult(requestCode, resultCode, data);
}
}
}
\ No newline at end of file
......@@ -118,8 +118,8 @@ public class SecurityAccountFragment extends PreferenceFragment {
@Override
public boolean onPreferenceClick(Preference preference) {
performFileSearch();
//mCallbacks.displayCredentialsScreen();
mCallbacks.displayCredentialsScreen();
return false;
}
});
......@@ -138,26 +138,6 @@ public class SecurityAccountFragment extends PreferenceFragment {
}
private static final int READ_REQUEST_CODE = 42;
public void performFileSearch() {
// ACTION_OPEN_DOCUMENT is the intent to choose a file via the system's file
// browser.
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
// Filter to only show results that can be "opened", such as a
// file (as opposed to a list of contacts or timezones)
intent.addCategory(Intent.CATEGORY_OPENABLE);
// Filter to show only images, using the image MIME data type.
// If one wanted to search for ogg vorbis files, the type would be "audio/ogg".
// To search for all documents available via installed storage providers,
// it would be "*/*".
intent.setType("image/*");
startActivityForResult(intent, READ_REQUEST_CODE);
}
public void setCredentialSummary() {
findPreference("Credential.count").setSummary("" + mCallbacks.getAccount().getCredentials().size());
}
......
......@@ -294,4 +294,39 @@ public class CallManagerCallBack extends Callback {
mService.sendBroadcast(intent);
}
@Override
public void on_secure_sdes_on(String callID) {
Log.i(TAG, "on_secure_sdes_on");
}
@Override
public void on_secure_sdes_off(String callID) {
Log.i(TAG, "on_secure_sdes_off");
}
@Override
public void on_secure_zrtp_on(String callID, String cipher) {
Log.i(TAG, "on_secure_zrtp_on");
}
@Override
public void on_secure_zrtp_off(String callID) {
Log.i(TAG, "on_secure_zrtp_off");
}
@Override
public void on_show_sas(String callID, String sas, boolean verified) {
Log.i(TAG, "on_show_sas");
}
@Override
public void on_zrtp_not_supported(String callID) {
Log.i(TAG, "on_zrtp_not_supported");
}
@Override
public void on_zrtp_negociation_failed(String callID, String reason, String severity) {
Log.i(TAG, "on_zrtp_negociation_failed");
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment