mirror of
https://github.com/etesync/android
synced 2025-07-12 09:38:12 +00:00
185 lines
6.7 KiB
Java
185 lines
6.7 KiB
Java
/*
|
||
* Copyright © 2013 – 2015 Ricki Hirner (bitfire web engineering).
|
||
* All rights reserved. This program and the accompanying materials
|
||
* are made available under the terms of the GNU Public License v3.0
|
||
* which accompanies this distribution, and is available at
|
||
* http://www.gnu.org/licenses/gpl.html
|
||
*/
|
||
package at.bitfire.davdroid.ui.setup;
|
||
|
||
import android.annotation.SuppressLint;
|
||
import android.app.AlertDialog;
|
||
import android.app.Dialog;
|
||
import android.app.DialogFragment;
|
||
import android.app.Fragment;
|
||
import android.app.LoaderManager.LoaderCallbacks;
|
||
import android.app.ProgressDialog;
|
||
import android.content.AsyncTaskLoader;
|
||
import android.content.Context;
|
||
import android.content.DialogInterface;
|
||
import android.content.Intent;
|
||
import android.content.Loader;
|
||
import android.os.Bundle;
|
||
import android.view.WindowManager;
|
||
import android.view.inputmethod.InputMethodManager;
|
||
|
||
import java.io.BufferedReader;
|
||
import java.io.IOException;
|
||
import java.io.StringReader;
|
||
|
||
import at.bitfire.davdroid.Constants;
|
||
import at.bitfire.davdroid.R;
|
||
import at.bitfire.davdroid.log.StringLogger;
|
||
import at.bitfire.davdroid.resource.DavResourceFinder;
|
||
import at.bitfire.davdroid.resource.LocalTaskList;
|
||
import at.bitfire.davdroid.resource.ServerInfo;
|
||
import at.bitfire.davdroid.ui.DebugInfoActivity;
|
||
import lombok.Cleanup;
|
||
|
||
public class QueryServerDialogFragment extends DialogFragment implements LoaderCallbacks<ServerInfo> {
|
||
public static final String KEY_SERVER_INFO = "server_info";
|
||
|
||
public static QueryServerDialogFragment newInstance(ServerInfo serverInfo) {
|
||
Bundle args = new Bundle();
|
||
args.putSerializable(KEY_SERVER_INFO, serverInfo);
|
||
QueryServerDialogFragment fragment = new QueryServerDialogFragment();
|
||
fragment.setArguments(args);
|
||
return fragment;
|
||
}
|
||
|
||
@Override
|
||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||
ProgressDialog dialog = new ProgressDialog(getActivity());
|
||
dialog.setCanceledOnTouchOutside(false);
|
||
setCancelable(false);
|
||
|
||
dialog.setTitle(R.string.setup_resource_detection);
|
||
dialog.setIndeterminate(true);
|
||
dialog.setMessage(getString(R.string.setup_querying_server));
|
||
return dialog;
|
||
}
|
||
|
||
@Override
|
||
public void onCreate(Bundle savedInstanceState) {
|
||
super.onCreate(savedInstanceState);
|
||
|
||
Loader<ServerInfo> loader = getLoaderManager().initLoader(0, getArguments(), this);
|
||
}
|
||
|
||
@Override
|
||
public Loader<ServerInfo> onCreateLoader(int id, Bundle args) {
|
||
return new ServerInfoLoader(getActivity(), args);
|
||
}
|
||
|
||
@Override
|
||
@SuppressLint("CommitTransaction")
|
||
public void onLoadFinished(Loader<ServerInfo> loader, ServerInfo serverInfo) {
|
||
if (serverInfo.isEmpty()) {
|
||
// resource detection didn't find anything
|
||
getFragmentManager().beginTransaction()
|
||
.add(NothingDetectedFragment.newInstance(serverInfo.getLogs()), null)
|
||
.commitAllowingStateLoss();
|
||
|
||
} else {
|
||
((AddAccountActivity)getActivity()).serverInfo = serverInfo;
|
||
|
||
// resource detection brought some results
|
||
Fragment nextFragment;
|
||
if (serverInfo.getTaskLists().length > 0 && !LocalTaskList.tasksProviderAvailable(getActivity().getContentResolver()))
|
||
nextFragment = new InstallAppsFragment();
|
||
else
|
||
nextFragment = new SelectCollectionsFragment();
|
||
|
||
getFragmentManager().beginTransaction()
|
||
.replace(R.id.right_pane, nextFragment)
|
||
.addToBackStack(null)
|
||
.commitAllowingStateLoss();
|
||
}
|
||
|
||
getDialog().dismiss();
|
||
}
|
||
|
||
@Override
|
||
public void onLoaderReset(Loader<ServerInfo> arg0) {
|
||
}
|
||
|
||
|
||
public static class NothingDetectedFragment extends DialogFragment {
|
||
private static String KEY_LOGS = "logs";
|
||
|
||
public static NothingDetectedFragment newInstance(String logs) {
|
||
Bundle args = new Bundle();
|
||
args.putString(KEY_LOGS, logs);
|
||
NothingDetectedFragment fragment = new NothingDetectedFragment();
|
||
fragment.setArguments(args);
|
||
return fragment;
|
||
}
|
||
|
||
@Override
|
||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||
return new AlertDialog.Builder(getActivity())
|
||
.setTitle(R.string.setup_resource_detection)
|
||
.setIcon(android.R.drawable.ic_dialog_info)
|
||
.setMessage(R.string.setup_no_collections_found)
|
||
.setNeutralButton(R.string.setup_view_logs, new DialogInterface.OnClickListener() {
|
||
@Override
|
||
public void onClick(DialogInterface dialog, int which) {
|
||
Intent intent = new Intent(getActivity(), DebugInfoActivity.class);
|
||
intent.putExtra(DebugInfoActivity.KEY_LOGS, getArguments().getString(KEY_LOGS));
|
||
startActivity(intent);
|
||
}
|
||
})
|
||
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
|
||
@Override
|
||
public void onClick(DialogInterface dialog, int which) {
|
||
// dismiss
|
||
}
|
||
})
|
||
.create();
|
||
}
|
||
}
|
||
|
||
static class ServerInfoLoader extends AsyncTaskLoader<ServerInfo> {
|
||
private static final String TAG = "davdroid.ServerInfoLoader";
|
||
final Bundle args;
|
||
final Context context;
|
||
|
||
public ServerInfoLoader(Context context, Bundle args) {
|
||
super(context);
|
||
this.context = context;
|
||
this.args = args;
|
||
}
|
||
|
||
@Override
|
||
protected void onStartLoading() {
|
||
forceLoad();
|
||
}
|
||
|
||
@Override
|
||
public ServerInfo loadInBackground() {
|
||
ServerInfo serverInfo = (ServerInfo)args.getSerializable(KEY_SERVER_INFO);
|
||
|
||
StringLogger logger = new StringLogger("DavResourceFinder", true);
|
||
DavResourceFinder finder = new DavResourceFinder(logger, context, serverInfo);
|
||
finder.findResources();
|
||
|
||
// duplicate logs to ADB
|
||
String logs = logger.toString();
|
||
try {
|
||
@Cleanup BufferedReader logStream = new BufferedReader(new StringReader(logs));
|
||
Constants.log.info("Successful resource detection:");
|
||
String line;
|
||
while ((line = logStream.readLine()) != null)
|
||
Constants.log.debug(line);
|
||
} catch (IOException e) {
|
||
Constants.log.error("Couldn't read resource detection logs", e);
|
||
}
|
||
|
||
serverInfo.setLogs(logger.toString());
|
||
|
||
return serverInfo;
|
||
}
|
||
}
|
||
|
||
}
|