--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+
+ <ListView
+ android:id="@+id/list"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+</LinearLayout>
import android.support.annotation.LayoutRes;
import android.support.annotation.Nullable;
import android.support.v7.app.ActionBar;
+import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatDelegate;
import android.support.v7.widget.Toolbar;
import android.view.ContextMenu;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
+import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
mShowContextMenu = true;
mAccountName = ((RadioButtonPreference) obj).getKey();
- Preferences.this.openContextMenu(listView);
+ String[] items = {
+ getResources().getString(R.string.change_password),
+ getResources().getString(R.string.delete_account)
+ };
+ final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(Preferences.this);
+ View convertView = getLayoutInflater().inflate(R.layout.alert_dialog_list_view, null);
+ alertDialogBuilder.setView(convertView);
+ ListView lv = (ListView) convertView.findViewById(R.id.list);
+ ArrayAdapter<String> adapter = new ArrayAdapter<String>(
+ Preferences.this,R.layout.simple_dialog_list_item,items);
+ lv.setAdapter(adapter);
+
+ //Setup proper inline listener
+ final AlertDialog alertDialog = alertDialogBuilder.create();
+ lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ AccountManager am = (AccountManager) getSystemService(ACCOUNT_SERVICE);
+ Account accounts[] = am.getAccountsByType(MainApp.getAccountType());
+ for (Account a : accounts) {
+ if (a.name.equals(mAccountName)) {
+ if (position==0) {
+
+ // Change account password
+ Intent updateAccountCredentials = new Intent(Preferences.this, AuthenticatorActivity.class);
+ updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACCOUNT, a);
+ updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACTION,
+ AuthenticatorActivity.ACTION_UPDATE_TOKEN);
+ startActivity(updateAccountCredentials);
+ alertDialog.cancel();
+
+ } else if (position==1) {
+
+ // Remove account
+ am.removeAccount(a, Preferences.this, mHandler);
+ Log_OC.d(TAG, "Remove an account " + a.name);
+ alertDialog.cancel();
+ }
+ }
+ }
+ }
+ });
+ alertDialog.show();
View.OnLongClickListener longListener = (View.OnLongClickListener) obj;
return longListener.onLongClick(view);
super.onCreateContextMenu(menu, v, menuInfo);
}
- /**
- * Called when the user clicked on an item into the context menu created at
- * {@link #onCreateContextMenu(ContextMenu, View, ContextMenuInfo)} for
- * every ownCloud {@link Account} , containing 'secondary actions' for them.
- *
- * {@inheritDoc}
- */
- @Override
- public boolean onContextItemSelected(android.view.MenuItem item) {
- AccountManager am = (AccountManager) getSystemService(ACCOUNT_SERVICE);
- Account accounts[] = am.getAccountsByType(MainApp.getAccountType());
- for (Account a : accounts) {
- if (a.name.equals(mAccountName)) {
- if (item.getItemId() == R.id.change_password) {
-
- // Change account password
- Intent updateAccountCredentials = new Intent(this, AuthenticatorActivity.class);
- updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACCOUNT, a);
- updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACTION,
- AuthenticatorActivity.ACTION_UPDATE_TOKEN);
- startActivity(updateAccountCredentials);
-
- } else if (item.getItemId() == R.id.delete_account) {
-
- // Remove account
- am.removeAccount(a, this, mHandler);
- Log_OC.d(TAG, "Remove an account " + a.name);
- }
- }
- }
-
- return true;
- }
-
@Override
public void run(AccountManagerFuture<Boolean> future) {
if (future.isDone()) {
--- /dev/null
+package com.owncloud.android.ui.dialog;
+
+import android.os.Bundle;
+import android.support.v4.app.DialogFragment;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+
+import com.owncloud.android.R;
+import com.owncloud.android.ui.dialog.parcel.MenuItemParcelable;
+import com.owncloud.android.ui.dialog.parcel.MenuParcelable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Dialog for choosing a file action.
+ */
+public class AccountActionsDialogFragment extends DialogFragment implements
+ OnItemClickListener {
+ private static final String ARG_ITEM_LIST = "ITEM_LIST";
+ private static final String ARG_FILE_POSITION = "FILE_POSITION";
+ public static final String FTAG_FILE_ACTIONS = "FILE_ACTIONS_FRAGMENT";
+
+ private List<MenuItemParcelable> menuItems;
+
+ private int filePosition;
+
+ private ListView mListView;
+
+ /**
+ * Listener interface for the file action fragment.
+ */
+ public interface FileActionsDialogFragmentListener {
+ public boolean onFileActionChosen(int menuId, int filePosition);
+ }
+
+ /**
+ * Public factory method to create new FileActionsDialogFragment instances.
+ *
+ * @param menu menu to be display.
+ * @return Dialog ready to show.
+ */
+ public static AccountActionsDialogFragment newInstance(Menu menu, int filePosition) {
+ AccountActionsDialogFragment fragment = new AccountActionsDialogFragment();
+ Bundle args = new Bundle();
+
+ MenuParcelable menuParcelable = new MenuParcelable();
+ menuParcelable.setMenuItems(calculateMenuParcel(menu));
+
+ args.putParcelable(ARG_ITEM_LIST, menuParcelable);
+ args.putInt(ARG_FILE_POSITION, filePosition);
+
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setStyle(DialogFragment.STYLE_NORMAL, R.style.ownCloud_Dialog);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.file_actions, null, false);
+ mListView = (ListView) view.findViewById(R.id.file_actions_list);
+
+ getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
+ return view;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+
+ filePosition = getArguments().getInt(ARG_FILE_POSITION);
+
+ MenuParcelable menu = getArguments().getParcelable(ARG_ITEM_LIST);
+ menuItems = menu.getMenuItems();
+ List<String> stringList = new ArrayList<String>();
+ for (int i = 0; i < menuItems.size(); i++) {
+ stringList.add(menuItems.get(i).getMenuText());
+ }
+
+ ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
+ R.layout.simple_dialog_list_item, stringList);
+
+ mListView.setAdapter(adapter);
+
+ mListView.setOnItemClickListener(this);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ dismiss();
+ ((FileActionsDialogFragmentListener) getTargetFragment()).onFileActionChosen(menuItems.get(position).getMenuItemId(), filePosition);
+ }
+
+ /**
+ * calculates a parcelable list of MenuItemParcelable based on the given menu and the visibility of the menu items.
+ *
+ * @param menu the menu to be displayed
+ * @return a filtered List of parcelables based on the menu
+ */
+ private static List<MenuItemParcelable> calculateMenuParcel(Menu menu) {
+ int index = 0;
+ boolean hasNext = true;
+ List<MenuItemParcelable> itemList = new ArrayList<MenuItemParcelable>();
+ MenuParcelable menuParcelable = new MenuParcelable();
+ try {
+ while (hasNext) {
+ MenuItem item = menu.getItem(index);
+ if (item.isVisible()) {
+ itemList.add(new MenuItemParcelable(item));
+ }
+ index++;
+ }
+ } catch (IndexOutOfBoundsException iobe) {
+ // reach the end of the item list
+ }
+
+ return itemList;
+ }
+}
}
}
- MenuItem menuItem = new DialogMenuItem(item.getItemId());
FileActionsDialogFragment dialog = FileActionsDialogFragment.newInstance(menu, fileIndex);
dialog.setTargetFragment(this, 0);
dialog.show(getFragmentManager(), FileActionsDialogFragment.FTAG_FILE_ACTIONS);