Java tutorial
/* * Copyright (C) 2005-2015 Alfresco Software Limited. * * This file is part of Alfresco Mobile for Android. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.alfresco.mobile.android.application.widgets; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.alfresco.mobile.android.api.session.AlfrescoSession; import org.alfresco.mobile.android.application.R; import org.alfresco.mobile.android.application.activity.BaseActivity; import org.alfresco.mobile.android.application.fragments.account.AccountsAdapter; import org.alfresco.mobile.android.application.fragments.builder.AlfrescoFragmentBuilder; import org.alfresco.mobile.android.application.fragments.node.upload.UploadFolderAdapter; import org.alfresco.mobile.android.async.session.LoadSessionCallBack; import org.alfresco.mobile.android.platform.EventBusManager; import org.alfresco.mobile.android.platform.SessionManager; import org.alfresco.mobile.android.platform.accounts.AlfrescoAccount; import org.alfresco.mobile.android.platform.accounts.AlfrescoAccountManager; import org.alfresco.mobile.android.platform.io.AlfrescoStorageManager; import org.alfresco.mobile.android.ui.activity.AlfrescoActivity; import org.alfresco.mobile.android.ui.utils.UIUtils; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; 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.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.Spinner; /** * Display the form to choose AlfrescoAccount and import folder. * * @author Jean Marie Pascal */ public class DocumentFolderPickerFragment extends Fragment { public static final String TAG = "ImportFormFragment"; @SuppressWarnings("serial") private static final List<Integer> FOLDER_ACTIONS_LIST = new ArrayList<Integer>(3) { { add(R.string.menu_browse_root); add(R.string.menu_browse_sites); add(R.string.menu_favorites_folder); } }; private static final List<Integer> FOLDER_SHORTCUT_LIST = new ArrayList<Integer>(4) { { add(R.string.menu_browse_root); add(R.string.menu_browse_sites); add(R.string.menu_favorites_folder); add(R.string.menu_downloads); } }; @SuppressWarnings("serial") private static final List<Integer> ACTIONS_LIST = new ArrayList<Integer>(3) { { add(R.string.action_text); add(R.string.action_speech2text); add(R.string.action_photo); } }; private AlfrescoAccount selectedAccount; private View rootView; private Integer rootFolderTypeId; private int rootFolderTypeIndex; private Integer actionId; private int actionIdIndex; /** Principal ListView of the fragment */ protected ListView lv; protected ArrayAdapter<?> adapter; protected int selectedPosition; private Spinner spinnerAccount; // ////////////////////////////////////////////////////////////////////// // CONSTRUCTORS // ////////////////////////////////////////////////////////////////////// public static DocumentFolderPickerFragment newInstance(Bundle b) { DocumentFolderPickerFragment fr = new DocumentFolderPickerFragment(); fr.setArguments(b); return fr; } public static DocumentFolderPickerFragment newInstanceByTemplate(Bundle b) { return new DocumentFolderPickerFragment(); } // /////////////////////////////////////////////////////////////////////////// // LIFECYCLE // /////////////////////////////////////////////////////////////////////////// @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { int titleId = R.string.shortcut_action_create; if (getActivity() instanceof FolderShortcutActivity) { titleId = R.string.shortcut_create; } UIUtils.displayTitle(getActivity(), titleId); rootView = inflater.inflate(R.layout.app_docfolder_picker, container, false); spinnerAccount = (Spinner) rootView.findViewById(R.id.accounts_spinner); spinnerAccount.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { selectedAccount = (AlfrescoAccount) parent.getItemAtPosition(pos); } @Override public void onNothingSelected(AdapterView<?> arg0) { // Do nothing } }); return rootView; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); List<AlfrescoAccount> list = AlfrescoAccountManager.retrieveAccounts(getActivity()); spinnerAccount.setAdapter(new AccountsAdapter(getActivity(), list, R.layout.row_two_lines, null)); } @Override public void onStart() { super.onStart(); Button b = UIUtils.initCancel(rootView, R.string.cancel); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { getActivity().finish(); } }); b = UIUtils.initValidation(rootView, R.string.next); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { next(); } }); refreshSpinners(); } // /////////////////////////////////////////////////////////////////////////// // INTERNALS // /////////////////////////////////////////////////////////////////////////// private void refreshSpinners() { // UPLOAD FOLDER Spinner spinner = (Spinner) rootView.findViewById(R.id.import_folder_spinner); UploadFolderAdapter upLoadadapter = null; if (getActivity() instanceof FolderShortcutActivity) { upLoadadapter = new UploadFolderAdapter(getActivity(), R.layout.row_single_line, FOLDER_SHORTCUT_LIST); } else { upLoadadapter = new UploadFolderAdapter(getActivity(), R.layout.row_single_line, FOLDER_ACTIONS_LIST); } spinner.setAdapter(upLoadadapter); spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { rootFolderTypeId = (Integer) parent.getItemAtPosition(pos); rootFolderTypeIndex = pos; } @Override public void onNothingSelected(AdapterView<?> arg0) { // DO Nothing } }); if (rootFolderTypeId == null) { rootFolderTypeIndex = 0; } spinner.setSelection(rootFolderTypeIndex); // ACTIONS ASSOCIATED if (getActivity() instanceof FolderShortcutActivity) { rootView.findViewById(R.id.actions_spinner_title).setVisibility(View.GONE); rootView.findViewById(R.id.actions_spinner).setVisibility(View.GONE); return; } spinner = (Spinner) rootView.findViewById(R.id.actions_spinner); ActionShortcutAdapter actionAdapter = new ActionShortcutAdapter(getActivity(), R.layout.row_single_line, ACTIONS_LIST); spinner.setAdapter(actionAdapter); spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { actionId = (Integer) parent.getItemAtPosition(pos); actionIdIndex = pos; } @Override public void onNothingSelected(AdapterView<?> arg0) { // DO Nothing } }); if (actionId == null) { actionIdIndex = 0; } spinner.setSelection(actionIdIndex); } private void next() { AlfrescoAccount tmpAccount = selectedAccount; switch (rootFolderTypeId) { case R.string.menu_browse_sites: case R.string.menu_browse_root: case R.string.menu_favorites_folder: if (getActivity() instanceof BaseShortcutActivity) { ((BaseShortcutActivity) getActivity()).setUploadFolder(rootFolderTypeId); ((BaseShortcutActivity) getActivity()).setUploadAccount(tmpAccount); } if (getActivity() instanceof ActionShortcutActivity) { ((ActionShortcutActivity) getActivity()).setActionId(actionId); } AlfrescoSession session = SessionManager.getInstance(getActivity()).getSession(tmpAccount.getId()); // Try to use Session used by the application if (session != null) { ((BaseActivity) getActivity()).setCurrentAccount(tmpAccount); ((BaseActivity) getActivity()).setRenditionManager(null); EventBusManager.getInstance() .post(new LoadSessionCallBack.LoadAccountCompletedEvent(null, tmpAccount)); return; } // Session is not used by the application so create one. SessionManager.getInstance(getActivity()).loadSession(tmpAccount); if (getActivity() instanceof AlfrescoActivity) { ((AlfrescoActivity) getActivity()).displayWaitingDialog(); } break; case R.string.menu_downloads: if (getActivity() instanceof FolderShortcutActivity) { ((FolderShortcutActivity) getActivity()).createShortcut(tmpAccount, AlfrescoStorageManager.getInstance(getActivity()).getDownloadFolder(tmpAccount)); } break; default: break; } } // /////////////////////////////////////////////////////////////////////////// // BUILDER // /////////////////////////////////////////////////////////////////////////// public static Builder with(FragmentActivity appActivity) { return new Builder(appActivity); } public static class Builder extends AlfrescoFragmentBuilder { // /////////////////////////////////////////////////////////////////////////// // CONSTRUCTORS // /////////////////////////////////////////////////////////////////////////// public Builder(FragmentActivity activity) { super(activity); this.extraConfiguration = new Bundle(); } public Builder(FragmentActivity appActivity, Map<String, Object> configuration) { super(appActivity, configuration); this.extraConfiguration = new Bundle(); this.menuIconId = R.drawable.ic_repository_dark; this.menuTitleId = R.string.menu_browse_root; } // /////////////////////////////////////////////////////////////////////////// // SETTERS // /////////////////////////////////////////////////////////////////////////// // /////////////////////////////////////////////////////////////////////////// // CLICK // /////////////////////////////////////////////////////////////////////////// protected Fragment createFragment(Bundle b) { return newInstanceByTemplate(b); } } }